当前位置: 首页 > 科技观察

小熊通过JS自定义接口发送北向驱动调用南向驱动(以点亮LED为例)

时间:2023-03-15 09:34:52 科技观察

更多内容请访问:与华为共建的鸿蒙技术社区正式https://harmonyos.51cto.com介绍通常我们在开发鸿蒙北向应用时,不能调用开发环境没有提供的接口,而且我们也知道鸿蒙开发分为北向和南向,所以我们如何调用南翔写的设备驱动程序?下面我们以熊派开发板控制LED的案例来了解一下。南翔写完LED驱动后,他们还会自定义一个JSAPI接口来调用他们开发的LED灯驱动,这部分称为系统定义接口。南向驱动如何开发,系统定义接口如何完成,可以参考另一位同学的文章:【FFH】小熊派添加自定义JSAPI接口流程(以点亮LED为例))而我们在北向方向是无法直接调用环境不自带的接口的。我们需要自定义JS接口,即在系统接口文件中定义一个JS接口,以便与熊派开发板进行交互。接下来,让我们看看如何操作它。相关概念JS自定义接口:当我们需要使用一些开发环境没有提供给我们的能力时,我们可以自定义一些接口。系统自定义接口:我们定义了JS接口后,是不能直接使用的。定义的接口必须在系统代码中完成。1.创建工程文件工程类型:ApplicationLanguage:JSD设备类型:SmartVision2.添加接口定义首先,如果要调用系统没有提供的接口,需要在系统接口文件中定义一个JS接口,这里我们在@system.app.d.ts文件中定义接口.找到后,添加你需要定义的接口。接口必须是你在系统代码中实现的接口(即需要参考南向系统接口开发),必须是南向封装好的驱动接口。添加文件,添加完成后可以在代码中调用。具体文件位置如上图所示。这里我们以LED为例,在@system.app.d.ts文件中的exportdefaultclassApp{}类中添加这样一个接口。exportdefaultclassApp{/***获取应用的config.json文件中的声明信息。*/staticgetInfo():AppResponse;/***销毁当前能力。*/静态终止():无效;//自定义接口staticledcontrol(options:{code:number;success?:(res:string)=>void;fail?:(res:string,code:number)=>void;complete?:()=>void;}):void;}该接口是控制LED灯的开关。code:指令码0:关闭LED1:开启LED2:led状态反转成功,失败:状态回调函数res:回复请求,code:返回当前led状态,0:关闭状态,1:开启状态。这样我们的JS自定义界面就完成了。3.编写页面代码首先是index.hml代码:退出

{{title}}
开灯
转换
关灯连接着是index.css代码.container{宽度:800px;高度:480px;flex-direction:column;align-items:center;}.title{width:800px;font-size:40px;text-align:center;}.ledImg{width:200px;height:200px;margin-top:10px;}.ledAction{padding:10px;margin-top:20px;height:130px;width:800px;flex-direction:row;justify-content:space-around;align-items:center;}.ledAction-view{width:120px;height:120px;flex-direction:column;justify-content:center;align-items:center;}.ledAction-img{width:60像素;高度:60px;}.ledAction-btn{宽度:120px;顶部边距:10px;字体大小:25px;text-align:center;}.title-view{宽度:800px;高度:110px;方向:列;}.back-view{高度:60px;宽度:200px;弹性方向:行;证明内容:flex-start;对齐项目:居中;}.back-img{高度:30px;30px;margin-left:10px;}.back-btn{font-size:30px;}4.编辑JS代码最后就是在index.js中编写相关业务代码,并导入系统界面文件importappfrom'@system.app';写相关函数//lightstate0offand1isonvarled={open:1,close:0,change:2}importappfrom'@system.app';exportdefault{data:{title:'BearPi-HMMicro',status:'0'},exit(e){app.terminate()},open(e){letthat=thisapp.ledcontrol({code:led.open,success(res){那.statu=res.led_status},fail(res,code){},complete(){}})},close(e){letthat=thisapp.ledcontrol({code:led.close,success(res){that.statu=res.led_status},fail(res,code){},complete(){}})},change(e){letthat=thisapp.ledcontrol({code:led.change,success(res){that.statu=res.led_status},fail(res,code){},complete(){}})}}5.打包成hap包,部署到开发板上。具体如何在开发板上部署,有兴趣的可以参考我之前的文章:[FFH]在BearPi开发板上部署HAP工程相关源码实现展示(bearpi官方仓库源码):https://gitee.com/HagonChan/bearpi-hm_micro_app/tree/master/code/Led更多信息请访问:与华为Harmonyos官方技术社区共建https://harmonyos.51cto.com