OpenHarmony 3.0 LTS是面向全場景的開源分布式操作系統(tǒng),能夠在物聯(lián)網(wǎng)上使用??梢灾С秩N系統(tǒng)類型,標準系統(tǒng)、輕量系統(tǒng)和小型系統(tǒng)。本文提供了在OpenHarmony 3.0 LTS實現(xiàn)串口調(diào)試功能的開發(fā)方案。
1.編寫代碼生成對應動態(tài)庫文件
串口功能開發(fā)包括串口初始化、數(shù)據(jù)讀寫、修改數(shù)據(jù)開發(fā)格式等。具體代碼不便展示。編寫gn文件生成對應動態(tài)庫文件
shared_library("serial_service_api") { sources = [ "service/serial_service.cpp" ] include_dirs = ["include","service", ]
2.提供API接口
2.1依賴router模塊開發(fā)
如果串口權限不受限制,可以直接在router模塊增加串口相關功能,節(jié)省開發(fā)時間。foundationaceace_engine_liteframeworkssrccoremodules outer_module.cpp
void InitRouterModule(JSIValue exports)
{
JSI::SetModuleAPI(exports, "replace", RouterModule::Replace);
JSI::SetModuleAPI(exports, "init", RouterModule::Init);
JSI::SetModuleAPI(exports, "format", RouterModule::Format);
JSI::SetModuleAPI(exports, "write", RouterModule::Write);
JSI::SetModuleAPI(exports, "read", RouterModule::ReadFormat);
JSI::SetModuleAPI(exports, "disable", RouterModule::Disable);
JSI::SetModuleAPI(exports, "on", RouterModule::OnRead);
COMMUNICATION::GetInstance()->SerialRead(RouterModule::ReadingCallback);
}
串口初始化及進制轉換相關代碼可直接調(diào)用庫函數(shù)。串口讀回調(diào)的相關代碼如下:
JSIValue ReadCallback = JSI::CreateUndefined();
void RouterModule::ReadingCallback(const char* buffer, int length)
{
if(!JSI::ValueIsUndefined(ReadCallback) && gSerialFlag){
if(length < 0){
SERIAL_LOGI("JS ReadingCallback == 0");
JSIValue evt = JSI::CreateString("error");
JSI::CallFunction(ReadCallback, JSI::CreateUndefined(), &evt, 1);
return;
} else if(length >= 0){
SERIAL_LOGI("JS ReadingCallback == 1");
JSIValue evt = JSI::CreateString(buffer);
JSI::CallFunction(ReadCallback, JSI::CreateUndefined(), &evt, 1);
}
}
}
JSIValue RouterModule::OnRead(const JSIValue thisVal, const JSIValue *args, uint8_t argsSize)
{
if(!JSI::ValueIsUndefined(ReadCallback)){
JSI::ReleaseValue(ReadCallback);
return JSI::CreateBoolean(false);
}
if (JSI::ValueIsUndefined(args[0])) {
return JSI::CreateBoolean(false);
}
ReadCallback = JSI::GetNamedProperty(args[0], "ReadingCallback");
if(JSI::ValueIsUndefined(ReadCallback)){
SERIAL_LOGI("Read Callbk is not got it");
}
}
在route模塊增加相關依賴foundationaceace_engine_liteframeworksBUILD.gn
deps = [
"http://device/hals/communication/serial_port:serial_service_api",
]
2.2輕量級服務開發(fā)
串口權限受限時,需要啟用輕量級服務,應用可以通過服務,跨進程操作串口。具體配置如下:foundationaceace_engine_liteframeworksmodule_managerohos_module_config.h
extern void InitSerialPortModule(JSIValue exports);const Module OHOS_MODULES[] = {{"serialport", InitSerialPortModule},}
配置服務自啟動:vendor/ingenic/halley5/rootfs-overlay/etc/init.d/S99WmsStart:sleep 1 && /bin/wifi_server &
#! /bin/sh
sleep 1 && /bin/wms_server &
sleep 1 && /bin/wifi_server &
sleep 1 && /bin/util_server &
sleep 1 && /bin/serial_port_service &
配置服務:basesecuritypermissionservicespermission_liteipc_authincludepolicy_preset.h
FeaturePolicy serialServiceFeature[] = {
{
NULL,
{
{
.type = RANGE,
.uidMin=0,
.uidMax=__INT_MAX__,
}
},
},
};
static PolicySetting g_presetPolicies[] = {
{"serialportservice", serialServiceFeature, 1},
};
代碼實現(xiàn)服務初始化,具體實現(xiàn)可參考wifi_lite相關代碼。在Invoke中去調(diào)用串口相關功能**serial_portserial_port_liteservicesamgr_serial_port_service.cpp
//繼承并重新定義服務:
struct SamgrSerialPortService {
INHERIT_SERVICE;
INHERIT_IUNKNOWNENTRY(DefaultFeatureApi);
Identity identity;
};
static const char *GetName(Service *service)
{
//(void)service;
return SERIAL_PORT_SERVICE_NAME;
}
static int32 Invoke(IServerProxy *iProxy, int funcId, void *origin, IpcIo *req, IpcIo *reply)
{
SerialPortService::RequestHandle(funcId, origin, req, reply);
return EC_SUCCESS;
}
//創(chuàng)建服務對象:
static SamgrSerialPortService SerialPortSvc = {
.GetName = GetName,
.Initialize = Initialize,
.MessageHandle = MessageHandle,
.GetTaskConfig = GetTaskConfig,
SERVER_IPROXY_IMPL_BEGIN,
.Invoke = Invoke,
IPROXY_END,
};
//向SAMGR注冊服務及接口:
static void Init()
{
SERIAL_LOGI("serial RegisterService Init, ver = %u", SerialPortSvc.ver);
bool ret = SAMGR_GetInstance()->RegisterService((Service *)&SerialPortSvc);
if (!ret) {
SERIAL_LOGI("RegisterService error");
return;
}
ret = SAMGR_GetInstance()->RegisterDefaultFeatureApi(SERIAL_PORT_SERVICE_NAME, GET_IUNKNOWN(SerialPortSvc));
if (!ret) {
SERIAL_LOGI("RegisterDefaultFeatureApi error");
return;
}
SERIAL_LOGI("serial RegisterService out, ver = %u", SerialPortSvc.ver);
}
SYSEX_SERVICE_INIT(Init);
3.開發(fā)應用
3.1 簽名配置
使用 DevEco Studio 3.0.0.800 軟件進行應用開發(fā),真機設備運行和調(diào)試OpenHarmony應用前,需要對應用進行簽名才能正常運行。主要分為四個步驟:生成密鑰和證書請求文件,生成應用證書文件,生成應用profile文件,配置應用簽名信息。3.2 調(diào)試命令
adb push entry-release-lite-signed.hap /userdataadb shellalias ls='ls --color=never'//解決ls亂碼bm uninstall -n com.ingenic.curtainbm install -p entry-release-lite-signed.hap4.總結
本文介紹了在OpenHarmony 3.0 LTS系統(tǒng)上重串口功能實現(xiàn)到應用開發(fā)的整套流程。簡單的API接口開發(fā),可直接依賴系統(tǒng)模塊。難點主要在輕量級系統(tǒng)開發(fā),讀者可參考開源鴻蒙中輕量級系統(tǒng)服務管理部件中的相關介紹進行開發(fā)。更多熱點文章閱讀
- 如何使用DevEco Studio創(chuàng)建Native C++應用
- 基于小凌派RK2206的智能垃圾桶設計
- 大咖齊聚!OpenHarmony技術峰會豪華嘉賓陣容揭曉
- ArkUI新能力,助力應用開發(fā)更便捷
-
小白指南:手把手教你用低代碼開發(fā)一個應用頁面
提示:本文由電子發(fā)燒友論壇發(fā)布,轉載請注明來源。如需社區(qū)合作及入群交流,請?zhí)砑游⑿臙EFans0806,或者發(fā)郵箱liuyong@huaqiu.com。
原文標題:OpenHarmony L1(3.0)串口功能開發(fā)
文章出處:【微信公眾號:電子發(fā)燒友開源社區(qū)】歡迎添加關注!文章轉載請注明出處。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
電子發(fā)燒友
+關注
關注
33文章
548瀏覽量
32834 -
開源社區(qū)
+關注
關注
0文章
93瀏覽量
396
原文標題:OpenHarmony L1(3.0)串口功能開發(fā)
文章出處:【微信號:HarmonyOS_Community,微信公眾號:電子發(fā)燒友開源社區(qū)】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
基于ArkTS語言的OpenHarmony APP應用開發(fā):HelloOpenharmony
1、程序簡介該程序是基于OpenHarmony標準系統(tǒng)編寫的UI應用類:HelloOpenHarmony。本案例是基于API9接口開發(fā)。本案例已在O
【迅為RK3568開發(fā)板】OpenHarmony學習開發(fā)系列教程(第1期 北向基礎篇一)
P1P0_先導課1:30
P2P1_OpenHarmony系統(tǒng)概述8:12
P3P2_OpenHarmony功能框架5:38
P4P3_
發(fā)表于 08-16 15:27
鴻蒙OpenHarmony南向/北向快速開發(fā)教程-迅為RK3568開發(fā)板
4.1學習之旅了嗎?快來加入我們,一起探索鴻蒙4.1系統(tǒng)的無限魅力吧!
【北京迅為】OpenHarmony學習開發(fā)系列教程(第1期 北向基礎篇一)
P0_先導課
P1_OpenHarmony
發(fā)表于 07-23 10:44
BK1661 全集成的單芯片 L1 頻段 GNSS 解決方案
LDO
? 內(nèi)置 DC-DC
? 低功耗:
L1 連續(xù)跟蹤模式 : 12 mA
休眠待機模式 : 14 μA
外設接口
? 17 GPIOs
? 3x UART, 其中一個具備下載功能
? 1x I2C
發(fā)表于 06-03 09:40
BK1662 單芯片L1/L5雙頻GNSS解決方案
概 述
BK1662是完全集成的單芯片L1/L5雙頻GNSS解決方案,專為需要低功耗和高性能的應用而設計。
BK1662通過優(yōu)化多頻段和多模式信號跟蹤、先進的抗多徑技術和抗干擾射頻前端,顯著提高了
發(fā)表于 06-03 09:31
BK1616P 全集成的單芯片 L1 頻段 GNSS 解決方案(高性價比FLASH版本)
BK1616P 是全集成的單芯片 L1 頻段 GNSS 解決方案,專為需要低成本、低功耗和高性能的應用而設計。其可以實現(xiàn)優(yōu)化的多模式信號跟蹤。同時其實現(xiàn)了先進的抗多徑和抗干擾射頻前端,顯著提高了實際
發(fā)表于 05-29 10:50
鴻蒙OS開發(fā):典型頁面場景【一次開發(fā),多端部署】(功能開發(fā))
應用開發(fā)至少包含兩部分工作: UI頁面開發(fā)和底層功能開發(fā)(部分需要聯(lián)網(wǎng)的應用還會涉及服務端開發(fā))。前面章節(jié)介紹了如何解決頁面適配的問題,本章節(jié)主要介紹應用如何解決設備系統(tǒng)能力差異的兼容
OpenHarmony南向開發(fā)案例:【智能照相機】
基于Hi3516開發(fā)板,使用OpenHarmony3.0-LTS開發(fā)的應用。通過獲取攝像頭數(shù)據(jù),實現(xiàn)預覽拍照以及路視頻等功能。并且通過后臺AI服務識別喚醒詞來進行語音控制拍照及錄制視頻
多功能開發(fā)板EoRa PI,支持Wi-Fi和低功耗藍牙
通過對客戶需求的深度調(diào)研,億佰特近期推出兩款專為LoRa類模組設計的多功能開發(fā)板,內(nèi)嵌LoRa通信模塊億佰特E22-400/90
請問使用ST25R3916方案的NFC讀卡器能否通過EMVCo 3.0 L1認證測試?
1.目前使用st25r3916方案的讀卡器是否能順利通過EMV3.0 L1測試?
2.有沒有可以通過認證測試的套件并提供技術支持,或者提供樣品定制開發(fā)驗證服務?
3.其他型號推薦?
發(fā)表于 03-21 07:08
【OpenHarmony鴻蒙實戰(zhàn)】在RK3399開發(fā)板實現(xiàn)智能門禁人臉識別
基于RK3399開發(fā)板,使用OpenHarmony3.0-LTS開發(fā)的應用。通過定時獲取攝像頭數(shù)據(jù),實現(xiàn)人臉識別比對等功能。
使用ADI官方提供的no-OS來接收GPS L1(1575.42MHz)的資料
目前使用ad9361在接收GPS L1(1575.42MHz)頻段的資料,但收到的IQ在頻域和時域上分析,看起來皆不太正確。希望有版友可以提供一些設定上的建議,若能協(xié)助開發(fā)接收這頻段的IQ,請直接私訊我謝謝。
發(fā)表于 01-21 21:53
鴻蒙next開發(fā)-OpenHarmony的NDK開發(fā)
Native API是OpenHarmony SDK上提供的一組native開發(fā)接口與工具集合(也稱為NDK),方便開發(fā)者使用C或者C++語言實現(xiàn)應用的關鍵功能。
openharmony開發(fā)應用
隨著智能設備的普及和多樣化,開發(fā)者們對于更加靈活、高效的操作系統(tǒng)需求與日俱增。在這個背景下,華為推出了OpenHarmony,一個全場景智能終端操作系統(tǒng)和生態(tài)平臺。本文將詳細探討
評論