应用程序监听驱动程序消息 疯壳 出品 在前面课程中,我们通过驱动服务基类成员IDeviceIoService中的Dispatch方法进行用户态应用程序和内核态驱动程序的消息交互,其中涉及到两个HdfSBuf——data与reply: data:为app向驱动传递的数据的指针 reply:为驱动向app传递的数据的指针 除此之外,app下发数据以后,驱动程序可以通过主动上报事件的方式向app发送消息,而app端则需要注册监听上报事件的相关操作方法。 在前面课程的代码基础上,app与驱动源码需要做下列修改:
1.消息回调声明 我这里在main函数上方进行声明 Ps:static int OnDevEventReceived(void *priv, uint32_t id, struct HdfSBuf *data); 2.消息回调实体定义 我这里在main函数后面进行消息回调的实体定义 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.添加系统时间、延迟等接口头文件 4.mian函数修改一 在main函数此处定义监听相关变量以及监听注册 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函数修改二 添加取消注册操作 Ps: HdfDeviceUnregisterEventListener(serv, &listener); 二、驱动修改 驱动程序在Disaptch中写寄存器操作后面添加箭头所示代码实现驱动消息主动上报 Ps: return HdfDeviceSendEvent(client->device, cmdCode, data); 上图添加的接口在hdf_device_desc.h文件中声明: 其中第一个参数为 HdfDeviceObject结构体指针,该结构体指针为Disaptch第一个参数中的结构体的成员,他表示驱动程序设备对象的指针。 第二个参数表示消息发送事件的ID,上面的代码直接回传了cmdCode。 第三个参数表示驱动程序发送的消息内容的指针,上面的代码直接回传了data buf。 接下来将代码重新编译,将编译生成的文件烧录到板子中,运行 /bin 目录下的myapp结果如下: 终端中打印的信息完全符合我们的代码逻辑。 |
共1条
1/1 1 跳转至页
疯壳-鸿蒙OS-应用程序监听驱动程序消息
只看楼主 1楼
关键词: 疯壳 鸿蒙os
共1条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |