4,24 → 4,58 |
|
static CONTROLLER_DATA *ctrl_data_p; |
|
void Controller_Init(CONTROLLER_DATA *data, |
void (*btn_change_callback)(uint8_t, uint8_t)) { |
void Controller_Init(CONTROLLER_DATA *data) { |
ctrl_data_p = data; |
|
ctrl_data_p->btn_change_callback = btn_change_callback; |
|
ctrl_data_p->ctrl_1_connected = 0; |
ctrl_data_p->ctrl_1_buttons_prev = CONTROLLER_BTN_DEFAULT; |
ctrl_data_p->ctrl_1_leds = CONTROLLER_LED_DEFAULT; |
ctrl_data_p->ctrl_1_active = 0; |
// Variable initialization |
int i; |
for (i = 0; i < CONTROLLER_MAX_COUNT; i++) { |
ctrl_data_p->connected_controllers[i] = 0x0; |
ctrl_data_p->led_status[i][0] = 0x0; |
ctrl_data_p->led_status[i][1] = 0x0; |
ctrl_data_p->btn_prev[i] = 0x0; |
ctrl_data_p->btn_last[i] = 0x0; |
} |
|
ctrl_data_p->ctrl_2_connected = 0; |
ctrl_data_p->ctrl_2_buttons_prev = CONTROLLER_BTN_DEFAULT; |
ctrl_data_p->ctrl_2_leds = CONTROLLER_LED_DEFAULT; |
ctrl_data_p->ctrl_2_active = 0; |
ctrl_data_p->connected_count = 0x0; |
|
// Poll to see which controllers are connected |
Controller_Poll_Connected(); |
} |
|
void Controller_Poll_Connected(void) { |
uint8_t buffer[2] = {CONTROLLER_CMD_RESET}; |
uint8_t result, length, i; |
uint8_t address = CONTROLLER_PREFIX_ADDRESS + CONTROLLER_START_ADDRESS; |
|
// Attempt to contact each controller to see if its connected |
for (i = 0; i < CONTROLLER_MAX_COUNT; i++) { |
// I2C1_Master_Send(address + i, buffer, 1); |
// do { |
// result = I2C1_Get_Status(); |
// } while (!result); |
// if (result == I2C1_SEND_OK) { |
// // If a controller is connected, save its address |
// ctrl_data_p->connected_controllers[ctrl_data_p->connected_count] |
// = address + i; |
// ctrl_data_p->connected_count++; |
// } |
I2C1_Master_Restart(address + i, CONTROLLER_CMD_READ, 1); |
do { |
result = I2C1_Get_Status(); |
} while (!result); |
if (result == I2C1_RECV_OK) { |
length = I2C1_Read_Buffer(buffer); |
// If a controller is connected, save its address |
ctrl_data_p->connected_controllers[ctrl_data_p->connected_count] |
= address + i; |
ctrl_data_p->connected_count++; |
} |
} |
} |
|
void Controller_Update(void) { |
/* |
uint8_t buffer[2]; |
uint8_t result, length; |
uint8_t ctrl_1_btn = 0, ctrl_2_btn = 0; |
126,20 → 160,21 |
(*ctrl_data_p->btn_change_callback)(ctrl_1_btn, ctrl_2_btn); |
} |
} |
*/ |
} |
|
void Controller_Set_Leds(uint8_t ctrl_1, uint8_t ctrl_2) { |
ctrl_data_p->ctrl_1_leds = ctrl_1; |
ctrl_data_p->ctrl_2_leds = ctrl_2; |
void Controller_Set_Leds(uint8_t controller, uint16_t value) { |
// ctrl_data_p->ctrl_1_leds = ctrl_1; |
// ctrl_data_p->ctrl_2_leds = ctrl_2; |
} |
|
uint8_t Controller_Query(void) { |
// Returns the active status of attached controllers |
if (ctrl_data_p->ctrl_1_active && ctrl_data_p->ctrl_2_active) |
return 0x3; |
else if (ctrl_data_p->ctrl_1_active) |
return 0x1; |
else if (ctrl_data_p->ctrl_2_active) |
return 0x2; |
return 0; |
uint8_t Controller_Query(uint8_t controller) { |
// // Returns the active status of attached controllers |
// if (ctrl_data_p->ctrl_1_active && ctrl_data_p->ctrl_2_active) |
// return 0x3; |
// else if (ctrl_data_p->ctrl_1_active) |
// return 0x1; |
// else if (ctrl_data_p->ctrl_2_active) |
// return 0x2; |
// return 0; |
} |