VmsPasigProtocolF.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. /****************************************************************************
  2. * @source : VMSProtocolF.h
  3. * @description : VMS Protocol header
  4. ****************************************************************************
  5. * DATE AUTHOR DESCRIPTION
  6. * --------------------------------------------------------------------------
  7. * 2016/09/02 shjung
  8. *
  9. ****************************************************************************/
  10. //---------------------------------------------------------------------------
  11. #ifndef __VMSPROTOCOL_H__
  12. #define __VMSPROTOCOL_H__
  13. //---------------------------------------------------------------------------
  14. #pragma pack(push, 1)
  15. //---------------------------------------------------------------------------
  16. #define DEFAULT_TCP_PACKET_MAX_SIZE 2048 // default tcp packet max size
  17. #define VMS_DEFAULT_PORT 6020 /* 기본 포드 */
  18. #define VMS_DEFAULT_TIMEOUT 5 /* 5 Sec */
  19. #define VMS_MAX_PACKET_SIZE 65535 /* max packet size */
  20. #define VMS_MIN_PACKET_SIZE 8 /* min packet size */
  21. #define VMS_MAX_DATAGRAM_SIZE 65535 /* max DatagramSize */
  22. #define VMS_CHECK_TIME 60 /* vms check on/off time */
  23. #define VMS_MAX_DEVICE 64 // 64 EA, 현장 설치 9대
  24. #define VMS_MAX_HEARTBEAT_TIME 30 /* max HeartbeatTime */
  25. // Prtocol Data
  26. #define VMS_DLE 0x10 // Data Link Escape
  27. #define VMS_STX 0x02 // Start of TeXt
  28. #define VMS_ETX 0x03 // End of TeXt
  29. #define VMS_ACK 0x06 // ACK
  30. #define VMS_NAK 0x15 // NAK
  31. // PASIG VMS Protocol
  32. #define REQ_VMS_STATUS 0x50 // Status 요청, 센터->VMS
  33. #define RES_VMS_STATUS 0x50 // Status 응답, VMS->센터
  34. #define REQ_VMS_MSG_DOWNLOAD 0x51 // 문안 전송 요청, 센터->VMS
  35. #define RES_VMS_MSG_DOWNLOAD 0x51 // 문안 전송 응답, VMS->센터
  36. #define REQ_VMS_LIB_DOWNLOAD 0x52 // Library download 요청, 센터->VMS
  37. #define RES_VMS_LIB_DOWNLOAD 0x52 // Library download 응답, VMS->센터
  38. #define REQ_VMS_PARAM_DOWNLOAD 0x53 // Parameter download 요청, 센터->VMS
  39. #define RES_VMS_PARAM_DOWNLOAD 0x53 // Parameter download 응답, VMS->센터
  40. #define REQ_VMS_BLANK_DISP 0x54 // Blank 요청, 센터->VMS
  41. #define RES_VMS_BLANK_DISP 0x54 // Blank 응답, VMS->센터
  42. #define REQ_VMS_DEF_MSG_DISP 0x55 // Default message display 요청, 센터->VMS
  43. #define RES_VMS_DEF_MSG_DISP 0x55 // Default message display 응답, VMS->센터
  44. #define REQ_VMS_MODULE_STATUS 0x56 // Module status upload 요청, 센터->VMS
  45. #define RES_VMS_MODULE_STATUS 0x56 // Module status upload 응답, VMS->센터
  46. #define REQ_VMS_INITIALIZE 0x57 // Initialize 요청, 센터->VMS
  47. #define RES_VMS_INITIALIZE 0x57 // Initialize 응답, VMS->센터
  48. #define REQ_VMS_LUMINANCE_LEVEL_SET 0x58 // Luminance level set 요청, 센터->VMS
  49. #define RES_VMS_LUMINANCE_LEVEL_SET 0x58 // Luminance level set 응답, VMS->센터
  50. #define REQ_SIGNBOARD_POWER_CONTROL 0x59 // Signboard power control 요청, 센터->VMS
  51. #define RES_SIGNBOARD_POWER_CONTROL 0x59 // Signboard power control 응답, VMS->센터
  52. typedef struct tabBit
  53. {
  54. BYTE u0:1;
  55. BYTE u1:1;
  56. BYTE u2:1;
  57. BYTE u3:1;
  58. BYTE u4:1;
  59. BYTE u5:1;
  60. BYTE u6:1;
  61. BYTE u7:1;
  62. } BIT;
  63. typedef struct tabNAK
  64. {
  65. BYTE crc:1; // CRC error
  66. BYTE cmd:1; // Bad Command
  67. BYTE dat:1; // Bad Data
  68. BYTE nbr:1; // Bad Number
  69. BYTE chk:1; // Pixel Check
  70. BYTE res:3;
  71. } NAK;
  72. typedef union tagAckNak
  73. {
  74. BYTE ack;
  75. NAK nak;
  76. } ACK_NAK;
  77. #define POS_ACKNAK 11
  78. typedef struct tagVmsStatus1
  79. {
  80. BYTE localModeActive : 1;
  81. BYTE defaultParameter : 1;
  82. BYTE resetOccured : 1;
  83. BYTE longPowerFail : 1;
  84. BYTE shortPowerFail : 1;
  85. BYTE doorOpen : 1;
  86. BYTE moduleErrRateOver: 1;
  87. BYTE ramRomError : 1;
  88. } VMS_STATUS1;
  89. typedef struct tagVmsStatus2
  90. {
  91. BYTE libChecksumErr: 1;
  92. BYTE fan : 1;
  93. BYTE heater : 1;
  94. BYTE boardPower : 1;
  95. BYTE boardPowerFail: 1;
  96. BYTE blankDisp : 1;
  97. BYTE sirenFail : 1;
  98. BYTE reserved : 1;
  99. } VMS_STATUS2;
  100. typedef union tagVmsStatus
  101. {
  102. char tmp[2];
  103. } VMS_STATUS;
  104. // Protocol Packet Header
  105. typedef struct tagPktHead
  106. {
  107. BYTE STX;
  108. BYTE ID;
  109. BYTE OpCode;
  110. UINT Size;
  111. char ADDR[4];
  112. } PKT_HEAD;
  113. typedef struct tagVmsPaket
  114. {
  115. PKT_HEAD hd;
  116. BYTE data[VMS_MAX_PACKET_SIZE];
  117. } VMS_PACKET;
  118. // VMS Packet Receive Sate
  119. typedef enum
  120. {
  121. RX_STX,
  122. RX_HEAD,
  123. RX_DATA,
  124. RX_CRC,
  125. RX_ETX,
  126. } RX_STATE;
  127. typedef enum en_sys_err_cd
  128. {
  129. SYS_ERR_NONE, //0 no error
  130. SYS_ERR_OTHER, //1 other
  131. SYS_ERR_INTERNAL, //2 internal system error(kernel..)
  132. SYS_ERR_MEMORY, //3 memory overflow
  133. SYS_ERR_DATABASE, //4 system database error
  134. SYS_ERR_RESET, //5 system reset
  135. SYS_ERR_START, //6 system start
  136. SYS_ERR_OFFLINE, //7 offline
  137. SYS_ERR_NO_RES, //8 no response
  138. SYS_ERR_ACCESS, //9 access denied
  139. SYS_ERR_INVALID, //10 invalid data type
  140. SYS_ERR_UNKNOWN, //11 unknown data type
  141. SYS_ERR_WRITE_LENGTH, //12 write length
  142. SYS_ERR_PACKET_SIZE_LARGE, //13 packet size large
  143. SYS_ERR_INVALID_TAG, //14 invalid tag
  144. SYS_ERR_CRC, //15 crc
  145. SYS_ERR_LENGTH, //16 length
  146. SYS_ERR_ADDRESS, //17 address
  147. SYS_ERR_HEADER_OPTIONS, //18 header options
  148. SYS_ERR_UNKNOWN_COMMAND, //19 unknown command
  149. SYS_ERR_RECEIVE_TIMEOUT, //20 receive timeout
  150. SYS_ERR_DATA_SIZE, //21 data size
  151. SYS_ERR_MISMATCH, //22 mismatch command
  152. SYS_ERR_INVALID_PARA, //23 invalid parameter
  153. SYS_ERR_MOVEMENT, //24 movement
  154. SYS_ERR_UNAUTHORIZED, //25 unauthorized
  155. SYS_ERR_DATEXDATAPACKET_DECODE, /* 26 DatexDataPacket decode */
  156. SYS_ERR_INVALID_VERSION_NUMBER, /* 27 invalid version number */
  157. SYS_ERR_C2CAUTHENTICATEDMESSAGE_DECODE, /* 28 C2CAuthenticatedMessage decode */
  158. SYS_ERR_C2CAUTHENTICATEDMESSAGE, /* 29 C2CAuthenticatedMessage */
  159. SYS_ERR_NOT_LOGIN, /* 30 Not login */
  160. SYS_ERR_ACCEPT_TYPE, /* 31 Accept Type */
  161. SYS_ERR_DATEXPUBLISH_FORMAT, /* 32 datexPublish Format */
  162. SYS_ERR_DATEXPUBLISH_TYPE, /* 33 datexPublish Type */
  163. SYS_ERR_UNKNOWN_MESSAGE_ID, /* 34 unknown Message id */
  164. SYS_ERR_MESSAGE_DECODE, /* 35 Message decode */
  165. SYS_ERR_DATEXDATAPACKET_ENCODE, /* 36 DatexDataPacket encode */
  166. SYS_ERR_C2CAUTHENTICATEDMESSAGE_ENCODE, /* 37 C2CAuthenticatedMessage encode */
  167. SYS_ERR_MESSAGE_ENCODE, /* 38 Message encode */
  168. SYS_ERR_PUBLICATIONDATA_ENCODE, /* 39 PublicationData encode */
  169. SYS_ERR_MISMATCH_DESTINATION_TEXT, /* 40 mismatch Destination text */
  170. SYS_ERR_DATEXLOGIN_VALUE, /* 41 Login Value */
  171. SYS_ERR_SUBSCRIPTION_TYPE, /* 42 SubscriptionType Type */
  172. SYS_ERR_SUBSCRIPTION_STATUS_VALUE, /* 43 SubscriptionType Status Value */
  173. SYS_ERR_SUBSCRIPTION_MODE_VALUE, /* 44 SubscriptionType Mode Value */
  174. SYS_ERR_SUBSCRIPTION_FORMAT_VALUE, /* 45 SubscriptionType Format Value */
  175. SYS_ERR_HANGUL_CONVERSION, /* 46 Hangul Conversion */
  176. SYS_ERR_INVALID_TAGANDLEN, /* 47 invalid Tag And Len */
  177. SYS_ERR_PUBLICATIONDATA_DECODE /* 48 PublicationData decode */
  178. } EN_SYS_ERR_CD;
  179. // 클라이언트 요청
  180. typedef struct client_command
  181. {
  182. BYTE MsgSeq; /* 통신 일련 번호 */
  183. DWORD ProcessID; /* 프로세스 ID */
  184. WORD OpCode; /* 데이터 내용을 구분하는 업무 코드 */
  185. WORD wSize; /* Size */
  186. } CLIENT_COMMAND;
  187. typedef enum en_subscription_nbr
  188. {
  189. NBR_GENERAL_STATUS = 1,
  190. NBR_MODULE_STATUS,
  191. NBR_POWER_STATUS,
  192. NBR_REALTIME_DISPLAY,
  193. NBR_DOT_STATUS,
  194. NBR_SCREEN_STATUS,
  195. NBR_DISPLAYING_DATA,
  196. } EN_SUBSCRIPTION_NBR;
  197. typedef enum en_publication_nbr
  198. {
  199. NBR_MODULE_POWER = 1,
  200. NBR_LUMINANCE,
  201. NBR_CONTROLLER_RESET,
  202. NBR_STATUS_SETTING,
  203. NBR_SCREEN_STATUS_REQ,
  204. NBR_REALTIME_DISPLAY_REQ,
  205. NBR_BASE_REALTIMEDISPLAY = 100,
  206. NBR_BASE_SCHEDULEDDISPLAY = 200,
  207. NBR_BASE_DOWNLOADGRAPHICDATA = 300
  208. } EN_PUBLICATION_NBR;
  209. typedef struct subscription_argument
  210. {
  211. DWORD nbr; /* datexSubscribe_Serial_nbr */
  212. int mode; /* SubscriptionMode */
  213. int delay; /* datexRegistered_UpdateDelay_qty */
  214. int obj; /* EN_OBJECT_ID */
  215. } SUBSCRIPTION_ARGUMENT;
  216. typedef struct
  217. {
  218. DWORD SubscribeSerialNbr; /* Subscribe Serial Nbr */
  219. int obj; /* EN_OBJECT_ID */
  220. char szFormId[10];
  221. union
  222. {
  223. struct
  224. {
  225. BYTE Mode; /* EN_VMS_MODE */
  226. int Idx; /* index */
  227. } Form;
  228. struct
  229. {
  230. int Idx; /* index */
  231. } Down;
  232. BYTE Ctl; /* EN_STATUS_CONTROL */
  233. struct
  234. {
  235. int SchMsgTime; /* scheduledMessage_OperatingTimeQty */
  236. int ModuleTemp; /* module_OperatingTemperatureQty */
  237. int FanTemp; /* fan_OperatingTemperatureQty */
  238. int HeaterTemp; /* heater_OperatingTemperatureQty */
  239. int ModuleFail; /* module_BasicFailureRate */
  240. int RetryCount; /* maximum_RetryQty */
  241. int TimeOut; /* response_TimeOutQty */
  242. } Set;
  243. struct
  244. {
  245. BYTE DefCommErr; // 통신장애 기본값, 제어기가 Host로부터 Poll 또는 명령을 받지 않고 경과할 수 있는 최대시간 (default ; 60초)
  246. short SlotCommErr; // 통신장애 slot번호, 통신 fail 시 표시할 메시지 번호(default 0번)
  247. short SlotPowerErr; // 전원장애 slot번호, 전원장애 시 표시할 메시지 번호(default 0번)
  248. BYTE NightLuminance; // 야간 휘도 값, 0x30 ~ 0x3F
  249. BYTE DayLuminance; // 주간 휘도 값, 0x40 ~ 0x4F
  250. BYTE PhaseCycleTime; // phase시간주기, 장애시 phase주기 (default : 3초, 범위 : 0 ~ 10초)
  251. BYTE ModuleFailRate; // 모듈장애율, 한개의 module을 장애로 처리하기 위한 장애 pixel백분율 (default 10%)
  252. BYTE ModuleCheckTime; // 모듈감시 주기, 0 ~ 255 (단위:초)
  253. BYTE BoardOnHour; // 전광판 On time(시), 0시 ~ 23시
  254. BYTE BoardOnMin; // 전광판 On time(분), 0시 ~ 23시
  255. BYTE BoardOffHour; // 전광판 Off time(시), 0시 ~ 23시
  256. BYTE BoardOffMin; // 전광판 Off time(분), 0시 ~ 23시
  257. } Set2;
  258. } Data;
  259. } PUBLICATION_ARGUMENT;
  260. typedef union command_argument
  261. {
  262. DWORD FrED; /* datexFrED_ConfirmPacket_nbr */
  263. int Logout; /* logout code */
  264. int Terminate; /* terminate code */
  265. struct
  266. {
  267. DWORD nbr; /* datexAccept_Packet_nbr */
  268. int type; /* accept type */
  269. DWORD sub; /* registered subscription */
  270. } Accept;
  271. struct
  272. {
  273. DWORD nbr; /* datexReject_Packet_nbr */
  274. int type; /* accept type */
  275. int code; /* reject code */
  276. } Reject;
  277. PUBLICATION_ARGUMENT Publication; /* Publication */
  278. SUBSCRIPTION_ARGUMENT Subscription; /* Subscription */
  279. } COMMAND_ARGUMENT;
  280. //---------------------------------------------------------------------------
  281. #pragma pack(pop)
  282. //---------------------------------------------------------------------------
  283. #endif