diff options
Diffstat (limited to 'firmware/target/arm/tms320dm320/sansa-connect')
-rw-r--r-- | firmware/target/arm/tms320dm320/sansa-connect/avr-sansaconnect.c | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/firmware/target/arm/tms320dm320/sansa-connect/avr-sansaconnect.c b/firmware/target/arm/tms320dm320/sansa-connect/avr-sansaconnect.c index 056ba7b56a..a72faea7be 100644 --- a/firmware/target/arm/tms320dm320/sansa-connect/avr-sansaconnect.c +++ b/firmware/target/arm/tms320dm320/sansa-connect/avr-sansaconnect.c | |||
@@ -52,8 +52,8 @@ | |||
52 | #define dbgprintf(...) | 52 | #define dbgprintf(...) |
53 | #endif | 53 | #endif |
54 | 54 | ||
55 | #define AVR_DELAY_US 100 | 55 | #define AVR_DELAY_US 200 |
56 | #define AVR_MAX_RETRIES 3 | 56 | #define AVR_MAX_RETRIES 10 |
57 | 57 | ||
58 | #define CMD_SYNC 0xAA | 58 | #define CMD_SYNC 0xAA |
59 | #define CMD_CLOSE 0xCC | 59 | #define CMD_CLOSE 0xCC |
@@ -428,17 +428,29 @@ static bool avr_run_command(uint8_t opcode, uint8_t *data, size_t data_length) | |||
428 | return success; | 428 | return success; |
429 | } | 429 | } |
430 | 430 | ||
431 | static bool avr_hid_get_state(void) | ||
432 | { | ||
433 | uint8_t state[8]; | ||
434 | if (avr_run_command(CMD_STATE, state, sizeof(state))) | ||
435 | { | ||
436 | avr_battery_status = state[6]; | ||
437 | avr_battery_level = state[7]; | ||
438 | parse_button_state(state); | ||
439 | return true; | ||
440 | } | ||
441 | return false; | ||
442 | } | ||
431 | 443 | ||
432 | static bool avr_hid_sync(void) | 444 | static bool avr_hid_sync(void) |
433 | { | 445 | { |
434 | uint8_t data; | ||
435 | int retry; | 446 | int retry; |
436 | for (retry = 0; retry < AVR_MAX_RETRIES; retry++) | 447 | for (retry = 0; retry < AVR_MAX_RETRIES; retry++) |
437 | { | 448 | { |
438 | if (avr_run_command(CMD_VER, &data, sizeof(data))) | 449 | if (avr_hid_get_state()) |
439 | { | 450 | { |
440 | return true; | 451 | return true; |
441 | } | 452 | } |
453 | mdelay(100); | ||
442 | } | 454 | } |
443 | /* TODO: Program HID as it appears to be not programmed. | 455 | /* TODO: Program HID as it appears to be not programmed. |
444 | * To do so, unfortunately, AVR firmware would have to be written | 456 | * To do so, unfortunately, AVR firmware would have to be written |
@@ -509,17 +521,6 @@ bool charging_state(void) | |||
509 | return (avr_battery_status & BATTERY_STATUS_CHARGING) != 0; | 521 | return (avr_battery_status & BATTERY_STATUS_CHARGING) != 0; |
510 | } | 522 | } |
511 | 523 | ||
512 | static void avr_hid_get_state(void) | ||
513 | { | ||
514 | uint8_t state[8]; | ||
515 | if (avr_execute_command(CMD_STATE, state, sizeof(state))) | ||
516 | { | ||
517 | avr_battery_status = state[6]; | ||
518 | avr_battery_level = state[7]; | ||
519 | parse_button_state(state); | ||
520 | } | ||
521 | } | ||
522 | |||
523 | static uint32_t avr_hid_get_monotime(void) | 524 | static uint32_t avr_hid_get_monotime(void) |
524 | { | 525 | { |
525 | uint8_t tmp[4]; | 526 | uint8_t tmp[4]; |