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

跟著小白一起學(xué)鴻蒙--JS應(yīng)用控制LED(十)

系統(tǒng) OpenHarmony
Ace(foundation/arkui/ace_engine_lite)是OpenHarmony的輕量級(jí)系統(tǒng)所使用的UI框架子系統(tǒng),為開(kāi)發(fā)者提供JS-UI開(kāi)發(fā)框架。包括.html,.css,.js。

??想了解更多關(guān)于開(kāi)源的內(nèi)容,請(qǐng)?jiān)L問(wèn):??

??51CTO 開(kāi)源基礎(chǔ)軟件社區(qū)??

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

在《#跟著小白一起學(xué)鴻蒙# [九] 寫個(gè)簡(jiǎn)單的LED驅(qū)動(dòng)》我們熟悉了如何在開(kāi)源鴻蒙開(kāi)發(fā)驅(qū)動(dòng)應(yīng)用,并通過(guò)hdc工具拷貝至開(kāi)發(fā)板運(yùn)行。在《#跟著小白一起學(xué)鴻蒙#[六]第一個(gè)hap應(yīng)用》的文章里我們學(xué)會(huì)如何用IDE工具編寫hap應(yīng)用并他通過(guò)IDE工具安裝至開(kāi)發(fā)板運(yùn)行。我們學(xué)會(huì)了hap程序的開(kāi)發(fā),但是hap程序是運(yùn)行在標(biāo)準(zhǔn)系統(tǒng)的應(yīng)用,對(duì)于輕量和小型系統(tǒng)我們應(yīng)該如何進(jìn)行開(kāi)發(fā)呢?接下來(lái)我們需要學(xué)習(xí)下如何開(kāi)發(fā)JS應(yīng)用。

輕量、小型系統(tǒng)JS應(yīng)用

Ace(foundation/arkui/ace_engine_lite)是OpenHarmony的輕量級(jí)系統(tǒng)所使用的UI框架子系統(tǒng),為開(kāi)發(fā)者提供JS-UI開(kāi)發(fā)框架。包括.html,.css,.js。開(kāi)發(fā)者可以通過(guò)DevEco工具進(jìn)行開(kāi)發(fā)。其中JS的引擎采用三方庫(kù)里的JerryScript(jerryscript是IoT設(shè)備上的輕量級(jí)JS引擎,支持ECMAScript 5.1標(biāo)準(zhǔn),適配低內(nèi)存硬件,最小運(yùn)行在64KB RAM和小于200KB的flash,提供C API)。關(guān)于jerryscript的詳細(xì)介紹可以看如下參考鏈接(https://github.com/jerryscript-project/jerryscript )。

#沖刺創(chuàng)作新星# #跟著小白一起學(xué)鴻蒙# [十] JS應(yīng)用控制LED-開(kāi)源基礎(chǔ)軟件社區(qū)

詳細(xì)的內(nèi)容介紹在一下鏈接內(nèi)可以看到官方的說(shuō)明:

參考鏈接:https://gitee.com/openharmony/arkui_ace_engine_lite。

此樣例參考小熊派設(shè)計(jì),使用小熊派HM_Micro開(kāi)發(fā)板進(jìn)行驗(yàn)證。

JS-UI開(kāi)發(fā)流程

graph LR
--> 配置工程 --> 增加LED程序 --> 添加JSAPI接口

創(chuàng)建工程配置工程增加LED程序添加JSAPI接口編譯運(yùn)行。

建立[Lite]Empty Ability。

#沖刺創(chuàng)作新星# #跟著小白一起學(xué)鴻蒙# [十] JS應(yīng)用控制LED-開(kāi)源基礎(chǔ)軟件社區(qū)

配置工程。

#沖刺創(chuàng)作新星# #跟著小白一起學(xué)鴻蒙# [十] JS應(yīng)用控制LED-開(kāi)源基礎(chǔ)軟件社區(qū)

工程結(jié)構(gòu)說(shuō)明。

#沖刺創(chuàng)作新星# #跟著小白一起學(xué)鴻蒙# [十] JS應(yīng)用控制LED-開(kāi)源基礎(chǔ)軟件社區(qū)

工程目錄主要在entry里,有以下內(nèi)容:

  • .preview: 界面預(yù)覽目錄。
  • build: 工程編譯目錄。
  • src:包括i18n(國(guó)際化翻譯路徑),pages(界面目錄,index.css, index.hml, index.js)。

工程預(yù)覽。

#沖刺創(chuàng)作新星# #跟著小白一起學(xué)鴻蒙# [十] JS應(yīng)用控制LED-開(kāi)源基礎(chǔ)軟件社區(qū)

添加按鍵功能控制LED燈。

  • 修改index.hml
<div class="container">
<text class="title">
{{ $t('strings.hello') }} {{ title }}
</text>

<div class="rowcontainer">
<text class="content" if="{{statu == '0'}}">[狀態(tài):{{ $t('strings.ledoff') }}]</text>
<text class="content" if="{{statu == '1'}}">[狀態(tài):{{ $t('strings.ledon') }}]</text>
<text class="content" onclick="ledon">
{{ $t('strings.ledon') }}
</text>
<text class="content" onclick="ledoff">
{{ $t('strings.ledoff') }}
</text>
<text class="content" onclick="ledtoggle">
{{ $t('strings.ledtoggle') }}
</text>
</div>
<text class="content" onclick="exit">
{{ $t('strings.exit') }}
</text>
</div>
  • 修改index.css
.container {
width: 100%;
height: 100%;
flex-direction: column;
justify-content: center;
align-items: center;
}
.title {
width: 200px;
font-size: 30px;
text-align: center;
}
.content{
width: 200px;
font-size: 30px;
text-align: center;
}
.rowcontainer {
width: 100%;
height: 50%;
flex-direction: row;
justify-content: center;
align-items: center;
}
  • 修改index.js
var led = {open:1,close:0,change:2}
import app from '@system.app';
export default {
data: {
title: "",
statu:'0'
},
onInit() {
this.title = this.$t('strings.world');
},
ledon(e) {
let that = this
console.info("ledon")
app.ledcontrol({
code:led.open,
success(res){
that.statu = res.led_status
},
fail(res,code){
console.error("ledon error")
},
complete(){
console.info("ledon complete")
}
})
},
ledoff(e) {
let that = this
console.info("ledoff")
app.ledcontrol({
code:led.close,
success(res){
that.statu = res.led_status
},
fail(res,code){
console.error("ledoff error")
},
complete(){
console.info("ledoff complete")
}
})
},
ledtoggle(e) {
let that = this
console.info("ledtoggle")
app.ledcontrol({
code:led.change,
success(res){
that.statu = res.led_status
},
fail(res,code){
console.error("ledtoggle failed")
},
complete(){
console.info("ledtoggle complete")
}
})
},
exit(e) {
app.terminate()
},
}
  • 預(yù)覽

#沖刺創(chuàng)作新星# #跟著小白一起學(xué)鴻蒙# [十] JS應(yīng)用控制LED-開(kāi)源基礎(chǔ)軟件社區(qū)

  • 將代碼編譯成hap包:點(diǎn)擊編輯器最左下角的OhosBuild Varilants,打開(kāi)編譯模式選擇視圖,編譯模式分debug和release,選擇release模式;
  • 點(diǎn)擊編輯器上方菜單欄的Build->Build Hap(s)/App(s)->Build Hap(s),系統(tǒng)就會(huì)開(kāi)始自動(dòng)編譯代碼成hap包,等到下方Build Output無(wú)編譯錯(cuò)誤,就表示代碼編譯完成了。

增加JS的API接口。

  • 在app_module.h里增加接口

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

  • 在app_module.cpp里增加接口實(shí)現(xiàn)
#include "hdf_sbuf.h"
#include "hdf_io_service_if.h"
#define LED_WRITE_READ 1
#define LED_SERVICE "hdf_led"
......
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();
}
  • 在foundation\ace\ace_engine_lite\ace_lite.gni中添加HDF頭文件路徑
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",
]
  • 添加編譯依賴
修改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",

總結(jié)

  1. 基于JS擴(kuò)展的類Web開(kāi)發(fā)范式的方舟開(kāi)發(fā)框架,采用經(jīng)典的HML、CSS、JavaScript三段式開(kāi)發(fā)方式。使用HML標(biāo)簽文件進(jìn)行布局搭建,使用CSS文件進(jìn)行樣式描述,使用JavaScript文件進(jìn)行邏輯處理。UI組件與數(shù)據(jù)之間通過(guò)單向數(shù)據(jù)綁定的方式建立關(guān)聯(lián),當(dāng)數(shù)據(jù)發(fā)生變化時(shí),UI界面自動(dòng)觸發(fā)更新。此種開(kāi)發(fā)方式,更接近Web前端開(kāi)發(fā)者的使用習(xí)慣,快速將已有的Web應(yīng)用改造成方舟開(kāi)發(fā)框架應(yīng)用。主要適用于界面較為簡(jiǎn)單的中小型應(yīng)用開(kāi)發(fā);
  2. 通過(guò)appmodule調(diào)用framework層接口,然后通過(guò)framework接口調(diào)用Hdf接口。

這樣我們就有了自己的driver和配置,后面的章節(jié)我們會(huì)講如何在hap應(yīng)用里調(diào)用驅(qū)動(dòng)接口。

??想了解更多關(guān)于開(kāi)源的內(nèi)容,請(qǐng)?jiān)L問(wèn):??

??51CTO 開(kāi)源基礎(chǔ)軟件社區(qū)??

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

責(zé)任編輯:jianghua 來(lái)源: 51CTO開(kāi)源基礎(chǔ)軟件社區(qū)
相關(guān)推薦

2022-10-10 14:47:04

藍(lán)牙應(yīng)用鴻蒙

2022-12-02 14:20:09

Tetris鴻蒙

2022-11-29 16:35:02

Tetris鴻蒙

2022-10-17 14:29:24

鴻蒙應(yīng)用開(kāi)發(fā)

2023-03-30 09:32:27

2022-11-14 17:01:34

游戲開(kāi)發(fā)畫布功能

2023-04-04 09:24:11

鴻蒙HiDumper

2023-02-27 16:30:32

鴻蒙開(kāi)源協(xié)議分析

2023-03-30 09:19:54

SELinux安全子系統(tǒng)

2022-08-19 19:02:20

開(kāi)源鴻蒙操作系統(tǒng)

2022-12-09 15:34:38

2023-01-03 15:09:10

鴻蒙常用工具

2022-11-24 14:34:41

Hap程序鴻蒙

2022-12-06 15:39:16

鴻蒙主干代碼

2023-03-15 16:19:03

BinderIPC工具

2022-10-09 15:05:50

NAPI框架鴻蒙

2022-09-30 14:08:26

Hap應(yīng)用鴻蒙

2023-04-06 09:18:52

鴻蒙AVPlayerAVRecorder

2023-02-24 16:02:45

WebSocket網(wǎng)絡(luò)通訊協(xié)議

2022-12-05 15:02:14

鴻蒙用戶鑒權(quán)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 九色在线视频 | 永久免费av | 国产成人综合久久 | 国产精品亚洲一区二区三区在线观看 | 亚洲人成人一区二区在线观看 | 国产综合久久久久久鬼色 | 日韩不卡在线 | 黄色精品 | 九九热精品视频 | 一区二区在线 | 国产福利视频在线观看 | 午夜视频在线播放 | 免费视频一区 | avhd101在线成人播放 | 日韩免费激情视频 | 亚洲九九色 | 亚洲一区二区三区视频 | 91免费在线 | 草草草网站 | 日韩精品极品视频在线观看免费 | 国产成人亚洲精品 | 韩国电影久久 | 中文字幕1区2区3区 亚洲国产成人精品女人久久久 | 久久高清精品 | 欧美一区二区在线免费观看 | 欧美精品一区二区三区在线 | 国产精品久久久久久久久久软件 | 成年人网站免费 | 国产免费视频 | 中文字幕四虎 | 黄色激情毛片 | 免费看黄视频网站 | 精品日本久久久久久久久久 | 国产综合久久 | 91视频在线观看 | 99久久精品免费看国产四区 | 在线观看视频福利 | 国产乱码精品1区2区3区 | 99精品免费久久久久久久久日本 | 亚洲午夜精品一区二区三区他趣 | 亚洲国产aⅴ精品 |