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文件,配置应用签名信息。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.hap4.总结
本文介绍了在OpenHarmony 3.0 LTS系统上重串口功能实现到应用开发的整套流程。简单的API接口开发,可直接依赖系统模块。难点主要在轻量级系统开发,读者可参考开源鸿蒙中轻量级系统服务管理部件中的相关介绍进行开发。更多热点文章阅读
- 如何使用DevEco Studio创建Native C++应用
- 基于小凌派RK2206的智能垃圾桶设计
- 大咖齐聚!OpenHarmony技术峰会豪华嘉宾阵容揭晓
- ArkUI新能力,助力应用开发更便捷
-
小白指南:手把手教你用低代码开发一个应用页面
提示:本文由电子发烧友论坛发布,转载请注明来源。如需社区合作及入群交流,请添加微信EEFans0806,或者发邮箱liuyong@huaqiu.com。
原文标题:OpenHarmony L1(3.0)串口功能开发
文章出处:【微信公众号:电子发烧友开源社区】欢迎添加关注!文章转载请注明出处。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
电子发烧友
+关注
关注
33文章
556浏览量
33092 -
开源社区
+关注
关注
0文章
94浏览量
476
原文标题:OpenHarmony L1(3.0)串口功能开发
文章出处:【微信号:HarmonyOS_Community,微信公众号:电子发烧友开源社区】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
【米尔-紫光PG2L100H国产FPGA开发板试用】串口通信功能测试
使用注意
确保供电稳定
正确设置串口参数
定期检查连接状态
做好数据备份
八、后续计划
近期计划
开发自定义通信协议
测试中断接收模式
进行性能测试
九、总结
通过本次串口功能测试,
发表于 12-06 10:51
基于ArkTS语言的OpenHarmony APP应用开发:HelloOpenharmony
1、程序简介该程序是基于OpenHarmony标准系统编写的UI应用类:HelloOpenHarmony。本案例是基于API9接口开发。本案例已在O
OpenHarmony 明星开发板和应用招募启动,等你来!
板能够量产>1000pcs
报名企业至少有1款开发板或者商用设备通过OpenHarmony兼容性测试
报名企业可持续投入南向设备开发的人员大于5
满足条件的企业可下载报名表
发表于 09-14 15:21
【迅为RK3568开发板】OpenHarmony学习开发系列教程(第1期 北向基础篇一)
P1P0_先导课1:30
P2P1_OpenHarmony系统概述8:12
P3P2_OpenHarmony功能框架5:38
P4P3_
发表于 08-16 15:27
鸿蒙OpenHarmony南向/北向快速开发教程-迅为RK3568开发板
4.1学习之旅了吗?快来加入我们,一起探索鸿蒙4.1系统的无限魅力吧!
【北京迅为】OpenHarmony学习开发系列教程(第1期 北向基础篇一)
P0_先导课
P1_OpenHarmony
发表于 07-23 10:44
BK1661 全集成的单芯片 L1 频段 GNSS 解决方案
LDO
• 内置 DC-DC
• 低功耗:
L1 连续跟踪模式 : 12 mA
休眠待机模式 : 14 μA
外设接口
• 17 GPIOs
• 3x UART, 其中一个具备下载功能
• 1x I2C
发表于 06-03 09:40
BK1662 单芯片L1/L5双频GNSS解决方案
概 述
BK1662是完全集成的单芯片L1/L5双频GNSS解决方案,专为需要低功耗和高性能的应用而设计。
BK1662通过优化多频段和多模式信号跟踪、先进的抗多径技术和抗干扰射频前端,显著提高了
发表于 06-03 09:31
BK1616P 全集成的单芯片 L1 频段 GNSS 解决方案(高性价比FLASH版本)
BK1616P 是全集成的单芯片 L1 频段 GNSS 解决方案,专为需要低成本、低功耗和高性能的应用而设计。其可以实现优化的多模式信号跟踪。同时其实现了先进的抗多径和抗干扰射频前端,显著提高了实际
发表于 05-29 10:50
鸿蒙OS开发:典型页面场景【一次开发,多端部署】(功能开发)
应用开发至少包含两部分工作: UI页面开发和底层功能开发(部分需要联网的应用还会涉及服务端开发)。前面章节介绍了如何解决页面适配的问题,本章节主要介绍应用如何解决设备系统能力差异的兼容
OpenHarmony南向开发案例:【智能照相机】
基于Hi3516开发板,使用OpenHarmony3.0-LTS开发的应用。通过获取摄像头数据,实现预览拍照以及路视频等功能。并且通过后台AI服务识别唤醒词来进行语音控制拍照及录制视频
OpenHarmony南向能力征集令
1、适配过程中缺少哪些接口能力或者南向能力,需要OpenHarmony去补齐的?例如内核、编译、器件适配、单板适配等;
2、对标linux,需要OpenHarmony提供哪些能力?比如V4L
发表于 04-09 15:32
请问使用ST25R3916方案的NFC读卡器能否通过EMVCo 3.0 L1认证测试?
1.目前使用st25r3916方案的读卡器是否能顺利通过EMV3.0 L1测试?
2.有没有可以通过认证测试的套件并提供技术支持,或者提供样品定制开发验证服务?
3.其他型号推荐?
发表于 03-21 07:08
【OpenHarmony鸿蒙实战】在RK3399开发板实现智能门禁人脸识别
基于RK3399开发板,使用OpenHarmony3.0-LTS开发的应用。通过定时获取摄像头数据,实现人脸识别比对等功能。
评论