0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenHarmony L1(3.0)串口功能开发

电子发烧友开源社区 来源:未知 2023-03-11 14:15 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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接口

2.1依赖router模块开发

如果串口权限不受限制,可以直接在router模块增加串口相关功能,节省开发时间。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);
}
串口初始化及进制转换相关代码可直接调用库函数。串口读回调的相关代码如下:
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 = [
"//device/hals/communication/serial_port:serial_service_api",
]

2.2轻量级服务开发

串口权限受限时,需要启用轻量级服务,应用可以通过服务,跨进程操作串口。具体配置如下: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},
};
代码实现服务初始化,具体实现可参考wifi_lite相关代码。在Invoke中去调用串口相关功能**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;
}
//创建服务对象:
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.开发应用

3.1 签名配置

使用 DevEco Studio 3.0.0.800 软件进行应用开发,真机设备运行和调试OpenHarmony应用前,需要对应用进行签名才能正常运行。主要分为四个步骤:生成密钥和证书请求文件,生成应用证书文件,生成应用profile文件,配置应用签名信息。a2a5e708-bfd2-11ed-bfe3-dac502259ad0.png

3.2 调试命令

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.总结

本文介绍了在OpenHarmony 3.0 LTS系统上重串口功能实现到应用开发的整套流程。简单的API接口开发,可直接依赖系统模块。难点主要在轻量级系统开发,读者可参考开源鸿蒙中轻量级系统服务管理部件中的相关介绍进行开发。

更多热点文章阅读
  • 如何使用DevEco Studio创建Native C++应用
  • 基于小凌派RK2206的智能垃圾桶设计
  • 大咖齐聚!OpenHarmony技术峰会豪华嘉宾阵容揭晓
  • ArkUI新能力,助力应用开发更便捷
  • 小白指南:手把手教你用低代码开发一个应用页面

提示:本文由电子发烧友论坛发布,转载请注明来源。如需社区合作及入群交流,请添加微信EEFans0806,或者发邮箱liuyong@huaqiu.com。


原文标题:OpenHarmony L1(3.0)串口功能开发

文章出处:【微信公众号:电子发烧友开源社区】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 电子发烧友
    +关注

    关注

    33

    文章

    584

    浏览量

    33977
  • 开源社区
    +关注

    关注

    0

    文章

    95

    浏览量

    771

原文标题:OpenHarmony L1(3.0)串口功能开发

文章出处:【微信号:HarmonyOS_Community,微信公众号:电子发烧友开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    军工、航天与电信主时钟用 OCXO:L1 级时序基准怎么选?

    在很多工程师眼里,“时钟就是一个晶振 + 若干倍频芯片”。但当系统来到 雷达、卫星通信、军工通信、电信主时钟 这些 L1 级应用时,普通晶振或 TCXO 已经不够用了——这时通常需要上 OCXO
    发表于 12-01 15:27

    ‌TE Connectivity L1/L5微型Splatch GNSS芯片天线技术解析

    TE Connectivity(TE)/Linx Technologies L1/L5 Splatch GNSS芯片天线支持L1/E1/B1
    的头像 发表于 11-04 11:34 323次阅读
    ‌TE Connectivity <b class='flag-5'>L1</b>/<b class='flag-5'>L</b>5微型Splatch GNSS芯片天线技术解析

    【M-K1HSE开发板免费体验】OpenHarmony系统体验与调试串口连接

    基本操作还是很流畅的。 调试串口连接调试串口位置对应原理图如下,上图DEBUG的右边为1引脚 接线如下,由于只有2.54的排针,所以2.0接口就tx,rx挤一挤,GND接旁边的座子的1
    发表于 07-18 23:48

    【RA4L1-SENSOR】+ RA4L1-SENSOR开发版之使用Jlink的RTT打印功能代替串口

    ;); //printf(\"很高兴试用RA4L1开发板********\\\\r\\\\n\"); //printf(\"串口输出打印 波特率115200\\\\r\\\\n\\\\r
    发表于 06-09 09:03

    【RA4L1-SENSOR】+ RA4L1-SENSOR开发串口打印功能printf实现

    很高兴收到瑞萨RA生态工作室给与试用的RA4L1-SENSOR开发板,本期就来讲解使用RA4L1-SENSOR开发板实现串口打印
    发表于 06-08 15:01

    Sky5® GNSS L1 L5 双频低噪声放大器前端模块,带后置滤波器 skyworksinc

    电子发烧友网为你提供()Sky5® GNSS L1 L5 双频低噪声放大器前端模块,带后置滤波器相关产品参数、数据手册,更有Sky5® GNSS L1 L5 双频低噪声放大器前端模块,
    发表于 05-14 18:32
    Sky5® GNSS <b class='flag-5'>L1</b> <b class='flag-5'>L</b>5 双频低噪声放大器前端模块,带后置滤波器 skyworksinc

    基于小凌派RK2206开发板:OpenHarmony如何使用IoT接口控制FLASH外设

    1、实验简介本实验将演示如何在小凌派-RK2206开发板上使用IOT库的FLASH接口,进行FLASH编程开发。例程将创建一个任务,实现FLASH读写操作。例程源代码:https
    的头像 发表于 04-22 14:49 684次阅读
    基于小凌派RK2206<b class='flag-5'>开发</b>板:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口控制FLASH外设

    基于小凌派RK2206开发板:OpenHarmony如何使用IoT接口控制UART外设

    1、实验简介本实验将演示如何在小凌派-RK2206开发板上使用IOT库的UART接口,进行UART编程开发。例程将创建一个任务,通过配置UART引脚,实现UART读写操作。例程源代码:https
    的头像 发表于 04-22 14:22 786次阅读
    基于小凌派RK2206<b class='flag-5'>开发</b>板:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口控制UART外设

    基于小凌派RK2206开发板:OpenHarmony如何使用IoT接口控制GPIO中断

    1、实验简介本实验将演示如何在小凌派-RK2206开发板上使用IOT库的GPIO中断模式,进行GPIO编程开发。例程将创建一个任务,通过配置GPIO引脚为中断模式,实现GPIO中断操作。例程源代码
    的头像 发表于 04-21 10:39 889次阅读
    基于小凌派RK2206<b class='flag-5'>开发</b>板:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口控制GPIO中断

    基于小凌派RK2206开发板:OpenHarmony如何使用IoT接口控制GPIO外设

    1、案例简介本案例主要是如何在小凌派-RK2206开发板上使用IOT库的GPIO接口,进行GPIO编程开发。例程将创建一个任务,通过配置GPIO引脚,实现GPIO读写操作。例程源代码:https
    的头像 发表于 04-11 15:36 1612次阅读
    基于小凌派RK2206<b class='flag-5'>开发</b>板:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口控制GPIO外设

    基于小凌派RK2206开发板:OpenHarmony如何使用IoT接口控制ADC外设

    1、案例简介本案例主要讲解如何在小凌派-RK2206开发板上使用IoT库的ADC接口,进行ADC编程开发。例程内容为创建一个任务,读取按键的ADC值,并打印到串口。例程源代码:http
    的头像 发表于 04-10 16:00 706次阅读
    基于小凌派RK2206<b class='flag-5'>开发</b>板:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口控制ADC外设

    迅为iTOP-RK3576人工智能开发板Android 系统接口功能测试

    迅为iTOP-RK3576人工智能开发板Android 系统接口功能测试
    的头像 发表于 03-28 14:45 3475次阅读
    迅为iTOP-RK3576人工智<b class='flag-5'>能开发</b>板Android 系统接口<b class='flag-5'>功能</b>测试

    【北京迅为】itop-3568 开发openharmony鸿蒙烧写及测试-第1章 体验OpenHarmony—烧写镜像

    【北京迅为】itop-3568 开发openharmony鸿蒙烧写及测试-第1章 体验OpenHarmony—烧写镜像
    的头像 发表于 03-04 16:31 872次阅读
    【北京迅为】itop-3568 <b class='flag-5'>开发</b>板<b class='flag-5'>openharmony</b>鸿蒙烧写及测试-第<b class='flag-5'>1</b>章 体验<b class='flag-5'>OpenHarmony</b>—烧写镜像

    【RA-Eco-RA2L1-48PIN-V1.0开发板试用】——使用Jlink的RTT实现串口打印功能

    RTT View 可以看到打印log,完全和我封装到LED1和LED2里的功能一致, 支持完成了JLINK RTT printf串口输出打印功能!!! 详细细节请看视屏,,下一节讲解
    发表于 01-23 11:33

    【米尔-紫光PG2L100H国产FPGA开发板试用】串口通信功能测试

    使用注意 确保供电稳定 正确设置串口参数 定期检查连接状态 做好数据备份 八、后续计划 近期计划 开发自定义通信协议 测试中断接收模式 进行性能测试 九、总结 通过本次串口功能测试,
    发表于 12-06 10:51