만약 USB keyboard를 쓰신다면 init수행하시기전 usbkbd module을 적재하신후
/system/usr/keylayout/qwerty.kl의 내용중 자신이 mapping하고 싶은 usb keyboard로 값을 바꾸시면 됩니다.
default값은 쿼티키보드의 값인것 같던데 제가 가진 usbkeyboard와는 값이 조금 다르더군요..
Original qwerty value to chage(usb keyboard) ------------------------------------------------------ key 116 POWER -> key 88 (F12) key 115 VOLUME_UP -> key 78 (NUM +) key 114 VOLUME_DOWN -> key 74 (NUM -) key 229 MENU -> key 102 (HOME) key 158 BACK -> key 104 (PAGEUP) key 158 HOME -> key 110 (INSERT) key 231 CALL -> key 107 (END) key 107 ENDCALL -> key 109 (PAGEDOWN)
다른 key로 mapping하시고 싶으시면 아래 추가로 다른 key에 대한 code가 있으니 참고하세요. usbkbd driver단의 usb_kbd_irq()에서 report되는 key값을 catch하셔서 확인하셔도 되겠습니다.
--------------------------------------------- key 1 ESC key 110 INSERT key 59 F1 key 102 HOME key 60 F2 key 104 PAGE-UP key 61 F3 key 111 DELETE key 62 F4 key 107 END key 63 F5 key 109 PAGE-DOWN key 64 F6 key 65 F7 key 74 NUM - key 66 F8 key 78 MUM + key 67 F9 key 14 BACKSPACE key 68 F10 key 87 F11 key 88 F12
android init를 수행하기전에 자신의 proc file system에 정상적으로 올라갔는지 확인해보시기 바랍니다.
# cat /proc/bus/input/devices (아래것은 일단 pushkey것입니다.)
[@/]$ cat /proc/bus/input/devices
I: Bus=ffff Vendor=ffff Product=ffff Version=0001
N: Name="pushkey"
P: Phys=
S: Sysfs=/class/input/input0
U: Uniq=
H: Handlers=event0
B: EV=3
B: KEY=120 0 0 40000000 1c16c0 0 0 0
2. touch screen.
저 같은 경우 이미 kernel에 ads7846의 touch driver가 올라가 있는 상태입니다. tslib를 이용하여 다른 application에서
(like Qt) Touch를 돌리곤 했었습니다. 아시다시피 Android는 ABS touch값만 input system에서 받아갑니다.
따라서 tslib가 중간에서 touch raw data를 filtering한 내용을 touch driver에 심어주면 되겠습니다.
저같은경우는 linear mode로 tslib를 사용하였으므로 ts_calibrate에서 나온 pointercal 화일의 내용을 참고하여
아래와 같이 작업하였습니다. (480x272 tocuhLCD)
pointercal 의 내용 : -8225 150 32086264 -11 -5069 18605140 65536
기존 위의 x,y 값을 inputsystem에 report하는 code대신 아래와 같이 구성하였습니다.
==>
static void ads7846_rx(void *ads)
{ .............
static int a[7]={-8225, 150, 32086264, -11, -5069, 18605140, 65536}; //pointercal의 내용.. int prev_X,prev_Y; int xtemp,ytemp; xtemp = x; ytemp = y;