diff options
-rw-r--r-- | firmware/target/arm/olympus/mrobe-500/button-mr500.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/firmware/target/arm/olympus/mrobe-500/button-mr500.c b/firmware/target/arm/olympus/mrobe-500/button-mr500.c index f85eeca912..a25a71e1fc 100644 --- a/firmware/target/arm/olympus/mrobe-500/button-mr500.c +++ b/firmware/target/arm/olympus/mrobe-500/button-mr500.c | |||
@@ -29,6 +29,11 @@ | |||
29 | #include "uart-target.h" | 29 | #include "uart-target.h" |
30 | 30 | ||
31 | #define BUTTON_TIMEOUT 50 | 31 | #define BUTTON_TIMEOUT 50 |
32 | |||
33 | #define BUTTON_START_BYTE 0xF0 | ||
34 | #define BUTTON_START_BYTE2 0xF4 /* not sure why, but sometimes you get F0 or F4, */ | ||
35 | /* but always the same one for the session? */ | ||
36 | |||
32 | void button_init_device(void) | 37 | void button_init_device(void) |
33 | { | 38 | { |
34 | /* GIO is the power button, set as input */ | 39 | /* GIO is the power button, set as input */ |
@@ -43,6 +48,7 @@ inline bool button_hold(void) | |||
43 | int button_read_device(void) | 48 | int button_read_device(void) |
44 | { | 49 | { |
45 | char data[5], c; | 50 | char data[5], c; |
51 | int val; | ||
46 | int i = 0; | 52 | int i = 0; |
47 | int btn = BUTTON_NONE, timeout = BUTTON_TIMEOUT; | 53 | int btn = BUTTON_NONE, timeout = BUTTON_TIMEOUT; |
48 | 54 | ||
@@ -52,14 +58,16 @@ int button_read_device(void) | |||
52 | uartHeartbeat(); | 58 | uartHeartbeat(); |
53 | while (timeout > 0) | 59 | while (timeout > 0) |
54 | { | 60 | { |
55 | c = uartPollch(BUTTON_TIMEOUT*100); | 61 | val = uartPollch(BUTTON_TIMEOUT*100); |
56 | if (c > -1) | 62 | if (val > -1) |
57 | { | 63 | { |
58 | if (i && data[0] == 0xf4) | 64 | c = val&0xff; |
65 | if (i && (data[0] == BUTTON_START_BYTE || data[0] == BUTTON_START_BYTE2)) | ||
59 | { | 66 | { |
60 | data[i++] = c; | 67 | data[i++] = c; |
61 | } | 68 | } |
62 | else if (c == 0xf4) | 69 | else if (c == BUTTON_START_BYTE || |
70 | c == BUTTON_START_BYTE2) | ||
63 | { | 71 | { |
64 | data[0] = c; | 72 | data[0] = c; |
65 | i = 1; | 73 | i = 1; |