CommonFun.h 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. #pragma once
  2. #include "stdafx.h"
  3. #include <string>
  4. #include <mutex>
  5. #include <map>
  6. #include <assert.h>
  7. #include <functional>
  8. #include "DeliverModule.h"
  9. using namespace std::placeholders;
  10. namespace nsSerialGPM = DIOS::Dev::MODLE::SerialGPM;
  11. #define FullUCB_Com_NormalLen 64
  12. #define FullUCB_Com_HeadLen 7
  13. #define TIMEOUTVALUE 100
  14. #define msTimeOut_Lock 500
  15. #define FullUCB_Com_STX 0x3A
  16. #define FullUCB_Com_ETX 0x0D
  17. #define FullUCB_Com_EOT 0x0A
  18. #define CONFIG "DeviceConfig"
  19. //同步模式
  20. #define CONF_SyncMode "SupportSyncMode"
  21. //工作位
  22. #define CONF_TABLE "Table"
  23. #define CONF_WALL "Wall"
  24. #define CONF_FREE "Free"
  25. #define CONF_DIRE "Direct"
  26. //曝光模式
  27. #define CONF_DR "SingleRad"
  28. #define CONF_SR "SerialRad"
  29. #define CONF_CF "CoutineSerial"
  30. #define CONF_PF "PulseSerial"
  31. #define CONF_TOMO "TOMO"
  32. #define CONF_Stitch "Stitch"
  33. //配置标准字段
  34. #define CONF_AREAID "AREAID"
  35. #define CONF_EXOCOUNTS "EXOCOUNTS"
  36. #define CONF_INPUT "INPUT"
  37. #define CONF_OUTPUT "OUTPUT"
  38. #define CONF_CHANNEL "CHANNEL"
  39. #define CONF_ENABLE "ENABLE"
  40. #define CONF_DISABLE "DISABLE"
  41. #define CONF_ALLOWANCE "ALLOWANCE"
  42. #define CONF_RELAY "RELAY"
  43. #define CONF_SETENABLE "SETENABLE"
  44. #define CONF_SETDISABLE "SETDISABLE"
  45. //信号名称
  46. #define CONF_HANDSWITCHPREP "HANDSWITCHPREP"
  47. #define CONF_HANDSWITCHREADY "HANDSWITCHREADY"
  48. #define CONF_FOOTSWITCHREADY "FOOTSWITCHREADY"
  49. #define CONF_GENPREP "GENPREP"
  50. #define CONF_GENREADY "GENREADY"
  51. #define CONF_XWINDOWSTATUS "XWINDOWSTATUS"
  52. #define CONF_GENEXPSTATUS "GENEXPSTATUS"
  53. #define CONF_DETREACQREQUEST "DETREACQREQUEST"
  54. #define CONF_GENEXPREQUEST "GENEXPREQUEST"
  55. #define CONF_HANDSWITCHPREPREQUEST "HANDSWITCHPREPREQUEST"
  56. #define CONF_HANDSWITCHREADYREQUEST "HANDSWITCHREADYREQUEST"
  57. #define CONF_FOOTSWITCHREADYREQUEST "FOOTSWITCHREADYREQUEST"
  58. #define CONF_FRAMERATE "FRAMERATE"
  59. #define CONF_FOOTSWITCHSTATUS "FOOTSWITCHSATUS"
  60. namespace DIOS::Dev::Detail::SYNBOX
  61. {
  62. /*
  63. 指令编码格式:
  64. +命令头(0x3A)
  65. +命令对象(S表示同步盒,P表示电脑,其他的的再定)
  66. +命令字节(由2个字节组合形成)
  67. +数据格式(‘A’表示ASIIC码,‘B’表示二进制码,‘C’表示混合或其他模式)
  68. +数据长度(由2个字节组合,数据区可以(0~255))
  69. +数据区(根据数据长度发送的结果或数据)
  70. +校验和(由2个字节组成,详见注1)
  71. +结束位1(0x0D)+结束位2(0x0A)
  72. */
  73. //校验和计算
  74. //校验和:等于其前面的几个字节的总和%256,例如算出的校验和等于0X1A,我们发送的校验和为0x31和0X41
  75. int CalChecksum(const char* cCmd, int nCmdSize);
  76. //指令格式化
  77. bool FormatCmd(char* cCmd, int& nSize);
  78. //把指令转成字符串用以日志输出
  79. bool CmdtoString(const char* cCmd, int nCmdSize, std::string& strCmd);
  80. //目标字符串按指定分隔符截取第一个目标字段
  81. std::string GetContentFromString(std::string& strContent, char ch);
  82. //尝试按16进制解读字符串,并将解读成功的部分转换为10进制返回
  83. //例如str="169acegh12547",则会解读出"169ace",返回 1481422
  84. int String2Hex(std::string str);
  85. //Hex字符转化到Int
  86. int ChartoInt(char uc);
  87. //Hex字符转化到Int
  88. int HexUCtoInt(UCHAR uc);
  89. //Int转化成Hex字符
  90. char InttoHexUC(int ni);
  91. //串口指令映射表
  92. using cmdFun = std::function <void(const char*, int)>;
  93. struct tFrameMapping
  94. {
  95. enum CMDOverType
  96. {
  97. OverType_directly = 1,
  98. OverType_WaitTime = 2,
  99. OverType_WaitACK = 3
  100. };
  101. CMDOverType m_eOverType; //指令结束方式:1.直接退;2.等待一些时间;3.等待ACK
  102. bool m_bLogFlag; //设置日志打印
  103. cmdFun m_fFun; //处理函数
  104. int m_nWaitTime; //设置等待时间
  105. HANDLE m_hAckEvent; //设置ACK事件
  106. tFrameMapping();
  107. tFrameMapping(cmdFun fun, CMDOverType type, bool logFlag, int waitTime = 100);
  108. ~tFrameMapping();
  109. tFrameMapping& operator =(const tFrameMapping& value);
  110. void tSetWaitState(const char* CMD = NULL);
  111. void tCheckWaitState(const char* CMD = NULL);
  112. };
  113. extern std::map <std::string, tFrameMapping> arFrame;
  114. //-----------------------------------------------------------------------------
  115. // DecodeFrame
  116. //-----------------------------------------------------------------------------
  117. bool DecodeFrame(const char* strFrame, int length);
  118. bool SetWaitAction(const char* strFrame);
  119. bool CheckWaitState(const char* strFrame);
  120. //串口处理层
  121. void __stdcall ProcessClientData(const char* pData, unsigned long DataLength, void* lparam);
  122. void __stdcall WriteLog(const char* pData, nsSerialGPM::LOG_V2_LEVEL level);
  123. RET_STATUS HWSendNormal(char* strCommand, int lengh, int headLengh = 1);
  124. RET_STATUS HWSendDirectly(char* strCommand, int lengh, int headLengh = 1);
  125. RET_STATUS HWSendWaittimeCMD(char* strCommand, int lengh, int headLengh = 1);
  126. RET_STATUS HWSendWaitSelfCMD(char* strCommand, int lengh, int headLengh = 1);
  127. }