DPC.h 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. #pragma once
  2. // 下列 ifdef 块是创建使从 DLL 导出更简单的
  3. // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 DPC_EXPORTS
  4. // 符号编译的。在使用此 DLL 的
  5. // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
  6. // DPC_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
  7. // 符号视为是被导出的。
  8. #ifndef DPC_EXPORTS
  9. #ifdef _WIN64
  10. #ifdef _DEBUG
  11. #pragma comment(lib, "DPCX64D.lib")
  12. #else
  13. #pragma comment(lib, "DPCX64.lib")
  14. #endif
  15. #else
  16. #ifdef _DEBUG
  17. #pragma comment(lib, "DPCD.lib")
  18. #else
  19. #pragma comment(lib, "DPC.lib")
  20. #endif
  21. #endif
  22. #endif
  23. #ifdef DPC_EXPORTS
  24. #define DPC_API __declspec(dllexport)
  25. #else
  26. #define DPC_API __declspec(dllimport)
  27. #endif
  28. #define DPC_DriverClient "{79A59B8E-310D-4CD4-98AD-F69054A9530A}"
  29. #define DPC_UnitClient "{34DD498F-43BB-4DC6-BD2D-9FADEA1C0B4F}"
  30. #include "logger.h"
  31. #include "definitions.h"
  32. #include "ResDataObject.h"
  33. class DPC_API DPC
  34. {
  35. protected:
  36. Logger *m_pLog;
  37. public:
  38. DPC();
  39. virtual ~DPC();
  40. //DPC入口,根据配置进行初始化
  41. //配置的格式要复合JSON规则,具体内容由各个驱动执行定义
  42. //配置内容是加载前驱动所需要的配置内容
  43. virtual bool SYSTEM_CALL DpcEntry(ResDataObject& PARAM_IN Configuration);
  44. //获取连接属性
  45. //多个SCF的情况下,将会有多个连接属性
  46. virtual ResDataObject SYSTEM_CALL GetConnectionType();
  47. //进行跟设备连接
  48. virtual bool SYSTEM_CALL Connect(ResDataObject& PARAM_IN Connection);
  49. //判断设备的存在性.
  50. //检索成功后,返回【硬件信息资源】
  51. virtual bool SYSTEM_CALL Probe(ResDataObject& PARAM_OUT HardwareInfo);
  52. //读取事件用的接口
  53. //功能上和顺序上有如下过程
  54. //1. 读取packet from SCF
  55. //2. 解析packet
  56. //3. dispatch packet to logicdevice
  57. virtual bool SYSTEM_CALL OnNotify(HANDLE ExitNotify);
  58. //给硬件驱动设置Unique工作路径
  59. //如果是同一设备同一连接情况下,硬件多次接入,系统会保证工作路径是一样的.
  60. //连接后,单一硬件相关的数据要保存在此.
  61. virtual bool SYSTEM_CALL SetWorkPath(const char * PARAM_IN pWorkPath);
  62. //逻辑设备树的加载和卸载
  63. virtual PVOID SYSTEM_CALL LoadLogicDevices();
  64. virtual void SYSTEM_CALL UnloadLogicDevices(PVOID PARAM_IN p);
  65. virtual bool SYSTEM_CALL DisConnect();
  66. void SYSTEM_CALL SetLogHandle(Logger PARAM_IN *pLogger);
  67. };
  68. //必须配置2套接口,
  69. //一个接口用于处理Driver对象,另一个接口用于处理Devices对象
  70. typedef enum _DPCDriverType {
  71. DPCDRIVER_NORMAL,
  72. DPCDRIVER_MDPC,
  73. DPCDRIVER_MAX
  74. }DPCDRIVERTYPE;
  75. class DPC_API DriverDPC
  76. {
  77. protected:
  78. Logger *m_pLog;
  79. Logger *m_pDynLog;
  80. PVOID m_pDriverTree;//for static
  81. PVOID m_pDeviceTree;//for dyn
  82. PVOID m_pCircleBuff;//for MDPCs notification
  83. public:
  84. DriverDPC();
  85. virtual ~DriverDPC();
  86. PVOID GetDriverTree();
  87. PVOID GetDeviceTree();
  88. bool BuffSetNotifyBuffSize(DWORD newSize,DWORD Limit);
  89. DWORD BuffQueNotify(const char *pBuff, DWORD Size);
  90. INT BuffDequeNotify(char *pBuff, DWORD Size);
  91. HANDLE GetBuffNotifyHandle();
  92. //DPC入口,根据配置进行初始化
  93. //配置的格式要复合JSON规则,具体内容由各个驱动执行定义
  94. //配置内容是加载前驱动所需要的配置内容
  95. virtual bool SYSTEM_CALL DriverEntry(ResDataObject& PARAM_IN Configuration);
  96. //进行跟设备连接,断开
  97. virtual bool DATA_ACTION Connect();
  98. virtual void DATA_ACTION DisConnect();
  99. //返回【驱动信息资源】
  100. virtual bool SYSTEM_CALL Driver_Probe(ResDataObject& PARAM_OUT DriverInfo);
  101. virtual RET_STATUS SYSTEM_CALL GetDriverDictionary(ResDataObject& PARAM_OUT DriverInfo);
  102. //给驱动设置Unique工作路径
  103. virtual bool SYSTEM_CALL SetDriverWorkPath(const char * PARAM_IN pWorkPath);
  104. //逻辑驱动树的加载和卸载
  105. virtual PVOID SYSTEM_CALL LoadDriver();//无根节点
  106. virtual void SYSTEM_CALL UnloadDriver();
  107. //判断设备的存在性.
  108. //检索成功后,返回【硬件信息资源】
  109. virtual bool SYSTEM_CALL Device_Probe(ResDataObject& PARAM_OUT HardwareInfo);
  110. //给硬件驱动设置Unique工作路径
  111. //如果是同一设备同一连接情况下,硬件多次接入,系统会保证工作路径是一样的.
  112. //连接后,单一硬件相关的数据要保存在此.
  113. virtual bool SYSTEM_CALL SetDeviceWorkPath(const char * PARAM_IN pWorkPath);
  114. //逻辑设备树的加载和卸载
  115. virtual PVOID SYSTEM_CALL LoadLogicDevices();
  116. virtual void SYSTEM_CALL UnloadLogicDevices();
  117. void SYSTEM_CALL SetLogHandle(Logger PARAM_IN *pLogger);
  118. void SYSTEM_CALL SetDynLogHandle(Logger PARAM_IN *pLogger);
  119. //读取事件用的接口
  120. //功能上和顺序上有如下过程
  121. //1. 读取packet from SCF
  122. //2. 解析packet
  123. //3. dispatch packet to logicdevice
  124. //Ex:OnNotify有2个工作,一个是驱动实体的OnNotify,另一个是逻辑单元实体的OnNotify
  125. virtual DWORD SYSTEM_CALL OnNotify(HANDLE evtList[], DWORD count);
  126. virtual DPCDRIVERTYPE SYSTEM_CALL GetDPCType();
  127. virtual void DATA_ACTION FirstAction();
  128. };
  129. //typedef DriverDPC* (*GetDriverDPC)();
  130. //typedef void(*ReleaseDriverDPC)(DriverDPC *p);