疯壳-鸿蒙OS-应用程序监听驱动程序消息
头像 宋你一朵小红花 2021-03-24 10:00:00    发布
3795 浏览 17 点赞 15 收藏

在前面课程中,我们通过驱动服务基类成员IDeviceIoService中的Dispatch方法进行用户态应用程序和内核态驱动程序的消息交互,其中涉及到两个HdfSBuf——data与reply:

data:为app向驱动传递的数据的指针

reply:为驱动向app传递的数据的指针

除此之外,app下发数据以后,驱动程序可以通过主动上报事件的方式向app发送消息,而app端则需要注册监听上报事件的相关操作方法。

在前面课程的代码基础上,app与驱动源码需要做下列修改:

  • app代码修改

1.消息回调声明

我这里在main函数上方进行声明

疯壳-鸿蒙OS-应用程序监听驱动程序消息-鸿蒙开发者社区

Ps:static int OnDevEventReceived(void *priv,  uint32_t id, struct HdfSBuf *data);

2.消息回调实体定义

我这里在main函数后面进行消息回调的实体定义

疯壳-鸿蒙OS-应用程序监听驱动程序消息-鸿蒙开发者社区

Ps:


static int OnDevEventReceived(void *priv,  uint32_t id, struct HdfSBuf *data)

{
      unsigned int tmp = 0;

      OsalTimespec time;

      OsalGetTime(&time);

      HDF_LOGE("%s received event at %llu.%llu", (char *)priv, time.sec, time.usec);

   

      if (!HdfSbufReadUint32(data,(unsigned int*)&tmp)) {
        HDF_LOGE("drv fail to read sbuf");

        return -1;

      }

      HDF_LOGE("%s: dev event received: %d %d",  (char *)priv, id, tmp);

      return 0;

}

3.添加系统时间、延迟等接口头文件

疯壳-鸿蒙OS-应用程序监听驱动程序消息-鸿蒙开发者社区

4.mian函数修改一

在main函数此处定义监听相关变量以及监听注册

疯壳-鸿蒙OS-应用程序监听驱动程序消息-鸿蒙开发者社区

Ps:


 static struct HdfDevEventlistener listener = {
            .callBack = OnDevEventReceived,

            .priv ="fk sample_service"

        };

        if (HdfDeviceRegisterEventListener(serv, &listener) != 0) {
            HDF_LOGE("fail to register event listener");

            return -1;

        }


5.main函数修改二

添加取消注册操作

疯壳-鸿蒙OS-应用程序监听驱动程序消息-鸿蒙开发者社区Ps:    


        return HdfDeviceSendEvent(client->device, cmdCode, data);

 
 

上图添加的接口在hdf_device_desc.h文件中声明:疯壳-鸿蒙OS-应用程序监听驱动程序消息-鸿蒙开发者社区其中第一个参数为 HdfDeviceObject结构体指针,该结构体指针为Disaptch第一个参数中的结构体的成员,他表示驱动程序设备对象的指针。疯壳-鸿蒙OS-应用程序监听驱动程序消息-鸿蒙开发者社区

第二个参数表示消息发送事件的ID,上面的代码直接回传了cmdCode。

第三个参数表示驱动程序发送的消息内容的指针,上面的代码直接回传了data buf。

接下来将代码重新编译,将编译生成的文件烧录到板子中,运行 /bin 目录下的myapp结果如下疯壳-鸿蒙OS-应用程序监听驱动程序消息-鸿蒙开发者社区

终端中打印的信息完全符合我们的代码逻辑。


————————————————
版权声明:本文为CSDN博主「fengkesz」的原创文章


©本站发布的所有内容,包括但不限于文字、图片、音频、视频、图表、标志、标识、广告、商标、商号、域名、软件、程序等,除特别标明外,均来源于网络或用户投稿,版权归原作者或原出处所有。我们致力于保护原作者版权,若涉及版权问题,请及时联系我们进行处理。
分类
其它
地址:北京市朝阳区北三环东路三元桥曙光西里甲1号第三置业A座1508室 商务内容合作QQ:2291221 电话:13391790444或(010)62178877
版权所有:电脑商情信息服务集团 北京赢邦策略咨询有限责任公司
声明:本媒体部分图片、文章来源于网络,版权归原作者所有,我司致力于保护作者版权,如有侵权,请与我司联系删除
京ICP备:2022009079号-2
京公网安备:11010502051901号
ICP证:京B2-20230255