/*
 * internalComm.h
 *
 *  Created on: 2019年5月7日
 *      Author: foluswen
 */

#ifndef INTERNALCOMM_H_
#define INTERNALCOMM_H_

extern struct Address
{
    unsigned char Aux;
    unsigned char Fan;
    unsigned char Relay;
    unsigned char AcPlug;
    unsigned char Led;
    unsigned char Broadcast;
}Addr;

extern struct Command
{
    unsigned char query_FW_Ver;                 //0x01
    unsigned char query_HW_Ver;                 //0x02
    unsigned char query_Present_InputVoltage;   //0x03
    unsigned char query_Present_OutputVoltage;  //0x04
    unsigned char query_Fan_Speed;              //0x05
    unsigned char query_Temperature;            //0x06
    unsigned char query_Aux_PowerVoltage;       //0x07
    unsigned char query_Relay_Output;           //0x08
    unsigned char query_Gfd_Adc;                //0x09
    unsigned char query_Gpio_In;                //0x0a

    unsigned char query_Model_Name;             //0x24
    unsigned char query_ac_output_current;      //0x27
    unsigned char query_ac_status;              //0x28
    unsigned char query_ac_alarm_code;          //0x29

    unsigned char query_ac_output_energy;       //0x2C

    unsigned char config_Fan_Speed;             //0x81
    unsigned char config_Model_Name;            //0x83
    unsigned char config_Relay_Output;          //0x85
    unsigned char config_Gpio_Output;           //0x86
    unsigned char config_Rtc_Data;              //0x87
    unsigned char config_ac_led_status;         //0x88

    unsigned char config_ac_duty;               //0x89
    unsigned char config_Legacy_Req;            //0x8A
    unsigned char config_Gfd_Value;             //0x8B
    unsigned char config_reset_mcu;             //0x8C

    unsigned char config_csu_mode;              //0x90

    unsigned char config_led_color;             //0x93

    unsigned char update_Start;                 //0xe0
    unsigned char update_Abort;                 //0xe1
    unsigned char update_Transfer;              //0xe2
    unsigned char update_Finish;                //0xe3

}Cmd;

typedef struct Verion
{
    char Version_FW[9];
    char Version_HW[9];
}Ver;

typedef struct PRESENTINPUTVOLTAGE
{
    unsigned char inputType;    // 0x00: Line to Line       0x01: Line to Neutral
    double L1N_L12;
    double L2N_L23;
    double L3N_L31;
}PresentInputVoltage;

typedef struct PRESENTOUTPUTVOLTAGE
{
    double behindFuse_Voltage_C1;
    double behindRelay_Voltage_C1;
    double behindFuse_Voltage_C2;
    double behindRelay_Voltage_C2;
}PresentOutputVoltage;

typedef struct FANSPEED
{
    unsigned short int speed[8];
}FanSpeed;

typedef struct TEMPERATURE
{
    unsigned char temperature[8];
}Temperature;

typedef struct AUXPOWER
{
    unsigned char voltage[8];
}AuxPower;

typedef struct RELAY
{
    union
    {
        unsigned char relay_status[8];
        struct
        {
            unsigned char AC_Contactor :1;      //bit 0
            unsigned char CCS_Precharge :1;     //bit 1
            unsigned char :1;                   //bit 2 reserved
            unsigned char :1;                   //bit 3 reserved
            unsigned char :1;                   //bit 4 reserved
            unsigned char :1;                   //bit 5 reserved
            unsigned char :1;                   //bit 6 reserved
            unsigned char :1;                   //bit 7 reserved

            unsigned char Gun1_N :1;            //bit 0
            unsigned char Gun1_P :1;            //bit 1
            unsigned char Gun1_Parallel_N :1;   //bit 2
            unsigned char Gun1_Parallel_P :1;   //bit 3
            unsigned char :1;                   //bit 4 reserved
            unsigned char :1;                   //bit 5 reserved
            unsigned char :1;                   //bit 6 reserved
            unsigned char :1;                   //bit 7 reserved

            unsigned char Gun2_N :1;            //bit 0
            unsigned char Gun2_P :1;            //bit 1
            unsigned char :1;                   //bit 2 reserved
            unsigned char :1;                   //bit 3 reserved
            unsigned char :1;                   //bit 4 reserved
            unsigned char :1;                   //bit 5 reserved
            unsigned char :1;                   //bit 6 reserved
            unsigned char :1;                   //bit 7 reserved
        }bits;
    }relay_event;
}Relay;

typedef struct GFD
{
    unsigned short Resister_conn1;
    unsigned short voltage_conn1;
    unsigned char result_conn1;
    unsigned char rb_step_1;

    unsigned short Resister_conn2;
    unsigned short voltage_conn2;
    unsigned char result_conn2;
    unsigned char rb_step_2;
}Gfd;

typedef struct Gfd_CONFIG
{
    unsigned char index;
    unsigned char state;
}Gfd_config;

typedef struct GPIO_IN
{
    unsigned char AC_Connector;             // bit 0
    unsigned char AC_MainBreaker;           // bit 1
    unsigned char SPD;                      // bit 2
    unsigned char Door_Open;                // bit 3
    unsigned char GFD[2];                   // bit 4,5
    unsigned char AC_Drop;                  // bit 6

    unsigned char Emergency_IO;             // bit 0

    unsigned char Button_Emergency_Press;   // bit 0
    unsigned char Button_On_Press;          // bit 1
    unsigned char Button_Off_Press;         // bit 2
    unsigned char Key_1_Press;              // bit 3
    unsigned char Key_2_Press;              // bit 4
    unsigned char Key_3_Press;              // bit 5
    unsigned char Key_4_Press;              // bit 6
}Gpio_in;

typedef struct GPIO_OUT
{
    unsigned char AC_Connector;
    unsigned char Button_LED[2];
    unsigned char System_LED[4];
}Gpio_out;

typedef struct RTC
{
    unsigned char RtcData[14];
}Rtc;

typedef struct LED_Color
{
    unsigned char Connect_1_Red;
    unsigned char Connect_1_Green;
    unsigned char Connect_1_Blue;
    unsigned char Connect_2_Red;
    unsigned char Connect_2_Green;
    unsigned char Connect_2_Blue;
}Led_Color;

typedef struct AC_Status
{
    unsigned char       CpStatus;
    unsigned short      CurLimit;
    short               PilotVol_P;
    short               PilotVol_N;
    unsigned char       LockStatus;
    unsigned char       RelayStatus;
    unsigned char       ShutterStatus;
    unsigned char       MeterStatus;
    unsigned char       PpStatus;
    unsigned char       MaxCurrent;
    unsigned char       RotateSwitchStatus;
}
Ac_Status;

typedef struct AC_LED_Status
{
    unsigned char       ActionMode;
    unsigned long       AcAlarmCode;
}
Ac_Led_Status;

typedef struct AC_Alarm_Code
{
    unsigned int        AcAlarmCode;
}
Ac_Alarm_code;

typedef struct AC_Charging_Energy
{
    unsigned int        Energy;
}
Ac_Charging_energy;

typedef struct AC_Charging_Current
{
    unsigned short      OuputCurrentL1;
    unsigned short      OuputCurrentL2;
    unsigned short      OuputCurrentL3;
}
Ac_Charging_current;

extern unsigned char Query_FW_Ver(unsigned char fd, unsigned char targetAddr, Ver *Ret_Buf);
extern unsigned char Query_HW_Ver(unsigned char fd, unsigned char targetAddr, Ver *Ret_Buf);
extern unsigned char Query_Present_InputVoltage(unsigned char fd, unsigned char targetAddr, PresentInputVoltage *Ret_Buf);
extern unsigned char Query_Present_OutputVoltage(unsigned char fd, unsigned char targetAddr, PresentOutputVoltage *Ret_Buf);
extern unsigned char Query_Fan_Speed(unsigned char fd, unsigned char targetAddr, FanSpeed *Ret_Buf);
extern unsigned char Query_Temperature(unsigned char fd, unsigned char targetAddr, Temperature *Ret_Buf);
extern unsigned char Query_Aux_PowerVoltage(unsigned char fd, unsigned char targetAddr, AuxPower *Ret_Buf);
extern unsigned char Query_Relay_Output(unsigned char fd, unsigned char targetAddr, Relay *Ret_Buf);
extern unsigned char Query_Gfd_Adc(unsigned char fd, unsigned char targetAddr, Gfd *Ret_Buf);
extern unsigned char Query_Gpio_Input(unsigned char fd, unsigned char targetAddr, Gpio_in *Ret_Buf);
extern unsigned char Query_Model_Name(unsigned char fd, unsigned char targetAddr, unsigned char *modelname);

extern unsigned char Config_Fan_Speed(unsigned char fd, unsigned char targetAddr, FanSpeed *Set_Buf);
extern unsigned char Config_Relay_Output(unsigned char fd, unsigned char targetAddr, Relay *Set_Buf);
extern unsigned char Config_Gpio_Output(unsigned char fd, unsigned char targetAddr, Gpio_out *Set_Buf);
extern unsigned char Config_Gfd_Value(unsigned char fd, unsigned char targetAddr, Gfd_config *Set_Buf);
extern unsigned char Config_Model_Name(unsigned char fd, unsigned char targetAddr, unsigned char *modelname);
extern unsigned char Config_Rtc_Data(unsigned char fd, unsigned char targetAddr, Rtc *Set_Buf);

extern unsigned char Update_Start(unsigned char fd, unsigned char targetAddr, unsigned int crc32);
extern unsigned char Update_Abord(unsigned char fd, unsigned char targetAddr);
extern unsigned char Update_Transfer(unsigned char fd, unsigned char targetAddr, unsigned int startAddr, unsigned char *data, unsigned short int length);
extern unsigned char Update_Finish(unsigned char fd, unsigned char targetAddr);

extern unsigned char Query_AC_Status(unsigned char fd, unsigned char targetAddr, Ac_Status *Ret_Buf);
extern unsigned char Query_AC_Alarm_Code(unsigned char fd, unsigned char targetAddr, Ac_Alarm_code *Ret_Buf);
extern unsigned char Query_Charging_Energy(unsigned char fd, unsigned char targetAddr, Ac_Charging_energy *Ret_Buf);
extern unsigned char Query_Charging_Current(unsigned char fd, unsigned char targetAddr, Ac_Charging_current *Ret_Buf);
extern unsigned char Config_LED_Status(unsigned char fd, unsigned char targetAddr, Ac_Led_Status *Ret_Buf);
extern unsigned char Config_Legacy_Req(unsigned char fd, unsigned char targetAddr, unsigned char _switch);
extern unsigned char Config_Ac_Duty(unsigned char fd, unsigned char targetAddr, unsigned char _value);
extern unsigned char Config_CSU_Mode(unsigned char fd, unsigned char targetAddr);
extern unsigned char Config_Reset_MCU(unsigned char fd, unsigned char targetAddr);
extern unsigned char Config_Led_Color(unsigned char fd, unsigned char targetAddr, Led_Color *Ret_Buf);
#endif /* INTERNALCOMM_H_ */