LogicDevice.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. #pragma once
  2. #define LOGICDEVICE_API
  3. #include <uuid/uuid.h>
  4. #include "Definitions.h"
  5. #include "ResDataObject.h"
  6. #include "logger.h"
  7. #include "DPC.h"
  8. #include "CcosLock.h"
  9. //#ifndef GUID
  10. //typedef struct _GUID {
  11. // unsigned int Data1;
  12. // unsigned int Data2;
  13. // unsigned int Data3;
  14. // char Data4[8];
  15. //} GUID;
  16. //#endif
  17. typedef enum _SyslogLevel {
  18. Syslog_Debug = 0,
  19. Syslog_Information = 1,
  20. Syslog_Warning = 2,
  21. Syslog_Recoverable = 3,
  22. Syslog_Error = 4,
  23. Syslog_Fatal = 5,
  24. Syslog_Telegram = 6,
  25. Syslog_XReset = 7,
  26. Syslog_MAX
  27. }SYSLOGLEVEL;
  28. #define SYSLOG_DEBUG(Code,format,...) SystemLog(Syslog_Debug,Code,format,__VA_ARGS__)
  29. #define SYSLOG_INFO(Code,format,...) SystemLog(Syslog_Information,Code,format,__VA_ARGS__)
  30. #define SYSLOG_WARNING(Code,format,...) SystemLog(Syslog_Warning,Code,format,__VA_ARGS__)
  31. #define SYSLOG_ERROR(Code,format,...) SystemLog(Syslog_Error,Code,format,__VA_ARGS__)
  32. #define SYSLOG_FATAL(Code,format,...) SystemLog(Syslog_Fatal,Code,format,__VA_ARGS__)
  33. class LogicDevice;
  34. class LOGICDEVICE_API LogicDeviceSysIF
  35. {
  36. protected:
  37. LogicDevice *m_pLogicDev;
  38. public:
  39. LogicDeviceSysIF(void);
  40. virtual ~LogicDeviceSysIF(void);
  41. //init
  42. void SetLogicDevice(LogicDevice *p);
  43. LogicDevice* GetLogicDevice();
  44. //Command In and Out
  45. //notify from lower layer
  46. virtual RET_STATUS CmdFromLogicDev(ResDataObject *pCmd);
  47. //notify to lower layer
  48. virtual RET_STATUS CmdToLogicDev(ResDataObject *pCmd);
  49. };
  50. class LOGICDEVICE_API LogicDevice : public CcosLock
  51. {
  52. //friend class LogicDeviceSysIF;
  53. LogicDeviceSysIF *m_pSysLogic;
  54. protected:
  55. Logger *m_pLogger;
  56. char *m_pDevInstance;
  57. ResDataObject *m_pResErrorList;
  58. pthread_cond_t m_EvtNotify;
  59. pthread_mutex_t m_EvtMutex;
  60. // Linux替换: 使用信号量
  61. sem_t m_SemphRequest;
  62. sem_t m_SemphPublish;
  63. DriverDPC *m_pDrvDPC;//设备对象的HOST
  64. RET_STATUS SystemLog(SYSLOGLEVEL Level, const char *pCode, const char* fmt, ...);
  65. RET_STATUS IoSystemLog(int Level, const char* pCode, const char* pContext,size_t ContextSize, const char* pAppId = "");
  66. bool CheckFeatureLicense(const char *pszFeatureId);
  67. virtual RET_STATUS HW_ACTION AddErrorMessageBase(const char* DevInstance, const char* Code, int &Level, const char* ResInfo, const char* Description, int nMessageType = 0, const char* pAppId = "");
  68. public:
  69. LogicDevice(void);
  70. virtual ~LogicDevice(void);
  71. //1. init part
  72. void SYSTEM_CALL SetSysLogicDevice(LogicDeviceSysIF PARAM_IN *pLogic);
  73. void SYSTEM_CALL SetLogHandle(Logger PARAM_IN *pLogger);
  74. //2. common part
  75. Logger *GetLogHandle();
  76. void SetDrvDPC(DriverDPC *pDPC);
  77. DriverDPC *GetDrvDPC();
  78. HANDLE GetEvtHandle();
  79. void NotifyDrvThread();
  80. virtual RET_STATUS SYSTEM_CALL EvtProcedure();//m_EvtNotify事件发生后,由上层驱动线程进行调入.
  81. //use windows Thread Priorities
  82. //THREAD_PRIORITY_NONE (use common thread)
  83. //THREAD_PRIORITY_IDLE (use independent thread with priority)
  84. //THREAD_PRIORITY_LOWEST (...)
  85. //THREAD_PRIORITY_BELOW_NORMAL(...)
  86. //THREAD_PRIORITY_NORMAL(...)
  87. //THREAD_PRIORITY_ABOVE_NORMAL(...)
  88. //THREAD_PRIORITY_HIGHEST (...)
  89. //THREAD_PRIORITY_TIME_CRITICAL(...)
  90. virtual int SYSTEM_CALL GetDevice_Thread_Priority();//return THREAD_PRIORITY_NONE
  91. //get device type,returns device type GUID
  92. virtual bool SYSTEM_CALL GetDeviceType(GUID &DevType) = 0;
  93. virtual void SYSTEM_CALL CompleteInit();
  94. virtual void SYSTEM_CALL CompleteUnInit();
  95. //get device resource
  96. virtual RET_STATUS SYSTEM_CALL GetDeviceResource(ResDataObject PARAM_OUT *pDeviceResource);
  97. //3. command
  98. //normal sync routine,Request to device and response from device
  99. virtual RET_STATUS SYSTEM_CALL Request(ResDataObject PARAM_IN *pRequest, ResDataObject PARAM_OUT *pResponse) = 0;
  100. //upper layer ------------------------------> lower layer
  101. //app -> service -> framework -> logicdevice -> hw
  102. //notify to lower layer
  103. virtual RET_STATUS SYSTEM_CALL CmdToLogicDev(ResDataObject PARAM_IN *pCmd) = 0;
  104. //notify from lower layer
  105. RET_STATUS HW_ACTION CmdFromLogicDev(ResDataObject PARAM_IN *pCmd);
  106. virtual RET_STATUS HW_ACTION AddErrorMessageUnicode(const char* DevInstance, const char* Code, int &Level, const wchar_t* ResInfo, const wchar_t* Description, int nMessageType = 0);
  107. virtual RET_STATUS HW_ACTION AddErrorMessage(const char* DevInstance, const char* Code, int &Level, const char* ResInfo, const char* Description, int nMessageType = 0, const char* pAppId = "");
  108. virtual RET_STATUS HW_ACTION AddErrorMessage(const char* Code, int &Level, const char* ResInfo, int nMessageType = 0, const char* pAppId = "");
  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. };