Changeset 1604 for branches/release-1_0
- Timestamp:
- 01/23/12 08:19:21 (16 months ago)
- Location:
- branches/release-1_0/platform
- Files:
-
- 2 edited
-
a490/kbd.c (modified) (7 diffs)
-
a495/kbd.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/release-1_0/platform/a490/kbd.c
r1344 r1604 12 12 13 13 14 static long kbd_new_state[3] ;15 static long kbd_prev_state[3] ;16 static long kbd_mod_state[3] ;14 static long kbd_new_state[3] = { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }; 15 static long kbd_prev_state[3] = { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }; 16 static long kbd_mod_state[3] = { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }; 17 17 18 18 static long last_kbd_key = 0; … … 27 27 #define KEYS_MASK1 (0x00000000) 28 28 #define KEYS_MASK2 (0x017001f4) 29 #define KEYS_INV2 (0x01700000) 30 /* 31 the 4 button states residing in the upper half of physw_status[2] seem to be inverted 32 to handle these correctly, their value needs to be inverted: 33 - when reading from physw_status[2] to the state variables 34 - when writing to physw_status[2] from the state variables 35 KEYS_INV2 should be used for that 36 SD_READONLY_FLAG and USB_MASK are not affected by this 37 38 when idle, physw_status[2] looks like: "000001000000000xxxxx000111110100" 39 KEYS_MASK2 is "00000001011100000000000111110100" 40 */ 29 41 30 42 #define SD_READONLY_FLAG (0x40000) … … 161 173 static void __attribute__((noinline)) mykbd_task_proceed() 162 174 { 175 /* Initialize our own kbd_new_state[] array with the 176 current physical status. (inspired by the S90 port) 177 */ 178 kbd_new_state[0] = physw_status[0]; 179 kbd_new_state[1] = physw_status[1]; 180 kbd_new_state[2] = physw_status[2] ^ KEYS_INV2; 163 181 while (physw_run){ 164 182 _SleepTask(10); … … 223 241 kbd_new_state[0] = physw_status[0]; 224 242 kbd_new_state[1] = physw_status[1]; 225 kbd_new_state[2] = physw_status[2] ;243 kbd_new_state[2] = physw_status[2] ^ KEYS_INV2; 226 244 227 245 if (kbd_process() == 0){ … … 231 249 physw_status[0] = (kbd_new_state[0] | KEYS_MASK0) & (~KEYS_MASK0 | kbd_mod_state[0]); 232 250 //physw_status[1] = (kbd_new_state[1] | KEYS_MASK1) & (~KEYS_MASK1 | kbd_mod_state[1]); 233 physw_status[2] = ( kbd_new_state[2] | KEYS_MASK2) & (~KEYS_MASK2 | kbd_mod_state[2]);251 physw_status[2] = ((kbd_new_state[2] | KEYS_MASK2) & (~KEYS_MASK2 | kbd_mod_state[2])) ^ KEYS_INV2; 234 252 } 235 253 … … 281 299 kbd_mod_state[0] |= KEYS_MASK0; 282 300 kbd_mod_state[1] |= KEYS_MASK1; 283 kbd_mod_state[2] |= KEYS_MASK2 & ~0x01700000;301 kbd_mod_state[2] |= KEYS_MASK2; 284 302 } 285 303 … … 289 307 for (i=0;keymap[i].hackkey;i++){ 290 308 if (keymap[i].hackkey == key){ 291 switch (keymap[i].hackkey) { 292 case KEY_UP: case KEY_DOWN: case KEY_LEFT: case KEY_MENU: 293 return ((kbd_new_state[keymap[i].grp] & keymap[i].canonkey) == 0) ? 0:1; 294 default: 295 return ((kbd_new_state[keymap[i].grp] & keymap[i].canonkey) == 0) ? 1:0; 296 } 309 return ((kbd_new_state[keymap[i].grp] & keymap[i].canonkey) == 0) ? 1:0; 297 310 } 298 311 } -
branches/release-1_0/platform/a495/kbd.c
r1376 r1604 12 12 13 13 14 static long kbd_new_state[3] ;15 static long kbd_prev_state[3] ;16 static long kbd_mod_state[3] ;14 static long kbd_new_state[3] = { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }; 15 static long kbd_prev_state[3] = { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }; 16 static long kbd_mod_state[3] = { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }; 17 17 18 18 static long last_kbd_key = 0; … … 27 27 #define KEYS_MASK1 (0x00000000) 28 28 #define KEYS_MASK2 (0x017001f4) 29 #define KEYS_INV2 (0x01700000) 30 /* 31 the 4 button states residing in the upper half of physw_status[2] seem to be inverted 32 to handle these correctly, their value needs to be inverted: 33 - when reading from physw_status[2] to the state variables 34 - when writing to physw_status[2] from the state variables 35 KEYS_INV2 should be used for that 36 SD_READONLY_FLAG and USB_MASK are not affected by this 37 38 when idle, physw_status[2] looks like: "000001000000000xxxxx000111110100" 39 KEYS_MASK2 is "00000001011100000000000111110100" 40 */ 29 41 30 42 #define SD_READONLY_FLAG (0x40000) … … 41 53 { 0, KEY_PRINT , 0x00020000 }, // Playback 42 54 43 { 2, KEY_SHOOT_FULL , 0x00000030 }, // 0x00000010 (KEY_SHOOT_HALF) + 0x000000 30 (KEY_SHOOT_FULL_ONLY)55 { 2, KEY_SHOOT_FULL , 0x00000030 }, // 0x00000010 (KEY_SHOOT_HALF) + 0x00000020 (KEY_SHOOT_FULL_ONLY) 44 56 { 2, KEY_SHOOT_FULL_ONLY, 0x00000020 }, 45 57 { 2, KEY_SHOOT_HALF , 0x00000010 }, … … 161 173 static void __attribute__((noinline)) mykbd_task_proceed() 162 174 { 175 /* Initialize our own kbd_new_state[] array with the 176 current physical status. (inspired by the S90 port) 177 */ 178 kbd_new_state[0] = physw_status[0]; 179 kbd_new_state[1] = physw_status[1]; 180 kbd_new_state[2] = physw_status[2] ^ KEYS_INV2; 163 181 while (physw_run){ 164 182 _SleepTask(10); … … 223 241 kbd_new_state[0] = physw_status[0]; 224 242 kbd_new_state[1] = physw_status[1]; 225 kbd_new_state[2] = physw_status[2] ;243 kbd_new_state[2] = physw_status[2] ^ KEYS_INV2; 226 244 227 245 if (kbd_process() == 0){ … … 231 249 physw_status[0] = (kbd_new_state[0] | KEYS_MASK0) & (~KEYS_MASK0 | kbd_mod_state[0]); 232 250 //physw_status[1] = (kbd_new_state[1] | KEYS_MASK1) & (~KEYS_MASK1 | kbd_mod_state[1]); 233 physw_status[2] = ( kbd_new_state[2] | KEYS_MASK2) & (~KEYS_MASK2 | kbd_mod_state[2]);251 physw_status[2] = ((kbd_new_state[2] | KEYS_MASK2) & (~KEYS_MASK2 | kbd_mod_state[2])) ^ KEYS_INV2; 234 252 } 235 253 … … 281 299 kbd_mod_state[0] |= KEYS_MASK0; 282 300 kbd_mod_state[1] |= KEYS_MASK1; 283 kbd_mod_state[2] |= KEYS_MASK2 & ~0x01700000;301 kbd_mod_state[2] |= KEYS_MASK2; 284 302 } 285 303 … … 289 307 for (i=0;keymap[i].hackkey;i++){ 290 308 if (keymap[i].hackkey == key){ 291 switch (keymap[i].hackkey) { 292 case KEY_UP: case KEY_DOWN: case KEY_LEFT: case KEY_MENU: 293 return ((kbd_new_state[keymap[i].grp] & keymap[i].canonkey) == 0) ? 0:1; 294 default: 295 return ((kbd_new_state[keymap[i].grp] & keymap[i].canonkey) == 0) ? 1:0; 296 } 309 return ((kbd_new_state[keymap[i].grp] & keymap[i].canonkey) == 0) ? 1:0; 297 310 } 298 311 }
Note: See TracChangeset
for help on using the changeset viewer.