//---------------------------------------------------------------------------

#ifndef PacketHandllingFH
#define PacketHandllingFH
//---------------------------------------------------------------------------
#include "VmsProtocolF.h"

//---------------------------------------------------------------------------
#pragma pack(push, 1)
//---------------------------------------------------------------------------

/*
*****************************************************************************
*  프로토콜 수신 OP Code
****************************************************************************/
#if 0
// 도로공상 문자식 VMS 프로토콜

    //상태정보
    e_txt_status_req                = 0x18, //  Status Request                        Opcode = 24 [0x18]  ⇔ Opcode = 64 [0x40]
    e_txt_status_res                = 0x40, //  Status Response                       Opcode = 24 [0x18]  ⇔ Opcode = 64 [0x40]
    //모듈정보
    e_txt_failed_elem_data_req      = 0x1A, //  Failed Element Data Request           Opcode = 26 [0x1A]  ⇔ Opcode = 66 [0x42]
    e_txt_failed_elem_data_res      = 0x42, //  Failed Element Data Response          Opcode = 26 [0x1A]  ⇔ Opcode = 66 [0x42]

    //폼표출
    e_txt_download_full_graphic_lib = 0x0A, //  Download Graphics Library             Opcode = 10 [0x0A]  ⇔ Opcode = 72 [0x48]
    e_txt_display_schedule_msg      = 0x0E, //  Display Schedule Message              Opcode = 14 [0x0E]  ⇔ Opcode = 72 [0x48]
    e_txt_blank                     = 0x16, //  Blank                                 Opcode = 22 [0x16]  ⇔ Opcode = 72 [0x48]


// 도로공사 도형식 VMS 프로토콜
1. 0x88    VMS Status 요구,     응답
2. 0x8C    전원 모듈 상태 요구, 응답
3. 0x8E    표출 모듈 상태 요구, 응답
4. VMS 메시지 표출
    4.1 0x80    폼 데이터 표출,         ACK/NAK
    4.2 0x96    Display Schedule Form,  ACK/NAK
    4.3 0x9E    Blank,                  ACK/NAK


    // 도형식.......
    //e_vms_download_form          = 0x9A,//    Download Form                           송신    Form download                               센터 → VMS
    //e_vms_file_download          = 0x82,//    데이터 다운로드                         송신    INI, CFG , Bitmap , Data파일송신            센터 → VMS
    //e_vms_download_schedule_form = 0x96,//    Display Schedule Form                   송신    계획된 Form 표출 요구                       센터 → VMS
    //e_vms_blank                  = 0x9E,//    Blank                                   송신    schedule 표출                               센터 → VMS

    //e_vms_status                = 0x88,//    VMS Status 요구                         송신    VMS 상태정보 요구 송신                      센터 → VMS
    //e_vms_power_module_status   = 0x8C,//    전원 모듈 상태 요구                     송신    전원 모듈 상태를 검사 결과를 요청한다       센터 → VMS
    //e_vms_display_module_status = 0x8E,//    표출 모듈 상태 요구                     송신    표출 모듈 상태를 검사 결과를 요청한다       센터 → VMS
    //e_vms_parameter             = 0x8A,//    VMS 파라미터 요구                       송신    VMS 로컬 상태 요구 송신                     센터 → VMS

#endif

typedef enum _e_vms_protocol
{
    e_vms_MIN                       = 0x00,

    // 문자식 OpCode
    e_txt_disp_immediate_text       = 0x02, //  Display Immediate Text                Opcode = 2  [0x02]  ⇔ Opcode = 72 [0x48]
    e_txt_disp_immediate_graphic    = 0x04, //  Display Immediate graphics            Opcode = 4  [0x04]  ⇔ Opcode = 72 [0x48]
    e_txt_disp_lib_message          = 0x06, //  Display Library Message               Opcode = 6  [0x06]  ⇔ Opcode = 72 [0x48]
    e_txt_download_message_lib      = 0x08, //  Download  A Message Library           Opcode = 8  [0x08]  ⇔ Opcode = 72 [0x48]
    e_txt_download_full_graphic_lib = 0x0A, //  Download Graphics Library             Opcode = 10 [0x0A]  ⇔ Opcode = 72 [0x48]
    e_txt_download_graphic_symb_lib = 0x0C, //  Download Graphic Symbol Library       Opcode = 12 [0x0C]  ⇔ Opcode = 72 [0x48]
    e_txt_display_schedule_msg      = 0x0E, //  Display Schedule Message              Opcode = 14 [0x0E]  ⇔ Opcode = 72 [0x48]
    e_txt_initialize                = 0x12, //  Initailize                            Opcode = 18 [0x12]  ⇔ Opcode = 72 [0x48]
    e_txt_disp_test_pattern         = 0x14, //  Display Test Pattern                  Opcode = 20 [0x14]  ⇔ Opcode = 72 [0x48]
    e_txt_blank                     = 0x16, //  Blank                                 Opcode = 22 [0x16]  ⇔ Opcode = 72 [0x48]

    e_txt_download_parameter        = 0x1C, //  Download Parameter                    Opcode = 28 [0x1C]  ⇔ Opcode = 72 [0x48]
    e_txt_display_default_msg       = 0x1E, //  Display Default Message               Opcode = 30 [0x1E]  ⇔ Opcode = 72 [0x48]
    e_txt_set_luminance_level       = 0x20, //  Set Luminance Level                   Opcode = 32 [0x20]  ⇔ Opcode = 72 [0x48]
    e_txt_signboard_control         = 0x24, //  Signboard Power Control               Opcode = 36 [0x24]  ⇔ Opcode = 72 [0x48]
    e_txt_signboard_alarm_control   = 0x2A, //  Signboard Alarm Control               Opcode = 42 [0x2A]  ⇔ Opcode = 72 [0x48]
    e_txt_pan_hetr_temp_control     = 0x31, //  함체 PAN/HEATER 온도 설정             Opcode = 49 [0x31]  ⇔ Opcode = 72 [0x48]

    e_txt_status_req                = 0x18, //  Status Request                        Opcode = 24 [0x18]  ⇔ Opcode = 64 [0x40]
    e_txt_status_res                = 0x40, //  Status Response                       Opcode = 24 [0x18]  ⇔ Opcode = 64 [0x40]

    e_txt_upload_modl_status_req    = 0x28, //  Upload Module Status                  Opcode = 40 [0x28]  ⇔ Opcode = 74 [0x4A]
    e_txt_upload_modl_status_res    = 0x4A, //  Upload Module Status                  Opcode = 40 [0x28]  ⇔ Opcode = 74 [0x4A]

    e_txt_pan_hetr_temp_req         = 0x32, //  함체 PAN/HEATER 온도 요청    	      Opcode = 50 [0x32]  ⇔ Opcode = 66 [0x42]
    e_txt_pan_hetr_temp_res         = 0x42, //  함체 PAN/HEATER 온도 요청    	      Opcode = 50 [0x32]  ⇔ Opcode = 66 [0x42]

    e_txt_failed_elem_data_req      = 0x1A, //  Failed Element Data Request           Opcode = 26 [0x1A]  ⇔ Opcode = 66 [0x42]
    e_txt_failed_elem_data_res      = 0x42, //  Failed Element Data Response          Opcode = 26 [0x1A]  ⇔ Opcode = 66 [0x42]

    e_txt_upload_msg_req            = 0x22, //  Upload A Message                      Opcode = 34 [0x22]  ⇔ Opcode = 68 [0x44]
    e_txt_upload_msg_res            = 0x44, //  Upload A Message  Response            Opcode = 34 [0x22]  ⇔ Opcode = 68 [0x44]

    e_txt_upload_schedule_msg_req   = 0x23, //  Upload Schedule Message               Opcode = 35 [0x23]  ⇔ Opcode = 69 [0x45]
    e_txt_upload_schedule_msg_res   = 0x45, //  Upload Schedule Message               Opcode = 35 [0x23]  ⇔ Opcode = 69 [0x45]

    e_txt_msg_echo_back_req         = 0x26, //  Message Echo Back                     Opcode = 38 [0x26]  ⇔ Opcode = 70 [0x46]
    e_txt_msg_echo_back_res         = 0x46, //  Message Echo Back                     Opcode = 38 [0x26]  ⇔ Opcode = 70 [0x46]

    e_txt_image_req                 = 0x2C, //  영상이미지 요청 Status                Opcode = 44 [0x2C]  ⇔ Opcode = 76 [0x4C]
    e_txt_image_res                 = 0x4C, //  영상이미지 요청 Status                Opcode = 44 [0x2C]  ⇔ Opcode = 76 [0x4C]

    e_txt_ftp_download              = 0x2C, //  동영상 파일 FTP 다운로드              Opcode = 44 [0x2C]  ⇔ Opcode = 72 [0x48]
    e_txt_ftp_download_completed    = 0x2E, //  동영상 파일 FTP 다운로드 완료         Opcode = 46 [0x2E]

    e_txt_response                  = 0x48, //  제어기 응답(ACK/NAK)

    // 도형식 OpCode
    e_vms_form_display              = 0x80, //    폼 데이터 표출                          송신    표출할 폼 데이터 송신                       센터 → VMS
                                            //                                            수신    수신 여부 응답( ACK/NAK )                   센터 ← VMS
    e_vms_file_download             = 0x82, //    데이터 다운로드                         송신    INI, CFG , Bitmap , Data파일송신            센터 → VMS
                                            //                                            수신    수신 여부 응답( ACK/NAK )                   센터 ← VMS
    // 사용하지 않음
    e_vms_data_upload               = 0x84, //    데이터 업로드                           송신    INI, CFG , Bitmap , Data파일 업로드 요구    센터 → VMS
                                            //                                            수신    업로드 데이터 전송                          센터 ← VMS
    e_vms_status_control            = 0x86, //    VMS 상태제어                            송신    VMS 제어정보 송신                           센터 → VMS
                                            //                                            수신    수신 여부 응답( ACK/NAK )                   센터 ← VMS
    e_vms_status                    = 0x88, //    VMS Status 요구                         송신    VMS 상태정보 요구 송신                      센터 → VMS
                                            //                                            수신    상태 데이터 응답                            센터 ← VMS
    e_vms_parameter                 = 0x8A, //    VMS 파라미터 요구                       송신    VMS 로컬 상태 요구 송신                     센터 → VMS
                                            //                                            수신    로컬 상태 데이터 응답                       센터 ← VMS
    e_vms_power_module_status       = 0x8C, //    전원 모듈 상태 요구                     송신    전원 모듈 상태를 검사 결과를 요청한다       센터 → VMS
                                            //                                            수신    전원 모듈 상태 데이터 응답                  센터 ← VMS
    e_vms_display_module_status     = 0x8E, //    표출 모듈 상태 요구                     송신    표출 모듈 상태를 검사 결과를 요청한다       센터 → VMS
                                            //                                            수신    표출 모듈 상태 데이터 응답                  센터 ← VMS
    // 픽셀이미지 요구는 제어기에서 응답을 하지 않음
    // 사용하지 않음
    e_vms_pixel_image               = 0x92, //    VMS Pixel Image 요구                    송신    VMS LED Pixel 상태요구 송신                 센터 → VMS
                                            //                                            수신    현재표출중인 LED 상태 Pixel 송신            센터 ← VMS
    // 사용하지 않음
    e_vms_current_display_form      = 0x94, //    현재표출폼 Upload                       송신    Local에서 표출 중인 폼  Upload요구          센터 → VMS
                                            //                                            수신    현재표출중인 전체폼 송신                    센터 ← VMS
    e_vms_download_schedule_form    = 0x96, //    Display Schedule Form                   송신    계획된 Form 표출 요구                       센터 → VMS
                                            //                                            수신    수신 여부 응답( ACK/NAK )                   센터 ← VMS
    e_vms_display_default_form      = 0x98, //    Display Default Form                    송신    디폴트 From표출 요구                        센터 → VMS
                                            //                                            수신    수신 여부 응답( ACK/NAK )                   센터 ← VMS
    e_vms_download_form             = 0x9A, //    Download Form                           송신    Form download                               센터 → VMS
                                            //                                            수신    수신 여부 응답( ACK/NAK )                   센터 ← VMS
    // 사용하지 않음
    e_vms_upload_schedule_form      = 0x9C, //    Upload Schedule Form                    송신    스케줄 메시지 업로드 요구                   센터 → VMS
                                            //                                            수신    스케줄 메세지 전송                          센터 ← VMS
    e_vms_blank                     = 0x9E, //    Blank                                   송신    schedule 표출                               센터 → VMS
                                            //                                            수신    수신 여부 응답( ACK/NAK )                   센터 ← VMS
    // 제어기에서 반응 없음
    // 사용하지 않음
    e_vms_display_form_id           = 0xA0, //    Display Form ID                         송신    Form ID에 해당하는 Form 표출                센터 → VMS
                                            //                                            수신    수신 여부 응답( ACK/NAK )                   센터 ← VMS
    e_vms_MAX                       = 0xFF+1,
} E_VMS_PROTOCOL;

#if 0
0xA1 : 동영상 파일 FTP 다운로드
0xA2 : 동영상 파일 FTP 다운로드 완료
#endif


/*
*****************************************************************************
*  VMS Form File Type
****************************************************************************/
#define P_FILE_TYPE_IMAGE       0x01
#define P_FILE_TYPE_VIDEO       0x02
#define P_FILE_TYPE_STREAM      0x03
#define P_FILE_TYPE_TRAFFIC     0x04
#define P_FILE_TYPE_TEXT        0x05

/*
*****************************************************************************
*  VMS System define
****************************************************************************/
#define MAX_VMS_SCENARIO_FORM   10
#define PICTURE_BASE_FORMID     9000
#define TEXT_BASE_FORMID        9000
#define DEFAULT_FORMID          0


/*
*****************************************************************************
*  프로토콜 OP 코드 정의
****************************************************************************/
#define VMS_DLE                 0x10        // DLE
#define VMS_STX                 0x02        // Start of TeXt
#define VMS_ETX                 0x03        // End of TeXt
#define VMS_ACK                 0x06
#define VMS_NAK                 0x15
#define VMS_NULL                0x00

typedef struct _vms_head
{
    _vms_head()
    {
        Dle = VMS_DLE;
        Stx = VMS_STX;
    }
    BYTE    Dle;
    BYTE    Stx;
    BYTE    Group;
    BYTE    Ctlr;
    BYTE    OpCode;
    BYTE    Curr;
    BYTE    Total;
    DWORD   Length;
} VMS_HEAD;

typedef struct _vms_data
{
    _vms_data()
    {
        Curr   = 1;
        Total  = 1;
        Length = 0;
    }
    BYTE    Curr;
    BYTE    Total;
    DWORD   Length;
} VMS_DATA;

typedef struct _vms_tail
{
    _vms_tail()
    {
        Dle = VMS_DLE;
        Etx = VMS_ETX;
    }
    BYTE    Dle;
    BYTE    Etx;
    WORD    Crc;
} VMS_TAIL;

typedef struct _vms_req_data
{
    _vms_req_data()
    {
        Group   = 0;
        Ctlr    = 0;
        OpCode  = VMS_NULL;
        Curr    = 1;
        Total   = 1;
        Length  = 0;
    }

    BYTE    Group;
    BYTE    Ctlr;
    BYTE    OpCode;
    BYTE    Curr;
    BYTE    Total;
    DWORD   Length;
} VMS_REQ_DATA;

typedef struct _vms_result
{
    BYTE    Result;
    BYTE    Error;
} VMS_RESULT;

typedef struct _vms_req_info_data : public VMS_REQ_DATA
{
    BYTE    Data[1024];
} VMS_REQ_INFO_DATA;

typedef struct _vms_res_head
{
    BYTE    Dle;
    BYTE    Stx;
    BYTE    Group;
    BYTE    Ctlr;
    BYTE    OpCode;
    BYTE    Curr;
    BYTE    Total;
    DWORD   Length;
} VMS_RES_HEAD;

//도형식 VMS 상태
typedef struct _vms_status
{
    BYTE    DOOR;	    // Door Open/Close 상태	0x00 : Open, 0x01 : Close, 0x09 : Unknown
    BYTE    POWER;      // 전원의 ON/OFF 상태	0x00 : On, 0x01 : Off (Sign Board)
    BYTE    FAN;		// VMS Fan 동작상태		0x00 : On, 0x01 : Off, 0x09: Unknown
						// 함체 Fan 동작상태	0x00 : On, 0x10 : Off, 0x90: Unknown
    BYTE    HEATER;		// VMS Heater 동작상태	0x00 : On, 0x01 : Off, 0x09: Unknown
						// 함체 Heater 동작상태	0x00 : On, 0x10 : Off, 0x90: Unknown
    WORD    FORM_NO;	// 표출 폼 번호	0x00 : 통신 폼, 0x01 : 디폴트 폼
    BYTE    REBOOT_YN;	// 재실행 여부	0x00 : 정상, 0x01 : 재실행
    char    CBOX_TEMP;	// 함체온도	127 ~ -127 -128 : Unknown
    BYTE    BRIGHT[4];	// 화면의 밝기	최대를 100으로 했을 때의 백분율 값 및 기준휘도
                        // 0: 현재  휘도(00:주간,01:야간,02:자동)
                        // 1: 야간휘도설정값
                        // 2: 주간휘도설정값
                        // 3: 현재휘도값(이건 나의 추측)
    char    DP_TEMP;	// 표출부온도	127 ~ -127 -128 : Unknown
    BYTE    DP_HUM;		// 표출부습도	0~100%, 포항UTIS부터 추가함
} VMS_STATUS;

//문자식 VMS 상태
// Door상태정보 없음, 도형식과 OnOff값이 반대
typedef struct _vms_txt_status
{
    BYTE MSG_LIB_ERR      : 1; // Message Library Checksum Error
    BYTE FAN              : 1; // VMS Fan on/off (off=0, on=1)
    BYTE HEATER           : 1; // VMS heater on/off (off=0, on=1)
    BYTE POWER            : 1; // Sign board power on/off command status (off=0, on=1)
    BYTE POWER_FAIL       : 1; // Sign board power failure
    BYTE BLANK            : 1; // 공백문안이 표출될 경우 Set
    BYTE HAN_FAN          : 1; // 함체 Fan on/off (off=0, on=1)
    BYTE HAM_HEATER       : 1; // 함체 heater on/off (off=0, on=1)

    BYTE LOCAL_MODE       : 1; // Local mode Active
    BYTE DEFAULT_PARA     : 1; // Default Parameter
    BYTE RESET            : 1; // Reset Occurred
    BYTE LONG_POWER_FAIL  : 1; // Long Power Failure
    BYTE SHORT_POWER_FAIL : 1; // Short Power Failure
    BYTE DOOR             : 1; // Door Ajar(0:close, 1: open)--> 화면테스트에서 확인
    BYTE MODL_FAIL_RATE   : 1; // Module Failure Rate Exceded
    BYTE MEM_ERR          : 1; // RAM/ROM Error

    BYTE VMS_TEMP;             // VMS온도
    BYTE CBOX_TEMP;            // 함체온도
} VMS_TXT_STATUS;

#define MAX_TXT_MODL_ROWS   3
#define MAX_TXT_MODL_COLS   12

typedef struct _vms_txt_modl_status
{
    BYTE    Modl[MAX_TXT_MODL_ROWS][MAX_TXT_MODL_COLS];
} VMS_TXT_MODL_STATUE;

//도형식 VMS 파라미터응답
typedef struct _vms_parameter
{
    BYTE    PowerCtrlMode;  // 전원제어 모드                1 Byte  0x00 : 꺼짐, 0x01 : 켜짐,
    BYTE    FanRunMode;     // Fan 동작모드                 1 Byte  0x00 : 꺼짐, 0x01 : 켜짐, 0x02 : 자동, 0x09: Unknown
    BYTE    FanRunTemp;     // Fan의 동작개시온도           1 Byte  온도( 0x00 ~0x03f )
    BYTE    HeaterRunMode;  // Heater의 동작모드            1 Byte  0x00 : 꺼짐, 0x01 : 켜짐, 0x02 : 자동, 0x09: Unknown
    BYTE    HeaterRunTemp;  // Heater 의 동작개시온도       1 Byte  온도(0x00 ~ 0x3f )
    BYTE    BrightMode;     // 밝기 모드                    2 Byte  0x0 : 수동, 0x1 : 자동, 비율 : 0-100
    BYTE    BrightRate;     // 밝기 모드                    2 Byte  0x0 : 수동, 0x1 : 자동, 비율 : 0-100
    BYTE    BlinkTime;      // 깜빡이는 시간주기            1 Byte  문자 비트맵의 깜빡이는 시간주기 0x00 ~ 0x1e( 0.1 ~3.0 )
    WORD    ScnTurnTime;    // 디폴트 시나리오로 전환시간   2 Byte  디폴트 시나리오로 전환될 때까지 기다리는 시간, 단위 : 초
    BYTE    Reserved;       // 기타                         1 Byte

    //현재 로컬 제어기의 시간
    BYTE    Year;           // 년       1 Byte  0x00 ~ 0x32
    BYTE    Mon;            // 월       1 Byte  0x01 ~ 0x0c
    BYTE    Day;            // 일       1 Byte  0x01 ~ 0x1f
    BYTE    Hour;           // 시       1 Byte  0x00 ~ 0x17
    BYTE    Min;            // 분       1 Byte  0x00 ~ 0x3b
    BYTE    Sec;            // 초       1 Byte  0x00 ~ 0x3b
} VMS_PARAMETER;

//문자식 VMS 설정온도요청응답
typedef struct _vms_txt_parameter
{
    BYTE    FanRunTemp;     // Fan의 동작개시온도           1 Byte  온도( 0x00 ~0x03f )
    BYTE    HeaterRunTemp;  // Heater 의 동작개시온도       1 Byte  온도(0x00 ~ 0x3f )
} VMS_TXT_PARAMETER;

// VMS Status Control
#if 0
0x01    전광판 전원제어             0x00:꺼짐, 0x01:켜짐,               1Byte
0x02    제어기 리셋트               -                                   1Byte
0x03    통신 재시도 횟수            0x01 ~ 0x09                         1Byte(초기값 0x03:3회)
0x04    제어기 시간설정             "YYYYMMDDHHNNSS"                    14Bytes(String)
0x05    점멸시간 주기               1/10초 단위                         1Byte
0x06    밝기제어                    0x00:주간, 0x01:야간, 0x02:Auto     2Byte(제어값+밝기)  (밝기:수동 0~100,자동 0)
0x07    Fan 제어                    고정값 0xFF                         고정값 0xFF
0x08    Heater 제어                 고정값 0xFF                         고정값 0xFF
0x09    화면 배색 제어              0x01:Red, 0x02:Green, 0x03:Amber    1Byte(제어값)
0x0A    장애모듈비율                -                                   에러난 픽셀의 백분율 : 0～100
0x0B    디폴트 시나리오 동작시간    초 단위                             2Byte, default value : 300초

※ 제어코드(0x01 ~ 0x0A)의 Default 제어값은 기존시스템 초기설정값을 기준으로 한다
● 전광판 전원 제어 명령 중 꺼짐 명령을 받으면 표지판은 꺼짐. 이후 켜짐 명령이 있을 때까지는 어떤 명령도 무시한다.
● 숫자 0은 0x00 이며, 문자 ‘0‘은 0x30이다.
● 제어기 시간 셋트에서 데이터는 문자열로 구성 (예) : 2004년 3월 25일 15시 30분 45초 일때??20040325153045??
● 밝기 제어
   주간, 야간, 자동으로 구분하여 운영 모드를 지정할 수 있으며, 동시에 밝기를 지정할 수 있다. 주간 조도 default value(90), 야간 모드 default value(65)
● 장애모듈비율 : 한개의 모듈을 장애로 처리하기 위한 장애 PIXEL 백분율 값.
   Default 값은 10%
#endif



/*
*****************************************************************************
*  팬 동작 모드
****************************************************************************/
typedef enum _e_fan_run_mode
{
    e_fan_run_off    = 0x00,    // 꺼짐, 0x00
    e_fan_run_on     = 0x01,    // 켜짐, 0x01
    e_fan_run_auto   = 0x02,    // 자동, 0x02
    e_fan_run_manual = 0x03,    // 수동, 0x03
} e_fan_run_mode;

/*
*****************************************************************************
*  하드웨어 작동 상태
****************************************************************************/
typedef enum _e_status_onoff
{
    e_status_on   = 0x00,     // 켜짐, 0x00
    e_status_off  = 0x01,     // 꺼짐, 0x01
} e_status_onoff;

// 도어 상태
typedef enum _e_door_status
{
    e_door_open  = 0x00,     // 열림, 0x00
    e_door_close = 0x01,     // 닫힘, 0x01
} e_door_status;

// 팬 상태
typedef enum _e_fan_status
{
    e_fan_run  = 0x00,     // 열림, 0x00
    e_fan_stop = 0x01,     // 닫힘, 0x01
} e_fan_status;

// 히터 상태
typedef enum _e_heater_status
{
    e_heater_run  = 0x00,     // 열림, 0x00
    e_heater_stop = 0x01,     // 닫힘, 0x01
} e_heater_status;


/*
*****************************************************************************
*  VMS Form define
****************************************************************************/
// 폼 배경 색상
typedef enum _e_bg_rgb
{
    e_bg_black  = 0x00,     // 검정색   0x00
    e_bg_red    = 0x01,     // 적색     0x01
    e_bg_green  = 0x02,     // 녹색     0x02
    e_bg_yellow = 0x03,     // 황색     0x03
} e_bg_rgb;

// 오브젝트 종류
typedef enum _e_obj_type
{
    e_obj_text     = 0x00,      //문자열        0x00
    e_obj_bitmap   = 0x01,      //Bitmap        0x01
    e_obj_bitmapid = 0x02,      //Bitmap ID     0x02
    e_obj_avi      = 0x03,      //동영상        0x03      동영상 *.AVI (XVID)
    e_obj_stream   = 0x04,      //스트리밍 영상 0x04
} e_obj_type;

// 그래픽 데이터 형식
typedef enum _e_img_type
{
    e_img_bitmap  = 0x00,       // Window Bitmap
    e_img_gif     = 0x01,       // GIF
    e_img_jpg     = 0x02,       // JPG
    e_img_pcx     = 0x03,       // PCX
} e_img_type;

// 폼 표출유형
typedef enum _e_form_display_type
{
    e_static_normal = 0x00, // 즉시 표출
    e_shift_up      = 0x01, // 기존 화면 위에 다음 화면을 겹쳐서 위 방향으로 다음 화면만 밀면서 표출
    e_shift_down    = 0x02, // 기존 화면 위에 다음 화면을 겹쳐서 아래 방향으로 다음 화면만 밀면서 표출
    e_shift_left    = 0x03, // 기존 화면 위에 다음 화면을 겹쳐서 왼쪽 방향으로 다음 화면만 밀면서 표출
    e_shift_right   = 0x04, // 기존 화면 위에 다음 화면을 겹쳐서 오른쪽 방향으로 다음 화면만 밀면서 표출
    e_scroll_up     = 0x05, // 기존 화면과 다음 화면을 위 방향으로 밀면서 표출
    e_scroll_down   = 0x06, // 기존 화면과 다음 화면을 아래 방향으로 밀면서 표출
    e_scroll_left   = 0x07, // 기존 화면과 다음 화면을 왼쪽 방향으로 밀면서 표출
    e_scroll_right  = 0x08, // 기존 화면과 다음 화면을 오른쪽 방향으로 밀면서 표출
    e_wipe_up       = 0x09, // 기존 화면을 위 방향으로 지우면서 다음 화면을 표출
    e_wipe_down     = 0x0A, // 기존 화면을 아래 방향으로 지우면서 다음 화면을 표출
    e_wipe_left     = 0x0B, // 기존 화면을 왼쪽 방향으로 지우면서 다음 화면을 표출
    e_wipe_right    = 0x0C, // 기존 화면을 오른쪽 방향으로 지우면서 다음 화면을 표출
    e_curtain_v_in  = 0x0D, // 수직으로 나누어 중앙을 향해 안쪽으로 표출
    e_curtain_v_out = 0x0E, // 수직으로 나누어 중앙에서 바깥쪽을 향해 표출
    e_urtain_h_in   = 0x0F, // 수평으로 나누어 중앙을 향해 안쪽으로 표출
    e_curtain_h_out = 0x10, // 수평으로 나누어 중앙에서 바깥쪽을 향해 표출
    e_trace_right   = 0x11, // 한 글자 크기에 대한 한 Line씩 오른쪽으로 표출
    e_trace_left    = 0x12, // 한 글자 크기에 대한 한 Line씩 왼쪽으로 표출
    e_blind_up      = 0x13, // 다음 화면을 수직 또는 몇 개의 화면으로 분할하여 위 방향으로 표출
    e_blind_down    = 0x14, // 다음 화면을 수직 또는 몇 개의 화면으로 분할하여 아래 방향으로 표출
    e_blind_left    = 0x15, // 다음 화면을 수직 또는 몇 개의 화면으로 분할하여 왼쪽 방향으로 표출
    e_blind_right   = 0x16, // 다음 화면을 수직 또는 몇 개의 화면으로 분할하여 오른쪽 방향으로 표출
    e_blinking      = 0x17, // 표출화면(폼 전체 깜박임
} e_form_display_type;

typedef struct _vms_form_head
{
    WORD    FORM_ID;        // 폼 ID, 'FID0000'과 'FID9999'를 제외한 일련번호
    WORD    FORM_CNT;       // 전체 폼의 수
} VMS_FORM_HEAD;

typedef struct _vms_form_data_head
{
    WORD    FORM_SEQ;       // 폼 표출 일련번호,        2Byte
    BYTE    DISPLAY_TIME;   // 폼의 표출시간을 지정,    1Byte( 0x00 이면 계속 표출 )
    BYTE    DISPLAY_TYPE;   // 폼의 표출유형을 지정,    1Byte
    BYTE    BG_RGB;         // 폼의 배경색을 지정,      1Byte
    BYTE    OBJ_CNT;        // 표출할 오브젝트 전체 수, 1Byte
} VMS_FORM_DATA_HEAD;

typedef struct _vms_form_obj_head
{
    BYTE    OBJ_TYPE;       // 오브젝트 종류
    WORD    OBJ_SIZE;       // 오브젝트 데이터 크기
    BYTE    FLASH;          // 점멸여부, 1Byte(0x00 : 고정, 0x01 : 점멸)
    WORD    X;              // 좌표 X
    WORD    Y;              // 좌표 Y
    BYTE    TEXT_BG_RGB;    // 문자열 배경색을 지정
} VMS_FORM_OBJ_HEAD;

// ▷ 비트맵 데이터 (표출할 비트맵 데이터)
// 표시하고자 하는 비트맵 데이터로서 파일형식은󰡒BMP"를 기준으로 하고 색상은 16Color를 기본으로 하며 16Color 이상도 사용할 수 있다.다.
typedef struct _vms_obj_bitmap
{
    WORD    WIDTH;          // 비트맵 표시 Width,  2 Byte, 0 ~ 1023 : 표출 비트맵 Width
    WORD    HEIGHT;         // 비트맵 표시 Heitht, 2 Byte, 0 ~ 1023 : 표출 비트맵 Width
    BYTE    IMG_TYPE;       // e_img_type
    BYTE    ETC;            // 기타
} VMS_OBJ_BITMAP;

typedef struct _vms_obj_bitmapid
{
    WORD    WIDTH;          // 비트맵 표시 Width,  2 Byte, 0 ~ 1023 : 표출 비트맵 Width
    WORD    HEIGHT;         // 비트맵 표시 Heitht, 2 Byte, 0 ~ 1023 : 표출 비트맵 Width
    BYTE    IMG_TYPE;       // e_img_type
    WORD    BITMAP_ID;      // 표출할 비트맵 ID,   2 Byte, 0～ 9999 : 표출할 비트맵 ID
} VMS_OBJ_BITMAPID;

typedef struct _vms_form_data
{
    VMS_FORM_HEAD       head;
    VMS_FORM_DATA_HEAD  data;
    VMS_FORM_OBJ_HEAD   obj;
    VMS_OBJ_BITMAP      bitmap;
} VMS_FORM_DATA;

typedef struct _vms_schedule_form_info
{
    WORD    FormNo;
    BYTE    DispSec;
} VMS_SCHEDULE_FORM_INFO;
typedef struct _vms_schedule_form
{
    VMS_SCHEDULE_FORM_INFO  Form[MAX_VMS_SCENARIO_FORM];
} VMS_SCHEDULE_FORM;

// 내부적으로 사용할 구조체
typedef struct _vms_file_download
{
    AnsiString  VMS_FORM_ID;
    bool        IsDownload;
    int         FormIdx;
    int         BitmapId;
    WORD        FormNo;
    BYTE        DispSec;
} VMS_FILE_DOWNLOAD;

typedef struct _vms_download_data
{
    bool                IsDefault;
    int                 MaxSchedule;
    int                 DownloadCnt;
    VMS_FILE_DOWNLOAD   Info[MAX_VMS_SCENARIO_FORM];
} VMS_DOWNLOAD_DATA;

/*
*****************************************************************************
*  Download Data 저장위치 상세코드
****************************************************************************/
typedef enum _e_vms_download_loc
{
    e_download_file         = 0,    // 파일명에 포함
    e_download_prog         = 1,    // 로컬 프로그램이 속하여 있는 디렉토리에 저장
    e_download_porg_root    = 2,    // 로컬 프로그램이 설치된 루트 디렉토리에 저장
    e_download_win          = 3,    // 윈도우즈 디렉토리에 저장
    e_download_win_sys      = 4,    // 윈도우즈 시스템 디렉토리에 저장
    e_download_prog_image   = 5,    // 로컬 프로그램 이미지 디렉토리에 저장
    e_download_prog_default = 6,    // 로컬 프로그램 디폴트 폼 디렉토리에 저장
} e_vms_download_loc;

typedef struct _vms_file_head
{
    BYTE    SAVE_LOC;       // Download Data 저장위치 Code,    1 Byte
    BYTE    NAME_SIZE;      // 파일명 길이,                    1 Byte, 1～ 255
    DWORD   SIZE;           // 저장하여야 할 데이터의 크기,    4 Byte
    // 파일명,   N byte
    // 파일Data, N byte
} VMS_FILE_HEAD;

typedef struct _vms_file_data
{
    VMS_FILE_HEAD       head;
} VMS_FILE_DATA;

//VMS_FORM_HEAD       head;
typedef struct _vms_form_id_info
{
    VMS_FORM_DATA_HEAD  data;
    VMS_FORM_OBJ_HEAD   obj;
    VMS_OBJ_BITMAPID    bid;
} VMS_FORM_ID_INFO;

typedef struct _vms_form_id_data
{
    VMS_FORM_ID_INFO    INFO[MAX_VMS_SCENARIO_FORM];
} VMS_FORM_ID_DATA;

#define MAX_TXT_FULL_RGB_BIT 9216
typedef struct _vms_full_graphic_lib
{
    BYTE    Phase;      // 0x00(1phase), 0x01(2phase)
    BYTE    DispFunc;   // 0x07(static)
    BYTE    DispDir;    // 0x00(drop down)
    WORD    MsgNmbr;
    BYTE    R_Data1[MAX_TXT_FULL_RGB_BIT];
    BYTE    G_Data1[MAX_TXT_FULL_RGB_BIT];
#if 0
    BYTE    R_Data2[MAX_TXT_FULL_RGB_BIT];
    BYTE    G_Data2[MAX_TXT_FULL_RGB_BIT];
#endif
} VMS_FULL_GRAPHIC_LIB;


//---------------------------------------------------------------------------
#pragma pack(pop)
//---------------------------------------------------------------------------

#endif
