《鸿蒙智能互联设备开发(微课版)》 课件 6.3.2 驱动消息机制开发_第1页
《鸿蒙智能互联设备开发(微课版)》 课件 6.3.2 驱动消息机制开发_第2页
《鸿蒙智能互联设备开发(微课版)》 课件 6.3.2 驱动消息机制开发_第3页
《鸿蒙智能互联设备开发(微课版)》 课件 6.3.2 驱动消息机制开发_第4页
《鸿蒙智能互联设备开发(微课版)》 课件 6.3.2 驱动消息机制开发_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

6.3.2驱动消息机制开发通过本节学习,您可以:了解驱动消息机制开发驱动消息机制开发驱动消息机制的开发步骤:1.修改服务策略policy字段将驱动配置信息中服务策略policy字段设置为2。

device_test::Device{

policy=2;

...

}2.配置驱动信息中的服务设备节点权限配置驱动信息中的服务设备节点权限(permission字段)是框架给驱动创建设备节点的权限,默认是0666,驱动开发者根据驱动的实际使用场景配置驱动设备节点的权限。驱动消息机制开发3.实现Dispatch方法在服务实现过程中,实现服务基类成员IDeviceIoService中的Dispatch方法。

//Dispatch是用来处理用户态发下来的消息

int32_tTestDriverDispatch(structHdfDeviceIoClient*device,intcmdCode,structHdfSBuf*data,structHdfSBuf*reply){

HDF_LOGE("testdriverliteAdispatch");

returnHDF_SUCCESS;

}

int32_tTestDriverBind(structHdfDeviceObject*device){

HDF_LOGE("testforliteostestdriverAOpen!");

if(device==NULL){

HDF_LOGE("testforliteostestdriverAOpenfailed!");

returnHDF_FAILURE;

}

static

structITestDriverServicetestDriverA={

.ioService.Dispatch=TestDriverDispatch,

.ServiceA=TestDriverServiceA,

.ServiceB=TestDriverServiceB,

};

device->service=(structIDeviceIoService*)(&testDriverA);

returnHDF_SUCCESS;}驱动消息机制开发4.定义cmd类型驱动定义消息处理函数中的cmd类型。5.获取服务接口并发送消息用户态获取服务接口并发送消息到驱动。#defineTEST_WRITE_READ1//读写操作码1

intSendMsg(const

char*testMsg)

{

if(testMsg==NULL){

HDF_LOGE("testmsgisnull");

returnHDF_FAILURE;

}

structHdfIoService*serv=HdfIoServiceBind("test_driver");

if(serv==NULL){

HDF_LOGE("failtogetservice");

returnHDF_FAILURE;}驱动消息机制开发

structHdfSBuf*data=HdfSBufObtainDefaultSize();

if(data==NULL){HDF_LOGE("failtoobtainsbufdata");

returnHDF_FAILURE;

}

structHdfSBuf*reply=HdfSBufObtainDefaultSize();

if(reply==NULL){HDF_LOGE("failtoobtainsbufreply");

ret=HDF_DEV_ERR_NO_MEMORY;

gotoout;

}

if(!HdfSbufWriteString(data,testMsg)){HDF_LOGE("failtowritesbuf");

ret=HDF_FAILURE;

gotoout;

}

intret=serv->dispatcher->Dispatch(&serv->object,TEST_WRITE_READ,data,reply);

if(ret!=HDF_SUCCESS){HDF_LOGE("failtosendservicecall");

gotoout;

}

out:

HdfSBufRecycle(data);

HdfSBufRecycle(reply);

HdfIoServiceRecycle(serv);

returnret;}驱动消息机制开发6.用户态接收驱动上报的消息用户态编写驱动上报消息的处理函数。

static

intOnDevEventReceived(void*priv,uint32_tid,structHdfSBuf*data)

{

OsalTimespectime;

OsalGetTime(&time);

HDF_LOGE("%sreceivedeventat%llu.%llu",(char*)priv,time.sec,time.usec);

const

char*string=HdfSbufReadString(data);

if(string==NULL){

HDF_LOGE("failtoreadstringineventdata");

returnHDF_FAILURE;

}

HDF_LOGE("%s:deveventreceived:%d%s",(char*)priv,id,string);

returnHDF_SUCCESS;}驱动消息机制开发用户态注册接收驱动上报消息的操作方法。

intRegisterListen()

{

structHdfIoService*serv=HdfIoServiceBind("test_driver");

if(serv==NULL){

HDF_LOGE("failtogetservice");

returnHDF_FAILURE;

}

static

structHdfDevEventlistenerlistener={

.callBack=OnDevEventReceived,

.priv="Service0"

};

if(HdfDeviceRegisterEventListener(serv,&listener)!=0){

HDF_LOGE("failtoregistereventlistener");

returnHDF_FAILURE;

}

......

HdfDeviceUnregisterEventListener(serv,&listener);

HdfIoServiceRecycle(serv);

returnHDF_SUCCESS;

}驱动消息机制开发驱动上报事件。

int32_tTestDriverDispatch(structHdf

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论