疯壳-鸿蒙OS-应用程序监听驱动程序消息

发布于 2021-3-23 09:35
浏览
0收藏

在前面课程中,我们通过驱动服务基类成员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」的原创文章

标签
已于2021-3-23 09:35:36修改
收藏
回复
举报
回复
添加资源
添加资源将有机会获得更多曝光,你也可以直接关联已上传资源 去关联
    相关推荐