2021-09-01 02:03:14 -07:00
|
|
|
#pragma once
|
|
|
|
|
2017-12-03 07:32:07 -08:00
|
|
|
#ifdef ISSI_ENABLE
|
|
|
|
|
|
|
|
typedef struct ISSIDeviceStruct{
|
|
|
|
uint8_t fn_dirty; // function registers need to be resent
|
|
|
|
uint8_t fn_device_addr;
|
|
|
|
uint8_t fn_register_addr;
|
|
|
|
uint8_t fn_registers[13];
|
|
|
|
uint8_t led_dirty; // LED data has changed and needs to be resent
|
|
|
|
uint8_t led_device_addr;
|
|
|
|
uint8_t led_register_addr;
|
|
|
|
uint8_t led_ctrl[18];
|
|
|
|
uint8_t led_blink_ctrl[18];
|
|
|
|
uint8_t led_pwm[144];
|
|
|
|
}ISSIDeviceStruct;
|
|
|
|
|
|
|
|
extern ISSIDeviceStruct *issi_devices[];
|
|
|
|
|
|
|
|
// Low level commands- 'device' is the 2-bit i2c id.
|
|
|
|
void issi_init(void);
|
|
|
|
void set_shutdown(uint8_t device, uint8_t shutdown);
|
|
|
|
void writeRegister8(uint8_t device, uint8_t frame, uint8_t reg, uint8_t data);
|
|
|
|
|
|
|
|
// Higher level, no device is given, but it is calculated from 'matrix'
|
|
|
|
// Each device has 2 blocks, max of 4 devices:
|
|
|
|
// Device | Block = Matrix
|
|
|
|
// 0 A 0
|
|
|
|
// 0 B 1
|
|
|
|
// 1 A 2
|
|
|
|
// 1 B 3
|
|
|
|
// 2 A 4
|
|
|
|
// 2 B 5
|
|
|
|
// 3 A 6
|
|
|
|
// 3 B 7
|
|
|
|
void activateLED(uint8_t matrix, uint8_t cx, uint8_t cy, uint8_t pwm);
|
|
|
|
void update_issi(uint8_t device_addr, uint8_t blocking);
|
|
|
|
|
|
|
|
#endif
|