summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2006-04-06 07:27:11 +0000
committerJens Arnold <amiconn@rockbox.org>2006-04-06 07:27:11 +0000
commitcef83c782f0904e536229ffda935ca502dc1015f (patch)
treea28a86f3b029c7038cca5f61e7318d81cceaf3b7
parent857db456affc0b65e4fa3db1020117f547bcade5 (diff)
downloadrockbox-cef83c782f0904e536229ffda935ca502dc1015f.tar.gz
rockbox-cef83c782f0904e536229ffda935ca502dc1015f.zip
Do extra filtering in H300 (and H100) main unit button reading to suppress wrong readings during voltage transitions. * Optimised multi-button ADC reads to use a balanced binary tree with an initial check for 'any button' to determine the pressed button. * The iriver button driver wouldn't have detected main unit (ADC-connected) buttons as long as remote buttons (ADC-connected) were pressed (btn = value; vs. btn |= value), * Do extra filtering in the recorder v1 OFF button read, to suppress spurious OFF events. * Some more tweaks.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@9530 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/drivers/button.c452
1 files changed, 240 insertions, 212 deletions
diff --git a/firmware/drivers/button.c b/firmware/drivers/button.c
index 6a95932763..00b9dc4e50 100644
--- a/firmware/drivers/button.c
+++ b/firmware/drivers/button.c
@@ -222,7 +222,7 @@ void ipod_4g_button_int(void)
222 CPU_HI_INT_EN = I2C_MASK; 222 CPU_HI_INT_EN = I2C_MASK;
223} 223}
224#endif 224#endif
225#if (CONFIG_KEYPAD == IPOD_3G_PAD) || defined(IPOD_MINI) 225#if (CONFIG_KEYPAD == IPOD_3G_PAD) || defined(IPOD_MINI)
226/* iPod 3G and mini 1G, mini 2G uses iPod 4G code */ 226/* iPod 3G and mini 1G, mini 2G uses iPod 4G code */
227void handle_scroll_wheel(int new_scroll, int was_hold, int reverse) 227void handle_scroll_wheel(int new_scroll, int was_hold, int reverse)
228{ 228{
@@ -393,8 +393,8 @@ static int ipod_3g_button_read(void)
393 393
394 return btn; 394 return btn;
395} 395}
396#endif
396 397
397#endif
398static void button_tick(void) 398static void button_tick(void)
399{ 399{
400 static int tick = 0; 400 static int tick = 0;
@@ -482,10 +482,9 @@ static void button_tick(void)
482#ifdef HAVE_SW_POWEROFF 482#ifdef HAVE_SW_POWEROFF
483 if ((btn == POWEROFF_BUTTON 483 if ((btn == POWEROFF_BUTTON
484#ifdef BUTTON_RC_STOP 484#ifdef BUTTON_RC_STOP
485 || btn == BUTTON_RC_STOP) && 485 || btn == BUTTON_RC_STOP
486#else
487 ) &&
488#endif 486#endif
487 ) &&
489#if defined(HAVE_CHARGING) && !defined(HAVE_POWEROFF_WHILE_CHARGING) 488#if defined(HAVE_CHARGING) && !defined(HAVE_POWEROFF_WHILE_CHARGING)
490 !charger_inserted() && 489 !charger_inserted() &&
491#endif 490#endif
@@ -836,14 +835,12 @@ static int button_read(void)
836{ 835{
837 int btn = BUTTON_NONE; 836 int btn = BUTTON_NONE;
838 int retval; 837 int retval;
839
840 int data; 838 int data;
841 839
842#if (CONFIG_KEYPAD == IRIVER_H100_PAD)\ 840#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD)
843 || (CONFIG_KEYPAD == IRIVER_H300_PAD)
844
845 static bool hold_button = false; 841 static bool hold_button = false;
846 static bool remote_hold_button = false; 842 static bool remote_hold_button = false;
843 static int last_button_val= 0xff;
847 844
848 /* light handling */ 845 /* light handling */
849 if (hold_button && !button_hold()) 846 if (hold_button && !button_hold())
@@ -862,136 +859,146 @@ static int button_read(void)
862 if (!hold_button) 859 if (!hold_button)
863 { 860 {
864 data = adc_scan(ADC_BUTTONS); 861 data = adc_scan(ADC_BUTTONS);
865#if CONFIG_KEYPAD == IRIVER_H100_PAD 862#if CONFIG_KEYPAD == IRIVER_H100_PAD
866 if (data < 0x80) 863 if ((data < 0xf0) && ((unsigned)(data - last_button_val + 1) <= 2))
867 if (data < 0x30) 864 {
868 if (data < 0x18) 865 if (data < 0x80)
869 btn = BUTTON_SELECT; 866 if (data < 0x30)
870 else 867 if (data < 0x18)
871 btn = BUTTON_UP; 868 btn = BUTTON_SELECT;
872 else 869 else
873 if (data < 0x50) 870 btn = BUTTON_UP;
874 btn = BUTTON_LEFT;
875 else
876 btn = BUTTON_DOWN;
877 else
878 if (data < 0xb0)
879 if (data < 0xa0)
880 btn = BUTTON_RIGHT;
881 else 871 else
882 btn = BUTTON_OFF; 872 if (data < 0x50)
873 btn = BUTTON_LEFT;
874 else
875 btn = BUTTON_DOWN;
883 else 876 else
884 if (data < 0xd0) 877 if (data < 0xb0)
885 btn = BUTTON_MODE; 878 if (data < 0xa0)
879 btn = BUTTON_RIGHT;
880 else
881 btn = BUTTON_OFF;
886 else 882 else
887 if (data < 0xf0) 883 if (data < 0xd0)
884 btn = BUTTON_MODE;
885 else
888 btn = BUTTON_REC; 886 btn = BUTTON_REC;
887 }
889#else /* H300 */ 888#else /* H300 */
890 if (data < 0x54) 889 if ((data < 0xba) && ((unsigned)(data - last_button_val + 1) <= 2))
891 if (data < 0x30) 890 {
892 if (data < 0x10) 891 if (data < 0x54)
893 btn = BUTTON_SELECT; 892 if (data < 0x30)
893 if (data < 0x10)
894 btn = BUTTON_SELECT;
895 else
896 btn = BUTTON_UP;
894 else 897 else
895 btn = BUTTON_UP; 898 btn = BUTTON_LEFT;
896 else 899 else
897 btn = BUTTON_LEFT; 900 if (data < 0x98)
898 else 901 if (data < 0x76)
899 if (data < 0x98) 902 btn = BUTTON_DOWN;
900 if (data < 0x76) 903 else
901 btn = BUTTON_DOWN; 904 btn = BUTTON_RIGHT;
902 else 905 else
903 btn = BUTTON_RIGHT;
904 else
905 if(data < 0xba)
906 btn = BUTTON_OFF; 906 btn = BUTTON_OFF;
907 907 }
908#endif 908#endif
909 last_button_val = data;
909 } 910 }
910 911
911 /* remote buttons */ 912 /* remote buttons */
912 if (!remote_hold_button) 913 if (!remote_hold_button)
913 { 914 {
914 data = adc_scan(ADC_REMOTE); 915 data = adc_scan(ADC_REMOTE);
915 switch(remote_type()) 916 switch (remote_type())
916 { 917 {
917 case REMOTETYPE_H100_LCD: 918 case REMOTETYPE_H100_LCD:
918 if (data < 0x73) 919 if (data < 0xf5)
919 if (data < 0x3f) 920 {
920 if (data < 0x25) 921 if (data < 0x73)
921 if(data < 0x0c) 922 if (data < 0x3f)
922 btn = BUTTON_RC_STOP; 923 if (data < 0x25)
924 if(data < 0x0c)
925 btn |= BUTTON_RC_STOP;
926 else
927 btn |= BUTTON_RC_VOL_DOWN;
923 else 928 else
924 btn = BUTTON_RC_VOL_DOWN; 929 btn |= BUTTON_RC_MODE;
925 else
926 btn = BUTTON_RC_MODE;
927 else
928 if (data < 0x5a)
929 btn = BUTTON_RC_VOL_UP;
930 else
931 btn = BUTTON_RC_BITRATE;
932 else
933 if (data < 0xa8)
934 if (data < 0x8c)
935 btn = BUTTON_RC_REC;
936 else 930 else
937 btn = BUTTON_RC_SOURCE; 931 if (data < 0x5a)
932 btn |= BUTTON_RC_VOL_UP;
933 else
934 btn |= BUTTON_RC_BITRATE;
938 else 935 else
939 if (data < 0xdf) 936 if (data < 0xa8)
940 if(data < 0xc5) 937 if (data < 0x8c)
941 btn = BUTTON_RC_FF; 938 btn |= BUTTON_RC_REC;
942 else 939 else
943 btn = BUTTON_RC_MENU; 940 btn |= BUTTON_RC_SOURCE;
944 else 941 else
945 if (data < 0xf5) 942 if (data < 0xdf)
946 btn = BUTTON_RC_REW; 943 if(data < 0xc5)
944 btn |= BUTTON_RC_FF;
945 else
946 btn |= BUTTON_RC_MENU;
947 else
948 btn |= BUTTON_RC_REW;
949 }
947 break; 950 break;
948 case REMOTETYPE_H300_LCD: 951 case REMOTETYPE_H300_LCD:
949 if (data < 0x73) 952 if (data < 0xf5)
950 if (data < 0x42) 953 {
951 if (data < 0x27) 954 if (data < 0x73)
952 if(data < 0x0c) 955 if (data < 0x42)
953 btn = BUTTON_RC_VOL_DOWN; 956 if (data < 0x27)
957 if(data < 0x0c)
958 btn |= BUTTON_RC_VOL_DOWN;
959 else
960 btn |= BUTTON_RC_FF;
954 else 961 else
955 btn = BUTTON_RC_FF; 962 btn |= BUTTON_RC_STOP;
956 else 963 else
957 btn = BUTTON_RC_STOP; 964 if (data < 0x5b)
958 else 965 btn |= BUTTON_RC_MODE;
959 if (data < 0x5b) 966 else
960 btn = BUTTON_RC_MODE; 967 btn |= BUTTON_RC_REC;
961 else
962 btn = BUTTON_RC_REC;
963 else
964 if (data < 0xab)
965 if (data < 0x8e)
966 btn = BUTTON_RC_ON;
967 else
968 btn = BUTTON_RC_BITRATE;
969 else 968 else
970 if (data < 0xde) 969 if (data < 0xab)
971 if(data < 0xc5) 970 if (data < 0x8e)
972 btn = BUTTON_RC_SOURCE; 971 btn |= BUTTON_RC_ON;
973 else 972 else
974 btn = BUTTON_RC_VOL_UP; 973 btn |= BUTTON_RC_BITRATE;
975 else 974 else
976 if (data < 0xf5) 975 if (data < 0xde)
977 btn = BUTTON_RC_REW; 976 if(data < 0xc5)
977 btn |= BUTTON_RC_SOURCE;
978 else
979 btn |= BUTTON_RC_VOL_UP;
980 else
981 btn |= BUTTON_RC_REW;
982 }
978 break; 983 break;
979 case REMOTETYPE_H300_NONLCD: 984 case REMOTETYPE_H300_NONLCD:
980 if(data<0x7d) 985 if (data < 0xf1)
981 if(data<0x25) 986 {
982 btn = BUTTON_RC_FF; 987 if (data < 0x7d)
983 else 988 if (data < 0x25)
984 btn = BUTTON_RC_REW; 989 btn |= BUTTON_RC_FF;
985 else 990 else
986 if(data<0xd5) 991 btn |= BUTTON_RC_REW;
987 btn = BUTTON_RC_VOL_DOWN;
988 else 992 else
989 if(data<0xf1) /* 0xff no button pressed */ 993 if (data < 0xd5)
990 btn = BUTTON_RC_VOL_UP; 994 btn |= BUTTON_RC_VOL_DOWN;
995 else
996 btn |= BUTTON_RC_VOL_UP;
997 }
991 break; 998 break;
992 } 999 }
993 } 1000 }
994 1001
995 /* special buttons */ 1002 /* special buttons */
996#if CONFIG_KEYPAD == IRIVER_H300_PAD 1003#if CONFIG_KEYPAD == IRIVER_H300_PAD
997 if (!hold_button) 1004 if (!hold_button)
@@ -1020,7 +1027,6 @@ static int button_read(void)
1020 } 1027 }
1021 1028
1022#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD 1029#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
1023
1024 static bool hold_button = false; 1030 static bool hold_button = false;
1025 1031
1026 /* light handling */ 1032 /* light handling */
@@ -1032,67 +1038,56 @@ static int button_read(void)
1032 1038
1033 /* normal buttons */ 1039 /* normal buttons */
1034 if (!button_hold()) 1040 if (!button_hold())
1035 { 1041 {
1036 data = adc_read(ADC_BUTTONS); 1042 data = adc_read(ADC_BUTTONS);
1037 1043 if (data < 0x35c)
1038 if (data < 0x151) 1044 {
1039 if (data < 0xc7) 1045 if (data < 0x151)
1040 if (data < 0x41) 1046 if (data < 0xc7)
1041 btn = BUTTON_LEFT; 1047 if (data < 0x41)
1042 else 1048 btn = BUTTON_LEFT;
1043 btn = BUTTON_RIGHT; 1049 else
1044 else 1050 btn = BUTTON_RIGHT;
1045 btn = BUTTON_SELECT;
1046 else
1047 if (data < 0x268)
1048 if (data < 0x1d7)
1049 btn = BUTTON_UP;
1050 else 1051 else
1051 btn = BUTTON_DOWN; 1052 btn = BUTTON_SELECT;
1052 else 1053 else
1053 if (data < 0x2f9) 1054 if (data < 0x268)
1054 btn = BUTTON_EQ; 1055 if (data < 0x1d7)
1056 btn = BUTTON_UP;
1057 else
1058 btn = BUTTON_DOWN;
1055 else 1059 else
1056 if (data < 0x35c) 1060 if (data < 0x2f9)
1061 btn = BUTTON_EQ;
1062 else
1057 btn = BUTTON_MODE; 1063 btn = BUTTON_MODE;
1064 }
1065
1066 if (adc_read(ADC_BUTTON_PLAY) < 0x64)
1067 btn |= BUTTON_PLAY;
1058 } 1068 }
1059
1060 if (!button_hold() && (adc_read(ADC_BUTTON_PLAY) < 0x64))
1061 btn |= BUTTON_PLAY;
1062 1069
1063#elif CONFIG_KEYPAD == RECORDER_PAD 1070#elif CONFIG_KEYPAD == RECORDER_PAD
1064 1071#ifndef HAVE_FMADC
1065#ifdef HAVE_FMADC 1072 static int off_button_count = 0;
1066 if ( adc_read(ADC_BUTTON_ON) < 512 )
1067 btn |= BUTTON_ON;
1068 if ( adc_read(ADC_BUTTON_OFF) > 512 )
1069 btn |= BUTTON_OFF;
1070#else
1071 /* check port B pins for ON and OFF */
1072 data = PBDR;
1073 if ((data & 0x0100) == 0)
1074 btn |= BUTTON_ON;
1075 if ((data & 0x0010) == 0)
1076 btn |= BUTTON_OFF;
1077#endif 1073#endif
1078 1074
1079 /* check F1..F3 and UP */ 1075 /* check F1..F3 and UP */
1080 data = adc_read(ADC_BUTTON_ROW1); 1076 data = adc_read(ADC_BUTTON_ROW1);
1081
1082 if (data >= LEVEL1) 1077 if (data >= LEVEL1)
1083 { 1078 {
1084 if (data >= LEVEL3) 1079 if (data >= LEVEL3)
1085 if (data >= LEVEL4) 1080 if (data >= LEVEL4)
1086 btn |= BUTTON_F3; 1081 btn = BUTTON_F3;
1087 else 1082 else
1088 btn |= BUTTON_UP; 1083 btn = BUTTON_UP;
1089 else 1084 else
1090 if (data >= LEVEL2) 1085 if (data >= LEVEL2)
1091 btn |= BUTTON_F2; 1086 btn = BUTTON_F2;
1092 else 1087 else
1093 btn |= BUTTON_F1; 1088 btn = BUTTON_F1;
1094 } 1089 }
1095 1090
1096 /* Some units have mushy keypads, so pressing UP also activates 1091 /* Some units have mushy keypads, so pressing UP also activates
1097 the Left/Right buttons. Let's combat that by skipping the AN5 1092 the Left/Right buttons. Let's combat that by skipping the AN5
1098 checks when UP is pressed. */ 1093 checks when UP is pressed. */
@@ -1100,7 +1095,6 @@ static int button_read(void)
1100 { 1095 {
1101 /* check DOWN, PLAY, LEFT, RIGHT */ 1096 /* check DOWN, PLAY, LEFT, RIGHT */
1102 data = adc_read(ADC_BUTTON_ROW2); 1097 data = adc_read(ADC_BUTTON_ROW2);
1103
1104 if (data >= LEVEL1) 1098 if (data >= LEVEL1)
1105 { 1099 {
1106 if (data >= LEVEL3) 1100 if (data >= LEVEL3)
@@ -1116,11 +1110,33 @@ static int button_read(void)
1116 } 1110 }
1117 } 1111 }
1118 1112
1119#elif CONFIG_KEYPAD == PLAYER_PAD 1113#ifdef HAVE_FMADC
1114 if ( adc_read(ADC_BUTTON_ON) < 512 )
1115 btn |= BUTTON_ON;
1116 if ( adc_read(ADC_BUTTON_OFF) > 512 )
1117 btn |= BUTTON_OFF;
1118#else
1119 /* check port B pins for ON and OFF */
1120 data = PBDR;
1121 if ((data & 0x0100) == 0)
1122 btn |= BUTTON_ON;
1123
1124 if ((data & 0x0010) == 0)
1125 {
1126 /* When the batteries are low, the low-battery shutdown logic causes
1127 * spurious OFF events due to voltage fluctuation on some units.
1128 * Only accept OFF when read several times in sequence. */
1129 if (++off_button_count > 3)
1130 btn |= BUTTON_OFF;
1131 }
1132 else
1133 off_button_count = 0;
1134#endif
1120 1135
1136#elif CONFIG_KEYPAD == PLAYER_PAD
1121 /* buttons are active low */ 1137 /* buttons are active low */
1122 if (adc_read(0) < 0x180) 1138 if (adc_read(0) < 0x180)
1123 btn |= BUTTON_LEFT; 1139 btn = BUTTON_LEFT;
1124 if (adc_read(1) < 0x180) 1140 if (adc_read(1) < 0x180)
1125 btn |= BUTTON_MENU; 1141 btn |= BUTTON_MENU;
1126 if(adc_read(2) < 0x180) 1142 if(adc_read(2) < 0x180)
@@ -1136,46 +1152,54 @@ static int button_read(void)
1136 btn |= BUTTON_STOP; 1152 btn |= BUTTON_STOP;
1137 1153
1138#elif CONFIG_KEYPAD == ONDIO_PAD 1154#elif CONFIG_KEYPAD == ONDIO_PAD
1139
1140 if(adc_read(ADC_BUTTON_OPTION) > 0x200) /* active high */
1141 btn |= BUTTON_MENU;
1142 if(adc_read(ADC_BUTTON_ONOFF) < 0x120) /* active low */
1143 btn |= BUTTON_OFF;
1144
1145 /* Check the 4 direction keys */ 1155 /* Check the 4 direction keys */
1146 data = adc_read(ADC_BUTTON_ROW1); 1156 data = adc_read(ADC_BUTTON_ROW1);
1147
1148 if (data >= LEVEL1) 1157 if (data >= LEVEL1)
1149 { 1158 {
1150 if (data >= LEVEL3) 1159 if (data >= LEVEL3)
1151 if (data >= LEVEL4) 1160 if (data >= LEVEL4)
1152 btn |= BUTTON_LEFT; 1161 btn = BUTTON_LEFT;
1153 else 1162 else
1154 btn |= BUTTON_RIGHT; 1163 btn = BUTTON_RIGHT;
1155 else 1164 else
1156 if (data >= LEVEL2) 1165 if (data >= LEVEL2)
1157 btn |= BUTTON_UP; 1166 btn = BUTTON_UP;
1158 else 1167 else
1159 btn |= BUTTON_DOWN; 1168 btn = BUTTON_DOWN;
1160 } 1169 }
1161 1170
1162#elif CONFIG_KEYPAD == GMINI100_PAD 1171 if(adc_read(ADC_BUTTON_OPTION) > 0x200) /* active high */
1172 btn |= BUTTON_MENU;
1173 if(adc_read(ADC_BUTTON_ONOFF) < 0x120) /* active low */
1174 btn |= BUTTON_OFF;
1163 1175
1164 if (adc_read(7) < 0xE3) 1176#elif CONFIG_KEYPAD == GMINI100_PAD
1165 btn |= BUTTON_LEFT; 1177 data = adc_read(7);
1166 else if (adc_read(7) < 0x1c5) 1178 if (data < 0x38a)
1167 btn |= BUTTON_DOWN; 1179 {
1168 else if (adc_read(7) < 0x2a2) 1180 if (data < 0x1c5)
1169 btn |= BUTTON_RIGHT; 1181 if (data < 0xe3)
1170 else if (adc_read(7) < 0x38a) 1182 btn = BUTTON_LEFT;
1171 btn |= BUTTON_UP; 1183 else
1184 btn = BUTTON_DOWN;
1185 else
1186 if (data < 0x2a2)
1187 btn = BUTTON_RIGHT;
1188 else
1189 btn = BUTTON_UP;
1190 }
1172 1191
1173 if (adc_read(6) < 0x233) 1192 data = adc_read(6);
1174 btn |= BUTTON_OFF; 1193 if (data < 0x355)
1175 else if (adc_read(6) < 0x288) 1194 {
1176 btn |= BUTTON_PLAY; 1195 if (data < 0x288)
1177 else if (adc_read(6) < 0x355) 1196 if (data < 0x233)
1178 btn |= BUTTON_MENU; 1197 btn |= BUTTON_OFF;
1198 else
1199 btn |= BUTTON_PLAY;
1200 else
1201 btn |= BUTTON_MENU;
1202 }
1179 1203
1180 data = P7; 1204 data = P7;
1181 if (data & 0x01) 1205 if (data & 0x01)
@@ -1185,6 +1209,7 @@ static int button_read(void)
1185 (void)data; 1209 (void)data;
1186 /* The int_btn variable is set in the button interrupt handler */ 1210 /* The int_btn variable is set in the button interrupt handler */
1187 btn = int_btn; 1211 btn = int_btn;
1212
1188#elif (CONFIG_KEYPAD == IPOD_3G_PAD) 1213#elif (CONFIG_KEYPAD == IPOD_3G_PAD)
1189 (void)data; 1214 (void)data;
1190 btn = ipod_3g_button_read(); 1215 btn = ipod_3g_button_read();
@@ -1200,27 +1225,29 @@ static int button_read(void)
1200 if (!hold_button) 1225 if (!hold_button)
1201 { 1226 {
1202 data = adc_scan(ADC_BUTTONS); 1227 data = adc_scan(ADC_BUTTONS);
1203 if(data < 0x7c) 1228 if (data < 0xf0)
1204 if(data < 0x42) 1229 {
1205 btn = BUTTON_LEFT; 1230 if(data < 0x7c)
1206 else 1231 if(data < 0x42)
1207 if(data < 0x62) 1232 btn = BUTTON_LEFT;
1208 btn = BUTTON_RIGHT;
1209 else
1210 btn = BUTTON_SELECT;
1211 else
1212 if(data < 0xb6)
1213 if(data < 0x98)
1214 btn = BUTTON_REC;
1215 else 1233 else
1216 btn = BUTTON_PLAY; 1234 if(data < 0x62)
1235 btn = BUTTON_RIGHT;
1236 else
1237 btn = BUTTON_SELECT;
1217 else 1238 else
1218 if(data < 0xd3) 1239 if(data < 0xb6)
1219 btn = BUTTON_DOWN; 1240 if(data < 0x98)
1241 btn = BUTTON_REC;
1242 else
1243 btn = BUTTON_PLAY;
1220 else 1244 else
1221 if(data < 0xf0) 1245 if(data < 0xd3)
1246 btn = BUTTON_DOWN;
1247 else
1222 btn = BUTTON_UP; 1248 btn = BUTTON_UP;
1223 } 1249 }
1250 }
1224 1251
1225 /* remote buttons */ 1252 /* remote buttons */
1226 data = adc_scan(ADC_REMOTE); 1253 data = adc_scan(ADC_REMOTE);
@@ -1229,28 +1256,30 @@ static int button_read(void)
1229 1256
1230 if(!remote_hold_button) 1257 if(!remote_hold_button)
1231 { 1258 {
1232 if(data < 0x7a) 1259 if (data < 0xee)
1233 if(data < 0x41) 1260 {
1234 btn = BUTTON_RC_REW; 1261 if(data < 0x7a)
1235 else 1262 if(data < 0x41)
1236 if(data < 0x61) 1263 btn |= BUTTON_RC_REW;
1237 btn = BUTTON_RC_FF;
1238 else
1239 btn = BUTTON_RC_MODE;
1240 else
1241 if(data < 0xb4)
1242 if(data < 0x96)
1243 btn = BUTTON_RC_REC;
1244 else 1264 else
1245 btn = BUTTON_RC_MENU; 1265 if(data < 0x61)
1266 btn |= BUTTON_RC_FF;
1267 else
1268 btn |= BUTTON_RC_MODE;
1246 else 1269 else
1247 if(data < 0xd1) 1270 if(data < 0xb4)
1248 btn = BUTTON_RC_VOL_UP; 1271 if(data < 0x96)
1272 btn |= BUTTON_RC_REC;
1273 else
1274 btn |= BUTTON_RC_MENU;
1249 else 1275 else
1250 if(data < 0xee) 1276 if(data < 0xd1)
1251 btn = BUTTON_RC_VOL_DOWN; 1277 btn |= BUTTON_RC_VOL_UP;
1278 else
1279 btn |= BUTTON_RC_VOL_DOWN;
1280 }
1252 } 1281 }
1253 1282
1254 data = GPIO_READ; 1283 data = GPIO_READ;
1255 if (!(data & 0x04000000)) 1284 if (!(data & 0x04000000))
1256 btn |= BUTTON_POWER; 1285 btn |= BUTTON_POWER;
@@ -1260,7 +1289,6 @@ static int button_read(void)
1260 1289
1261#endif /* CONFIG_KEYPAD */ 1290#endif /* CONFIG_KEYPAD */
1262 1291
1263
1264#ifdef HAVE_LCD_BITMAP 1292#ifdef HAVE_LCD_BITMAP
1265 if (btn && flipped) 1293 if (btn && flipped)
1266 btn = button_flip(btn); /* swap upside down */ 1294 btn = button_flip(btn); /* swap upside down */