Files
CW_A5H_9225_8108/A5H_9225_8108_SPIV3.0/HY88xx/SpbDriverApi.h
2025-09-29 16:49:49 +08:00

228 lines
4.4 KiB
C

#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