当前位置: 首页 > news >正文

临沂做网站的做相册的网站(网易

临沂做网站的,做相册的网站(网易,大学生就业信息招聘网,甘肃最新消息今天OpenHarmony的NAPI功能为开发者提供了JS与C/C不同语言模块之间的相互访问#xff0c;交互的能力#xff0c;使得开发者使用C或者C语言实现应用的关键功能。如操作开发板中某个GPIO节点的状态#xff08;OpenHarmony并没有提供直接操作GPIO口状态的API#xff09;#xff0…        OpenHarmony的NAPI功能为开发者提供了JS与C/C不同语言模块之间的相互访问交互的能力使得开发者使用C或者C语言实现应用的关键功能。如操作开发板中某个GPIO节点的状态OpenHarmony并没有提供直接操作GPIO口状态的API点亮一个LED灯。 本篇基于前3篇NAPI的讲解总结做一个控制开发板上LED灯状态的应用作为完结篇。 一、环境准备 设备rk3568开发板 开发环境DevEco Studio4.0.0.600 二、NAPI函数编写 1、基于NAPI的GPIO节点控制函数 OpenHarmony并没有提供直接操作GPIO口状态的API。若需要控制开发板上LED灯的亮灭 需要通过NAPI的方式写一个可以查询GPIO口状态、一个可以对节点写1和一个可以对节点写0的函数。 1main目录如下 2bq_function.cpp #include napi/native_api.h #include napi/native_api.h #include cstring #include js_native_api.h #include sys/un.h #include unistd.h #include sys/types.h #include fcntl.h #include sys/stat.h #include string.h #include stdio.h #include stdlib.husing namespace std; //对指定节点写1 static napi_value Bq_GPIO_On(napi_env env, napi_callback_info info) {size_t argc 1;napi_value args[1] {nullptr};napi_get_cb_info(env, info, argc, args, nullptr, nullptr);napi_valuetype valuetype0;napi_typeof(env, args[0], valuetype0);char *ledPath new char[150]{};size_t buffSize 100;size_t realSize 0;napi_get_value_string_utf8(env, args[0], ledPath, buffSize, realSize);int fd;char *ret new char[50]{};fd open(ledPath, O_RDWR | O_TRUNC | O_NOCTTY);if (fd 0) {strcpy(ret, fail to open file);} else {strcpy(ret, 1);write(fd, 1, 1);close(fd);}napi_value returnValue nullptr;napi_create_string_utf8(env, ret, strlen(ret), returnValue);return returnValue; }//对指定节点写0 static napi_value Bq_GPIO_Off(napi_env env, napi_callback_info info) {size_t argc 1;napi_value args[1] {nullptr};napi_get_cb_info(env, info, argc, args, nullptr, nullptr);napi_valuetype valuetype0;napi_typeof(env, args[0], valuetype0);char *ledPath new char[150]{};size_t buffSize 100;size_t realSize 0;napi_get_value_string_utf8(env, args[0], ledPath, buffSize, realSize);int fd;char *ret new char[50]{};fd open(ledPath, O_RDWR | O_TRUNC | O_NOCTTY);if (fd 0) {strcpy(ret, fail to open file);} else {strcpy(ret, 0);write(fd, 0, 1);close(fd);}napi_value returnValue nullptr;napi_create_string_utf8(env, ret, strlen(ret), returnValue);return returnValue; }//查询指定节点状态 static napi_value bq_GPIO_State(napi_env env, napi_callback_info info) {size_t argc 1;napi_value args[1] {nullptr};napi_get_cb_info(env, info, argc, args, nullptr, nullptr);napi_valuetype valuetype0;napi_typeof(env, args[0], valuetype0);char *ledPath new char[150]{};size_t buffSize 100;size_t realSize 0;napi_get_value_string_utf8(env, args[0], ledPath, buffSize, realSize);char *ret new char[50]{};FILE *fp;char gpioValuePath[200];char gpioValue[2];// 构建GPIO口值文件路径snprintf(gpioValuePath, sizeof(gpioValuePath), %s, ledPath);if (access(gpioValuePath, F_OK) -1) {strcpy(ret, Error: the GPIO is not exist);napi_value returnValue nullptr;napi_create_string_utf8(env, ret, strlen(ret), returnValue);return returnValue;}// 打开GPIO口值文件fp fopen(gpioValuePath, r);if (fp NULL) {perror(Error opening GPIO value file);strcpy(ret, Error opening GPIO value file);} else {// 读取GPIO口值if (fgets(gpioValue, sizeof(gpioValue), fp) NULL) {perror(Error reading GPIO value);fclose(fp);strcpy(ret, Error reading GPIO value);} else {strcpy(ret, gpioValue);}}fclose(fp);napi_value returnValue nullptr;napi_create_string_utf8(env, ret, strlen(ret), returnValue);return returnValue; }EXTERN_C_START static napi_value Init(napi_env env, napi_value exports) {napi_property_descriptor desc[] {{bq_GPIO_On, nullptr, Bq_GPIO_On, nullptr, nullptr, nullptr, napi_default, nullptr},{bq_GPIO_Off, nullptr, Bq_GPIO_Off, nullptr, nullptr, nullptr, napi_default, nullptr},{bq_GPIO_State, nullptr, bq_GPIO_State, nullptr, nullptr, nullptr, napi_default, nullptr}};napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);return exports; } EXTERN_C_ENDstatic napi_module demoModule {.nm_version 1,.nm_flags 0,.nm_filename nullptr,.nm_register_func Init,.nm_modname entry,.nm_priv ((void *)0),.reserved {0}, };extern C __attribute__((constructor)) void RegisterEntryModule(void) { napi_module_register(demoModule); }2、NAPI函数与导出与配置 1index.d.ts export const bq_GPIO_On: (ledPath: string) Promisestring;//节点写1export const bq_GPIO_Off: (ledPath: string) Promisestring;//节点写0export const bq_GPIO_State: (ledPath: string) Promisestring;//节点状态查询 2CMakeLists.txt # the minimum version of CMake. cmake_minimum_required(VERSION 3.4.1) project(Demo_Led)set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})include_directories(${NATIVERENDER_ROOT_PATH}${NATIVERENDER_ROOT_PATH}/include)add_library(entry SHARED bq_func.cpp) target_link_libraries(entry PUBLIC libace_napi.z.so) 3build-profile.json5 4oh-package.json5 三、Openharmony UI交互界面编写 1、UI界面编写NAPI函数引用 1index.ets 开发板控制LED灯节点地址为/sys/class/leds/pilot_lamp/brightness import NAPI from libentry.so;//引出NAPI接口 import promptAction from ohos.promptAction; Observed class ledModel {public ledName: string //LED灯名称public ledAddress: string //LED灯的节点地址public ledState: boolean //LED灯状态public isLedExit: boolean //LED灯节点是否存在public ledStateCheck: string //检测返回值constructor(LedName: string, LedAddress: string, LedState: boolean false, isLedExit: boolean true, LedStateCheck: string ) {this.ledName LedNamethis.ledAddress LedAddressthis.ledState LedStatethis.isLedExit isLedExitthis.ledStateCheck LedStateCheck} } Entry Component struct Index {State message: number 0;State led: ledModel new ledModel(LED_Green,/sys/class/leds/pilot_lamp/brightness)//开发板控制LED灯节点地址/sys/class/leds/pilot_lamp/brightnessprivate setIntervalID: number -1async ledCheck() {this.led.ledStateCheck await NAPI.bq_GPIO_State(this.led.ledAddress)if (this.led.ledStateCheck 1) {this.led.ledState true} else if (this.led.ledStateCheck Error: the GPIO is not exist) {this.led.isLedExit false} else {this.led.ledState false}}async aboutToAppear() {await this.ledCheck()//状态扫描this.setIntervalID setInterval(async () {await this.ledCheck()}, 500)}aboutToDisappear() {clearInterval(this.setIntervalID)}build() {Column() {Text(点亮一个LED灯).size({ width: 100%, height: 35 }).margin({ top: 10, bottom: 10 }).textAlign(TextAlign.Center).fontSize(30).fontWeight(800)Column({ space: 10 }) {ledList({ item: this.led})}.margin({ top: 20, bottom: 10 }).size({ width: 50%, height: 50 }).justifyContent(FlexAlign.Start).alignSelf(ItemAlign.Center)}.justifyContent(FlexAlign.Center).alignItems(HorizontalAlign.Center).size({ width: 100%, height: 100% })} } Component struct ledList {ObjectLink item: ledModeltip(str: string) {let show: stringswitch (str) {case 1:show 已打开;break;case 0:show 已关闭;break;default:show error: ${str}}promptAction.showToast({message: show,duration: 800})}build() {Row() {Text(${this.item.ledName}).size({ width: 70%, height: 35 }).fontSize(30).fontWeight(700).fontColor(this.item.isLedExit true ? Color.Black : #c9c9cd)Blank()Toggle({ type: ToggleType.Switch, isOn: this.item.ledState }).size({ width: 80, height: 35 }).enabled(this.item.isLedExit).onChange(async (isOn) {if (isOn) {let res: string await NAPI.bq_GPIO_On(this.item.ledAddress)this.tip(res)} else {let res: string await NAPI.bq_GPIO_Off(this.item.ledAddress)this.tip(res)}})}.width(100%)} } 2、效果展示 1LED灭 2LED亮 四、工程代码 见附件
http://www.pierceye.com/news/730781/

相关文章:

  • 吉首市建设局官方网站一对一直播软件开发定制
  • 网站开发验收单做的网站如何被百度搜到
  • 网站的数据库是什么两学一做网站链接
  • 做窗帘网站济南网络科技公司排名
  • 广东省住房城乡建设部网站哪个网站可以做加工代理的
  • dede网站源码打包下载wordpress登不进后台
  • 建设内部网站目的国内贸易在那个网站上做
  • 用什么建设网站注册深圳公司代理
  • 网站平台建设方案书百度云资源搜索入口
  • 网站 团队博罗网站建设哪家便宜
  • wordpress列表分页枣庄seo外包
  • 知了网站后台推广形式有哪几种
  • 成品图片的网站在哪里找wordpress开启防盗链
  • 伊滨区网站建设网站建设经理
  • 权威的郑州网站建设域名租用平台
  • 造价工程师网网站点击排名优化
  • 网站关键词搜索海口网站建设优化公司
  • WordPress建影视站免费的素材网站有哪些
  • 屯留做网站哪里好阿里云服务器618
  • 网站怎么做登录模块免费的编程软件下载
  • 网站建设与管理的策划书网站建设五合一
  • 网站建设管理分工公司招聘网站有哪些
  • 分类信息网站手机版上海网站关键词优化方法
  • 建设个人网站的参考网站及文献怎么做水果网站
  • 台山住房和城乡建设 网站有赞分销
  • 网站备案 历史wordpress货币插件
  • 如何做自助搜券网站佛山顺德专业做网站
  • 义乌网站制作多少钱工会网站建设
  • 六安高端网站建设公司开网店的流程步骤
  • 网站被墙301怎么做展馆展厅设计效果图