成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

OpenHarmony L1(3.0)串口功能開發

系統 OpenHarmony
本文介紹了在OpenHarmony 3.0 LTS系統上重串口功能實現到應用開發的整套流程。簡單的API接口開發,可直接依賴系統模塊。難點主要在輕量級系統開發,讀者可參考開源鴻蒙中輕量級系統服務管理部件中的相關介紹進行開發。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

前言

OpenHarmony 3.0 LTS是面向全場景的開源分布式操作系統,能夠在物聯網上使用。可以支持三種系統類型,標準系統、輕量系統和小型系統。本文提供了在OpenHarmony 3.0 LTS實現串口調試功能的開發方案。

1、編寫代碼生成對應動態庫文件

串口功能開發包括串口初始化、數據讀寫、修改數據開發格式等。具體代碼不便展示。編寫gn文件生成對應動態庫文件。

shared_library("serial_service_api") { sources = [ "service/serial_service.cpp" ] include_dirs = ["include","service", ]

2、提供API接口

(1)依賴router模塊開發

如果串口權限不受限制,可以直接在router模塊增加串口相關功能,節省開發時間。
foundation\ace\ace_engine_lite\frameworks\src\core\modules\router_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::SerialService::GetInstance()->SerialRead(RouterModule::ReadingCallback);

串口初始化及進制轉換相關代碼可直接調用庫函數。串口讀回調的相關代碼如下:

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模塊增加相關依賴。
foundation\ace\ace_engine_lite\frameworks\BUILD.gn。

"http://device/hals/communication/serial_port:serial_service_api",
]

(2)輕量級服務開發

串口權限受限時,需要啟用輕量級服務,應用可以通過服務,跨進程操作串口。具體配置如下:

foundation\ace\ace_engine_lite\frameworks\module_manager\ohos_module_config.hextern 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 &

配置服務:

FeaturePolicy serialServiceFeature[] = {
{
NULL,
{
{
.type = RANGE,
.uidMin=0,
.uidMax=__INT_MAX__,
}
},
},
};
static PolicySetting g_presetPolicies[] = {
{"serialportservice", serialServiceFeature, 1},
};

代碼實現服務初始化,具體實現可參考wifi_lite相關代碼。在Invoke中去調用串口相關功能。
**\serial_port\serial_port_lite\service\samgr_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;
}
//創建服務對象:
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、開發應用

(1)簽名配置

使用 DevEco Studio 3.0.0.800 軟件進行應用開發,真機設備運行和調試OpenHarmony應用前,需要對應用進行簽名才能正常運行。主要分為四個步驟:生成密鑰和證書請求文件,生成應用證書文件,生成應用profile文件,配置應用簽名信息。

#創作者激勵#OpenHarmony L1(3.0)串口功能開發-開源基礎軟件社區

(2)調試命令

adb push entry-release-lite-signed.hap /userdata
adb shell
alias ls=‘ls --color=never’ //解決ls亂碼
bm uninstall -n com.ingenic.curtain
bm install -p entry-release-lite-signed.hap

總結

本文介紹了在OpenHarmony 3.0 LTS系統上重串口功能實現到應用開發的整套流程。簡單的API接口開發,可直接依賴系統模塊。難點主要在輕量級系統開發,讀者可參考開源鴻蒙中輕量級系統服務管理部件中的相關介紹進行開發。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

責任編輯:jianghua 來源: 51CTO 開源基礎軟件社區
相關推薦

2022-03-28 15:40:34

harmony鴻蒙操作系統

2022-02-17 17:52:00

openharmon項目開發鴻蒙

2021-10-20 19:14:30

緩存CacheCPU

2012-03-07 14:37:03

JavaJavaMail

2025-02-06 09:40:00

2023-05-26 16:01:32

驅動開發鴻蒙

2023-05-30 14:58:05

智能開發鴻蒙

2012-10-09 10:57:57

光纖iODN寬帶

2023-05-12 14:52:11

鴻蒙操作系統

2023-05-17 15:07:42

智能開發鴻蒙

2022-03-21 15:42:36

智能家居物聯網MQTT

2023-05-15 15:27:20

鴻蒙智能開發套件

2023-01-31 09:12:16

CPU芯片緩存

2022-02-21 15:38:57

Openharmon操作系統鴻蒙

2012-11-05 10:36:40

IBMdw

2023-10-10 15:33:55

機器學習相似性度量

2022-01-06 16:16:21

鴻蒙HarmonyOS應用

2022-01-07 21:12:46

鴻蒙HarmonyOS應用

2022-01-21 21:22:24

OpenHarmon操作系統鴻蒙

2022-08-26 14:58:43

區塊鏈比特幣架構
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品亚洲精品 | 91精品一区 | 日韩精品一区二区三区 | 欧美一级在线免费 | 中文字幕久久久 | 久久精品色欧美aⅴ一区二区 | 亚洲免费在线 | 国产一区二区三区在线看 | 国产在线观看免费 | 日韩国产高清在线观看 | 国产精品美女久久久 | 亚洲精品性视频 | 综合久久网 | 成人久久久 | 国产成人精品免费视频大全最热 | 久久香蕉网 | 日韩视频一区在线观看 | 精品无码久久久久久久动漫 | 日韩三级电影一区二区 | 久久精品日| 国产精品久久久久一区二区三区 | 奇米超碰在线 | 性一交一乱一透一a级 | 美女天天操| 亚洲日韩欧美一区二区在线 | 国产色片在线 | 成人不卡 | 欧美一区二区在线免费观看 | 欧美一区二区三区在线看 | 日韩中文字幕高清 | 91av视频在线| 人人爽日日躁夜夜躁尤物 | 欧美不卡在线 | 日韩精品一区二区三区视频播放 | 欧美午夜精品 | 国产精品亚洲精品日韩已方 | 成人在线观看免费 | 国产精品www | 国产视频中文字幕 | 久久www免费人成看片高清 | 国产成人叼嘿视频在线观看 |