Subversion Repositories Code-Repo

Rev

Rev 278 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
238 Kevin 1
#ifndef CONTROLLERS_H
2
#define	CONTROLLERS_H
3
 
274 Kevin 4
#define CONTROLLER_CMD_READ     0xA
5
#define CONTROLLER_CMD_WRITE    0xB
6
#define CONTROLLER_CMD_RESET    0xC
276 Kevin 7
#define CONTROLLER_CMD_ACTIVE   0xD
238 Kevin 8
 
276 Kevin 9
#define CONTROLLER_PREFIX_ADDRESS   0x10
274 Kevin 10
#define CONTROLLER_START_ADDRESS    0x01
11
#define CONTROLLER_END_ADDRESS      0x08
238 Kevin 12
 
278 Kevin 13
#define CONTROLLER_MAX_COUNT    8
274 Kevin 14
 
276 Kevin 15
#define CONTROLLER_BRIGHTNESS_HIGH  0x80
16
 
17
typedef union {
18
    struct {
19
        unsigned BTN_L_N    :1;
20
        unsigned BTN_L_E    :1;
21
        unsigned BTN_R_E    :1;
22
        unsigned BTN_R_N    :1;
23
        unsigned BTN_R_S    :1;
24
        unsigned BTN_R_W    :1;
25
        unsigned BTN_L_S    :1;
26
        unsigned BTN_L_W    :1;
27
    };
28
    uint8_t w;
29
} CTRL_BTN_STATUS;
30
 
31
typedef union {
32
    struct {
33
        uint8_t LED_0;
34
        uint8_t LED_1;
35
        uint8_t LED_2;
36
        uint8_t LED_3;
37
        uint8_t LED_4;
38
        uint8_t LED_5;
39
        uint8_t LED_6;
40
        uint8_t LED_7;
41
        uint8_t LED_N;
42
        uint8_t LED_W;
43
        uint8_t LED_E;
44
        uint8_t LED_S;
45
        uint8_t LED_A;
46
        uint8_t LED_B;
47
        uint8_t LED_C;
48
        uint8_t LED_D;
49
    } single;
50
    uint8_t w[16];
51
} CTRL_LED_VALUES;
52
 
238 Kevin 53
typedef struct {
276 Kevin 54
    void (*change_callback)(uint8_t controller, CTRL_BTN_STATUS values);
238 Kevin 55
 
274 Kevin 56
    uint8_t connected_count;
278 Kevin 57
    uint8_t next_poll;
276 Kevin 58
    uint8_t connected_controllers[CONTROLLER_MAX_COUNT];
59
    CTRL_LED_VALUES led_status[CONTROLLER_MAX_COUNT];
60
    CTRL_BTN_STATUS btn_prev[CONTROLLER_MAX_COUNT];
61
    CTRL_BTN_STATUS btn_curr[CONTROLLER_MAX_COUNT];
62
 
238 Kevin 63
} CONTROLLER_DATA;
64
 
276 Kevin 65
void Controller_Init(CONTROLLER_DATA *data,
66
        void (*change_callback)(uint8_t controller, CTRL_BTN_STATUS values));
274 Kevin 67
void Controller_Poll_Connected(void);
238 Kevin 68
void Controller_Update(void);
276 Kevin 69
void Controller_Set_Left_Leds(uint8_t controller, uint8_t value);
70
void Controller_Set_Middle_Leds(uint8_t controller, uint8_t value);
71
void Controller_Set_Right_Leds(uint8_t controller, uint8_t value);
238 Kevin 72
 
276 Kevin 73
uint8_t Controller_Get_Connected(void);
74
void Controller_Set_Active(uint8_t controller);
75
void Controller_Set_Idle(uint8_t controller);
76
 
238 Kevin 77
#endif	/* CONTROLLERS_H */
78