DPC.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. #pragma once
  2. // 标准库头文件
  3. #include <cstdint>
  4. #include <cstdio>
  5. #include <string>
  6. #include <vector>
  7. #include <poll.h>
  8. #include "Definitions.h"
  9. #include "ResDataObject.h"
  10. #include "DevTree.h"
  11. #include "LinuxEvent.h"
  12. // 跨平台类型定义
  13. typedef void* HANDLE; // 通用句柄类型
  14. typedef void* PVOID; // 通用指针类型
  15. typedef int INT;
  16. #define DPC_API
  17. #define DPC_DriverClient "{79A59B8E-310D-4CD4-98AD-F69054A9530A}"
  18. #define DPC_UnitClient "{34DD498F-43BB-4DC6-BD2D-9FADEA1C0B4F}"
  19. /*
  20. class DPC_API DPC
  21. {
  22. protected:
  23. Logger *m_pLog;
  24. public:
  25. DPC();
  26. virtual ~DPC();
  27. //DPC入口,根据配置进行初始化
  28. //配置的格式要复合JSON规则,具体内容由各个驱动执行定义
  29. //配置内容是加载前驱动所需要的配置内容
  30. virtual bool SYSTEM_CALL DpcEntry(ResDataObject& PARAM_IN Configuration);
  31. //获取连接属性
  32. //多个SCF的情况下,将会有多个连接属性
  33. virtual ResDataObject SYSTEM_CALL GetConnectionType();
  34. //进行跟设备连接
  35. virtual bool SYSTEM_CALL Connect(ResDataObject& PARAM_IN Connection);
  36. //判断设备的存在性.
  37. //检索成功后,返回【硬件信息资源】
  38. virtual bool SYSTEM_CALL Probe(ResDataObject& PARAM_OUT HardwareInfo);
  39. //读取事件用的接口
  40. //功能上和顺序上有如下过程
  41. //1. 读取packet from SCF
  42. //2. 解析packet
  43. //3. dispatch packet to logicdevice
  44. virtual bool SYSTEM_CALL OnNotify(HANDLE ExitNotify);
  45. //给硬件驱动设置Unique工作路径
  46. //如果是同一设备同一连接情况下,硬件多次接入,系统会保证工作路径是一样的.
  47. //连接后,单一硬件相关的数据要保存在此.
  48. virtual bool SYSTEM_CALL SetWorkPath(const char * PARAM_IN pWorkPath);
  49. //逻辑设备树的加载和卸载
  50. virtual PVOID SYSTEM_CALL LoadLogicDevices();
  51. virtual void SYSTEM_CALL UnloadLogicDevices(PVOID PARAM_IN p);
  52. virtual bool SYSTEM_CALL DisConnect();
  53. void SYSTEM_CALL SetLogHandle(Logger PARAM_IN *pLogger);
  54. };
  55. */
  56. //必须配置2套接口,
  57. //一个接口用于处理Driver对象,另一个接口用于处理Devices对象
  58. typedef enum _DPCDriverType {
  59. DPCDRIVER_NORMAL,
  60. //DPCDRIVER_MDPC,
  61. DPCDRIVER_MAX
  62. }DPCDRIVERTYPE;
  63. class DPC_API DriverDPC
  64. {
  65. protected:
  66. //Logger *m_pLog;
  67. //Logger *m_pDynLog;
  68. DevTree* m_pDriverTree;//for static
  69. DevTree* m_pDeviceTree;//for dyn
  70. PVOID m_pCircleBuff;//for MDPCs notification
  71. ResDataObject *m_pDriverConfigFilepath;
  72. public:
  73. DriverDPC();
  74. virtual ~DriverDPC();
  75. // 配置文件路径操作
  76. const char *GetDriverConfigFilePath();
  77. void SetDriverConfigFilePath(const char *pfilepath);
  78. // 树结构访问
  79. PVOID GetDriverTree();
  80. PVOID GetDeviceTree();
  81. // 循环缓冲区操作
  82. bool BuffSetNotifyBuffSize(DWORD newSize,DWORD Limit);
  83. DWORD BuffQueNotify(const char *pBuff, DWORD Size);
  84. INT BuffDequeNotify(char *pBuff, DWORD Size);
  85. HANDLE GetBuffNotifyHandle();
  86. //DPC入口,根据配置进行初始化
  87. //配置的格式要复合JSON规则,具体内容由各个驱动执行定义
  88. //配置内容是加载前驱动所需要的配置内容
  89. virtual bool SYSTEM_CALL DriverEntry(ResDataObject& PARAM_IN Configuration);
  90. //进行跟设备连接,断开
  91. virtual bool Connect();
  92. virtual void DisConnect();
  93. //返回【驱动信息资源】
  94. virtual bool SYSTEM_CALL Driver_Probe(ResDataObject& PARAM_OUT DriverInfo);
  95. virtual RET_STATUS SYSTEM_CALL GetDriverDictionary(ResDataObject& PARAM_OUT DriverInfo);
  96. //给驱动设置Unique工作路径
  97. virtual bool SYSTEM_CALL SetDriverWorkPath(const char * PARAM_IN pWorkPath);
  98. //逻辑驱动树的加载和卸载
  99. virtual PVOID SYSTEM_CALL LoadDriver();//无根节点
  100. virtual void SYSTEM_CALL UnloadDriver();
  101. //判断设备的存在性.
  102. //检索成功后,返回【硬件信息资源】
  103. virtual bool SYSTEM_CALL Device_Probe(ResDataObject& PARAM_OUT HardwareInfo);
  104. //给硬件驱动设置Unique工作路径
  105. //如果是同一设备同一连接情况下,硬件多次接入,系统会保证工作路径是一样的.
  106. //连接后,单一硬件相关的数据要保存在此.
  107. virtual bool SYSTEM_CALL SetDeviceWorkPath(const char * PARAM_IN pWorkPath);
  108. //逻辑设备树的加载和卸载
  109. virtual PVOID SYSTEM_CALL LoadLogicDevices();
  110. virtual void SYSTEM_CALL UnloadLogicDevices();
  111. //void SYSTEM_CALL SetLogHandle(Logger PARAM_IN *pLogger);
  112. //void SYSTEM_CALL SetDynLogHandle(Logger PARAM_IN *pLogger);
  113. //读取事件用的接口
  114. //功能上和顺序上有如下过程
  115. //1. 读取packet from SCF
  116. //2. 解析packet
  117. //3. dispatch packet to logicdevice
  118. //Ex:OnNotify有2个工作,一个是驱动实体的OnNotify,另一个是逻辑单元实体的OnNotify
  119. virtual DWORD OnNotify(std::vector<std::shared_ptr<LinuxEvent>> evtList, DWORD count);
  120. virtual DPCDRIVERTYPE SYSTEM_CALL GetDPCType();
  121. virtual void FirstAction();
  122. };
  123. //typedef DriverDPC* (*GetDriverDPC)();
  124. //typedef void(*ReleaseDriverDPC)(DriverDPC *p);