#ifndef __UFCS_PE_DEFINE_H__ #define __UFCS_PE_DEFINE_H__ #include "stdint.h" #define ufcs_VER 1 #define CTRL_MSG 0 #define DATA_MSG 1 #define VDM_MSG 2 #define UNKNOWN_MSG 7 #define DEV_SRC 1 #define DEV_SNK 2 #define DEV_CBL 3 #define UFCS_MAX_TX_SIZE 64 #define UFCS_MAX_RX_SIZE 64 #define nRetryCounter 3 // max retry #define nMsgNumberCount 16 // max count //#define UFCS_TIMER_COUNT 11 // max //#define tFrameReceiveMax 600 #define tACKReceive 9//13//10 #define tSenderRespone 50 //20 30 #define tReceiverResponse 40 //20 30 #define tPowerSupply 550 //280 550 #define tCableInfoResponse 1200 //1100 1200 #define tRestartTrans 1050 //1000 1100 //#define tVerify 950 //900 1000 #define tCableTrans 1000 #define tDet4Recive 8 #define tACKTransmit 1000 #define tRetry 500 #define tWaitPing 120//120 #define tUFCSSrcRecover 1100//600 #define tPwrTransWait 25//50 #define tWatchDog 1000 #define tMsgTransDelay 3 #define tHardResetSentTimeout 10//4 #define tPCTimeout 1000 #define tFrameReceive 600//us //len #define L_Request 8 #define L_Sink_Information 8 #define L_Cable_Information 8 #define L_Device_Information 8 #define L_Error_Information 4 #define L_Config_Watchdog 2 #define L_Refuse 4 #define L_Verify_Request 17 #define L_Verify_Response 48 #define L_Test_Request 2 #define OUT_CAP_LEN 7 #define UFCS_BDRATE_115200 0 #define UFCS_BDRATE_57600 1 #define UFCS_BDRATE_38400 2 #define UFCS_BDRATE_19200 3 //PE source status typedef enum { UFCS_PE_SRC_Startup = 0, //init UFCS_PE_SRC_Ready, UFCS_PE_SRC_Negotiate_Capability, UFCS_PE_SRC_Init_Start_Cable_Detect, UFCS_PE_SRC_Get_Cable_Info, UFCS_PE_SRC_Send_Cable_Info,//5 UFCS_PE_SRC_Wait_End_Cable_Detect, UFCS_PE_SRC_Send_End_Cable_Detect, UFCS_PE_SRC_Test, UFCS_PE_SRC_Send_Accept, UFCS_PE_SRC_Send_Refuse,//10 UFCS_PE_SRC_Send_Output_Capabilities, //send cap UFCS_PE_SRC_send_Supply_psrdy, UFCS_PE_SRC_Send_Source_Information, UFCS_PE_SRC_Send_Device_Information, UFCS_PE_SRC_Send_Error_Information,//15 UFCS_PE_SRC_Send_Verify_Response, UFCS_PE_SRC_Transition_to_default, UFCS_PE_SRC_Send_Soft_Reset, UFCS_PE_SRC_Get_Device_Info, UFCS_PE_SRC_Send_Cable_HardReset,//20 UFCS_PE_SRC_Send_Power_Change, UFCS_PE_SRC_Give_Vdm_Info, UFCS_PE_SRC_Reserved, UFCS_PE_SRC_request_information, UFCS_PE_SRC_MAX, } ufcs_pe_status_e; typedef union { uint16_t word; uint8_t byte[2]; struct { uint8_t msg_type: 3; uint8_t version_1: 5; uint8_t version_2: 1; uint8_t msg_id: 4; //0-15 loop uint8_t device_addr: 3; } bit; } ufcs_msg_header_u; typedef union { uint16_t word; uint8_t byte[2]; struct { uint8_t vdm_h: 8; uint8_t vdm_l: 8; } bit; } ufcs_msg_vdm_id_u; /***********huwei VDM message type start*************/ #define HUAWEI_UFCS_VDM_ID 0x0001 #define SOURCE_ID_LEN 4 #define SCP_B_POWER_LEN 10 typedef enum { UNKNOWN_HW_CTR_MSG = 0x00, GET_SOURCE_ID, GET_SCP_B_POWER, } e_control_huawei_cmd; typedef enum { UNKNOWN_HW_DATA_MSG = 0x00, SOURCE_ID, SCP_B_POWER, } e_data_huawei_cmd; typedef union { uint16_t word; uint8_t byte[2]; struct { uint8_t vmd_cmd_l_8: 8; uint8_t vmd_cmd_h_5: 5; uint8_t vmd_cmd_type: 3; } bit; } u_ufcs_hw_vdm_info; typedef union ufcs_hw_scp_b_power_info_u { uint32_t data32[2]; uint8_t byte[8]; struct { uint8_t output_index: 3; uint8_t power_type: 4; uint8_t scp_b_20v_power_h_8: 8; uint8_t scp_b_20v_power_l_8: 8; uint8_t scp_b_15v_power_h_8: 8; uint8_t scp_b_15v_power_l_8: 8; uint8_t scp_b_10v_power_h_8: 8; uint8_t scp_b_10v_power_l_8: 8; uint8_t scp_b_5v_power_h_8: 8; uint8_t scp_b_5v_power_l_8: 8; } bits; } ufcs_hw_scp_b_power_info_u; /***********huwei VDM message type end*************/ typedef union { uint16_t word; uint8_t byte[2]; struct { uint8_t refuse_cmd : 8; uint8_t msg_type: 3; uint8_t msg_id: 4; uint8_t resived: 1; } bit; } ufcs_msg_refuse_header_u; typedef struct { //uint8_t HardResetCounter; int8_t MessageIDCounter; uint8_t RetryCounter; } ufcs_counters_s; typedef enum { UFCS_ACKReceiveTimer = 0, UFCS_SenderResponseTimer, //msg not ack like cap UFCS_RestartTransTimer, UFCS_CableInfoTimer, UFCS_HDSK_DET4_Timer, UFCS_WaitPingTimer, UFCS_SrcRecoverTimer, UFCS_PwrTransWaitTimer, UFCS_WatchdogTimer, UFCS_MsgTransDelayTimer, UFCS_HardResetSendTimer, UFCS_PC_Timer, UFCS_TIMER_COUNT, } ufcs_timer_e; typedef struct ufcs_sent_pkt_s { uint8_t length; uint8_t *ufcs_sent_buf; //[UFCS_MAX_TX_SIZE]; } ufcs_sent_pkt_s; typedef struct ufcs_recived_pkt_s { // uint16_t length; uint8_t *ufcs_recived_buf; //[UFCS_MAX_TX_SIZE]; } ufcs_recived_pkt_s; typedef union { uint32_t word[2]; uint8_t byte[8]; struct { uint8_t V_min_step: 1; uint8_t I_min_step: 3; uint8_t out_mode_id: 4; uint8_t maxV_h: 8; uint8_t maxV_l: 8; uint8_t minV_h: 8; uint8_t minV_l: 8; uint8_t maxI_h: 8; uint8_t maxI_l: 8; uint8_t minI: 8; } bits; } u_out_capabilities; typedef struct { uint8_t reserved4: 4; uint8_t outcap_mode_id: 4; //high bit uint8_t reserved1; uint8_t reserved2; uint8_t reserved3; uint8_t req_OutV_h; uint8_t req_OutV_l; uint8_t req_OutI_h; uint8_t req_OutI_l; //low bit } s_data_request; typedef union { uint32_t data32; uint8_t byte[4]; struct { //10mV or 10 mA uint8_t refuse_msg_id: 4; uint8_t reserved2: 4; uint8_t refuse_msg_type: 3; uint8_t reserved1: 5; uint8_t refuse_cmd: 8; uint8_t refuse_reason: 8; } bits; } u_refuse; typedef union { uint16_t word; uint8_t byte[2]; struct { uint8_t message_type: 3; uint8_t target_addr: 3; uint8_t volt_test_mode: 1; uint8_t test_mode_enable: 1; uint8_t message_id; } bits; } u_test_req; typedef union { uint32_t data32[2]; uint8_t byte[8]; struct { uint8_t resrved2; uint8_t reserved1; uint8_t innerTemp; uint8_t usbTemp; uint8_t nowV_h; uint8_t nowV_l; uint8_t nowI_h; uint8_t nowI_l; } bits; } u_pwr_information; //typedef struct{ // //10mV or 10 mA // uint8_t nowI_l:8; // uint8_t nowI_h:8; // uint8_t nowV_l:8; // uint8_t nowV_h:8; // uint8_t usbTemp:8; // uint8_t innerTemp:8; // uint8_t reserved1:8; // uint8_t reserved2:8; //}s_data_snk_info; typedef union { uint32_t word[2]; uint8_t byte[8]; struct { uint8_t maxI: 8; //0~7 uint8_t maxV: 8; //8~15 uint16_t cable_R: 10; //16~31 uint16_t emarker_VID: 16; //32~47 uint16_t cable_VID: 16; //48~63 } bits; } u_cable_info; //for device information modify by wangxi typedef union { uint32_t word[2]; uint8_t byte[8]; struct { uint16_t dev_SW_Ver: 16; //0~15 uint16_t dev_HW_Ver: 16; //16~31 uint16_t dev_IC_VID: 16; //32~47 uint16_t dev_VID: 16; //48~63 } bits; } u_device_info; typedef union { uint32_t word; uint8_t byte[4]; struct { uint8_t OVP: 1; uint8_t UVP: 1; uint8_t OCP: 1; uint8_t SCP: 1; uint8_t USB_OTP: 1; uint8_t IN_OTP: 1; uint8_t CCOVP: 1; uint8_t DN_OVP: 1; uint8_t DP_OVP: 1; uint8_t IN_OVP: 1; uint8_t IN_UVP: 1; uint8_t DrainI_Over: 1; uint8_t IN_Power_Down: 1; uint8_t CRC_Close_Out: 1; uint8_t WTD_Over: 1; uint32_t reserved: 17; } bits; } error_info_u; typedef struct { uint8_t psw_id; uint8_t rand_data[16]; } s_verift_request; typedef struct { uint8_t rand_data[16]; uint8_t encrypted_data[32]; // 32byt } s_verift_response; typedef struct { uint8_t byte[2]; struct { uint8_t msg_id: 8; uint8_t msg_type: 3; uint8_t dev_address: 3; uint8_t Vaccuracy_test_mode: 1; uint8_t reserved: 1; } bits; } u_test_request; typedef struct { uint8_t vendor_id[2]; //2byte } s_vendor_id; typedef struct { u_out_capabilities out_capabilities[OUT_CAP_LEN]; } ufcs_data_obj_s; #pragma anon_unions typedef union { uint16_t word; struct { uint16_t en: 1; uint16_t value: 15; }; } ufcs_timer_u; //typedef union //{ // uint8_t byte[8]; // struct{ // uint16_t min_current; //arm 16 may batter // uint16_t max_current; // uint16_t min_volatage; // uint16_t max_volatage; // }s_power_fps_info; // //}u_ufcs_app_power_info; typedef union { uint8_t byte[10]; uint16_t data16[5]; struct { uint16_t max_current; uint16_t max_vol; uint16_t Cable_impedance; uint16_t vdm_id_code1; uint16_t vdm_id_code2; }; } emakr_info_s; typedef union { uint8_t byte[17]; struct { uint8_t key_index; uint8_t key_buf[16]; }; } very_request_info_s; typedef union ufcs_power_change_capabilities_u { uint8_t byte[3]; struct { uint8_t resverd0: 4; uint8_t index: 4; uint8_t max_output_cur_H; uint8_t max_output_cur_L; } bits; } ufcs_power_change_capabilities_u; typedef unsigned char (*ufcs_Sha256Handle_t)(unsigned long *sha256Array, unsigned char keyChoose); typedef union { uint32_t data32[2]; uint8_t byte[8]; struct { uint8_t vdmid_h; uint8_t vdmid_l; uint8_t chipid_h; uint8_t chipid_l; uint8_t hard_ware_h; uint8_t hard_ware_l; uint8_t soft_ware_h; uint8_t soft_ware_l; } bits; } device_information_u; typedef union { uint8_t byte; struct { uint8_t main_ver: 2; uint8_t mid_ver: 2; uint8_t min_ver: 2; uint8_t resverd: 2; }; } ufcs_version_info_u; typedef struct { uint8_t rcv_cmd; uint8_t snt_cmd; uint8_t ufcs_report_temp; uint8_t refuse_rsn; int8_t rcv_msg_id; uint8_t out_cap_cnt; uint8_t hdsk_cnt; uint8_t vdm_data_len; uint8_t accept_rsn; uint8_t info_process; ufcs_msg_vdm_id_u ufcs_msg_vdm_id; uint8_t hdsk_dec_cnt_times; ufcs_version_info_u ufcs_versions; uint8_t hdsk_dec_cnt; uint8_t rcv_uart_div; uint8_t send_uart_div; uint8_t ufcs_nRetryCounter; uint8_t ufcs_msg_delay_cnt; uint8_t ufcs_request_index; uint16_t ufcs_adc_vol; uint16_t ufcs_adc_cur; uint16_t soft_ware_verision; ufcs_msg_refuse_header_u ufcs_refuse_msg_header; ufcs_power_change_capabilities_u power_change_cap[OUT_CAP_LEN]; //sram 8 byte uint16_t ufcs_request_vol; uint16_t ufcs_request_cur; uint16_t ufcs_watchdog_time; uint16_t source_id; //sram 20 byte uint16_t timeout[UFCS_TIMER_COUNT]; u_ufcs_hw_vdm_info hw_vdm_info; ufcs_timer_u ufcs_timers[UFCS_TIMER_COUNT]; ufcs_counters_s ufcs_counters; //sram 56 byte ufcs_data_obj_s ufcs_data_obj; //sram 8 byte emakr_info_s emark_data; //sram 4 byte error_info_u error_info; device_information_u device_information; //sram 20 byte ufcs_msg_header_u ufcs_msg_header; very_request_info_s very_request_info; ufcs_recived_pkt_s ufcs_recived_pkt; //sram 12 byte resived 2 byte ufcs_sent_pkt_s ufcs_sent_pkt; //sram 4 byte ufcs_Sha256Handle_t ufcs_Sha256Handle; void (*dpdn_short_set)(uint8_t en); uint8_t (*ufcs_bc12_is_ok)(uint8_t port); // ufcs_hw_scp_b_power_info_u ufcs_hw_scp_b_power_info; } ufcs_assist_s; typedef enum { ufcs_Ctrl_Ping = 0x00, ufcs_Ctrl_ACK, ufcs_Ctrl_NCK, ufcs_Ctrl_Accept, ufcs_Ctrl_Soft_Reset, ufcs_Ctrl_Power_Ready, //0x05 ufcs_Ctrl_Get_Output_Capabilities, ufcs_Ctrl_Get_Source_Info, ufcs_Ctrl_Get_Sink_Info, ufcs_Ctrl_Get_Cable_Info, ufcs_Ctrl_Get_Device_Info, ufcs_Ctrl_Get_Error_Info, ufcs_Ctrl_Detect_Cable_Info, ufcs_Ctrl_Start_Cable_Detect, ufcs_Ctrl_End_Cable_Detect, ufcs_Ctrl_Exit_UFCS_Mode, ufcs_Ctrl_Power_Swap } control_cmd_e; typedef enum { Not_Recognized = 0x01, Not_Support_Cmd = 0x02, Dev_Busy = 0x03, Pwr_Out_Range = 0x04, Others = 0x05, } refuse_rsn_e; typedef enum { Pwr_Meet_Range = 0x01, Conf_Watch_Dog = 0x02, Chg_Cbl_Det = 0x03, Stop_Tx = 0x04, Verify_Req = 0x05, } accept_rsn_e; typedef enum { Verify = 0x01, } info_process_e; typedef enum { Data_Output_Capabilities = 0x01, ufcs_Data_Request, Data_Source_Information, Data_Sink_Information, Data_Cable_Information, Data_Device_Information, Data_Error_Information, Data_Config_Watchdog, Data_Refuse, Data_Verify_Request, Data_Verify_Response, Data_Power_change, Data_Test_Request = 0xFF } data_cmd_e; //typedef enum{ // UnAttached, // AttachWait, // Attached, // Error_Recovery //}e_connect_state; //typedef enum{ // Control_Msg_Rcv, // Data_Msg_Rcv, // VD_Msg_Rcv, // Hardrst_Msg_Rcv //}e_pe_event; typedef union { uint16_t word; uint8_t byte[2]; struct { //byte0 uint8_t pe_hardreset_recived_from_prl: 1; uint8_t pe_softreset_recived_from_prl: 1; uint8_t pe_packet_recived_from_prl: 1; uint8_t pe_packet_sent_succ_from_prl: 1; uint8_t pe_packet_sent_fail_from_prl: 1; uint8_t hdsk_succ: 1; uint8_t pe_send_hard_reset_from_prl: 1; uint8_t pe_send_hard_succ_from_prl: 1; uint8_t pe_packet_sent_discard_from_prl: 1; uint8_t dn_over_voltage_flag: 1; uint8_t dpdn_ov_send_hard_rst_flag: 1; uint8_t reserved: 5; } bits; } ufcs_pe_event_flags_u; typedef enum { ufcs_entry_status, ufcs_exit_status, } ufcs_pe_process_status_e; //2 * 4 = 8 typedef struct { ufcs_pe_status_e pe_status; ufcs_pe_process_status_e pe_process_status; } ufcs_pe_status_s; typedef union { uint16_t word; uint8_t byte[2]; struct { uint8_t ACKReceive_timeout: 1; uint8_t SenderResponse_timeout: 1; uint8_t RestartTrans_timeout: 1; uint8_t CableInfoResponse_timeout: 1; uint8_t hdsk_det4_timeout: 1; uint8_t waitping_timeout: 1; uint8_t SrcRecover_timeout: 1; uint8_t PowerTransWait_timeout: 1; uint8_t Watchdog_timeout: 1; uint8_t MsgTransDelay_timeout: 1; uint8_t HardReset_timeout: 1; uint8_t PC_timeout: 1; uint8_t reserved: 4; } bits; } ufcs_timer_flags_u; typedef union { uint16_t word; uint8_t byte[2]; struct { //byte0 uint8_t Cable_Discovered_flag: 1; uint8_t prl_relay_anck_success: 1; uint8_t test_mode: 1; uint8_t pwr_change_send_flag: 1; uint8_t ufcs_Power_neg_completed: 1; uint8_t hdsk_nego_succ: 1; uint8_t snk_req_met: 2; //byte1 uint8_t ufcs_reset: 2; uint8_t resived : 6; } bits; } ufcs_process_flags_u; //need to change typedef union { uint8_t byte; struct { //byte0 uint8_t prl_rx_check_msg_id_flag: 1; uint8_t prl_tx_check_msg_id_flag: 1; uint8_t prl_tx_sucess_msg_id_add_flag: 1; uint8_t pe_request_informatin_flag: 1; uint8_t resived : 4; } bits; } ufcs_system_app_flags_u; //need to change #endif