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 NAPI框架控制板端LED

電子發(fā)燒友開(kāi)源社區(qū) ? 來(lái)源:未知 ? 2022-11-01 09:25 ? 次閱讀

前言: 自己一直是板端開(kāi)發(fā)也就是南向開(kāi)發(fā),對(duì)于北向應(yīng)用端開(kāi)發(fā)一直是個(gè)短板,九聯(lián)提供的開(kāi)發(fā)板對(duì)南北向開(kāi)發(fā)過(guò)程提供了樣例,非常感興趣這一部分,如何實(shí)現(xiàn),下面就自己根據(jù)樣例實(shí)現(xiàn)開(kāi)發(fā)板上使用APP控制板端接口來(lái)學(xué)習(xí)。下面根據(jù)Openharmony NAPI框架實(shí)現(xiàn)GPIO接口。

一、開(kāi)發(fā)環(huán)境

  • 搭載OpenHarmony-3.2-Beat2版本的九聯(lián)開(kāi)發(fā)板。

  • Ubuntu20.04虛擬機(jī)。

  • USB_Burning_Tool燒錄工具。

  • 自己準(zhǔn)備LED燈及接口線。

以上除4部分,其他都在前面的帖子中搭建完成。第4部分自己準(zhǔn)備幾根杜邦線和幾個(gè)LED燈。

二、NAPI框架簡(jiǎn)介

NAPI(Native API)是OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的一種JS API實(shí)現(xiàn)機(jī)制,適合封裝IO、CPU密集型、OS底層等能力并對(duì)外暴露JS接口,實(shí)現(xiàn)JS與C/C++代碼互相訪問(wèn)。

a7832782-5983-11ed-a3b6-dac502259ad0.png

三、實(shí)現(xiàn)NAPI擴(kuò)展庫(kù)

1、創(chuàng)建NAPI擴(kuò)展庫(kù)

新增子系統(tǒng)napisubsys在OpenHarmony源碼目錄下創(chuàng)建一個(gè)目錄napisubsys作為子系統(tǒng)目錄(子系統(tǒng)可以在OpenHarmony源碼目錄任意位置),目前創(chuàng)建在九聯(lián)開(kāi)發(fā)板目錄下sample/napi目錄下,具體相對(duì)OpenHarmony目錄為vendor/unionman/unionpi_tiger/sample/napi/napisubsys,在創(chuàng)建的目錄下新建ohos.build文件,構(gòu)建時(shí)會(huì)先讀取這個(gè)文件。將新增子系統(tǒng)配置到OpenHarmony目錄下的build/subsystem_config.json文件中參與編譯。subsystem_config.json增加如下代碼:

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

(左右移動(dòng)查看全部?jī)?nèi)容)

2、新增gpioled_part組件

在子系統(tǒng)napisubsys目錄下創(chuàng)建一個(gè)子組件目錄gpioled_part,打開(kāi)napisubsys目錄下的ohos.build文件,在"parts":中添加下列語(yǔ)句:

"gpioled_part": {
  "variants": [
    "phone"
  ],
  "module_list": [    "http://vendor/unionman/unionpi_tiger/sample/napi/napisubsys/gpioled_part/gpioled_demo:gpioled"
  ]
}

(左右移動(dòng)查看全部?jī)?nèi)容)

3、新增擴(kuò)展動(dòng)態(tài)庫(kù)

在組件目錄gpioled_part下面新建gpioled_demo目錄,作為NAPI擴(kuò)展庫(kù)的代碼目錄。在gpioled_demo目錄下創(chuàng)建gpioled.cpp和BUILD.gn文件,編寫(xiě)構(gòu)建配置也即BUILD.gn文件內(nèi)容如下:

import("http://build/ohos.gni")
ohos_shared_library("gpioled") {
include_dirs = [ "http://foundation/ace/napi/interfaces/kits" ]
sources = [
"gpioled.cpp",
"um_gpio.c",
]
deps = [
"http://foundation/ace/napi:ace_napi",
"http://utils/native/base:utils",
]
external_deps = [ "hiviewdfx_hilog_native:libhilog" ]
relative_install_dir = "module"
subsystem_name = "napisubsys"
part_name = "gpioled_part"
}

(左右移動(dòng)查看全部?jī)?nèi)容)

4、將組件添加到產(chǎn)品定義中

打開(kāi)vendor/unionman/unionpi_tiger/config.json文件,在“subsystems”:中添加如下語(yǔ)句:

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

(左右移動(dòng)查看全部?jī)?nèi)容)

四、NAPI接口開(kāi)發(fā)

模塊注冊(cè)

1)添加NAPI框架頭文件,引入框架提供的方法。

#include "napi/native_api.h"
#include "napi/native_node_api.h"

(左右移動(dòng)查看全部?jī)?nèi)容)

2)定義模塊。

3)注冊(cè)模塊,加載動(dòng)態(tài)庫(kù)時(shí)自動(dòng)調(diào)用注冊(cè)。

/*
* 模塊定義
 */


static napi_module gpioled_demoModule = {
.nm_version = 1,
.nm_flags = 0,
.nm_filename = nullptr,
.nm_register_func = registerGpioLed_DemoApis,
.nm_modname = "gpioled_demo", //模塊名
.nm_priv = ((void *) 0),
.reserved = {0},
};


/*


* 注冊(cè)模塊
 */
 extern "C" __attribute__((constructor)) void RegisterGpioLed_DemoModule(void) {
 napi_module_register(&gpioled_demoModule); //接口注冊(cè)函數(shù)
 }

(左右移動(dòng)查看全部?jī)?nèi)容)

使用DECLARE_NAPI_FUNCTION("js函數(shù)名", c++實(shí)現(xiàn)函數(shù)名)定義接口函數(shù)、DECLARE_NAPI_PROPERTY、 DECLARE_NAPI_STATIC_PROPERTY等定義屬性,再通過(guò)napi_define_properties賦給exports對(duì)象,最后返回exports對(duì)象。

/*
* 注冊(cè)接口
 */


static napi_value registerGpioLed_DemoApis(napi_env env, napi_value exports) {
napi_value gpioValHigh = gpioValHigh;
napi_value gpioValLow = nullptr;
napi_create_int32(env, UM_GPIO_HIGH_LEVE, &gpioValHig);
napi_create_int32(env, UM_GPIO_LOW_LEVE, &gpioValLow);
napi_property_descriptor desc[] = {
DECLARE_NAPI_FUNCTION("setLedStatusWithCallback", setLedStatusWithCallback),
DECLARE_NAPI_FUNCTION("getLedStatusWithCallback", getLedStatusWithCallback),
DECLARE_NAPI_FUNCTION("setLedStatusWithPromise", setLedStatusWithPromise),
DECLARE_NAPI_FUNCTION("getLedStatusWithPromise", getLedStatusWithPromise),
DECLARE_NAPI_FUNCTION("setLedStatus", setLedStatus),
DECLARE_NAPI_FUNCTION("getLedStatus", getLedStatus),
DECLARE_NAPI_STATIC_PROPERTY("LED_ON", gpioValHigh),
DECLARE_NAPI_STATIC_PROPERTY("LED_OFF", gpioValLow),
};
NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
return exports;
}

(左右移動(dòng)查看全部?jī)?nèi)容)

具體實(shí)現(xiàn)代碼可去代碼倉(cāng)庫(kù)進(jìn)行下載學(xué)習(xí)。

修改deviceoardunionmanunionpi_tigerconfiginitarminit.A311D.cfg 文件,在cmds中添加相關(guān)命令

"write /sys/class/gpio/export 380",
"write /sys/class/gpio/export 381",
"write /sys/class/gpio/export 382",
"write /sys/class/gpio/export 383",
"write /sys/class/gpio/export 384",
"write /sys/class/gpio/export 385",
"write /sys/class/gpio/export 386",
"write /sys/class/gpio/export 387",
"write /sys/class/gpio/export 388",
"write /sys/class/gpio/export 389",
"chmod 666 /sys/class/gpio/gpio380/direction",
"chmod 666 /sys/class/gpio/gpio381/direction",
"chmod 666 /sys/class/gpio/gpio382/direction",
"chmod 666 /sys/class/gpio/gpio383/direction",
"chmod 666 /sys/class/gpio/gpio384/direction",
"chmod 666 /sys/class/gpio/gpio385/direction",
"chmod 666 /sys/class/gpio/gpio386/direction",
"chmod 666 /sys/class/gpio/gpio387/direction",
"chmod 666 /sys/class/gpio/gpio388/direction",
"chmod 666 /sys/class/gpio/gpio389/direction",
"chmod 666 /sys/class/gpio/gpio380/value",
"chmod 666 /sys/class/gpio/gpio381/value",
"chmod 666 /sys/class/gpio/gpio382/value",
"chmod 666 /sys/class/gpio/gpio383/value",
"chmod 666 /sys/class/gpio/gpio384/value",
"chmod 666 /sys/class/gpio/gpio385/value",
"chmod 666 /sys/class/gpio/gpio386/value",
"chmod 666 /sys/class/gpio/gpio387/value",
"chmod 666 /sys/class/gpio/gpio388/value",
"chmod 666 /sys/class/gpio/gpio389/value"

(左右移動(dòng)查看全部?jī)?nèi)容)

五、Ubuntu下進(jìn)行編譯NAPI

將以上文件修改完成后,編譯鏡像文件,前面帖子中已有編譯方法,自行查閱,如有問(wèn)題帖子留言,我會(huì)進(jìn)行回答。進(jìn)入到Ubuntu下進(jìn)行編譯,編譯指令如下:

./build.sh --product-name unionpi_tiger –ccache

(左右移動(dòng)查看全部?jī)?nèi)容)

編譯完成如下圖所示:

a79cb5bc-5983-11ed-a3b6-dac502259ad0.png

編譯完成后需要,進(jìn)行對(duì)鏡像進(jìn)行打包,然后進(jìn)行燒寫(xiě)。執(zhí)行以下命令固件打包

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

(左右移動(dòng)查看全部?jī)?nèi)容)

打包完成如下圖所示,打包最終燒錄程序目錄為out/unionpi_tiger/packages/phone/images/OpenHarmony.img

a7c371a2-5983-11ed-a3b6-dac502259ad0.png

打開(kāi)燒錄工具,使用Micro USB數(shù)據(jù)線連接PC與開(kāi)發(fā)板OTG口并接通電源,導(dǎo)入燒錄包后開(kāi)始燒錄即可(可關(guān)閉校驗(yàn)IMG)。具體如何燒錄可參考我的其他博文。

六、應(yīng)用程序編譯

打開(kāi)DevEco Studio 3.0.0.993版本的軟件,打開(kāi)vendor_unionman/unionpi_tiger/sample/app/gpioled_app/gpioled-javascript目錄,如下圖所示程序代碼

a81df35c-5983-11ed-a3b6-dac502259ad0.png

將目錄vendor_unionman/unionpi_tiger/sample/napi/napisubsys下的@ohos.gpioled.d.ts文件拷貝到OpenHarmony的SDK下面,如圖所示具體路徑:

a8325e0a-5983-11ed-a3b6-dac502259ad0.png

設(shè)置自動(dòng)簽名,如圖所示:

a8591414-5983-11ed-a3b6-dac502259ad0.png

編譯Hap文件,如下圖所示:

a86c344a-5983-11ed-a3b6-dac502259ad0.png

將編譯后的hap文件拷貝到USB中,因SDK中的hdc_std.exe不運(yùn)行,用USB安裝應(yīng)用程序了,文件如下圖所示,可自行修改文件名。

a88ea4bc-5983-11ed-a3b6-dac502259ad0.png

七、板端安裝應(yīng)用控制LED燈

將USB插入U(xiǎn)SB3.0接口,串口端顯示如下所示:

a8c0bc4a-5983-11ed-a3b6-dac502259ad0.png

掛載/dev/block/sda1到/mnt/usb目錄,如果沒(méi)有/mnt/usb目錄進(jìn)行自建,運(yùn)行如下命令進(jìn)行安裝hap,如圖所示:

bm install -p 包名.hap

(左右移動(dòng)查看全部?jī)?nèi)容)

a8d5b94c-5983-11ed-a3b6-dac502259ad0.png

安裝后屏幕界面如圖所示:

a9216f5e-5983-11ed-a3b6-dac502259ad0.png

連接GPIO_05到LED的正極,如下圖所示:

a94adf24-5983-11ed-a3b6-dac502259ad0.png

打開(kāi)gpioled的app運(yùn)行如視頻所示。

弄了hdc_std.exe,但它不運(yùn)行,有問(wèn)題。正在查找問(wèn)題。有了hdc,直接連接板子OTG將hap運(yùn)行到板子上看app效果,可以看調(diào)試信息,一口兩用。

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

更多熱點(diǎn)文章閱讀

END

想了解更多開(kāi)源技術(shù)?后臺(tái)留言,立刻安排!

就喜歡獎(jiǎng)勵(lì)一個(gè)“”和“在看”唄~


原文標(biāo)題:基于OpenHarmony NAPI框架控制板端LED

文章出處:【微信公眾號(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)投訴
  • led
    led
    +關(guān)注

    關(guān)注

    240

    文章

    23001

    瀏覽量

    654971
  • NAPIT
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    2123
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3613

    瀏覽量

    15986

原文標(biāo)題:基于OpenHarmony NAPI框架控制板端LED

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    使用NAPI實(shí)現(xiàn)openharmony APP網(wǎng)絡(luò)開(kāi)發(fā)的接口

    1.設(shè)計(jì)背景當(dāng)前openharmony標(biāo)準(zhǔn)系統(tǒng)通過(guò) JS、eTS 開(kāi)發(fā)貌似還沒(méi)支持網(wǎng)絡(luò)開(kāi)發(fā)的接口,故JS、eTS方式開(kāi)發(fā)只能通過(guò)NAPI調(diào)用C/C++才能使用到網(wǎng)絡(luò),本次我就使用NAPI開(kāi)發(fā)
    發(fā)表于 04-02 09:56

    【潤(rùn)和軟件DAYU200開(kāi)發(fā)體驗(yàn)】三方庫(kù)移植之NAPI開(kāi)發(fā)[1]—Hello OpenHarmony NAPI

    本文通過(guò)一個(gè)Hello OpenHarmony NAPI樣例講述了NPAI接口開(kāi)發(fā)基礎(chǔ)知識(shí)。開(kāi)發(fā)基于最新的OpenHarmony3.2Beta3版本及其對(duì)應(yīng)SDK。標(biāo)準(zhǔn)系統(tǒng)開(kāi)發(fā)為潤(rùn)和
    發(fā)表于 10-06 22:27

    【九聯(lián)科技Unionpi Tiger開(kāi)發(fā)試用體驗(yàn)】基于OpenHarmony NAPI框架控制板LED

    前言: 自己一直是開(kāi)發(fā)也就是南向開(kāi)發(fā),對(duì)于北向應(yīng)用開(kāi)發(fā)一直是個(gè)短板,九聯(lián)提供的開(kāi)發(fā)對(duì)南北向開(kāi)發(fā)過(guò)程提供了樣例,非常感興趣這一部分,如何實(shí)現(xiàn),下面就自己根據(jù)樣例實(shí)現(xiàn)開(kāi)發(fā)
    發(fā)表于 10-28 18:46

    OpenHarmonyNAPI框架介紹

    NAPI OpenAtom OpenHarmony(以下簡(jiǎn)稱“OpenHarmony”)應(yīng)用層基于 javascript 語(yǔ)言開(kāi)發(fā),而系統(tǒng)框架層則基于 C++語(yǔ)言。它們之間需要一個(gè)
    發(fā)表于 11-23 15:36

    遙控LED數(shù)碼顯示屏控制板的應(yīng)用制作

    目錄 通用遙控LED數(shù)碼顯示屏控制板的應(yīng)用制作 通用遙控LED數(shù)碼顯示屏控制板的結(jié)構(gòu)和功能 主控制板原理 應(yīng)用示例 遙控大屏幕電子鐘 遙控大
    發(fā)表于 04-17 16:46 ?175次下載

    控制板的分類

    本視頻主要詳細(xì)介紹了控制板的分類,分別是工業(yè)控制板、電機(jī)控制板、家電控制板、醫(yī)療器械控制板、汽車電子控制
    的頭像 發(fā)表于 01-06 10:15 ?7131次閱讀

    控制板是什么

    控制板也是一種,其運(yùn)用的范圍雖不如電路來(lái)的寬泛,但卻比普通的電路來(lái)的智能、自動(dòng)化。簡(jiǎn)單的說(shuō),能起到控制作用的電路,才可稱為
    的頭像 發(fā)表于 05-08 15:14 ?8805次閱讀

    控制板是什么_控制板的作用是什么

    控制板也是一種電路,其運(yùn)用的范圍雖不如電路來(lái)的寬泛,但卻比普通的電路來(lái)的智能、自動(dòng)化。簡(jiǎn)單的說(shuō),能起到控制作用的電路
    發(fā)表于 05-20 17:09 ?1.6w次閱讀

    FANSEA泛海微單片機(jī)MCU芯片LED化妝鏡控制板開(kāi)發(fā)

    FS2722 LED化妝鏡控制板1、LED化妝鏡控制板,F(xiàn)S2722 三擋觸摸調(diào)光LED臺(tái)燈控制板
    發(fā)表于 12-08 18:51 ?6次下載
    FANSEA泛海微單片機(jī)MCU芯片<b class='flag-5'>LED</b>化妝鏡<b class='flag-5'>控制板</b>開(kāi)發(fā)

    【潤(rùn)和軟件DAYU200開(kāi)發(fā)體驗(yàn)】三方庫(kù)移植之NAPI開(kāi)發(fā)[1]—Hello OpenHarmony NAPI

    NAPI樣例講述了NPAI接口開(kāi)發(fā)基礎(chǔ)知識(shí)。開(kāi)發(fā)基于最新的OpenHarmony3.2Beta3版本及其對(duì)應(yīng)SDK。標(biāo)準(zhǔn)系統(tǒng)開(kāi)發(fā)為潤(rùn)和軟件dayu200。(附開(kāi)發(fā)體驗(yàn)完整視頻,詳
    的頭像 發(fā)表于 10-12 10:38 ?1902次閱讀
    【潤(rùn)和軟件DAYU200開(kāi)發(fā)<b class='flag-5'>板</b>體驗(yàn)】三方庫(kù)移植之<b class='flag-5'>NAPI</b>開(kāi)發(fā)[1]—Hello <b class='flag-5'>OpenHarmony</b> <b class='flag-5'>NAPI</b>

    ch32控制板是什么?

    ch32控制板是什么?? Ch32控制板是一種用于電路控制的板卡,它可以實(shí)現(xiàn)對(duì)電路中各種元器件的控制以及電路中數(shù)據(jù)的采集和處理,是實(shí)現(xiàn)智能控制
    的頭像 發(fā)表于 08-22 15:48 ?1251次閱讀

    教程分享!OpenHarmonyNAPI框架介紹

    是 C++語(yǔ)言實(shí)現(xiàn)的,這些接口可以幫助 C++代碼創(chuàng)建 JS 變量,或訪問(wèn) JavaScript 運(yùn)行環(huán)境中的 JS 變量與方法。 OpenHarmony 中的 NAPI OpenAtom OpenHarmony(以下簡(jiǎn)稱“
    的頭像 發(fā)表于 11-30 12:15 ?1243次閱讀
    教程分享!<b class='flag-5'>OpenHarmony</b>之<b class='flag-5'>NAPI</b><b class='flag-5'>框架</b>介紹

    鴻蒙OpenHarmony NAPI技術(shù)-基礎(chǔ)學(xué)習(xí)

    NAPI(Native API)是OpenHarmony系統(tǒng)中的一套原生模塊擴(kuò)展開(kāi)發(fā)框架,它基于Node.js N-API規(guī)范開(kāi)發(fā),為開(kāi)發(fā)者提供了JavaScript與C/C++模塊之間相互調(diào)用的交互能力??梢栽贜odeJs官網(wǎng)
    的頭像 發(fā)表于 01-19 16:57 ?846次閱讀
    鴻蒙<b class='flag-5'>OpenHarmony</b> <b class='flag-5'>NAPI</b>技術(shù)-基礎(chǔ)學(xué)習(xí)

    OpenHarmonyNAPI 框架介紹

    環(huán)境中的 JS 變量與方法。 OpenHarmony 中的 NAPI OpenAtom OpenHarmony(以下簡(jiǎn)稱 “OpenHarmony”)應(yīng)用層基于 javascript
    的頭像 發(fā)表于 02-01 17:34 ?596次閱讀
    <b class='flag-5'>OpenHarmony</b> 之 <b class='flag-5'>NAPI</b> <b class='flag-5'>框架</b>介紹

    【鴻蒙】NAPI 框架生成工具實(shí)現(xiàn)流程

    NAPI 框架生成工具 可以根據(jù)用戶指定路徑下的 ts(typescript)接口文件一鍵生成 NAPI 框架代碼、業(yè)務(wù)代碼框架、GN 文件
    的頭像 發(fā)表于 02-28 17:00 ?591次閱讀
    【鴻蒙】<b class='flag-5'>NAPI</b> <b class='flag-5'>框架</b>生成工具實(shí)現(xiàn)流程