LogicDevice.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. #pragma once
  2. // 下列 ifdef 块是创建使从 DLL 导出更简单的
  3. // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 LOGICDEVICE_EXPORTS
  4. // 符号编译的。在使用此 DLL 的
  5. // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
  6. // LOGICDEVICE_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
  7. // 符号视为是被导出的。
  8. #ifndef LOGICDEVICE_EXPORTS
  9. #ifdef _WIN64
  10. #ifdef _DEBUG
  11. #pragma comment(lib, "LogicDeviceX64D.lib")
  12. #else
  13. #pragma comment(lib, "LogicDeviceX64.lib")
  14. #endif
  15. #else
  16. #ifdef _DEBUG
  17. #pragma comment(lib, "LogicDeviceD.lib")
  18. #else
  19. #pragma comment(lib, "LogicDevice.lib")
  20. #endif
  21. #endif
  22. #endif
  23. #ifdef LOGICDEVICE_EXPORTS
  24. #define LOGICDEVICE_API __declspec(dllexport)
  25. #else
  26. #define LOGICDEVICE_API __declspec(dllimport)
  27. #endif
  28. #include <Rpc.h>
  29. #include "Definitions.h"
  30. #include "ResDataObject.h"
  31. #include "logger.h"
  32. #include "DPC.h"
  33. #include "DiosLock.h"
  34. //#ifndef GUID
  35. //typedef struct _GUID {
  36. // unsigned int Data1;
  37. // unsigned int Data2;
  38. // unsigned int Data3;
  39. // char Data4[8];
  40. //} GUID;
  41. //#endif
  42. class LogicDevice;
  43. class LOGICDEVICE_API LogicDeviceSysIF
  44. {
  45. protected:
  46. LogicDevice *m_pLogicDev;
  47. public:
  48. LogicDeviceSysIF(void);
  49. virtual ~LogicDeviceSysIF(void);
  50. //init
  51. void SetLogicDevice(LogicDevice *p);
  52. LogicDevice* GetLogicDevice();
  53. //Command In and Out
  54. //notify from lower layer
  55. virtual RET_STATUS HW_ACTION CmdFromLogicDev(ResDataObject PARAM_IN *pCmd);
  56. //notify to lower layer
  57. virtual RET_STATUS SYSTEM_CALL CmdToLogicDev(ResDataObject PARAM_IN *pCmd);
  58. };
  59. class LOGICDEVICE_API LogicDevice : public DiosLock
  60. {
  61. //friend class LogicDeviceSysIF;
  62. LogicDeviceSysIF *m_pSysLogic;
  63. protected:
  64. Logger *m_pLogger;
  65. char *m_pDevInstance;
  66. ResDataObject *m_pResErrorList;
  67. HANDLE m_EvtNotify;//此事件的目的是当本地有事件发生,而这事件需要要往上传递,需要驱动线程主动下来GET.
  68. DriverDPC *m_pDrvDPC;//设备对象的HOST
  69. public:
  70. LogicDevice(void);
  71. virtual ~LogicDevice(void);
  72. //1. init part
  73. void SYSTEM_CALL SetSysLogicDevice(LogicDeviceSysIF PARAM_IN *pLogic);
  74. void SYSTEM_CALL SetLogHandle(Logger PARAM_IN *pLogger);
  75. //2. common part
  76. Logger *GetLogHandle();
  77. void SetDrvDPC(DriverDPC *pDPC);
  78. DriverDPC *GetDrvDPC();
  79. HANDLE GetEvtHandle();
  80. void NotifyDrvThread();
  81. virtual RET_STATUS SYSTEM_CALL EvtProcedure();//m_EvtNotify事件发生后,由上层驱动线程进行调入.
  82. //use windows Thread Priorities
  83. //THREAD_PRIORITY_NONE (use common thread)
  84. //THREAD_PRIORITY_IDLE (use independent thread with priority)
  85. //THREAD_PRIORITY_LOWEST (...)
  86. //THREAD_PRIORITY_BELOW_NORMAL(...)
  87. //THREAD_PRIORITY_NORMAL(...)
  88. //THREAD_PRIORITY_ABOVE_NORMAL(...)
  89. //THREAD_PRIORITY_HIGHEST (...)
  90. //THREAD_PRIORITY_TIME_CRITICAL(...)
  91. virtual int SYSTEM_CALL GetDevice_Thread_Priority();//return THREAD_PRIORITY_NONE
  92. //get device type,returns device type GUID
  93. virtual bool SYSTEM_CALL GetDeviceType(GUID &DevType) = 0;
  94. virtual void SYSTEM_CALL CompleteInit();
  95. virtual void SYSTEM_CALL CompleteUnInit();
  96. //get device resource
  97. virtual RET_STATUS SYSTEM_CALL GetDeviceResource(ResDataObject PARAM_OUT *pDeviceResource);
  98. //3. command
  99. //normal sync routine,Request to device and response from device
  100. virtual RET_STATUS SYSTEM_CALL Request(ResDataObject PARAM_IN *pRequest, ResDataObject PARAM_OUT *pResponse) = 0;
  101. //upper layer ------------------------------> lower layer
  102. //app -> service -> framework -> logicdevice -> hw
  103. //notify to lower layer
  104. virtual RET_STATUS SYSTEM_CALL CmdToLogicDev(ResDataObject PARAM_IN *pCmd) = 0;
  105. //notify from lower layer
  106. RET_STATUS HW_ACTION CmdFromLogicDev(ResDataObject PARAM_IN *pCmd);
  107. virtual RET_STATUS HW_ACTION AddErrorMessage(const char* DevInstance, const char* Code, int &Level, const char* ResInfo, const char* Description, int nMessageType = 0);
  108. virtual RET_STATUS HW_ACTION AddErrorMessage(const char* Code, int &Level, const char* ResInfo, int nMessageType = 0);
  109. virtual RET_STATUS HW_ACTION DelErrorMessage(const char* DevInstance, const char* Code, int &Level, const char* ResInfo, const char* Description, int nMessageType = 0);
  110. virtual RET_STATUS HW_ACTION DelErrorMessage(const char* Code, int &Level, const char* ResInfo, int nMessageType = 0);
  111. };