#ifndef __SPBDRIVERAPI_H__ #define __SPBDRIVERAPI_H__ #include "stdbool.h" #include "stdint.h" #include "BfiApi.h" typedef enum { #if defined HY8810 || HY8602 PWM=0, DC, MIX_8DC_8HT, MIX_10DC_6HT, MIX_6DC_10HT, MIX_11DC_5HT, MIX_4DC_12HT, MIX_9DC_7HT, #elif defined HY8811 || HY8603 || HY8822 PWM=0, DC_DITHER8_8, MIX_6DC_10HT, MIX_8DC_8HT, DC, #elif defined HY8612 || HY8608 PWM=0, DC_DITHER10_6, DC_DITHER8_8, MIX_6DC_10HT, MIX_8DC_8HT, MIX_10DC_6HT, DC, #elif defined HY8108 PWM=0, DC_DITHER10_6, MIX_6DC_10HT, MIX_10DC_6HT, DC, DC_DITHER8_8, #endif } dimming_mode_t; typedef enum { SINGLE=0, CH_SICK_INT1, SHORT_INT, OPEN_INT, OTP_INT, CRC_INT, PWM_HIGH_TO_SMALL, CH_SICK_INT2, #if defined HY8811 DEVICE_ID, OH, SELECTED_FAULT, #elif defined HY8603 || HY8822 || HY8612 || HY8608 OH, DEVICE_ID, SELECTED_FAULT, #endif #if defined HY8612 || HY8608 ADDRESS_CHECK, DIP_TIMEOUT, UART=0XF, #endif #if defined HY8108 OH, DEVICE_ID, ADDRESS_CHECK=0xB, UART=0XF, #endif } dos_mode_t; enum { UNBLOCKING=0, BLOCKING, }; typedef enum { OK=0, PRE_ERR, SOP_ERR, CRC_ERR, EOP_ERR, INCOMPLETE, } fb_err_t; typedef enum { #if defined HY8810 || HY8602 || HY8811 || HY8603 || HY8822 CMD_DIMMING =0x999f, CMD_BROADCAST =0x9a9a, CMD_CONFIG =0x955a, CMD_ADDR =0x959f, CMD_READ_BACK =0x5559, #elif defined HY8612 || HY8608 || HY8108 CMD_DIMMING =0x71, CMD_BROADCAST =0x72, CMD_CONFIG =0x73, CMD_ADDR =0x74, CMD_READ_BACK =0x75, CMD_READ_FAULT =0x76, #endif }sop_type; #if defined HY8810 || HY8602 || HY8811 || HY8603 || HY8822 #define BMC_BIT_LENGTH(len) ((len+6) * 20+5) #elif defined HY8612 #define BMC_BIT_LENGTH(len) ((len+6) * 16) #elif defined HY8608 || HY8108 #define BMC_BIT_LENGTH(len) ((len+7) * 16) #endif #define PREAMBER_VALUE 0X5555 #define SOP_ADDR 0xc6711 #define SOP_READ_BACK 0xce738 #define SOP_CONFIG 0xc6727 #define SOP_BROADCAST 0xc1f07 #define SOP_DIMMING 0xc6311 typedef union { #if defined HY8608 || HY8108 struct{ uint16_t pre; uint16_t head; uint16_t addr; uint16_t subaddr; uint16_t feedback; uint16_t datalength; uint16_t d[MAXCASCADE]; uint16_t crc; }frame; uint16_t data[MAXCASCADE+7]; #elif defined HY8612 struct{ uint16_t pre; uint16_t head; uint16_t addr; uint16_t subaddr; uint16_t datalength; uint16_t d[MAXCASCADE]; uint16_t crc; }frame; uint16_t data[MAXCASCADE+6]; #elif defined HY8810 || HY8602 || HY8811 || HY8603 || HY8822 struct{ uint32_t pre; uint32_t pre2; uint32_t pre3; uint32_t sop; uint32_t startaddress; uint32_t d[MAXCASCADE]; uint32_t crc; uint32_t eop; }frame; uint32_t data[MAXCASCADE+7]; #endif }LANE_DATA_t; extern LANE_DATA_t lane_data[MAXDIP]; extern uint16_t lane_outbuf[PORTOUTBUFSIZE]; void Spb_Init(void); void Spb_Lock(void); void Spb_Unlock(void); void Spb_Lock_REG58or5A(void); void Spb_Unlock_REG58or5A(void); fb_err_t SpbDriverApi_Fb_Decode(uint16_t *rdata); void Spb_Address(uint8_t first_id,uint8_t last_id); void Spb_Readback(uint8_t reg,uint8_t id,uint8_t reg_num,uint8_t ic_num); void Spb_Config(uint8_t reg,uint8_t id,uint8_t reg_num,uint8_t ic_num,uint16_t datas_len); void Spb_Broadcast(uint8_t reg,uint16_t value,uint8_t head_L8); void Spb_Dimming(dimming_mode_t mode,dos_mode_t dos_mode,uint8_t id,uint8_t ic_num,uint16_t data_offset,uint16_t datas_len); #if defined HY8608 || HY8108 enum{ BUFF_BCON_TO_DRIVER=0, SLAVE_BCON_TO_DRIVER, BUFF_DRIVER_TO_BCON, SLAVE_DRIVER_TO_BCON, }; typedef enum { BCON_driver_parallel = 0x0000, //BCON => driver:parallel BCON_driver_serial = 0x4000, //BCON => driver:serial driver_BCON_parallel = 0x8000, //driver => BCON:parallel driver_BCON_serial = 0xc000, //driver => BCON:serial }next_commad_type; typedef struct { uint8_t dos_mode;//HEAD bit4-7 uint8_t dimming_mode;//HEAD bit1-3 uint8_t effect;//HEAD bit0 uint16_t address; uint16_t sub_addr; uint16_t feedback; next_commad_type next_commad_type;//DATA_LENGTH bit14-15 } Frame_Format_t; extern Frame_Format_t ospb_frame; void update_frame_data(uint8_t dos_mode,uint16_t addr,uint16_t subaddr,uint16_t feedback); void update_ospb_type(uint8_t type); void update_frame_mode(uint8_t dos_mode,uint8_t dimming_mode,uint8_t effect,next_commad_type next_commad_type); #endif #endif