summaryrefslogtreecommitdiff
path: root/firmware/drivers
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2006-03-05 09:07:03 +0000
committerJens Arnold <amiconn@rockbox.org>2006-03-05 09:07:03 +0000
commit8c50ff27887105a209f91448bc4ed067f40fef03 (patch)
tree0eb2e1d60e419147e27c988cc547e7d330b4bbef /firmware/drivers
parent4ec9dbdd18f6d5365198cfb2925ea0b4b77fe8f9 (diff)
downloadrockbox-8c50ff27887105a209f91448bc4ed067f40fef03.tar.gz
rockbox-8c50ff27887105a209f91448bc4ed067f40fef03.zip
More efficient button_read() for archos recorders and Ondios.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8908 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/drivers')
-rw-r--r--firmware/drivers/button.c67
1 files changed, 41 insertions, 26 deletions
diff --git a/firmware/drivers/button.c b/firmware/drivers/button.c
index 0b41fb10fe..e2a4e82a58 100644
--- a/firmware/drivers/button.c
+++ b/firmware/drivers/button.c
@@ -1028,16 +1028,21 @@ static int button_read(void)
1028 1028
1029 /* check F1..F3 and UP */ 1029 /* check F1..F3 and UP */
1030 data = adc_read(ADC_BUTTON_ROW1); 1030 data = adc_read(ADC_BUTTON_ROW1);
1031 1031
1032 if (data >= LEVEL4) 1032 if (data >= LEVEL1)
1033 btn |= BUTTON_F3; 1033 {
1034 else if (data >= LEVEL3) 1034 if (data >= LEVEL3)
1035 btn |= BUTTON_UP; 1035 if (data >= LEVEL4)
1036 else if (data >= LEVEL2) 1036 btn |= BUTTON_F3;
1037 btn |= BUTTON_F2; 1037 else
1038 else if (data >= LEVEL1) 1038 btn |= BUTTON_UP;
1039 btn |= BUTTON_F1; 1039 else
1040 1040 if (data >= LEVEL2)
1041 btn |= BUTTON_F2;
1042 else
1043 btn |= BUTTON_F1;
1044 }
1045
1041 /* Some units have mushy keypads, so pressing UP also activates 1046 /* Some units have mushy keypads, so pressing UP also activates
1042 the Left/Right buttons. Let's combat that by skipping the AN5 1047 the Left/Right buttons. Let's combat that by skipping the AN5
1043 checks when UP is pressed. */ 1048 checks when UP is pressed. */
@@ -1046,14 +1051,19 @@ static int button_read(void)
1046 /* check DOWN, PLAY, LEFT, RIGHT */ 1051 /* check DOWN, PLAY, LEFT, RIGHT */
1047 data = adc_read(ADC_BUTTON_ROW2); 1052 data = adc_read(ADC_BUTTON_ROW2);
1048 1053
1049 if (data >= LEVEL4) 1054 if (data >= LEVEL1)
1050 btn |= BUTTON_DOWN; 1055 {
1051 else if (data >= LEVEL3) 1056 if (data >= LEVEL3)
1052 btn |= ROW2_BUTTON3; 1057 if (data >= LEVEL4)
1053 else if (data >= LEVEL2) 1058 btn |= BUTTON_DOWN;
1054 btn |= BUTTON_LEFT; 1059 else
1055 else if (data >= LEVEL1) 1060 btn |= ROW2_BUTTON3;
1056 btn |= ROW2_BUTTON1; 1061 else
1062 if (data >= LEVEL2)
1063 btn |= BUTTON_LEFT;
1064 else
1065 btn |= ROW2_BUTTON1;
1066 }
1057 } 1067 }
1058 1068
1059#elif CONFIG_KEYPAD == PLAYER_PAD 1069#elif CONFIG_KEYPAD == PLAYER_PAD
@@ -1085,14 +1095,19 @@ static int button_read(void)
1085 /* Check the 4 direction keys */ 1095 /* Check the 4 direction keys */
1086 data = adc_read(ADC_BUTTON_ROW1); 1096 data = adc_read(ADC_BUTTON_ROW1);
1087 1097
1088 if (data >= LEVEL4) 1098 if (data >= LEVEL1)
1089 btn |= BUTTON_LEFT; 1099 {
1090 else if (data >= LEVEL3) 1100 if (data >= LEVEL3)
1091 btn |= BUTTON_RIGHT; 1101 if (data >= LEVEL4)
1092 else if (data >= LEVEL2) 1102 btn |= BUTTON_LEFT;
1093 btn |= BUTTON_UP; 1103 else
1094 else if (data >= LEVEL1) 1104 btn |= BUTTON_RIGHT;
1095 btn |= BUTTON_DOWN; 1105 else
1106 if (data >= LEVEL2)
1107 btn |= BUTTON_UP;
1108 else
1109 btn |= BUTTON_DOWN;
1110 }
1096 1111
1097#elif CONFIG_KEYPAD == GMINI100_PAD 1112#elif CONFIG_KEYPAD == GMINI100_PAD
1098 1113