成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

小熊派添加自定義JS API接口流程(以點亮LED為例)

原創
系統 OpenHarmony
本文便介紹了如何自定義JS API從而調用自己開發的驅動。

??想了解更多內容,請訪問:??

??51CTO和華為官方合作共建的鴻蒙技術社區??

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

一、前言

之前我們開發了小熊派的LED燈驅動,并且編寫了相應的代碼調用自己的開發驅動,但是自己寫的代碼只能在終端以命令的形式調用,顯然這樣十分的不太友好。假設小熊派是我們的一個智能設備,這個LED是我們的手電筒,通過命令行的形式打開手電筒肯定不是我們所期待的,我們更希望能夠在圖像界面上點一個按鈕從而打開我們的手電筒,而目前OpenHarmony大多數采用JS開發應用,如果我們想要在圖形界面上打開我們的手電筒,就需要自己定義一個JS的API接口來調用我們的LED。本文便介紹了如何自定義JS API從而調用自己開發的驅動。

二、流程總覽

添加JS API接口–>編寫接口代碼–>配置HDF頭文件路徑–>添加編譯依賴

三、添加JS API接口

打開文件foundation\ace\ace_engine_lite\frameworks\src\core\modules\app_module.h,在32行處添加如下代碼

static JSIValue ToggleLed(const JSIValue thisVal, const JSIValue* args, uint8_t argsNum);

如圖所示

在65行處添加如下代碼

JSI::SetModuleAPI(exports, "ledcontrol", AppModule::ToggleLed);

四、編寫對應的驅動代碼

打開foundation\ace\ace_engine_lite\frameworks\src\core\modules\app_module.cpp文件,需要在兩個位置添加我們自己API的代碼

4.1添加頭文件

在頭文件導入處添加如下頭文件

#include "hdf_sbuf.h"
#include "hdf_io_service_if.h"

#define LED_WRITE_READ 1
#define LED_SERVICE "hdf_led"

如圖所示

4.2添加API的代碼

在適當位置加入以下代碼,建議在JSIValue AppModule::GetInfo函數之前

static int OnDevEventReceived(void *priv, uint32_t id, struct HdfSBuf *data)
{
uint32_t value;
HdfSbufReadUint32(data, &value);
HILOG_ERROR(HILOG_MODULE_ACE,"%s: dev event received: %u %u\n", (char *)priv, id, value);

return HDF_SUCCESS;
}

static int GpioWriteRead(struct HdfIoService *serv, int32_t eventData, int32_t *val)
{
int ret = HDF_FAILURE;
struct HdfSBuf *data = HdfSBufObtainDefaultSize();
struct HdfSBuf *reply = HdfSBufObtainDefaultSize();

if (data == NULL || reply == NULL) {
HILOG_ERROR(HILOG_MODULE_ACE,"fail to obtain sbuf data\n");
return ret;
}

if (!HdfSbufWriteUint8(data, (uint8_t)eventData))
{
HILOG_ERROR(HILOG_MODULE_ACE,"fail to write sbuf\n");
HdfSBufRecycle(data);
HdfSBufRecycle(reply);
return ret;
}

ret = serv->dispatcher->Dispatch(&serv->object, LED_WRITE_READ, data, reply);
if (ret != HDF_SUCCESS)
{
HILOG_ERROR(HILOG_MODULE_ACE,"fail to send service call\n");
HdfSBufRecycle(data);
HdfSBufRecycle(reply);
return ret;
}
if (!HdfSbufReadInt32(reply, val))
{
HILOG_ERROR(HILOG_MODULE_ACE,"fail to get service call reply\n");
ret = HDF_ERR_INVALID_OBJECT;
HdfSBufRecycle(data);
HdfSBufRecycle(reply);
return ret;
}
HILOG_ERROR(HILOG_MODULE_ACE,"Get reply is: %d\n", val);

HdfSBufRecycle(data);
HdfSBufRecycle(reply);
return ret;
}

JSIValue AppModule::ToggleLed(const JSIValue thisVal, const JSIValue *args, uint8_t argsNum)
{
HILOG_ERROR(HILOG_MODULE_ACE, "led button pressed.");

struct HdfIoService *serv = HdfIoServiceBind(LED_SERVICE);
if (serv == NULL)
{
HILOG_ERROR(HILOG_MODULE_ACE,"fail to get service2 %s\n", LED_SERVICE);
return JSI::CreateUndefined();
}

if ((args == nullptr) || (argsNum == 0) || (JSI::ValueIsUndefined(args[0]))) {
return JSI::CreateUndefined();
}

JSIValue success = JSI::GetNamedProperty(args[0], CB_SUCCESS);
JSIValue fail = JSI::GetNamedProperty(args[0], CB_FAIL);
JSIValue complete = JSI::GetNamedProperty(args[0], CB_COMPLETE);

int32_t num = (int32_t)JSI::GetNumberProperty(args[0], "code");

int32_t replyData = 0;

if (GpioWriteRead(serv, num, &replyData))
{
HILOG_ERROR(HILOG_MODULE_ACE,"fail to send event\n");
JSI::CallFunction(fail, thisVal, nullptr, 0);
JSI::CallFunction(complete, thisVal, nullptr, 0);
JSI::ReleaseValueList(success, fail, complete);
return JSI::CreateUndefined();
}

JSIValue result = JSI::CreateObject();
JSI::SetNumberProperty(result, "led_status", replyData);

JSIValue argv[ARGC_ONE] = {result};
JSI::CallFunction(success, thisVal, argv, ARGC_ONE);
JSI::CallFunction(complete, thisVal, nullptr, 0);
JSI::ReleaseValueList(success, fail, complete, result);

HdfIoServiceRecycle(serv);

return JSI::CreateUndefined();
}

代碼推薦添加位置如圖所示

五、配置HDF頭文件路徑

打開foundation\ace\ace_engine_lite\ace_lite.gni文件,在大約80行處添加如下配置

ace_lite_include_dirs += [
"http://drivers/framework/ability/sbuf/include",
"http://drivers/framework/include/core",
"http://drivers/framework/include/utils",
"http://drivers/adapter/uhdf/posix/include",
]

![](C:\Users\33124\Desktop\博客素材\小熊派開發JS API\HDF配置.png)

六、添加編譯依賴

打開foundation\ace\ace_engine_lite\frameworks\BUILD.gn,在public_deps中添加以下代碼

"http://drivers/adapter/uhdf/manager:hdf_core",

打開foundation\ace\ace_engine_lite\test\ace_test_config.gni,在extra_deps中添加以下代碼

"http://drivers/adapter/uhdf/manager:hdf_core",

??想了解更多內容,請訪問:??

??51CTO和華為官方合作共建的鴻蒙技術社區??

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


責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2022-02-25 14:33:03

JS接口鴻蒙應用開發

2022-02-14 14:28:57

驅動開發鴻蒙系統

2022-02-16 15:55:21

驅動調用操作系統鴻蒙

2019-09-06 14:51:40

Python數據庫腳本語言

2016-12-20 12:34:46

存儲MySQL流程

2015-02-12 15:33:43

微信SDK

2015-02-12 15:38:26

微信SDK

2009-07-22 15:27:39

ASP.NET MVC自定義路由

2013-01-10 09:36:19

NagiosNagios插件

2013-04-10 18:40:59

微信公眾平臺接口開發

2021-09-15 10:19:15

鴻蒙HarmonyOS應用

2022-02-21 15:16:30

HarmonyOS鴻蒙操作系統

2011-10-21 09:11:41

百度地圖API

2021-12-30 16:12:07

鴻蒙HarmonyOS應用

2020-06-08 10:05:09

云計算云平臺

2022-02-16 16:09:12

鴻蒙游戲操作系統

2021-11-01 10:21:36

鴻蒙HarmonyOS應用

2022-02-16 15:25:31

JS代碼Canvas鴻蒙

2022-01-05 20:27:45

鴻蒙HarmonyOS應用

2021-08-02 09:50:47

Vetur源碼SMART
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产情侣激情 | 久久国产成人 | www国产亚洲精品久久网站 | 日本不卡免费新一二三区 | 国产自产c区 | 二区av | 久久久精品网 | 亚洲国产高清高潮精品美女 | 一级片在线免费播放 | 在线免费观看毛片 | 美日韩免费视频 | 亚洲性爰 | 日韩精品一区二区三区 | 欧美精品一区二区在线观看 | 日日干日日操 | 欧美精品一区二区三区在线 | 一区中文 | 一级黄在线观看 | 久久成人久久 | 中文字幕一区二区三区四区 | 波多野结衣二区 | 国产成人精品一区二区三区在线观看 | 国产 日韩 欧美 中文 在线播放 | 亚洲夜射 | 美日韩视频 | 亚洲三级av | 国产亚洲一区二区精品 | 在线一区二区三区 | 久草成人 | 精品综合 | 毛片a级毛片免费播放100 | 免费的一级视频 | 337p日本欧洲亚洲大胆精蜜臀 | 久久久999国产精品 中文字幕在线精品 | 成人欧美一区二区三区在线观看 | 日韩欧美在线视频 | 米奇成人网 | 一区二区三区免费看 | 亚洲精品91| 蜜臀网| 国产精品视频网 |