Changeset 801579fe in mainline for uspace/kbd/arch/mips32/src/kbd.c
- Timestamp:
- 2006-09-07T19:46:23Z (18 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 253f35a1
- Parents:
- 9141377
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/kbd/arch/mips32/src/kbd.c
r9141377 r801579fe 53 53 #define MSIM_KEY_F12 0x34325b1bL 54 54 55 56 55 #define GXEMUL_KEY_F1 0x504f5b1bL 57 56 #define GXEMUL_KEY_F2 0x514f5b1bL … … 67 66 #define GXEMUL_KEY_F12 0x34325b1bL 68 67 69 70 68 #define FUNCTION_KEYS 0x100 71 72 69 73 70 irq_cmd_t msim_cmds[1] = { … … 86 83 int kbd_arch_init(void) 87 84 { 88 fb_fb =sysinfo_value("fb.kind")==1;85 fb_fb = (sysinfo_value("fb.kind") == 1); 89 86 ipc_register_irq(2, &msim_kbd); 90 87 return 0; … … 105 102 { 106 103 107 static unsigned long buf=0; 108 static int count=0; 109 104 static unsigned long buf = 0; 105 static int count = 0; 110 106 111 107 /* Please preserve this code (it can be used to determine scancodes) … … 119 115 */ 120 116 121 if(scan_code==0x7e) 122 { 123 switch (buf){ 124 case MSIM_KEY_F5: 125 keybuffer_push(keybuffer,FUNCTION_KEYS | 5 ); 126 buf=count=0; 127 return 1; 128 case MSIM_KEY_F6: 129 keybuffer_push(keybuffer,FUNCTION_KEYS | 6 ); 130 buf=count=0; 131 return 1; 132 case MSIM_KEY_F7: 133 keybuffer_push(keybuffer,FUNCTION_KEYS | 7 ); 134 buf=count=0; 135 return 1; 136 case MSIM_KEY_F8: 137 keybuffer_push(keybuffer,FUNCTION_KEYS | 8 ); 138 buf=count=0; 139 return 1; 140 141 case MSIM_KEY_F9: 142 keybuffer_push(keybuffer,FUNCTION_KEYS | 9 ); 143 buf=count=0; 144 return 1; 145 case MSIM_KEY_F10: 146 keybuffer_push(keybuffer,FUNCTION_KEYS | 10 ); 147 buf=count=0; 148 return 1; 149 150 case MSIM_KEY_F11: 151 keybuffer_push(keybuffer,FUNCTION_KEYS | 11 ); 152 buf=count=0; 153 return 1; 154 case MSIM_KEY_F12: 155 keybuffer_push(keybuffer,FUNCTION_KEYS | 12 ); 156 buf=count=0; 157 return 1; 158 default: 159 keybuffer_push(keybuffer, buf & 0xff ); 160 keybuffer_push(keybuffer, (buf >> 8) &0xff ); 161 keybuffer_push(keybuffer, (buf >> 16) &0xff ); 162 keybuffer_push(keybuffer, (buf >> 24) &0xff ); 163 keybuffer_push(keybuffer, scan_code ); 164 buf=count=0; 165 return 1; 166 117 if(scan_code == 0x7e) { 118 switch (buf) { 119 case MSIM_KEY_F5: 120 keybuffer_push(keybuffer,FUNCTION_KEYS | 5); 121 buf = count = 0; 122 return 1; 123 case MSIM_KEY_F6: 124 keybuffer_push(keybuffer,FUNCTION_KEYS | 6); 125 buf = count = 0; 126 return 1; 127 case MSIM_KEY_F7: 128 keybuffer_push(keybuffer,FUNCTION_KEYS | 7); 129 buf = count = 0; 130 return 1; 131 case MSIM_KEY_F8: 132 keybuffer_push(keybuffer,FUNCTION_KEYS | 8); 133 buf = count = 0; 134 return 1; 135 case MSIM_KEY_F9: 136 keybuffer_push(keybuffer,FUNCTION_KEYS | 9); 137 buf = count = 0; 138 return 1; 139 case MSIM_KEY_F10: 140 keybuffer_push(keybuffer,FUNCTION_KEYS | 10); 141 buf = count = 0; 142 return 1; 143 case MSIM_KEY_F11: 144 keybuffer_push(keybuffer,FUNCTION_KEYS | 11); 145 buf = count = 0; 146 return 1; 147 case MSIM_KEY_F12: 148 keybuffer_push(keybuffer,FUNCTION_KEYS | 12); 149 buf = count = 0; 150 return 1; 151 default: 152 keybuffer_push(keybuffer, buf & 0xff); 153 keybuffer_push(keybuffer, (buf >> 8) &0xff); 154 keybuffer_push(keybuffer, (buf >> 16) &0xff); 155 keybuffer_push(keybuffer, (buf >> 24) &0xff); 156 keybuffer_push(keybuffer, scan_code); 157 buf = count = 0; 158 return 1; 167 159 } 168 160 } 169 161 170 buf|=((unsigned long) scan_code)<<(8*(count++)); 171 172 173 if((buf & 0xff)!= (MSIM_KEY_F1 & 0xff)) { 174 175 keybuffer_push(keybuffer,buf ); 176 buf=count=0; 177 return 1; 178 } 179 180 if ( count <= 1 ) 181 return 1; 182 183 if( (buf & 0xffff) != (MSIM_KEY_F1 & 0xffff) 184 && (buf & 0xffff) != (MSIM_KEY_F5 & 0xffff) ) { 185 186 keybuffer_push(keybuffer, buf & 0xff ); 187 keybuffer_push(keybuffer, (buf >> 8) &0xff ); 188 buf=count=0; 189 return 1; 190 } 191 192 if ( count <= 2) 193 return 1; 194 195 switch (buf){ 196 case MSIM_KEY_F1: 197 keybuffer_push(keybuffer,FUNCTION_KEYS | 1 ); 198 buf=count=0; 199 return 1; 200 case MSIM_KEY_F2: 201 keybuffer_push(keybuffer,FUNCTION_KEYS | 2 ); 202 buf=count=0; 203 return 1; 204 case MSIM_KEY_F3: 205 keybuffer_push(keybuffer,FUNCTION_KEYS | 3 ); 206 buf=count=0; 207 return 1; 208 case MSIM_KEY_F4: 209 keybuffer_push(keybuffer,FUNCTION_KEYS | 4 ); 210 buf=count=0; 211 return 1; 212 } 213 214 215 if( (buf & 0xffffff) != (MSIM_KEY_F5 & 0xffffff) 216 && (buf & 0xffffff) != (MSIM_KEY_F9 & 0xffffff) ) { 217 218 keybuffer_push(keybuffer, buf & 0xff ); 219 keybuffer_push(keybuffer, (buf >> 8) &0xff ); 220 keybuffer_push(keybuffer, (buf >> 16) &0xff ); 221 buf=count=0; 222 return 1; 223 } 224 225 if ( count <= 3 ) 226 return 1; 227 228 229 230 231 switch (buf){ 232 case MSIM_KEY_F5: 233 case MSIM_KEY_F6: 234 case MSIM_KEY_F7: 235 case MSIM_KEY_F8: 236 case MSIM_KEY_F9: 237 case MSIM_KEY_F10: 238 case MSIM_KEY_F11: 239 case MSIM_KEY_F12: 240 return 1; 241 default: 242 keybuffer_push(keybuffer, buf & 0xff ); 243 keybuffer_push(keybuffer, (buf >> 8) &0xff ); 244 keybuffer_push(keybuffer, (buf >> 16) &0xff ); 245 keybuffer_push(keybuffer, (buf >> 24) &0xff ); 246 buf=count=0; 247 return 1; 248 249 } 162 buf |= ((unsigned long) scan_code)<<(8*(count++)); 163 164 if((buf & 0xff) != (MSIM_KEY_F1 & 0xff)) { 165 keybuffer_push(keybuffer, buf); 166 buf = count = 0; 167 return 1; 168 } 169 170 if (count <= 1) 171 return 1; 172 173 if ((buf & 0xffff) != (MSIM_KEY_F1 & 0xffff) 174 && (buf & 0xffff) != (MSIM_KEY_F5 & 0xffff) ) { 175 176 keybuffer_push(keybuffer, buf & 0xff); 177 keybuffer_push(keybuffer, (buf >> 8) &0xff); 178 buf = count = 0; 179 return 1; 180 } 181 182 if (count <= 2) 183 return 1; 184 185 switch (buf) { 186 case MSIM_KEY_F1: 187 keybuffer_push(keybuffer,FUNCTION_KEYS | 1); 188 buf = count = 0; 189 return 1; 190 case MSIM_KEY_F2: 191 keybuffer_push(keybuffer,FUNCTION_KEYS | 2); 192 buf = count = 0; 193 return 1; 194 case MSIM_KEY_F3: 195 keybuffer_push(keybuffer,FUNCTION_KEYS | 3); 196 buf = count = 0; 197 return 1; 198 case MSIM_KEY_F4: 199 keybuffer_push(keybuffer,FUNCTION_KEYS | 4); 200 buf = count = 0; 201 return 1; 202 } 203 204 205 if((buf & 0xffffff) != (MSIM_KEY_F5 & 0xffffff) 206 && (buf & 0xffffff) != (MSIM_KEY_F9 & 0xffffff)) { 207 208 keybuffer_push(keybuffer, buf & 0xff); 209 keybuffer_push(keybuffer, (buf >> 8) & 0xff); 210 keybuffer_push(keybuffer, (buf >> 16) & 0xff); 211 buf=count=0; 212 return 1; 213 } 214 215 if (count <= 3) 216 return 1; 217 218 switch (buf) { 219 case MSIM_KEY_F5: 220 case MSIM_KEY_F6: 221 case MSIM_KEY_F7: 222 case MSIM_KEY_F8: 223 case MSIM_KEY_F9: 224 case MSIM_KEY_F10: 225 case MSIM_KEY_F11: 226 case MSIM_KEY_F12: 227 return 1; 228 default: 229 keybuffer_push(keybuffer, buf & 0xff); 230 keybuffer_push(keybuffer, (buf >> 8) &0xff); 231 keybuffer_push(keybuffer, (buf >> 16) &0xff); 232 keybuffer_push(keybuffer, (buf >> 24) &0xff); 233 buf = count = 0; 234 return 1; 235 } 250 236 return 1; 251 237 } … … 255 241 static int kbd_arch_process_fb(keybuffer_t *keybuffer, int scan_code) 256 242 { 257 258 static unsigned long buf=0; 259 static int count=0; 260 243 static unsigned long buf = 0; 244 static int count = 0; 261 245 262 246 /* Please preserve this code (it can be used to determine scancodes) … … 270 254 */ 271 255 272 if ( scan_code == '\r' ) 273 scan_code = '\n' ; 274 275 buf|=((unsigned long) scan_code)<<(8*(count++)); 276 277 278 if((buf & 0xff)!= (GXEMUL_KEY_F1 & 0xff)) { 279 280 keybuffer_push(keybuffer,buf ); 281 buf=count=0; 282 return 1; 283 } 284 285 if ( count <= 1 ) 286 return 1; 287 288 if( (buf & 0xffff) != (GXEMUL_KEY_F1 & 0xffff) ) { 289 290 keybuffer_push(keybuffer, buf & 0xff ); 291 keybuffer_push(keybuffer, (buf >> 8) &0xff ); 292 buf=count=0; 293 return 1; 294 } 295 296 if ( count <= 2) 297 return 1; 298 299 300 if( (buf & 0xffffff) != (GXEMUL_KEY_F1 & 0xffffff) 301 && (buf & 0xffffff) != (GXEMUL_KEY_F5 & 0xffffff) 302 && (buf & 0xffffff) != (GXEMUL_KEY_F9 & 0xffffff) ) { 303 256 if (scan_code == '\r') 257 scan_code = '\n'; 258 259 buf |= ((unsigned long) scan_code)<<(8*(count++)); 260 261 262 if ((buf & 0xff) != (GXEMUL_KEY_F1 & 0xff)) { 263 keybuffer_push(keybuffer, buf); 264 buf = count = 0; 265 return 1; 266 } 267 268 if (count <= 1) 269 return 1; 270 271 if ((buf & 0xffff) != (GXEMUL_KEY_F1 & 0xffff)) { 272 keybuffer_push(keybuffer, buf & 0xff); 273 keybuffer_push(keybuffer, (buf >> 8) &0xff); 274 buf = count = 0; 275 return 1; 276 } 277 278 if (count <= 2) 279 return 1; 280 281 282 if ((buf & 0xffffff) != (GXEMUL_KEY_F1 & 0xffffff) 283 && (buf & 0xffffff) != (GXEMUL_KEY_F5 & 0xffffff) 284 && (buf & 0xffffff) != (GXEMUL_KEY_F9 & 0xffffff)) { 285 286 keybuffer_push(keybuffer, buf & 0xff); 287 keybuffer_push(keybuffer, (buf >> 8) & 0xff); 288 keybuffer_push(keybuffer, (buf >> 16) & 0xff); 289 buf = count = 0; 290 return 1; 291 } 292 293 if ( count <= 3 ) 294 return 1; 295 296 297 switch (buf) { 298 case GXEMUL_KEY_F1: 299 keybuffer_push(keybuffer,FUNCTION_KEYS | 1 ); 300 buf=count=0; 301 return 1; 302 case GXEMUL_KEY_F2: 303 keybuffer_push(keybuffer,FUNCTION_KEYS | 2 ); 304 buf=count=0; 305 return 1; 306 case GXEMUL_KEY_F3: 307 keybuffer_push(keybuffer,FUNCTION_KEYS | 3 ); 308 buf=count=0; 309 return 1; 310 case GXEMUL_KEY_F4: 311 keybuffer_push(keybuffer,FUNCTION_KEYS | 4 ); 312 buf=count=0; 313 return 1; 314 case GXEMUL_KEY_F5: 315 keybuffer_push(keybuffer,FUNCTION_KEYS | 5 ); 316 buf=count=0; 317 return 1; 318 case GXEMUL_KEY_F6: 319 keybuffer_push(keybuffer,FUNCTION_KEYS | 6 ); 320 buf=count=0; 321 return 1; 322 case GXEMUL_KEY_F7: 323 keybuffer_push(keybuffer,FUNCTION_KEYS | 7 ); 324 buf=count=0; 325 return 1; 326 case GXEMUL_KEY_F8: 327 keybuffer_push(keybuffer,FUNCTION_KEYS | 8 ); 328 buf=count=0; 329 return 1; 330 case GXEMUL_KEY_F9: 331 keybuffer_push(keybuffer,FUNCTION_KEYS | 9 ); 332 buf=count=0; 333 return 1; 334 case GXEMUL_KEY_F10: 335 keybuffer_push(keybuffer,FUNCTION_KEYS | 10 ); 336 buf=count=0; 337 return 1; 338 case GXEMUL_KEY_F11: 339 keybuffer_push(keybuffer,FUNCTION_KEYS | 11 ); 340 buf=count=0; 341 return 1; 342 case GXEMUL_KEY_F12: 343 keybuffer_push(keybuffer,FUNCTION_KEYS | 12 ); 344 buf=count=0; 345 return 1; 346 default: 304 347 keybuffer_push(keybuffer, buf & 0xff ); 305 348 keybuffer_push(keybuffer, (buf >> 8) &0xff ); 306 349 keybuffer_push(keybuffer, (buf >> 16) &0xff ); 307 buf=count=0; 308 return 1; 309 } 310 311 if ( count <= 3 ) 312 return 1; 313 314 315 switch (buf){ 316 317 case GXEMUL_KEY_F1: 318 keybuffer_push(keybuffer,FUNCTION_KEYS | 1 ); 319 buf=count=0; 320 return 1; 321 case GXEMUL_KEY_F2: 322 keybuffer_push(keybuffer,FUNCTION_KEYS | 2 ); 323 buf=count=0; 324 return 1; 325 case GXEMUL_KEY_F3: 326 keybuffer_push(keybuffer,FUNCTION_KEYS | 3 ); 327 buf=count=0; 328 return 1; 329 case GXEMUL_KEY_F4: 330 keybuffer_push(keybuffer,FUNCTION_KEYS | 4 ); 331 buf=count=0; 332 return 1; 333 case GXEMUL_KEY_F5: 334 keybuffer_push(keybuffer,FUNCTION_KEYS | 5 ); 335 buf=count=0; 336 return 1; 337 case GXEMUL_KEY_F6: 338 keybuffer_push(keybuffer,FUNCTION_KEYS | 6 ); 339 buf=count=0; 340 return 1; 341 case GXEMUL_KEY_F7: 342 keybuffer_push(keybuffer,FUNCTION_KEYS | 7 ); 343 buf=count=0; 344 return 1; 345 case GXEMUL_KEY_F8: 346 keybuffer_push(keybuffer,FUNCTION_KEYS | 8 ); 347 buf=count=0; 348 return 1; 349 case GXEMUL_KEY_F9: 350 keybuffer_push(keybuffer,FUNCTION_KEYS | 9 ); 351 buf=count=0; 352 return 1; 353 case GXEMUL_KEY_F10: 354 keybuffer_push(keybuffer,FUNCTION_KEYS | 10 ); 355 buf=count=0; 356 return 1; 357 case GXEMUL_KEY_F11: 358 keybuffer_push(keybuffer,FUNCTION_KEYS | 11 ); 359 buf=count=0; 360 return 1; 361 case GXEMUL_KEY_F12: 362 keybuffer_push(keybuffer,FUNCTION_KEYS | 12 ); 363 buf=count=0; 364 return 1; 365 366 default: 367 keybuffer_push(keybuffer, buf & 0xff ); 368 keybuffer_push(keybuffer, (buf >> 8) &0xff ); 369 keybuffer_push(keybuffer, (buf >> 16) &0xff ); 370 keybuffer_push(keybuffer, (buf >> 24) &0xff ); 371 buf=count=0; 372 return 1; 373 374 } 350 keybuffer_push(keybuffer, (buf >> 24) &0xff ); 351 buf=count=0; 352 return 1; 353 } 375 354 return 1; 376 355 } … … 381 360 static int esc_count=0; 382 361 383 384 if ( scan_code == 0x1b ) { 362 if (scan_code == 0x1b) { 385 363 esc_count++; 386 if ( esc_count == 3 ) {364 if (esc_count == 3) 387 365 __SYSCALL0(SYS_DEBUG_ENABLE_CONSOLE); 388 }389 366 } else { 390 367 esc_count=0; 391 368 } 392 369 393 if(fb_fb) return kbd_arch_process_fb(keybuffer, scan_code); 370 if (fb_fb) 371 return kbd_arch_process_fb(keybuffer, scan_code); 372 394 373 return kbd_arch_process_no_fb(keybuffer, scan_code); 395 396 return 0;397 374 } 398 375 /** @}
Note:
See TracChangeset
for help on using the changeset viewer.