驱动消息机制管理

    消息机制的功能主要有以下两种:

    1. 用户态应用发送消息到驱动。
    2. 用户态应用接收驱动主动上报事件。

    表 1 消息机制接口

    1. 配置驱动信息中的服务设备节点权限(permission字段)是框架给驱动创建设备节点的权限,默认是0666,驱动开发者根据驱动的实际使用场景配置驱动设备节点的权限。

    2. 在服务实现过程中,实现服务基类成员IDeviceIoService中的Dispatch方法。

      1. int32_t SampleDriverDispatch(struct HdfDeviceObject *device, int cmdCode, struct HdfSBuf *data, struct HdfSBuf *reply)
      2. {
      3. HDF_LOGE("sample driver lite A dispatch");
      4. return 0;
      5. }
      6. int32_t SampleDriverBind(struct HdfDeviceObject *device)
      7. {
      8. HDF_LOGE("test for lite os sample driver A Open!");
      9. if (device == NULL) {
      10. HDF_LOGE("test for lite os sample driver A Open failed!");
      11. return -1;
      12. }
      13. static struct ISampleDriverService sampleDriverA = {
      14. .ioService.Dispatch = SampleDriverDispatch,
      15. .ServiceA = SampleDriverServiceA,
      16. .ServiceB = SampleDriverServiceB,
      17. };
      18. device->service = (struct IDeviceIoService *)(&sampleDriverA);
      19. return 0;
      20. }
    3. 驱动定义消息处理函数中的cmd类型。

    4. 用户态接收该驱动上报的消息。

      1. 用户态编写驱动上报消息的处理函数。

        1. int RegisterListen()
        2. {
        3. struct HdfIoService *serv = HdfIoServiceBind("sample_driver", 0);
        4. if (serv == NULL) {
        5. HDF_LOGE("fail to get service");
        6. return -1;
        7. }
        8. static struct HdfDevEventlistener listener = {
        9. .callBack = OnDevEventReceived,
        10. .priv ="Service0"
        11. };
        12. if (HdfDeviceRegisterEventListener(serv, &listener) != 0) {
        13. HDF_LOGE("fail to register event listener");
        14. return -1;
        15. }
        16. ......
        17. HdfDeviceUnregisterEventListener(serv, &listener);
        18. HdfIoServiceRecycle(serv);
        19. return 0;