summaryrefslogtreecommitdiffstats
path: root/keyboards/lfkeyboards/issi.h
blob: 74379ddbc8ff67cef6ab8acebf24c33bb8b98cfb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#pragma once

#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