DPC.cpp 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. // DPC.cpp : 定义 DLL 应用程序的导出函数。
  2. //
  3. #include "DPC.h"
  4. #include "RawCircleBuff.h"
  5. /*
  6. DPC::DPC()
  7. {
  8. m_pLog = NULL;
  9. };
  10. DPC::~DPC()
  11. {
  12. };
  13. //DPC入口,根据配置进行初始化
  14. //配置的格式要复合JSON规则,具体内容由各个驱动执行定义
  15. //配置内容是加载前驱动所需要的配置内容
  16. bool DPC::DpcEntry(ResDataObject& PARAM_IN Configuration)
  17. {
  18. //err log here
  19. return false;
  20. }
  21. //获取连接属性
  22. //多个SCF的情况下,将会有多个连接属性
  23. ResDataObject DPC::GetConnectionType()
  24. {
  25. //err log here
  26. return ResDataObject();
  27. }
  28. //进行跟设备连接
  29. bool SYSTEM_CALL DPC::Connect(ResDataObject& PARAM_IN Connection)
  30. {
  31. //err log here
  32. return false;
  33. }
  34. //判断设备的存在性.
  35. //检索成功后,返回【硬件信息资源】
  36. bool SYSTEM_CALL DPC::Probe(ResDataObject& PARAM_OUT HardwareInfo)
  37. {
  38. //err log here
  39. return false;
  40. }
  41. bool SYSTEM_CALL DPC::OnNotify(HANDLE ExitNotify)
  42. {
  43. //get SCF Notify
  44. //get Exit Notify
  45. //wait for SCF+Exit Notify
  46. //try lock scf
  47. //try get data.
  48. //translate it
  49. //dispatch it
  50. //unlock
  51. return false;
  52. }
  53. //给硬件驱动设置Unique工作路径
  54. //如果是同一设备同一连接情况下,硬件多次接入,系统会保证工作路径是一样的.
  55. //连接后,单一硬件相关的数据要保存在此.
  56. bool SYSTEM_CALL DPC::SetWorkPath(const char * PARAM_IN pWorkPath)
  57. {
  58. //err log here
  59. return false;
  60. }
  61. //逻辑设备树的加载和卸载
  62. PVOID SYSTEM_CALL DPC::LoadLogicDevices()
  63. {
  64. //err log here
  65. return NULL;
  66. }
  67. void SYSTEM_CALL DPC::UnloadLogicDevices(PVOID PARAM_IN p)
  68. {
  69. //err log here
  70. }
  71. bool SYSTEM_CALL DPC::DisConnect()
  72. {
  73. //err log here
  74. return false;
  75. }
  76. void SYSTEM_CALL DPC::SetLogHandle(Logger PARAM_IN *pLogger)
  77. {
  78. m_pLog = pLogger;
  79. }
  80. */
  81. //----------------------------------------------------------------------------
  82. DriverDPC::DriverDPC()
  83. {
  84. //m_pLog = NULL;
  85. //m_pDynLog = NULL;
  86. m_pDriverTree = new DevTree();//for static
  87. m_pDeviceTree = new DevTree();//for dyn
  88. m_pCircleBuff = new CircleBuff();
  89. m_pDriverConfigFilepath = new ResDataObject();
  90. };
  91. DriverDPC::~DriverDPC()
  92. {
  93. delete m_pDriverTree;
  94. delete m_pDeviceTree;
  95. delete (CircleBuff*)m_pCircleBuff;
  96. delete m_pDriverConfigFilepath;
  97. m_pDriverTree = NULL;
  98. m_pDeviceTree = NULL;
  99. m_pCircleBuff = NULL;
  100. };
  101. const char *DriverDPC::GetDriverConfigFilePath()
  102. {
  103. return (const char *)(*m_pDriverConfigFilepath);
  104. }
  105. void DriverDPC::SetDriverConfigFilePath(const char *pfilepath)
  106. {
  107. (*m_pDriverConfigFilepath) = pfilepath;
  108. }
  109. bool DriverDPC::BuffSetNotifyBuffSize(DWORD newSize, DWORD Limit)
  110. {
  111. ((CircleBuff*)m_pCircleBuff)->SetBuffMaxLimit(Limit);
  112. return (((CircleBuff*)m_pCircleBuff)->ReSetBuffSize(newSize));
  113. }
  114. DWORD DriverDPC::BuffQueNotify(const char *pBuff, DWORD Size)
  115. {
  116. return ((CircleBuff*)m_pCircleBuff)->Push(pBuff, Size);
  117. }
  118. INT DriverDPC::BuffDequeNotify(char *pBuff, DWORD Size)
  119. {
  120. return ((CircleBuff*)m_pCircleBuff)->Pop(pBuff, Size);
  121. }
  122. PVOID DriverDPC::GetDriverTree()
  123. {
  124. return m_pDriverTree;
  125. }
  126. PVOID DriverDPC::GetDeviceTree()
  127. {
  128. return m_pDeviceTree;
  129. }
  130. bool SYSTEM_CALL DriverDPC::DriverEntry(ResDataObject& PARAM_IN Configuration)
  131. {
  132. return false;
  133. }
  134. //进行跟设备连接,断开
  135. bool DriverDPC::Connect()
  136. {
  137. return false;
  138. }
  139. void DriverDPC::DisConnect()
  140. {
  141. }
  142. //返回【驱动信息资源】
  143. bool SYSTEM_CALL DriverDPC::Driver_Probe(ResDataObject& PARAM_OUT DriverInfo)
  144. {
  145. return false;
  146. }
  147. RET_STATUS SYSTEM_CALL DriverDPC::GetDriverDictionary(ResDataObject& PARAM_OUT DriverInfo)
  148. {
  149. return RET_FAILED;
  150. }
  151. //给驱动设置Unique工作路径
  152. bool SYSTEM_CALL DriverDPC::SetDriverWorkPath(const char * PARAM_IN pWorkPath)
  153. {
  154. return false;
  155. }
  156. //逻辑驱动树的加载和卸载
  157. //根节点就是 this
  158. PVOID SYSTEM_CALL DriverDPC::LoadDriver()
  159. {
  160. return NULL;
  161. }
  162. void SYSTEM_CALL DriverDPC::UnloadDriver()
  163. {
  164. }
  165. //判断设备的存在性.
  166. //检索成功后,返回【硬件信息资源】
  167. bool SYSTEM_CALL DriverDPC::Device_Probe(ResDataObject& PARAM_OUT HardwareInfo)
  168. {
  169. return false;
  170. }
  171. //给硬件驱动设置Unique工作路径
  172. //如果是同一设备同一连接情况下,硬件多次接入,系统会保证工作路径是一样的.
  173. //连接后,单一硬件相关的数据要保存在此.
  174. bool SYSTEM_CALL DriverDPC::SetDeviceWorkPath(const char * PARAM_IN pWorkPath)
  175. {
  176. return false;
  177. }
  178. //逻辑设备树的加载和卸载
  179. PVOID SYSTEM_CALL DriverDPC::LoadLogicDevices()
  180. {
  181. return NULL;
  182. }
  183. void SYSTEM_CALL DriverDPC::UnloadLogicDevices()
  184. {
  185. }
  186. //void SYSTEM_CALL DriverDPC::SetLogHandle(Logger PARAM_IN *pLogger)
  187. //{
  188. // m_pLog = pLogger;
  189. //}
  190. //
  191. //void SYSTEM_CALL DriverDPC::SetDynLogHandle(Logger PARAM_IN *pLogger)
  192. //{
  193. // m_pDynLog = pLogger;
  194. //}
  195. DWORD DriverDPC::OnNotify(std::vector<std::shared_ptr<LinuxEvent>> evtList, DWORD count) {
  196. return (LinuxEvent::WaitForMultipleEvents(evtList,-1) - 0);
  197. }
  198. DPCDRIVERTYPE SYSTEM_CALL DriverDPC::GetDPCType()
  199. {
  200. return DPCDRIVER_NORMAL;
  201. }
  202. void DriverDPC::FirstAction()
  203. {
  204. printf("DPC Thread First Action...\n");
  205. }