一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OpenHarmony L1(3.0)串口功能開(kāi)發(fā)

電子發(fā)燒友開(kāi)源社區(qū) ? 來(lái)源:未知 ? 2023-03-11 14:15 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

OpenHarmony 3.0 LTS是面向全場(chǎng)景的開(kāi)源分布式操作系統(tǒng),能夠在物聯(lián)網(wǎng)上使用??梢灾С秩N系統(tǒng)類(lèi)型,標(biāo)準(zhǔn)系統(tǒng)、輕量系統(tǒng)和小型系統(tǒng)。本文提供了在OpenHarmony 3.0 LTS實(shí)現(xiàn)串口調(diào)試功能的開(kāi)發(fā)方案。

1.編寫(xiě)代碼生成對(duì)應(yīng)動(dòng)態(tài)庫(kù)文件

串口功能開(kāi)發(fā)包括串口初始化、數(shù)據(jù)讀寫(xiě)、修改數(shù)據(jù)開(kāi)發(fā)格式等。具體代碼不便展示。編寫(xiě)gn文件生成對(duì)應(yīng)動(dòng)態(tài)庫(kù)文件
shared_library("serial_service_api") { sources = [ "service/serial_service.cpp" ] include_dirs = ["include","service", ]

2.提供API接口

2.1依賴router模塊開(kāi)發(fā)

如果串口權(quán)限不受限制,可以直接在router模塊增加串口相關(guān)功能,節(jié)省開(kāi)發(fā)時(shí)間。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);
}
串口初始化及進(jìn)制轉(zhuǎn)換相關(guān)代碼可直接調(diào)用庫(kù)函數(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輕量級(jí)服務(wù)開(kāi)發(fā)

串口權(quán)限受限時(shí),需要啟用輕量級(jí)服務(wù),應(yīng)用可以通過(guò)服務(wù),跨進(jìn)程操作串口。具體配置如下:foundationaceace_engine_liteframeworksmodule_managerohos_module_config.h
extern void InitSerialPortModule(JSIValue exports);const Module OHOS_MODULES[] = {{"serialport", InitSerialPortModule},}
配置服務(wù)自啟動(dòng):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},
};
代碼實(shí)現(xiàn)服務(wù)初始化,具體實(shí)現(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ù)對(duì)象:
static SamgrSerialPortService SerialPortSvc = {
   .GetName = GetName,
   .Initialize = Initialize,
   .MessageHandle = MessageHandle,
   .GetTaskConfig = GetTaskConfig,
   SERVER_IPROXY_IMPL_BEGIN,
   .Invoke = Invoke,
   IPROXY_END,
};
//向SAMGR注冊(cè)服務(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.開(kāi)發(fā)應(yīng)用

3.1 簽名配置

使用 DevEco Studio 3.0.0.800 軟件進(jìn)行應(yīng)用開(kāi)發(fā),真機(jī)設(shè)備運(yùn)行和調(diào)試OpenHarmony應(yīng)用前,需要對(duì)應(yīng)用進(jìn)行簽名才能正常運(yùn)行。主要分為四個(gè)步驟:生成密鑰和證書(shū)請(qǐng)求文件,生成應(yīng)用證書(shū)文件,生成應(yīng)用profile文件,配置應(yīng)用簽名信息。a2a5e708-bfd2-11ed-bfe3-dac502259ad0.png

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.hap

4.總結(jié)

本文介紹了在OpenHarmony 3.0 LTS系統(tǒng)上重串口功能實(shí)現(xiàn)到應(yīng)用開(kāi)發(fā)的整套流程。簡(jiǎn)單的API接口開(kāi)發(fā),可直接依賴系統(tǒng)模塊。難點(diǎn)主要在輕量級(jí)系統(tǒng)開(kāi)發(fā),讀者可參考開(kāi)源鴻蒙中輕量級(jí)系統(tǒng)服務(wù)管理部件中的相關(guān)介紹進(jìn)行開(kāi)發(fā)。

更多熱點(diǎn)文章閱讀
  • 如何使用DevEco Studio創(chuàng)建Native C++應(yīng)用
  • 基于小凌派RK2206的智能垃圾桶設(shè)計(jì)
  • 大咖齊聚!OpenHarmony技術(shù)峰會(huì)豪華嘉賓陣容揭曉
  • ArkUI新能力,助力應(yīng)用開(kāi)發(fā)更便捷
  • 小白指南:手把手教你用低代碼開(kāi)發(fā)一個(gè)應(yīng)用頁(yè)面

提示:本文由電子發(fā)燒友論壇發(fā)布,轉(zhuǎn)載請(qǐng)注明來(lái)源。如需社區(qū)合作及入群交流,請(qǐng)?zhí)砑游⑿臙EFans0806,或者發(fā)郵箱liuyong@huaqiu.com。


原文標(biāo)題:OpenHarmony L1(3.0)串口功能開(kāi)發(fā)

文章出處:【微信公眾號(hào):電子發(fā)燒友開(kāi)源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴

原文標(biāo)題:OpenHarmony L1(3.0)串口功能開(kāi)發(fā)

文章出處:【微信號(hào):HarmonyOS_Community,微信公眾號(hào):電子發(fā)燒友開(kāi)源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    【RA4L1-SENSOR】+ RA4L1-SENSOR開(kāi)發(fā)版之使用Jlink的RTT打印功能代替串口

    ;); //printf(\"很高興試用RA4L1開(kāi)發(fā)板********\\\\r\\\\n\"); //printf(\"串口輸出打印 波特率115200\\\\r\\\\n\\\\r
    發(fā)表于 06-09 09:03

    【RA4L1-SENSOR】+ RA4L1-SENSOR開(kāi)發(fā)串口打印功能printf實(shí)現(xiàn)

    很高興收到瑞薩RA生態(tài)工作室給與試用的RA4L1-SENSOR開(kāi)發(fā)板,本期就來(lái)講解使用RA4L1-SENSOR開(kāi)發(fā)板實(shí)現(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ù)手冊(cè),更有Sky5? GNSS L1 L5 雙頻低噪聲放大器前端模塊,
    發(fā)表于 05-14 18:32
    Sky5? GNSS <b class='flag-5'>L1</b> <b class='flag-5'>L</b>5 雙頻低噪聲放大器前端模塊,帶后置濾波器 skyworksinc

    基于小凌派RK2206開(kāi)發(fā)板:OpenHarmony如何使用IoT接口控制FLASH外設(shè)

    1、實(shí)驗(yàn)簡(jiǎn)介本實(shí)驗(yàn)將演示如何在小凌派-RK2206開(kāi)發(fā)板上使用IOT庫(kù)的FLASH接口,進(jìn)行FLASH編程開(kāi)發(fā)。例程將創(chuàng)建一個(gè)任務(wù),實(shí)現(xiàn)FLASH讀寫(xiě)操作。例程源代碼:https
    的頭像 發(fā)表于 04-22 14:49 ?323次閱讀
    基于小凌派RK2206<b class='flag-5'>開(kāi)發(fā)</b>板:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口控制FLASH外設(shè)

    基于小凌派RK2206開(kāi)發(fā)板:OpenHarmony如何使用IoT接口控制GPIO中斷

    1、實(shí)驗(yàn)簡(jiǎn)介本實(shí)驗(yàn)將演示如何在小凌派-RK2206開(kāi)發(fā)板上使用IOT庫(kù)的GPIO中斷模式,進(jìn)行GPIO編程開(kāi)發(fā)。例程將創(chuàng)建一個(gè)任務(wù),通過(guò)配置GPIO引腳為中斷模式,實(shí)現(xiàn)GPIO中斷操作。例程源代碼
    的頭像 發(fā)表于 04-21 10:39 ?414次閱讀
    基于小凌派RK2206<b class='flag-5'>開(kāi)發(fā)</b>板:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口控制GPIO中斷

    基于小凌派RK2206開(kāi)發(fā)板:OpenHarmony如何使用IoT接口控制GPIO外設(shè)

    1、案例簡(jiǎn)介本案例主要是如何在小凌派-RK2206開(kāi)發(fā)板上使用IOT庫(kù)的GPIO接口,進(jìn)行GPIO編程開(kāi)發(fā)。例程將創(chuàng)建一個(gè)任務(wù),通過(guò)配置GPIO引腳,實(shí)現(xiàn)GPIO讀寫(xiě)操作。例程源代碼:https
    的頭像 發(fā)表于 04-11 15:36 ?1169次閱讀
    基于小凌派RK2206<b class='flag-5'>開(kāi)發(fā)</b>板:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口控制GPIO外設(shè)

    基于小凌派RK2206開(kāi)發(fā)板:OpenHarmony如何使用IoT接口控制ADC外設(shè)

    1、案例簡(jiǎn)介本案例主要講解如何在小凌派-RK2206開(kāi)發(fā)板上使用IoT庫(kù)的ADC接口,進(jìn)行ADC編程開(kāi)發(fā)。例程內(nèi)容為創(chuàng)建一個(gè)任務(wù),讀取按鍵的ADC值,并打印到串口。例程源代碼:http
    的頭像 發(fā)表于 04-10 16:00 ?395次閱讀
    基于小凌派RK2206<b class='flag-5'>開(kāi)發(fā)</b>板:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口控制ADC外設(shè)

    迅為iTOP-RK3576人工智能開(kāi)發(fā)板Android?系統(tǒng)接口功能測(cè)試

    迅為iTOP-RK3576人工智能開(kāi)發(fā)板Android?系統(tǒng)接口功能測(cè)試
    的頭像 發(fā)表于 03-28 14:45 ?2829次閱讀
    迅為iTOP-RK3576人工智<b class='flag-5'>能開(kāi)發(fā)</b>板Android?系統(tǒng)接口<b class='flag-5'>功能</b>測(cè)試

    【北京迅為】itop-3568 開(kāi)發(fā)openharmony鴻蒙燒寫(xiě)及測(cè)試-第1章 體驗(yàn)OpenHarmony—燒寫(xiě)鏡像

    【北京迅為】itop-3568 開(kāi)發(fā)openharmony鴻蒙燒寫(xiě)及測(cè)試-第1章 體驗(yàn)OpenHarmony—燒寫(xiě)鏡像
    的頭像 發(fā)表于 03-04 16:31 ?523次閱讀
    【北京迅為】itop-3568 <b class='flag-5'>開(kāi)發(fā)</b>板<b class='flag-5'>openharmony</b>鴻蒙燒寫(xiě)及測(cè)試-第<b class='flag-5'>1</b>章 體驗(yàn)<b class='flag-5'>OpenHarmony</b>—燒寫(xiě)鏡像

    【米爾-紫光PG2L100H國(guó)產(chǎn)FPGA開(kāi)發(fā)板試用】串口通信功能測(cè)試

    使用注意 確保供電穩(wěn)定 正確設(shè)置串口參數(shù) 定期檢查連接狀態(tài) 做好數(shù)據(jù)備份 八、后續(xù)計(jì)劃 近期計(jì)劃 開(kāi)發(fā)自定義通信協(xié)議 測(cè)試中斷接收模式 進(jìn)行性能測(cè)試 九、總結(jié) 通過(guò)本次串口功能測(cè)試,
    發(fā)表于 12-06 10:51

    基于ArkTS語(yǔ)言的OpenHarmony APP應(yīng)用開(kāi)發(fā):HelloOpenharmony

    1、程序簡(jiǎn)介該程序是基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)編寫(xiě)的UI應(yīng)用類(lèi):HelloOpenHarmony。本案例是基于API9接口開(kāi)發(fā)。本案例已在O
    的頭像 發(fā)表于 09-15 08:09 ?822次閱讀
    基于ArkTS語(yǔ)言的<b class='flag-5'>OpenHarmony</b> APP應(yīng)用<b class='flag-5'>開(kāi)發(fā)</b>:Hello<b class='flag-5'>Openharmony</b>

    OpenHarmony 明星開(kāi)發(fā)板和應(yīng)用招募啟動(dòng),等你來(lái)!

    板能夠量產(chǎn)>1000pcs 報(bào)名企業(yè)至少有1開(kāi)發(fā)板或者商用設(shè)備通過(guò)OpenHarmony兼容性測(cè)試 報(bào)名企業(yè)可持續(xù)投入南向設(shè)備開(kāi)發(fā)的人員大于5 滿足條件的企業(yè)可下載報(bào)名表
    發(fā)表于 09-14 15:21

    MSPM0 L1測(cè)量?jī)x表解決方案指南

    電子發(fā)燒友網(wǎng)站提供《MSPM0 L1測(cè)量?jī)x表解決方案指南.pdf》資料免費(fèi)下載
    發(fā)表于 09-04 10:47 ?1次下載
    MSPM0 <b class='flag-5'>L1</b>測(cè)量?jī)x表解決方案指南

    【迅為RK3568開(kāi)發(fā)板】OpenHarmony學(xué)習(xí)開(kāi)發(fā)系列教程(第1期 北向基礎(chǔ)篇一)

    P1P0_先導(dǎo)課1:30 P2P1_OpenHarmony系統(tǒng)概述8:12 P3P2_OpenHarmony功能框架5:38 P4P3_
    發(fā)表于 08-16 15:27

    鴻蒙OpenHarmony南向/北向快速開(kāi)發(fā)教程-迅為RK3568開(kāi)發(fā)

    4.1學(xué)習(xí)之旅了嗎?快來(lái)加入我們,一起探索鴻蒙4.1系統(tǒng)的無(wú)限魅力吧! 【北京迅為】OpenHarmony學(xué)習(xí)開(kāi)發(fā)系列教程(第1期 北向基礎(chǔ)篇一) P0_先導(dǎo)課 P1_OpenHarmony
    發(fā)表于 07-23 10:44