diff options
author | Daniel Stenberg <daniel@haxx.se> | 2002-04-16 13:40:42 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2002-04-16 13:40:42 +0000 |
commit | bde61f220627b0fac9de0da322f0354675a6ef47 (patch) | |
tree | eedca0d0ac02ea61d43a47f386bae156664a4c57 | |
parent | feef1ed07690c5b027e441d1ffdc381d8e71038c (diff) | |
download | rockbox-bde61f220627b0fac9de0da322f0354675a6ef47.tar.gz rockbox-bde61f220627b0fac9de0da322f0354675a6ef47.zip |
ident properly
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@102 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r-- | firmware/button.c | 132 |
1 files changed, 69 insertions, 63 deletions
diff --git a/firmware/button.c b/firmware/button.c index 2bea49879c..bedd294606 100644 --- a/firmware/button.c +++ b/firmware/button.c | |||
@@ -61,20 +61,20 @@ static int count; /* Number of calls button has been down */ | |||
61 | void button_init() | 61 | void button_init() |
62 | { | 62 | { |
63 | #ifndef SIMULATOR | 63 | #ifndef SIMULATOR |
64 | /* Set PB4 and PB8 as input pins */ | 64 | /* Set PB4 and PB8 as input pins */ |
65 | PBCR1 &= 0xfffc; /* PB8MD = 00 */ | 65 | PBCR1 &= 0xfffc; /* PB8MD = 00 */ |
66 | PBCR2 &= 0xfcff; /* PB4MD = 00 */ | 66 | PBCR2 &= 0xfcff; /* PB4MD = 00 */ |
67 | PBIOR &= ~(PBDR_BTN_ON|PBDR_BTN_OFF); /* Inputs */ | 67 | PBIOR &= ~(PBDR_BTN_ON|PBDR_BTN_OFF); /* Inputs */ |
68 | 68 | ||
69 | /* Set A/D to scan AN4 and AN5. | 69 | /* Set A/D to scan AN4 and AN5. |
70 | * This needs to be changed to scan other analog pins | 70 | * This needs to be changed to scan other analog pins |
71 | * for battery level, etc. */ | 71 | * for battery level, etc. */ |
72 | ADCSR = 0; | 72 | ADCSR = 0; |
73 | ADCR = 0; | 73 | ADCR = 0; |
74 | ADCSR = ADCSR_ADST | ADCSR_SCAN | 0x5; | 74 | ADCSR = ADCSR_ADST | ADCSR_SCAN | 0x5; |
75 | #endif | 75 | #endif |
76 | last = BUTTON_NONE; | 76 | last = BUTTON_NONE; |
77 | count = 0; | 77 | count = 0; |
78 | } | 78 | } |
79 | 79 | ||
80 | /* | 80 | /* |
@@ -82,36 +82,36 @@ void button_init() | |||
82 | */ | 82 | */ |
83 | static int get_raw_button (void) | 83 | static int get_raw_button (void) |
84 | { | 84 | { |
85 | /* Check port B pins for ON and OFF */ | 85 | /* Check port B pins for ON and OFF */ |
86 | int data = PBDR; | 86 | int data = PBDR; |
87 | if ((data & PBDR_BTN_ON) == 0) | 87 | if ((data & PBDR_BTN_ON) == 0) |
88 | return BUTTON_ON; | 88 | return BUTTON_ON; |
89 | else if ((data & PBDR_BTN_OFF) == 0) | 89 | else if ((data & PBDR_BTN_OFF) == 0) |
90 | return BUTTON_OFF; | 90 | return BUTTON_OFF; |
91 | 91 | ||
92 | /* Check AN4 pin for F1-3 and UP */ | 92 | /* Check AN4 pin for F1-3 and UP */ |
93 | data = ADDRAH; | 93 | data = ADDRAH; |
94 | if (data >= LEVEL4) | 94 | if (data >= LEVEL4) |
95 | return BUTTON_F3; | 95 | return BUTTON_F3; |
96 | else if (data >= LEVEL3) | 96 | else if (data >= LEVEL3) |
97 | return BUTTON_UP; | 97 | return BUTTON_UP; |
98 | else if (data >= LEVEL2) | 98 | else if (data >= LEVEL2) |
99 | return BUTTON_F2; | 99 | return BUTTON_F2; |
100 | else if (data >= LEVEL1) | 100 | else if (data >= LEVEL1) |
101 | return BUTTON_F1; | 101 | return BUTTON_F1; |
102 | 102 | ||
103 | /* Check AN5 pin for DOWN, PLAY, LEFT, RIGHT */ | 103 | /* Check AN5 pin for DOWN, PLAY, LEFT, RIGHT */ |
104 | data = ADDRBH; | 104 | data = ADDRBH; |
105 | if (data >= LEVEL4) | 105 | if (data >= LEVEL4) |
106 | return BUTTON_DOWN; | 106 | return BUTTON_DOWN; |
107 | else if (data >= LEVEL3) | 107 | else if (data >= LEVEL3) |
108 | return BUTTON_PLAY; | 108 | return BUTTON_PLAY; |
109 | else if (data >= LEVEL2) | 109 | else if (data >= LEVEL2) |
110 | return BUTTON_LEFT; | 110 | return BUTTON_LEFT; |
111 | else if (data >= LEVEL1) | 111 | else if (data >= LEVEL1) |
112 | return BUTTON_RIGHT; | 112 | return BUTTON_RIGHT; |
113 | 113 | ||
114 | return BUTTON_NONE; | 114 | return BUTTON_NONE; |
115 | } | 115 | } |
116 | 116 | ||
117 | /* | 117 | /* |
@@ -123,29 +123,35 @@ static int get_raw_button (void) | |||
123 | */ | 123 | */ |
124 | int button_get(void) | 124 | int button_get(void) |
125 | { | 125 | { |
126 | int btn = get_raw_button(); | 126 | int btn = get_raw_button(); |
127 | int ret; | 127 | int ret; |
128 | 128 | ||
129 | /* Last button pressed is still down */ | 129 | /* Last button pressed is still down */ |
130 | if (btn != BUTTON_NONE && btn == last) { | 130 | if (btn != BUTTON_NONE && btn == last) { |
131 | count++; | 131 | count++; |
132 | if (count == BOUNCE_COUNT) | 132 | if (count == BOUNCE_COUNT) |
133 | return btn; | 133 | return btn; |
134 | else if (count >= HOLD_COUNT) | 134 | else if (count >= HOLD_COUNT) |
135 | return btn | BUTTON_HELD; | 135 | return btn | BUTTON_HELD; |
136 | else | ||
137 | return BUTTON_NONE; | ||
138 | } | ||
139 | |||
140 | /* Last button pressed now released */ | ||
141 | if (btn == BUTTON_NONE && last != BUTTON_NONE) | ||
142 | ret = last | BUTTON_REL; | ||
136 | else | 143 | else |
137 | return BUTTON_NONE; | 144 | ret = BUTTON_NONE; |
138 | } | 145 | |
139 | 146 | last = btn; | |
140 | /* Last button pressed now released */ | 147 | count = 0; |
141 | if (btn == BUTTON_NONE && last != BUTTON_NONE) | 148 | return ret; |
142 | ret = last | BUTTON_REL; | ||
143 | else | ||
144 | ret = BUTTON_NONE; | ||
145 | |||
146 | last = btn; | ||
147 | count = 0; | ||
148 | return ret; | ||
149 | } | 149 | } |
150 | 150 | ||
151 | #endif /* HAVE_RECORDER_KEYPAD */ | 151 | #endif /* HAVE_RECORDER_KEYPAD */ |
152 | |||
153 | /* ----------------------------------------------------------------- | ||
154 | * local variables: | ||
155 | * eval: (load-file "rockbox-mode.el") | ||
156 | * end: | ||
157 | */ | ||