/**************************************************************************** * @source : WVMSProtocol.h * @description : Wireless VMS Protocol header **************************************************************************** * DATE AUTHOR DESCRIPTION * -------------------------------------------------------------------------- * 2012/03/09 CYM [100] First Cut * ****************************************************************************/ //--------------------------------------------------------------------------- #ifndef __WVMSPROTOCOL_H__ #define __WVMSPROTOCOL_H__ //--------------------------------------------------------------------------- #pragma pack(push, 1) //--------------------------------------------------------------------------- /*************************************** ** ** Constants ** */ #define WVMS_DEFAULT_PORT 6021 /* ±âº» Æ÷µå */ #define WVMS_DEFAULT_TIMEOUT 3 /* 3 Sec */ #define WVMS_MAX_RETRY_COUNT 3 /* 3 EA */ #define WVMS_HEADER_SIZE (sizeof(WVMS_HEAD_STRUCT)) #define WVMS_TAIL_SIZE (sizeof(WVMS_TAIL_STRUCT)) #define WVMS_MAX_PACKET_SIZE 1024 /* max packet size */ #define WVMS_MIN_PACKET_SIZE 8 /* min packet size */ #define WVMS_MAX_DATA_SIZE 1016 /* 1024-8 Byte */ #define WVMS_HEADER_INFO_SIZE 5 /* DeviceId + OpCode + PacketNo + Length */ #define WVMS_DEFAULT_CYCLE 60 /* 60 Sec */ //control characters #define WVMS_NULL 0x00 /* ³Î¹®ÀÚ */ #define WVMS_SOH 0x01 /* Çì´õÀÇ ½ÃÀÛ */ #define WVMS_STX 0x02 /* ÅØ½ºÆ®ÀÇ ½ÃÀÛÀ̸ç, µ¥ÀÌÅÍ ºí·ÏÀÇ ½ÃÀÛ */ #define WVMS_ETX 0x03 /* ÅØ½ºÆ®ÀÇ ³¡À̸ç, µ¥ÀÌÅÍ ºí·ÏÀÇ ³¡ */ #define WVMS_EOT 0x04 /* Àü¼ÛÀÇ ³¡À̸ç, µ¥ÀÌÅÍ È帧À» Á¾·á */ #define WVMS_ENQ 0x05 /* ¿äû(»ó´ë¹æ È®ÀÎ) */ #define WVMS_ACK 0x06 /* ½ÂÀÎ */ #define WVMS_DLE 0x10 /* Data Link Escape */ #define WVMS_NAK 0x15 /* ºñ½ÂÀÎ */ #define WVMS_SYN 0x16 /* synchronous idle */ #define WVMS_ETB 0x17 /* Àü¼Û ºí·ÏÀÇ ³¡ */ #define WVMS_ESC 0x1B /* escape */ //OP-CODE #define WVMS_OP_ACK 0x06 /* ½ÂÀÎ */ #define WVMS_OP_NACK 0x15 /* ºñ½ÂÀÎ */ #define WVMS_OP_CMD 0x25 /* Á¦¾î¸í·É */ #define WVMS_OP_STATE_REQ 0x27 /* »óÅÂÁ¤º¸ ¿äû */ #define WVMS_OP_STATE_RES 0x28 /* »óÅÂÁ¤º¸ ÀÀ´ä */ #define WVMS_DEVICE_ID 0x21 /* ½Ã¼³¹° ÀåÄ¡ÀÇ ±¸ºÐ ID */ /* ¿À·ù ÄÚµå */ enum EN_WVMS_ERROR_CODE{ WVMS_ERROR_ETC, /* 0:±âŸ */ WVMS_ERROR_DATA_LENGTH, /* 1:Data Length Error */ WVMS_ERROR_UNKNOWN_OPCODE, /* 2:Unknown OP Code */ WVMS_ERROR_DEVICE_ID, /* 3:Invalid Device ID */ WVMS_ERROR_CHECK_SUM /* 4:Check Sum Error */ }; /* Á¦¾î ÄÚµå */ enum EN_WVMS_CTL_CODE{ WVMS_CTL_POWER_ON = 1, /* 1:Àü±¤ÆÇ Power On */ WVMS_CTL_POWER_OFF, /* 2:Àü±¤ÆÇ Power Off */ WVMS_CTL_RESET /* 3:½Ã½ºÅÛ Reset */ }; /*************************************** ** ** Error codes ** */ /*************************************** ** ** Code macros ** */ /*************************************** ** ** Type definitions ** */ /* HEAD */ typedef struct wvms_head_struct { BYTE Stx; /* Start Transmission */ BYTE DeviceId; /* ½Ã¼³¹° ÀåÄ¡ÀÇ ±¸ºÐ ID */ BYTE OpCode; /* Operation Code */ BYTE PacketNo; /* Packet ÀϷùøÈ£, 1~255 */ WORD Length; /* Length */ }WVMS_HEAD_STRUCT; /* DATA */ typedef struct wvms_data_struct { BYTE Data[WVMS_MAX_DATA_SIZE]; /* Data */ }WVMS_DATA_STRUCT; /* TAIL */ typedef struct wvms_tail_struct { BYTE CheckSum; /* Check Sum */ BYTE Etx; /* End Transmission */ }WVMS_TAIL_STRUCT; /* ½ÂÀÎ */ typedef struct{ WORD VmsId; /* VMS ID, 1~65535 */ BYTE RecvOpCode; /* ¼ö½Å OP Code */ BYTE RecvPacketNo; /* ¼ö½Å Packet No */ }WVMS_ACK_RES_STRUCT; /* ºñ½ÂÀÎ */ typedef struct{ WORD VmsId; /* VMS ID, 1~65535 */ BYTE RecvOpCode; /* ¼ö½Å OP Code */ BYTE RecvPacketNo; /* ¼ö½Å Packet No */ BYTE Error; /* ¿À·ù ÄÚµå */ }WVMS_NACK_RES_STRUCT; /* Á¦¾î¸í·É */ typedef struct{ WORD VmsId; /* VMS ID, 1~65535 */ BYTE CtlCode; /* Á¦¾î ÄÚµå */ }WVMS_CMD_REQ_STRUCT; /* »óÅÂÁ¤º¸ ¿äû */ typedef struct{ WORD VmsId; /* VMS ID, 1~65535 */ }WVMS_STATE_REQ_STRUCT; /* »óÅÂÁ¤º¸ ÀÀ´ä */ typedef struct{ WORD VmsId; /* VMS ID, 1~65535 */ BYTE Voltage; /* Àü¾Ð, 0~255 */ BYTE Temp; /* ¿Âµµ, -128~127 2ÀÇ º¸¼ö */ struct{ BYTE Dummy : 5; /* Reserved */ BYTE Heater : 1; /* Heater µ¿ÀÛ, 0:Á¤Áö 1:ÀÛµ¿ */ BYTE Fan : 1; /* FAN µ¿ÀÛ, 0:Á¤Áö 1:ÀÛµ¿ */ BYTE Door : 1; /* Door ¿­¸², 0:´ÝÈû 1:¿­¸² */ }State; BYTE Power; /* ¸ðµâ Àü¿ø »óÅÂ, 0:Á¤Áö 1:ÀÛµ¿ */ BYTE Bright; /* ¸ðµâ ÈÖµµ°ª, 0~100 */ BYTE ModuleCount; /* ¸ðµâ °³¼ö */ BYTE ModuleState[32]; /* ¸ðµâ »óÅÂ, 0:Àå¾Ö 1:Á¤»ó */ }WVMS_STATE_RES_STRUCT; /* ¿äû */ typedef union{ WVMS_DATA_STRUCT Buff; WVMS_CMD_REQ_STRUCT Cmd; WVMS_STATE_REQ_STRUCT State; }UNION_WVMS_REQ; /* ÀÀ´ä */ typedef union{ WVMS_DATA_STRUCT Buff; WVMS_ACK_RES_STRUCT Ack; WVMS_NACK_RES_STRUCT Nack; WVMS_STATE_RES_STRUCT State; }UNION_WVMS_RES; /* °øÅë */ typedef union{ UNION_WVMS_REQ Req; UNION_WVMS_RES Res; }UNION_WVMS_DATA; /* ÆÐŶ */ typedef struct{ WVMS_HEAD_STRUCT Head; UNION_WVMS_DATA Data; WVMS_TAIL_STRUCT Tail; }STRUCT_WVMS_PKT; /*************************************** ** ** Prototypes ** */ //--------------------------------------------------------------------------- #pragma pack(pop) //--------------------------------------------------------------------------- #endif