精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

[FFH]標準系統HDF平臺驅動(三)——ADC應用實現

系統 OpenHarmony
結合之前學的一些知識,設計一個基于NAPI框架和HDF框架讀取溫度傳感器數據的程序應用。

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

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

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

前言

前面兩篇文章已經實現了ADC的HDF框架接入,現在已經可以正常調用HDF提供的ADC統一驅動接口進行應用開發。結合之前學的一些知識,設計一個基于NAPI框架和HDF框架讀取溫度傳感器數據的程序應用。

#創作者激勵# [FFH]標準系統HDF平臺驅動(三)——ADC應用實現-開源基礎軟件社區

參考

??平臺驅動使用??標準系統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": [
"http://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 <cstdio>

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("http://build/ohos.gni")

ohos_shared_library("adc_hdf")
{
sources = [
"adc_hdf_middle.cpp",
"adc_hdf.cpp",
"tool_utility.cpp",
]
include_dirs = [
".",
"http://third_party/node/src",
"http://drivers/hdf_core/framework/include/platform"
]
deps=[
"http://foundation/arkui/napi:ace_napi",
"http://drivers/hdf_core/adapter/uhdf2/platform:libhdf_platform"
]
external_deps = [
"hdf_core:libhdf_utils",
"hiviewdfx_hilog_native:libhilog",
]

remove_configs = [ "http://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口并接通電源,導入燒錄包進行燒錄。

#創作者激勵# [FFH]標準系統HDF平臺驅動(三)——ADC應用實現-開源基礎軟件社區

或者使用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-ignore
import 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進行數據采集。

//通道選擇組件實現
@Component
struct 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%')
}
}

文本組件顯示溫度值。

@Component
struct 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
@Component
struct 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

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

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

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

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

2023-03-20 16:21:26

ADC數字轉換器

2023-03-21 18:06:49

ADC數字轉換器

2022-09-13 16:10:15

鴻蒙操作系統

2023-09-14 15:49:42

PWM鴻蒙

2021-12-15 10:02:25

鴻蒙HarmonyOS應用

2022-10-12 15:14:08

開機動畫鴻蒙

2023-09-06 15:27:22

ADC鴻蒙

2021-11-30 14:52:41

鴻蒙HarmonyOS應用

2022-09-15 14:56:12

GDB調試鴻蒙

2022-04-02 20:45:04

Hi3516開發板操作系統鴻蒙

2022-12-28 09:30:07

鴻聯系統開發

2022-08-08 19:35:37

HDF驅動開發鴻蒙

2021-11-08 07:19:45

鴻蒙HarmonyOS應用

2021-09-16 15:04:28

鴻蒙HarmonyOS應用

2023-09-13 15:33:57

I2C鴻蒙

2022-06-10 14:37:24

鴻蒙操作系統

2021-01-21 13:27:37

鴻蒙HarmonyOS應用開發

2022-09-06 15:46:52

speexdsp鴻蒙

2022-09-16 15:01:37

操作系統技術鴻蒙

2022-09-07 15:08:58

操作系統鴻蒙
點贊
收藏

51CTO技術棧公眾號

亚洲一区二区日本| 亚洲精品自拍第一页| 午夜精品美女自拍福到在线| 国产一线在线观看| 国产精品伦理| 中文一区二区在线观看| 999国产在线| 久久美女免费视频| 亚洲欧洲二区| 午夜精品久久久久久久99樱桃 | 久久久蜜桃一区二区| 清纯唯美日韩| 亚洲电影中文字幕| 手机版av在线| 国产剧情av在线播放| 久久精品人人做人人综合 | 欧美激情一级欧美精品| 欧美大波大乳巨大乳| 1313精品午夜理伦电影| 欧美三级蜜桃2在线观看| 精品日产一区2区三区黄免费 | 亚洲av成人无码久久精品 | 欧美在线视频免费| 亚洲电影免费观看| 成人看片视频| 最近中文字幕在线观看视频| 国产精品xvideos88| 国产亚洲欧洲在线| 中国一级特黄录像播放 | 91在线看www| 波多野结衣午夜| 麻豆视频一区| 亚洲午夜三级在线| 致1999电视剧免费观看策驰影院| 深夜福利视频一区| 成人午夜激情视频| 成人国产精品一区| www.久久网| 国产精品普通话对白| 欧美激情一级精品国产| 精品自拍偷拍视频| 久久亚洲成人| 中文字幕日韩有码| 人人爽人人爽人人片| 神马电影久久| 亚洲品质视频自拍网| av无码一区二区三区| ccyy激情综合| 亚洲精品一区二区三区99| 在线观看视频在线观看| 老司机亚洲精品一区二区| 一区二区三区高清不卡| 亚洲AV无码成人精品一区| av资源种子在线观看| 久久一夜天堂av一区二区三区| 国产亚洲二区| 殴美一级特黄aaaaaa| 成人午夜激情片| 国产精品二区在线观看| 国产福利第一页| 国产成人免费在线| 成人在线观看网址| 一区二区不卡免费视频| www.久久久久久| 国产精品一区二区在线观看网站| 91人成网站www| 国产精品亚洲欧美在线播放| 国产一区二三区| 亚洲在线视频观看| 亚洲国产精品视频在线| 亚洲一区亚洲| 欧美最猛黑人xxxx黑人猛叫黄| 青青国产在线观看| 三级影片在线观看欧美日韩一区二区| 国产91在线播放精品91| 免费一级a毛片| 久久精品国产亚洲高清剧情介绍 | 亚洲成av人片在线观看www| 日韩欧美国产电影| 最近中文字幕无免费| 亚洲三级性片| 精品国产欧美一区二区五十路 | 国模无码视频一区| 亚洲人成亚洲精品| 色噜噜久久综合伊人一本| 91在线播放观看| 亚洲久久在线| 国产精品影院在线观看| 999av视频| 91在线视频18| 最新不卡av| 91超碰在线播放| 在线精品视频一区二区| 97中文字幕在线| 亚洲优女在线| 欧美精品自拍偷拍| 精品国产av色一区二区深夜久久 | 亚洲天堂男人av| 亚洲一级影院| 青青久久av北条麻妃海外网| 一区二区三区午夜| 99久久综合国产精品| 亚洲欧洲日本国产| www.色在线| 欧美喷潮久久久xxxxx| 亚洲欧美色婷婷| 久久久无码中文字幕久...| 国产乱码在线| 亚洲日本一区二区三区| 丝袜人妻一区二区三区| 肉肉视频在线观看| 日本高清成人免费播放| 亚洲精品乱码久久久久久9色| 天堂av一区二区三区在线播放| 中文字幕亚洲字幕| 久久久午夜影院| 国产一区二区看久久| 久久天天狠狠| 欧美四级在线| 欧美日韩精品电影| 丰满少妇高潮一区二区| 国内久久精品| 成人免费网站在线| 浮生影视网在线观看免费| 久久久综合视频| 男人天堂新网址| 456亚洲精品成人影院| 精品国产伦一区二区三区观看方式| 男人的天堂av网| 国产精品亚洲产品| 成人蜜桃视频| 1区2区3区在线视频| 欧美三区在线观看| 亚洲精品成人无码| 午夜一区二区三区不卡视频| 成人永久免费| 秋霞在线视频| 日韩欧美一级二级| 中文字幕五月天| 久久黄色级2电影| 少妇精品久久久久久久久久| 中文av在线全新| 亚洲国产精品电影在线观看| 国产999在线观看| 欧产日产国产v| 欧美激情第10页| 国产日本欧美一区| 国产黄色片免费观看| 国产精品第五页| 亚洲老女人av| 人人狠狠综合久久亚洲婷婷 | 色老太综合网| 日韩精品在线视频观看| 精品亚洲永久免费| 成人综合婷婷国产精品久久蜜臀| 337p亚洲精品色噜噜狠狠p| 免费观看在线一区二区三区| 久久av.com| 自拍偷拍欧美亚洲| 成人免费va视频| 男人插女人视频在线观看| 大桥未久女教师av一区二区| 欧美精品激情在线观看| 日本韩国在线观看| 大荫蒂欧美视频另类xxxx| 韩国无码一区二区三区精品| 国产精品久久久久久久久久妞妞| 麻豆精品视频| 成人av集中营| 久久不射热爱视频精品| 亚洲国产精品久久久久久久| 五月激情丁香一区二区三区| 欧美一级裸体视频| 日韩欧美国产精品综合嫩v| 成人疯狂猛交xxx| 影音先锋在线视频| 日韩av网站导航| 天天干天天操天天操| 欧美激情1区| 亚洲高清不卡在线| 亚洲av人人澡人人爽人人夜夜| 99亚洲一区二区| 日韩电影大全在线观看| 国产成人视屏| 性欧美视频videos6一9| 福利视频在线播放| 日韩欧美国产综合一区| 久久一区二区三区视频| 国产精品进线69影院| 扒开伸进免费视频| 日本va欧美va欧美va精品| 日本一区二区三区四区五区六区| 久久1电影院| 国产精品一区二区电影| 久草在线新免费首页资源站| 亚洲摸下面视频| 国产女无套免费视频| 欧美日韩国产丝袜美女| 久久久国产一级片| 不卡一区在线观看| 一级做a免费视频| 中日韩视频在线观看| 亚洲欧美影院| 国产乱论精品| 国产精品久久久久国产a级| 日韩一级片免费在线观看| 91黄视频在线| 国产亚洲第一页| 国产精品福利一区| 丰满少妇在线观看资源站| 国模一区二区三区白浆| 亚洲精品无人区| 国产人妖ts一区二区| 国产欧美日韩精品专区| 国产99在线| 久久影视电视剧免费网站清宫辞电视| 亚洲 欧美 激情 另类| 亚洲国产中文在线| 深夜精品寂寞黄网站在线观看| 亚洲免费黄色片| 欧美日韩在线播| 天堂а√在线中文在线新版| 亚洲激情自拍偷拍| 久久精品日韩无码| 国产欧美一区二区三区沐欲| 亚洲中文字幕无码av| 国产黄色成人av| 九九九九九国产| 日韩av网站在线观看| 午夜肉伦伦影院| 亚洲精品视频啊美女在线直播| 天堂av免费看| 全球成人免费直播| 视频一区视频二区视频三区高| 亚洲精品国产精品粉嫩| 国产区欧美区日韩区| 亚洲一区二区三区日本久久九| 91精品在线看| 视频欧美精品| 国产人妖伪娘一区91| 福利精品一区| 国产精品看片资源| 久久xxx视频| 国产精品成人av性教育| 日韩精品99| 国产a∨精品一区二区三区不卡| 麻豆免费在线| 91大神在线播放精品| 超碰资源在线| 久久99热精品| 丁香花在线观看完整版电影| 欧美激情性做爰免费视频| 国产探花视频在线观看| 久久久久久91香蕉国产| av中文在线资源库| 7m第一福利500精品视频| 三级在线观看视频| 日本高清不卡的在线| 欧美专区福利免费| 国产精品人人做人人爽| 欧美性www| 91在线观看免费观看| 一区二区日韩| 精品一区二区视频| 免费成人蒂法| 日本亚洲欧洲精品| 欧美岛国激情| 国产一区 在线播放| 欧美国产日本| 久久视频这里有精品| 免费视频一区| 日韩av卡一卡二| 亚洲国产日本| 欧美视频在线播放一区| 日韩激情一区二区| 欧美视频亚洲图片| 成人av资源网站| 播金莲一级淫片aaaaaaa| 欧美激情在线一区二区三区| av成人免费网站| 精品久久久国产| 日韩乱码一区二区三区| 欧美一卡二卡在线观看| 蜜臀av午夜精品| 亚洲天堂精品在线| 91麻豆一二三四在线| 激情成人综合| 97在线中文字幕| 亚洲婷婷伊人| 中文字幕精品在线播放| 一区二区精品| 五月天视频在线观看| 成a人片国产精品| 大胸美女被爆操| 亚洲一区二区精品久久av| 综合网在线观看| 91超碰这里只有精品国产| 日本高清视频免费观看| 日韩中文字幕在线精品| caoporn视频在线| 国产精品视频午夜| 麻豆视频一区| 中文字幕精品在线播放| 日韩高清一区在线| 成人区人妻精品一区二| 国产精品视频九色porn| 91精品国产乱码在线观看| 欧美日韩高清一区二区不卡| 四虎永久在线观看| 插插插亚洲综合网| 国产一区一一区高清不卡| 国产精品一区而去| 亚洲精品久久久| 99视频免费播放| 成人精品视频一区二区三区尤物| 林心如三级全黄裸体| 欧美视频精品一区| 成人免费视频国产| 久久久久www| 国产成人精选| 欧美日韩精品免费在线观看视频| 欧美激情极品| 中文字幕中文字幕在线中一区高清 | 四虎成人免费影院| 高跟丝袜一区二区三区| 亚洲成熟女性毛茸茸| 北条麻妃久久精品| 在线看欧美视频| 欧美精品v日韩精品v国产精品| 在线国产日韩| 免费欧美一级片| 亚洲色大成网站www久久九九| 中国女人真人一级毛片| 亚洲系列中文字幕| 欧美三级网址| 欧美日韩国产一二| 亚洲永久网站| 中文字幕人妻一区二区三区| 一区二区三区不卡在线观看| 91极品身材尤物theporn| 中文字幕亚洲天堂| 欧美黄页在线免费观看| 一级二级三级欧美| 久久电影国产免费久久电影| 91视频免费看片| 欧美日韩综合在线免费观看| 搞黄视频在线观看| 国产精品激情自拍| 欧美呦呦网站| 天天综合网久久| 亚洲手机成人高清视频| 国产美女永久免费| 九九热99久久久国产盗摄| 日韩高清在线观看一区二区| 丰满人妻一区二区三区53号| 国产电影一区在线| 国产精品不卡av| 日韩国产欧美区| 久久野战av| 丁香另类激情小说| 二区三区四区视频| 欧美一卡在线观看| av福利在线导航| 精品伊人久久大线蕉色首页| 香蕉国产精品偷在线观看不卡| 欧美做受xxxxxⅹ性视频| 欧美在线观看你懂的| 美女写真理伦片在线看| 99re在线国产| 亚洲一区观看| 精品一区二区6| 日韩女同互慰一区二区| 日本а中文在线天堂| 日韩国产高清一区| 国产精品一区二区三区网站| 国产无套粉嫩白浆内谢| 国产香蕉97碰碰久久人人| 97精品资源在线观看| 亚洲精品久久久久久久蜜桃臀| 日韩精品一二三区| 成人性视频免费看| 日韩欧美第一区| 国模套图日韩精品一区二区| 一区二区日本伦理| 成人免费高清视频在线观看| 波多野结衣黄色网址| 久久亚洲精品一区| 人妖一区二区三区| 手机av在线网| 黑人巨大精品欧美一区二区| 亚洲成人三级| 国产区日韩欧美| 精品一二三四在线| 成人免费看片98欧美| 啊v视频在线一区二区三区 | 日韩欧美一级在线播放| 一级毛片久久久| 成人免费a级片| 国产精品欧美一区喷水| 天堂在线中文|