diff options
Diffstat (limited to 'firmware/drivers')
-rw-r--r-- | firmware/drivers/button.c | 452 |
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 */ |
227 | void handle_scroll_wheel(int new_scroll, int was_hold, int reverse) | 227 | void 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 | ||
398 | static void button_tick(void) | 398 | static 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 */ |