首页>动态>正文
焦点热文:[FFH]标准系统HDF平台驱动(三)——ADC应用实现
2023-05-07 07:18:57    来源:清一色财经

结合之前学的一些知识,设计一个基于NAPI框架和HDF框架读取温度传感器数据的程序应用。


(相关资料图)

​​想了解更多关于开源的内容,请访问:​​

​​清一色开源基础软件社区​​

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

前言

前面两篇文章已经实现了ADC的HDF框架接入,现在已经可以正常调用HDF提供的ADC统一驱动接口进行应用开发。结合之前学的一些知识,设计一个基于NAPI框架和HDF框架读取温度传感器数据的程序应用。

参考

​​平台驱动使用​​标准系统HDF平台驱动(一)——ADC驱动适配标准系统HDF平台驱动(二)——ADC平台驱动使用

环境

OpenHarmony-3.2-Beta5九联UnionPi-Tiger开发板Visual Studio Code(版本需1.62.0及以上)USB_Burning_Tool烧录工具napi_generator工具可执行文件或vs code插件Deveco Studio(API 9 )LM35线性模拟温度传感器

概述

开发步骤

一、编译构建实现

添加子系统。

"napisubsys":{    "path":"vendor/unionman/unionpi_tiger/sample/napi/napisubsys",    "name":"napisubsys"  }

添加组件,打开unionpi_tiger/sample/napi/napisubsys/ohos.build文件,在”parts”:中添加下列语句。

"adc_hdf": {            "variants": [                "phone"            ],            "module_list": [                "//vendor/unionman/unionpi_tiger/sample/napi/napisubsys/adc_hdf:adc_hdf"            ]        }

添加产品定义,打开vendor/unionman/unionpi_tiger/config.json文件,在”subsystems”:中添加下列语句。

{      "subsystem": "napisubsys",      "components": [        {          "component": "adc_hdf",          "features": []        }      ]    },

二、NAPI接口设计及NAPI框架生成

编写ts文件,新建文件@ohos.adc_hdf.d.ts于vendor/unionman/unionpi_tiger/sample/napi/napisubsys/adc_hdf目录下,声明应用接口函数get_adc_value,传入参数为通道号,返回值为ADC采样值,北向应用通过调用该接口获取的ADC采样值计算温度。

declare namespace adc_hdf {    function get_adc_value(channel: number): number;}export default adc_hdf;

生成NAPI框架,使用napi_generator可执行程序或者vscode插件生成NAPI框架。

生成框架路径也选择当前路径,number类型选择uint32_t。

三、NAPI接口实现

实现adc_hdf.cpp接口,文件生成结束后,我们定义的北向应用接口需要在adc_hdf.cpp中实现,具体代码如下:

#include "adc_hdf.h"#include "adc_if.h"#include "hdf_log.h"#include namespace adc_hdf {bool get_adc_value(NUMBER_TYPE_1& channel, NUMBER_TYPE_2& out){    int32_t ret;    DevHandle adcHandle = NULL;    uint32_t read_val = 0;    /* 打开ADC设备 */     adcHandle = AdcOpen(ADC_DEVICE_NUM);    if (adcHandle == NULL) {        printf("%s: Open ADC%u fail!", __func__, ADC_DEVICE_NUM);        return false;    }    /* 读取ADC采样值 */     ret = AdcRead(adcHandle, (uint32_t)channel, &read_val);    if (ret != HDF_SUCCESS) {        printf("%s: ADC read fail!:%d", __func__, ret);        AdcClose(adcHandle);        return false;    }    /* 结果返回值 */     out = (NUMBER_TYPE_2)read_val;    printf("ADC read:%d\r\n",read_val);    /* 访问完毕关闭ADC设备 */     AdcClose(adcHandle);    return true;}}

修改BUILD.gn文件,主要添加了ADC平台驱动所需依赖及头文件路径,并且修改目标子系统及所属部件,编译后会生成相应的.so共享库文件,存放在/system/lib/module目录下。

import("//build/ohos.gni")ohos_shared_library("adc_hdf"){    sources = [        "adc_hdf_middle.cpp",        "adc_hdf.cpp",        "tool_utility.cpp",    ]    include_dirs = [        ".",        "//third_party/node/src",        "//drivers/hdf_core/framework/include/platform"    ]    deps=[        "//foundation/arkui/napi:ace_napi",        "//drivers/hdf_core/adapter/uhdf2/platform:libhdf_platform"    ]    external_deps = [    "hdf_core:libhdf_utils",    "hiviewdfx_hilog_native:libhilog",    ]    remove_configs = [ "//build/config/compiler:no_rtti" ]    cflags=[    ]    cflags_cc=[        "-frtti",    ]    ldflags = [    ]        relative_install_dir = "module"    part_name = "adc_hdf"    subsystem_name = "napisubsys"}

四、编译打包烧录

进入源码根目录,执行如下命令进行编译:

./build.sh --product-name unionpi_tiger

编译完成后需要打包成可以给开发板烧录的镜像,执行一下命令:

./device/board/unionman/unionpi_tiger/common/tools/packer-unionpi.sh

固件打包完成,生成路径为编译根目录下的out/unionpi_tiger/packages/phone/images/OpenHarmony.img,下载或映射到Windows上进行烧录。

打开烧录工具,连接PC与开发板OTG口并接通电源,导入烧录包进行烧录。

或者使用hdc_std工具:

hdc_std shell mount -o remount,rw /hdc_std file send libadc_hdf.z.so /system/lib/module/

五、NAPI应用实现

新建OpenHarmony工程(stage+ArkTs)。

导入外部接口,adc_hdf为上述定义NAPI接口生成的动态库文件名字一致,直接导入会报找不到包,忽略即可,prompt为弹窗组件接口。

// @ts-ignoreimport adc_hdf from "@ohos.adc_hdf";import prompt from "@system.prompt"

ADC通道选择组件(使用Swiper滑块视图容器实现)。新建滑块视图数据类。

class MyDataSource implements IDataSource {  private list: string[] = []  private listener: DataChangeListener  constructor(list: string[]) {    this.list = list  }  totalCount(): number {    return this.list.length  }  getData(index: number): any {    return this.list[index]  }  registerDataChangeListener(listener: DataChangeListener): void {    this.listener = listener  }  unregisterDataChangeListener() {  }}

Swiper滑块视图容器组件,滑动或点击可以切换ADC通道,点击select进行数据采集。

//通道选择组件实现@Componentstruct channel_chose {  private swiperController: SwiperController = new SwiperController()  private data: MyDataSource = new MyDataSource([])  private channelNum: number = 2  private tmp: number = 1  @Link channel: number//导入轮播内容  aboutToAppear(): void {    let list = []    for (var i = 1; i <= this.channelNum; i++) {      list.push("ADC_" + i.toString());    }    this.data = new MyDataSource(list)  }  build() {    Column({ space: 5 }) {      Swiper(this.swiperController) {        LazyForEach(this.data, (item: string) => {          Text(item)            .borderRadius(10)            .width("80%")            .height(70)            .fontColor("#ff1a5ea4")            .fontWeight(FontWeight.Bolder)            .textAlign(TextAlign.Center)            .fontSize(30)        }, item => item)      }      .cachedCount(2)      .interval(4000)      .indicator(false)      .duration(1000)      .itemSpace(10)      .vertical(true)      .curve(Curve.Linear)      .onChange((index: number) => {        this.tmp = index + 1      })      Row({ space: 12 }) {        Button("Change").backgroundColor("#ff366fb1").fontSize(20).height(50).width(120)          .onClick(() => {            this.swiperController.showNext()          })        Button("Select").backgroundColor("#ff366fb1").fontSize(20).height(50).width(120)          .onClick(() => {            this.channel = this.tmp;            prompt.showToast({ message: "Select data From ADC_"+this.channel.toString() })            console.info("Select data From Channel_"+this.channel.toString())          })      }.margin(20)    }.width("50%")  }}

文本组件显示温度值。

@Componentstruct show_temperature{  @Link temperature: Number  build(){    Text(this.temperature.toFixed(1)+"°C")      .width("50%")      .fontSize(60)      .fontColor(Color.White)      .fontStyle(FontStyle.Italic)      .textAlign(TextAlign.Center)      .fontWeight(FontWeight.Bold)  }}

温度计算及首页内容组件,程序启动时开启定时器,每隔1s获取一次ADC温度值。

@Entry@Componentstruct Index {  @State channel: number = 1  @State adc_val: number = 0  @State temperature: number = 0  private  timerId: number = -1  //获取温度传感器ADC采样值并计算温度  private get_adc_value() {    let get_value = adc_hdf.get_adc_value(this.channel-1);    if (get_value <= 1500) {      this.adc_val = get_value;      this.temperature = (this.adc_val / 4096) * 1.8 * 100;    }    else {      this.temperature = 0      prompt.showToast({        message: "获取失败,请检查连线", // 显示文本        duration: 1000, // 显示时长      })    }  }  //程序运行时开启定时器Interval,每隔一秒调用get_adc_value更新温度值  aboutToAppear(): void {    this.timerId = setInterval(() => {      this.get_adc_value()    }, 1000)  }  //销毁定时器  aboutToDisappear() {    if (this.timerId > 0) {      clearTimeout(this.timerId)      this.timerId = -1    }  }  build() {    Row() {      show_temperature({temperature: $temperature})      Column({space:0}){        channel_chose({channel:$channel})      }.height("80%")    }.height("100%")    .backgroundImage($r("app.media.bg")).backgroundImageSize(ImageSize.Cover)  }}

应用签名。

安装应用到开发板。

结果演示

https://ost.51cto.com/show/22186

文章相关附件可以点击下面的原文链接前往下载:

https://ost.51cto.com/resource/2661

​​想了解更多关于开源的内容,请访问:​​

​​清一色开源基础软件社区​​

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

关键词:

焦点热文:[FFH]标准系统HDF平台驱动(三)——ADC应用实现

结合之前学的一些知识,设计一个基于NAPI框架和HDF框架读取温度传感器数据的程序应用。2023-05-07

世界球精选!周末错峰逛展 一起来“神遇”你心中的“大咖”

01:12告别“五一”人从众模式,看展正是好时机。周末即将到来,一大波内容丰富多元、含金量相当高的精品展2023-05-07

天天即时看!里弗斯批哈登无效传球 恩比德:他进攻不稳定 76人闹分歧记者拱火

里弗斯批哈登无效传球恩比德:他进攻不稳定76人闹分歧记者拱火,76人队,道格·里弗斯,詹姆斯·哈登,乔尔·恩2023-05-07

焦点日报:枭龙战机是我国和哪个国家研制的_枭龙战机是哪个国家的

1、中巴联合研制的,其实主要是咱们牵头,让卡巴斯基能跟着咱们学习技术、完事还能得到飞机。2、成功后主要2023-05-07

当前观察:巴菲特:英国阻止微软收购动视暴雪是“犯了一个错误”

巴菲特被问及,在英国监管机构阻止微软收购动视暴雪后,伯克希尔哈撒韦是否调整了其所持动视暴雪股份。他表2023-05-07

入夏后别瞎穿,不露肩不露腰,40岁女人这样打扮,时尚又高级

入夏后别瞎穿,不露肩不露腰,40岁女人这样打扮,时尚又高级,衬衫,露肩,穿搭,版型,入夏,阔腿裤,同色系,时尚2023-05-07

江西有哪些城市名单_江西有哪些城市-世界速递

1、感觉吉安比宜春要好,虽然都没去过。2、其他无异议。本文到此分享完毕,希望对大家有所帮助。2023-05-07

热点评!《浪姐4》品质回升,但能打的牌还多吗?

从品质上说,《浪姐4》的制作水准肉眼可见地回升,可夸的点很多:有人津津乐道真人秀的自然有趣,要被蔡少2023-05-06

绿色食品蔬菜_关于绿色食品蔬菜介绍_最新资讯

1、绿色食品蔬菜,按照绿色食品标准生产的蔬菜。2、是指遵循可持续发展原则,按特定生产方式生产,并经专门机2023-05-06

天天通讯!歌曲痒的作词作曲是谁_现在就为大家介绍

欢迎观看本篇文章,小升来为大家解答以上问题。歌曲痒的作词作曲是谁,现在就为大家介绍很多人还不知道,现2023-05-06

“十四五”时期我国将试点建设3至5条中国文物主题游径

文物主题游径是以不可移动文物为主干,以特定主题为主线,有机关联、串珠成链,集中展示专题历史文化的文化遗2023-05-06

环球热点!一杯没有明码标价的咖啡,你会支付多少钱?

02:16喝一杯没有明码标价的咖啡,你会支付多少钱?近日,杭州创业老兵吴裕炼和几个朋友开了一家“佛系”咖2023-05-06

节食不等于少吃 学会选择健康而富营养的食物

5月6日是国际不节食日,由一位经历过神经性厌食症之苦的英国青年提出,目的是希望人们学会欣赏自己的身体,2023-05-06

windows7安装方式(windows7安装方法)

如今,计算机的应用越来越广泛,这对工作和学习都非常重要。而且随着科技的进步,电脑的种类和品牌也在发生2023-05-06

安徽名胜古迹旅游景点 安徽名胜古迹旅游景点图片|环球热讯

1、黄山。黄山最出名的就是云海、奇松、怪石、温泉和雪景,奇松想必大家都知道,安徽旅游业的标志就是选自2023-05-06

『OMEGA 特邀专栏』丁之方:近于完美

从十八、十九世纪涌现的制表大师开始,机械表就一直在艰难地一步一步接近「完美」,但距离绝对的完美总是保2023-05-06

全球球精选!中国—中东欧经贸合作取得积极进展

中国—中东欧经贸合作取得积极进展(权威发布)  双向投资规模已接近两百亿美元  第三届中国—中东欧国家2023-05-06

(美银行危机.深度)4大危机缠身!加息将让美国大量银行破产_观天下

(美银行危机 深度)4大危机缠身!加息将让美国大量银行破产,加息,美联储,高通胀,金融危机,美银行危机,美国2023-05-06

世界动态:华中农业大学学者发布“油菜界的TAIR”— BnIR(油菜多组学数据库)

近日,华中农业大学信息学院杨庆勇教授课题组在国际学术期刊MolecularPlant上发表研究成果。该研究搜集并整2023-05-06

拼多多最新股权:创始人黄峥为最大股东持股26.5%

拼多多的最新股权结构曝光了。5月3日,拼多多日前向美国SEC递交了20-F文件。文件显示,截至2023年2月28日,2023-05-06

环球短讯!看剧||秦昊可能都不知道他演了一个人生中最好的角色

看剧||秦昊可能都不知道他演了一个人生中最好的角色2023-05-06

2022好用洁面乳十大品牌排行榜_好用洁面乳哪个牌子好

1、肌肤之钥 CPB2、资生堂 Shiseido3、兰蔻 Lancome4、海蓝之谜 LAMER5、SK-II6、迪奥2023-05-06

田间地头“大比拼” 插秧能手秀技能

5月5日,重庆市南川区鸣玉镇举行插秧技能大赛,参赛选手们在稻田里比拼插秧技艺。当日,鸣玉镇在稻香渔歌乡2023-05-06

成都欢乐谷起点音乐节门票价格2023 每日速看

起点校园音乐节门票无需额外单独购票,成都欢乐谷入园门票或年卡均可观看日场门票:230元 人夜场门票:1002023-05-06

完善学校突发事件应急管理机制研究_当前讯息

1、完善学校突发事件应急管理机制研究是一本2017年出版的图书。2、由经济科学出版社出版。本文到此分享完毕2023-05-06

滚动
资讯