OpenHarmony 3.0 LTS是面向全場景的開源分布式操作系統(tǒng),能夠在物聯(lián)網(wǎng)上使用。可以支持三種系統(tǒng)類型,標(biāo)準(zhǔn)系統(tǒng)、輕量系統(tǒng)和小型系統(tǒng)。本文提供了在OpenHarmony 3.0 LTS實現(xiàn)串口調(diào)試功能的開發(fā)方案。

1.編寫代碼生成對應(yīng)動態(tài)庫文件
串口功能開發(fā)包括串口初始化、數(shù)據(jù)讀寫、修改數(shù)據(jù)開發(fā)格式等。具體代碼不便展示。編寫gn文件生成對應(yīng)動態(tài)庫文件
shared_library("serial_service_api") { sources = [ "service/serial_service.cpp" ] include_dirs = ["include","service", ]
2.提供API接口
2.1依賴router模塊開發(fā)
如果串口權(quán)限不受限制,可以直接在router模塊增加串口相關(guān)功能,節(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);
}
串口初始化及進制轉(zhuǎn)換相關(guān)代碼可直接調(diào)用庫函數(shù)。串口讀回調(diào)的相關(guān)代碼如下:
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模塊增加相關(guān)依賴foundationaceace_engine_liteframeworksBUILD.gn
deps = [
"http://device/hals/communication/serial_port:serial_service_api",
]
2.2輕量級服務(wù)開發(fā)
串口權(quán)限受限時,需要啟用輕量級服務(wù),應(yīng)用可以通過服務(wù),跨進程操作串口。具體配置如下:foundationaceace_engine_liteframeworksmodule_managerohos_module_config.h
extern void InitSerialPortModule(JSIValue exports);const Module OHOS_MODULES[] = {{"serialport", InitSerialPortModule},}
配置服務(wù)自啟動: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 &
配置服務(wù):basesecuritypermissionservicespermission_liteipc_authincludepolicy_preset.h
FeaturePolicy serialServiceFeature[] = {
{
NULL,
{
{
.type = RANGE,
.uidMin=0,
.uidMax=__INT_MAX__,
}
},
},
};
static PolicySetting g_presetPolicies[] = {
{"serialportservice", serialServiceFeature, 1},
};
代碼實現(xiàn)服務(wù)初始化,具體實現(xiàn)可參考wifi_lite相關(guān)代碼。在Invoke中去調(diào)用串口相關(guān)功能**serial_portserial_port_liteservicesamgr_serial_port_service.cpp
//繼承并重新定義服務(wù):
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)建服務(wù)對象:
static SamgrSerialPortService SerialPortSvc = {
.GetName = GetName,
.Initialize = Initialize,
.MessageHandle = MessageHandle,
.GetTaskConfig = GetTaskConfig,
SERVER_IPROXY_IMPL_BEGIN,
.Invoke = Invoke,
IPROXY_END,
};
//向SAMGR注冊服務(wù)及接口:
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ā)應(yīng)用
3.1 簽名配置
使用 DevEco Studio 3.0.0.800 軟件進行應(yīng)用開發(fā),真機設(shè)備運行和調(diào)試OpenHarmony應(yīng)用前,需要對應(yīng)用進行簽名才能正常運行。主要分為四個步驟:生成密鑰和證書請求文件,生成應(yīng)用證書文件,生成應(yīng)用profile文件,配置應(yīng)用簽名信息。
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.總結(jié)
本文介紹了在OpenHarmony 3.0 LTS系統(tǒng)上重串口功能實現(xiàn)到應(yīng)用開發(fā)的整套流程。簡單的API接口開發(fā),可直接依賴系統(tǒng)模塊。難點主要在輕量級系統(tǒng)開發(fā),讀者可參考開源鴻蒙中輕量級系統(tǒng)服務(wù)管理部件中的相關(guān)介紹進行開發(fā)。更多熱點文章閱讀
- 如何使用DevEco Studio創(chuàng)建Native C++應(yīng)用
- 基于小凌派RK2206的智能垃圾桶設(shè)計
- 大咖齊聚!OpenHarmony技術(shù)峰會豪華嘉賓陣容揭曉
- ArkUI新能力,助力應(yīng)用開發(fā)更便捷
-
小白指南:手把手教你用低代碼開發(fā)一個應(yīng)用頁面
提示:本文由電子發(fā)燒友論壇發(fā)布,轉(zhuǎn)載請注明來源。如需社區(qū)合作及入群交流,請?zhí)砑游⑿臙EFans0806,或者發(fā)郵箱liuyong@huaqiu.com。
原文標(biāo)題:OpenHarmony L1(3.0)串口功能開發(fā)
文章出處:【微信公眾號:電子發(fā)燒友開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
電子發(fā)燒友
+關(guān)注
關(guān)注
34文章
592瀏覽量
34413 -
開源社區(qū)
+關(guān)注
關(guān)注
1文章
95瀏覽量
822
原文標(biāo)題:OpenHarmony L1(3.0)串口功能開發(fā)
文章出處:【微信號:HarmonyOS_Community,微信公眾號:電子發(fā)燒友開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
熱點推薦
【瑞薩RA2L1入門學(xué)習(xí)】+串口通訊及LED控制
RA-Eco-RA2L1開發(fā)板沒配備相應(yīng)的串口轉(zhuǎn)USB通訊功能,只能外掛相應(yīng)的功能模塊來使用。
在RASC中,需按圖
發(fā)表于 04-26 09:57
瑞薩RA MCU眾測寶典 | 串口之【RA-Eco-RA2L1】RTC日歷及串口設(shè)置時間
瑞薩“RAMCU眾測寶典”串口專題添硬核實操!開啟寶典前言RAMCU眾測寶典|串口之【RA2L1】開發(fā)板開箱及串口輸出實現(xiàn)RAMCU眾測寶典
EMV L1 CLRC663 plus 模擬情況下的非接觸式問題求解
我們目前正在進行EMV非接觸式L1認證。讀卡器IC為CLRC663plus。在模擬測試案例中,我們遇到了兩個波形質(zhì)量問題。
-是A型的t4時序,在TA125.1.3.400案例中失敗。測試結(jié)果為
發(fā)表于 04-17 08:02
一種L1系列大電流連接器接觸對的設(shè)計方案
介紹某公司開發(fā)的L1系列端子基于雙曲線網(wǎng)籠結(jié)構(gòu)的改進版本,采用獨特的雙曲線回轉(zhuǎn)銅柵格結(jié)構(gòu)可提供多重接觸點,從而大幅提高了端子的接觸面積并且使連接器兼具更小的插拔力。此類端子的優(yōu)點要保留了雙曲線網(wǎng)籠
niobeu4 esp32 開發(fā)板無法連接有密碼的wifi
(1) niobeu4 開發(fā)板,系統(tǒng)正常運行,串口正常輸出。
(2)測試 wifi 功能,按照 openharmony wifi sta
發(fā)表于 01-23 10:36
M4-R1 開源鴻蒙(OpenHarmory)開發(fā)板丨串口調(diào)試助手實戰(zhàn)案例
前言開源鴻蒙(OpenHarmony)作為國產(chǎn)分布式操作系統(tǒng),正在為智能終端與物聯(lián)網(wǎng)設(shè)備構(gòu)建統(tǒng)一的開放生態(tài)。它以開源共建的方式,為多設(shè)備協(xié)同與產(chǎn)業(yè)創(chuàng)新提供堅實基礎(chǔ)。M4-R1開發(fā)板憑借完善的軟硬件
軍工、航天與電信主時鐘用 OCXO:L1 級時序基準(zhǔn)怎么選?
在很多工程師眼里,“時鐘就是一個晶振 + 若干倍頻芯片”。但當(dāng)系統(tǒng)來到 雷達、衛(wèi)星通信、軍工通信、電信主時鐘 這些 L1 級應(yīng)用時,普通晶振或 TCXO 已經(jīng)不夠用了——這時通常需要上 OCXO
發(fā)表于 12-01 15:27
CW32L010的串口輸出功能
今天和大家分享一下CW32L010的串口輸出功能:
CW32L010 內(nèi)部集成2個通用異步收發(fā)器(UART),支持異步全雙工、同步半雙工和單線半雙工模式,支持硬件數(shù)據(jù)流控和多機通信,還
發(fā)表于 11-26 06:04
?TE Connectivity L1/L5微型Splatch GNSS芯片天線技術(shù)解析
TE Connectivity(TE)/Linx Technologies L1/L5 Splatch GNSS芯片天線支持L1/E1/B1
觸覺智能RK3576開發(fā)板OpenHarmony開源鴻蒙系統(tǒng)USB控制傳輸功能示例
本文介紹OpenHarmony開源鴻蒙系統(tǒng)的USB控制傳輸功能實現(xiàn)及相關(guān)代碼示例,基于觸覺智能RK3576開發(fā)板PurplePiOH2演示。OpenHarmony的USB通信介紹實現(xiàn)
【M-K1HSE開發(fā)板免費體驗】OpenHarmony系統(tǒng)體驗與調(diào)試串口連接
基本操作還是很流暢的。 調(diào)試串口連接調(diào)試串口位置對應(yīng)原理圖如下,上圖DEBUG的右邊為1引腳 接線如下,由于只有2.54的排針,所以2.0接口就tx,rx擠一擠,GND接旁邊的座子的1
發(fā)表于 07-18 23:48
【RA4L1-SENSOR】+ RA4L1-SENSOR開發(fā)版之使用Jlink的RTT打印功能代替串口
;);
//printf(\"很高興試用RA4L1開發(fā)板********\\\\r\\\\n\");
//printf(\"串口輸出打印 波特率115200\\\\r\\\\n\\\\r
發(fā)表于 06-09 09:03
【RA4L1-SENSOR】+ RA4L1-SENSOR開發(fā)版串口打印功能printf實現(xiàn)
很高興收到瑞薩RA生態(tài)工作室給與試用的RA4L1-SENSOR開發(fā)板,本期就來講解使用RA4L1-SENSOR開發(fā)板實現(xiàn)串口打印
發(fā)表于 06-08 15:01
Sky5? GNSS L1 L5 雙頻低噪聲放大器前端模塊,帶后置濾波器 skyworksinc
電子發(fā)燒友網(wǎng)為你提供()Sky5? GNSS L1 L5 雙頻低噪聲放大器前端模塊,帶后置濾波器相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有Sky5? GNSS L1 L5 雙頻低噪聲放大器前端模塊,
發(fā)表于 05-14 18:32
OpenHarmony L1(3.0)串口功能開發(fā)
評論