summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/drivers/button.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/firmware/drivers/button.c b/firmware/drivers/button.c
index 30b7622f53..4657e1d84b 100644
--- a/firmware/drivers/button.c
+++ b/firmware/drivers/button.c
@@ -271,16 +271,22 @@ static int button_read(void)
271 else if (data >= LEVEL1) 271 else if (data >= LEVEL1)
272 btn |= BUTTON_F1; 272 btn |= BUTTON_F1;
273 273
274 /* Check DOWN, PLAY, LEFT, RIGHT */ 274 /* Some units have mushy keypads, so pressing UP also activates
275 data = adc_read(ADC_BUTTON_ROW2); 275 the Left/Right buttons. Let's combat that by skipping the AN5
276 if (data >= LEVEL4) 276 checks when UP is pressed. */
277 btn |= BUTTON_DOWN; 277 if(!(btn & BUTTON_UP))
278 else if (data >= LEVEL3) 278 {
279 btn |= BUTTON_PLAY; 279 /* Check DOWN, PLAY, LEFT, RIGHT */
280 else if (data >= LEVEL2) 280 data = adc_read(ADC_BUTTON_ROW2);
281 btn |= BUTTON_LEFT; 281 if (data >= LEVEL4)
282 else if (data >= LEVEL1) 282 btn |= BUTTON_DOWN;
283 btn |= BUTTON_RIGHT; 283 else if (data >= LEVEL3)
284 btn |= BUTTON_PLAY;
285 else if (data >= LEVEL2)
286 btn |= BUTTON_LEFT;
287 else if (data >= LEVEL1)
288 btn |= BUTTON_RIGHT;
289 }
284 290
285 return btn; 291 return btn;
286} 292}