I've taken the liberty of rooking a Nook Glowlight 3 and changing the keymap as follows:
Code:
$ cat /system/usr/keylayout/imx-keypad.kl
key 158 BACK
key 116 POWER WAKE
key 139 MENU
key 412 BACK
key 102 HOME WAKE
key 353 DPAD_CENTER
key 103 DPAD_UP
key 105 DPAD_LEFT
key 106 DPAD_RIGHT
key 108 DPAD_DOWN
key 114 VOLUME_DOWN
key 115 VOLUME_UP
key 90 BUTTON_B
key 191 3
key 192 1
key 193 2
key 194 4
However, when I press the hardware buttons I do not get the expected numeral keypresses. I had based the idea that this would work off this forum post which states:
Renate NST said:
The six hard buttons are mapped in /system/usr/keylayout/imx-keypad.kl
LowerLeft 191 F9
UpperLeft 192 F10
UpperRight 193 F11
LowerRight 194 F12
Power 116 Power
Home 102 Home
Click to expand...
Click to collapse
Of course, I did reset the device after changing the file, and the output seen here is from running cat after the reset so I know that the file was changed properly. Why might the buttons not present the keypresses expected?
For keys to work, you've got:
/system/usr/idc/*.idc - provides links to the other two files
/system/usr/keylayout/*.kl - maps hardware inputs to keys
/system/usr/keychars/*.kcm - maps keys to characters
The first thing to note is that B&N (NTX) just sloppily edited example files.
The imx-keypad.kl has a lot of cruft for things that don't exist.
Ok, they don't do any harm unless there is something wrong with them, then the file reading aborts at that line.
If this were the case, you might have seen a line in the dmesg log.
Get UsbMode.apk out of the signature.
Then you can see where the chain of conversion from hardware input to character fails.
(1, 2, 3, 4 is really not a useful usage of the side keys.
It won't do anything reasonable with any non-custom app.
Page up/page down elicits a response from most things.)
Renate NST said:
For keys to work, you've got:
/system/usr/idc/*.idc - provides links to the other two files
/system/usr/keylayout/*.kl - maps hardware inputs to keys
/system/usr/keychars/*.kcm - maps keys to characters
The first thing to note is that B&N (NTX) just sloppily edited example files.
The imx-keypad.kl has a lot of cruft for things that don't exist.
Ok, they don't do any harm unless there is something wrong with them, then the file reading aborts at that line.
If this were the case, you might have seen a line in the dmesg log.
Get UsbMode.apk out of the signature.
Then you can see where the chain of conversion from hardware input to character fails.
(1, 2, 3, 4 is really not a useful usage of the side keys.
It won't do anything reasonable with any non-custom app.
Page up/page down elicits a response from most things.)
Click to expand...
Click to collapse
Thank you so much Renate. I was wondering what all that cruft was, I will remove it to see if that is preventing further parsing of the file.
In fact, I use the Nook almost exclusively for AnkiDroid, so the 1,2,3,4 are for that app.
Actually, it's more likely that you edited that text file on a Windows CR/LF text editor.
The system will abort as soon as it sees a CR, 0x0d
You can do a hex dump "hd imx-keypad.kl" right on your Nook.
(Use Notepad++ instead.)
Renate NST said:
Actually, it's more likely that you edited that text file on a Windows CR/LF text editor.
Click to expand...
Click to collapse
Very unlikely that VIM on Debian would use CRLF line endings!
dotancohen said:
However, when I press the hardware buttons I do not get the expected numeral keypresses.
Click to expand...
Click to collapse
Well, you're not very explicit on what you do get.
Do you get any response? What?
Did you break your Home key?
Use the UsbMode.apk
Related
Hello,
Im currently working on a custom control in managed code(vb.net) and have decided to implement it in a lock application as its initial demo. I have written code which catpures the base hardware keys available to windows mobile(1-6) this captures all of the hardware buttons on my wizard except for the Phone Buttons, Volume/Vibrate Button, and power button. im not particularly worried about trapping the power button because i like the tap to standby feature but im up the creek on the phone/volume buttons.
I found the hardware buttons 1-6 in the registry under (HKLM\Software\Microsoft\Shell\Keys) but i cant seem to find the other keys anywhere including where this person says they are
http://www.mobipocket.com/forum/viewtopic.php?p=2367&sid=c3b2c704a729c2d6e5a47d0ee38ecb54
basically from my understanding of what he's saying the keys for these options(at least the phone ones) should have been listed under "HKEY_CURRENT_USER\Software\Microsoft\Today\Keys\"
I had one key there 112 pointng to my calendar(so that i thought confirmed him) I added a key called 114 with a path to calendar as well. but the button still directs to phone/ so im not sure what's up.
Here's some logic from the hardware button capturing... Any insight into the location of these items would be greatly appreciated
Code:
Dim hk As HardwareKeys = HardwareKeys.ApplicationKey1
Dim i As Integer = 0
While i < 6
Try
Dim hwb As HardwareButton = New HardwareButton
hwb.AssociatedControl = Me
hwb.HardwareKey = hk + i
Catch ex As Exception
Me.Label1.Text &= ex.Message
End Try
i += 1
End While
Dim regkey As RegistryKey =
Registry.LocalMachine.OpenSubKey("Software\Microsoft\Shell\Keys", True)
Me.Label1.Text = regkey.SubKeyCount
For Each skey As String In regkey.GetSubKeyNames
Me.Label1.Text &= skey.ToString & ","
Next
regkey.Close()
Thanks in advance for any insight anyone can provide
DrewG
Well ive found some russian page talking about the
Dated Post on russian site with Broken English Translation said:
HKEY_LOCAL_MACHINE\Software\Microsoft\Shell\KeyMaps]
"195"= - =-hitting "record" on the three pozic. phone (one that najmeshy story)
"196"= hitting "power" and "house"
"197"= Opening screen
"198" = "red tube"
dword:00000000 - nothing
dword:00000001- mobile phone
dword:00000002 - quick menu
dword:00000003 - lock (for the press release #)
dword:00000004 - 00000004 fast-locking
Click to expand...
Click to collapse
Do you guys think this is a good start? At that location i have dword 197 val of 5. Im adding entries now for the othr buttons to see if i can catch
Here's What I have so far for Cingular 8125 HTC Wizard as the hardware buttons/software key maps which i get from a call onkeypress. I believe im going to have to go an unmanaged route for the phone buttons/Volume.
Code:
'not code just looks better this way
SoftKey Left = Key Code 112
SoftKey Right = Key Code 113
Email Button(top left corner) = Key Code 193 (Cf Hardware Button 1)
Web Button(top right corner) = Key Code 194 (Cf Hardware Button 2)
Camera Button(bottom right side) = Key Code 195 (Cf Hardware Button 3)
Voice Button(top right side) = Key Code 196(Cf Hardware Button 4)
Record(hold voice) = Key Code 197(not firing well) (Cf Hardware Button 5)
Comm Button = Key Code 198 (Cf Hardware Button 6)
All of those I can catch and react to but i cant seem to find any info for the phone and volume buttons/ Is there a specific api call I can make thats related to button press or catching? Possibly a way of forcing an association to an app only while its running?
Thanks in advance for any help. Ill post the full app here if i can get over this hump
We all know that the physical keys mapped for Android are less than ideal--so let's work together to build a better Vogue key map, that we can ultimately customize the layout to our individual likings.
Here is an excellent link detailing information regarding Key Input and the Key Map--if nothing else, glaze over this quickly: http://www.kandroid.org/android_pdk/keymaps_keyboard_input.html
Android KeyMaps are stored in /system/usr/keylayout. On your particular build, you'll probably see a number of .kl files: AVRCP.kl, h2w_headset.kl, qwerty.kl, sapphire-keypad.kl, trout-keypad.kl, etc. For our purposes, disregard all of them except qwerty.kl. If Android can find no other .kl file, it will default to qwerty.kl. You can (for example) delete all of the other .kl files, and your phone will function exactly the same based on qwerty.kl.
If you examine your qwerty.kl, it will look very similar to the KeyMap from the link above. It follows this format:
SCANCODE KEYCODE [FLAGS]
Here is, for example, my qwerty.kl as pulled from Plemen's 1.6 AOSP build:
key 399 GRAVE
key 2 1
key 3 2
key 4 3
key 5 4
key 6 5
key 7 6
key 8 7
key 9 8
key 10 9
key 11 0
key 158 BACK WAKE_DROPPED
key 230 SOFT_RIGHT WAKE
key 60 SOFT_RIGHT WAKE
key 107 ENDCALL WAKE_DROPPED
key 62 ENDCALL WAKE_DROPPED
key 229 MENU WAKE_DROPPED
key 139 MENU WAKE_DROPPED
key 59 MENU WAKE_DROPPED
key 127 SEARCH WAKE_DROPPED
key 217 SEARCH WAKE_DROPPED
key 228 POUND
key 227 STAR
key 231 CALL WAKE_DROPPED
key 61 CALL WAKE_DROPPED
key 232 DPAD_CENTER WAKE_DROPPED
key 108 DPAD_DOWN WAKE_DROPPED
key 103 DPAD_UP WAKE_DROPPED
key 102 HOME WAKE
key 105 DPAD_LEFT WAKE_DROPPED
key 106 DPAD_RIGHT WAKE_DROPPED
key 115 VOLUME_UP
key 114 VOLUME_DOWN
key 116 POWER WAKE
key 212 CAMERA
key 16 Q
key 17 W
key 18 E
key 19 R
key 20 T
key 21 Y
key 22 U
key 23 I
key 24 O
key 25 P
key 26 LEFT_BRACKET
key 27 RIGHT_BRACKET
key 43 BACKSLASH
key 30 A
key 31 S
key 32 D
key 33 F
key 34 G
key 35 H
key 36 J
key 37 K
key 38 L
key 39 SEMICOLON
key 40 APOSTROPHE
key 14 DEL
key 44 Z
key 45 X
key 46 C
key 47 V
key 48 B
key 49 N
key 50 M
key 51 COMMA
key 52 PERIOD
key 53 SLASH
key 28 ENTER
key 56 ALT_LEFT
key 100 ALT_RIGHT
key 42 SHIFT_LEFT
key 54 SHIFT_RIGHT
key 15 TAB
key 57 SPACE
key 150 EXPLORER
key 155 ENVELOPE
key 12 MINUS
key 13 EQUALS
key 215 AT
Click to expand...
Click to collapse
When a button is pressed, it sends a SCANCODE to Android, which is interpretted and this file defines the corresponding action--back, volume up, end, camera, etc.--as well as the FLAGS that code may have, such as "WAKE", which means that button can then wake the device from sleep.
What we need is to map the button single-press and long-presses on our Vogue and identify the SCANCODES. With them, we can write our own .kl file, completely customized for us.
Currently, getting the SCANCODES seems to be the roadblock. I've tried "GetKeys" from the terminal without any luck. In the research I've done so far, it appears it may require some native C code to interpret system input and print it back out.
Please contribute and feel free to dig away in an effort to accelerate this project. Once this is done, it's one more item checked off for Android development--and it should be portable to all versions (1.5, 1.6, 2.0, 2.1, etc.)
Lastly, while I believe everything I've cited to be true, I may be incorrect--please correct me if I am.
this is something we've addressed before a few times, and have already changed the default keymap to what it is now.
Currently the keymap is set by the kernel, not by the userspace. check the kernel git and you should be able to find what you're looking for.
In case someone's still trying to find out which key does which scancode (or rather key number in the .kl files): Just use "getevent" in the terminal or ADB.
Second column of numbers is "key number" in hex.
Hi,
I'm looking to something like this to a bluetooth keyboard. How to implement deadkeys?
hi
i would like to use the Sony Play keypad to send key codes, like sending "Enter" with the "X" pad, "F" with the "O" pad, etc...
is it possible to remap the keypad to use it in another android application like a game or notepad application or something like that ? perhaps there an application for this ?
is it possible to change the orientation of the screen when i open the keypad, i would like to stay in portrait instead of landscape.
thanks a lot
up up up !
Code:
Key code constant scancode
X 23 KEYCODE_DPAD_CENTER 304
circle 4 KEYCODE_BACK 305
square 99 KEYCODE_BUTTON_X 307
triangle 100 KEYCODE_BUTTON_Y 308
up 19 KEYCODE_DPAD_UP 106
down 20 KEYCODE_DPAD_DOWN 105
left 21 KEYCODE_DPAD_LEFT 103
right 22 KEYCODE_DPAD_RIGHT 108
select 109 KEYCODE_BUTTON_SELECT 314
start 108 KEYCODE_BUTTON_START 28
L trigger 102 KEYCODE_BUTTON_L1 310
R trigger 103 KEYCODE_BUTTON_R1 311
In addition, if you want to differentiate the circle from the regular back button, you have to check to see if the "alt" key is being pressed. (If so, it's really the circle button. If not, it's the regular android back button.)
Hi all, hopefully someone can help me, I tried to do the change on my rooted phone from key 226 HEADSETHOOK to "key 226 MEDIA_PLAY_PAUSE"
Question is, my original line for key 226 HEADSETHOOK is formatted weird, it has no number sign and a few extra spaces stock. Do i replace it with key 226 MEDIA_PLAY_PAUSE, no number sign and no quotations? Do I mimic the spacing? Currently, this is what my headsethook looks like with the line before it and after it as well:
-------------------------------------------------------
# key 225 "KEY_BRIGHTNESSUP"
key 226 HEADSETHOOK
key 256 BUTTON_1
-------------------------------------------------------
Note how mine has 3 spaces between 226 and headsethook....should I make the new code replacing it like this?:
key 226 MEDIA_PLAY_PAUSE (there are 3 spaces between 226 and media)
And should I still skip a line after it?
ash0074 said:
Hi all, hopefully someone can help me, I tried to do the change on my rooted phone from key 226 HEADSETHOOK to "key 226 MEDIA_PLAY_PAUSE"
Question is, my original line for key 226 HEADSETHOOK is formatted weird, it has no number sign and a few extra spaces stock. Do i replace it with key 226 MEDIA_PLAY_PAUSE, no number sign and no quotations? Do I mimic the spacing? Currently, this is what my headsethook looks like with the line before it and after it as well:
-------------------------------------------------------
# key 225 "KEY_BRIGHTNESSUP"
key 226 HEADSETHOOK
key 256 BUTTON_1
-------------------------------------------------------
Note how mine has 3 spaces between 226 and headsethook....should I make the new code replacing it like this?:
key 226 MEDIA_PLAY_PAUSE (there are 3 spaces between 226 and media)
And should I still skip a line after it?
Click to expand...
Click to collapse
Another note, this post is removing my spaces, so they arent showing here but the spaces are on my phone.
Ok, I got it to work, I switched 164 and 226 and i was able to pause and start my music, but now i can't answer calls with that button. Is it one or the other, is there no way to make a single button headset control calls and music?
ash0074 said:
Ok, I got it to work, I switched 164 and 226 and i was able to pause and start my music, but now i can't answer calls with that button. Is it one or the other, is there no way to make a single button headset control calls and music?
Click to expand...
Click to collapse
Anyone know anything on this?
Volume?
That was most helpful. Note for everyone, it was the qwerty.kl file (info on finding it and such here http://forum.xda-developers.com/showthread.php?t=1229066)
Any thoughts on the volume up and down buttons maybe?
try gonemad player
I'm modifying an IME app for use on Kyocera DuraXV (Hardware buttons).
KeyEvent.KEYCODE_BACK returns 4
But when I press the back button I get the keyCode 67 from the onKeyDown event.
So I tried KeyEvent.KEYCODE_CLEAR in case that's the label on the key. But that returns 28.
So now I'm confused. Is there a way to reverse engineer the keyCode from key press (67) to find out the "label"?
Do you mean 67 decimal? That's KEYCODE_DEL.
Thanks, I confirmed it and you are right.
Now I found another little problem. I'm trying KeyCharacterMap.deviceHasKey(67) and getting false.
Tried it on several keys which I should have, some return true, others don't.
You can use my UsbMode.apk (in the sig).
It's helpful to show you Linux scan codes and Android key codes.
jonas.sj said:
I'm modifying an IME app for use on Kyocera DuraXV (Hardware buttons).
KeyEvent.KEYCODE_BACK returns 4
But when I press the back button I get the keyCode 67 from the onKeyDown event.
So I tried KeyEvent.KEYCODE_CLEAR in case that's the label on the key. But that returns 28.
So now I'm confused. Is there a way to reverse engineer the keyCode from key press (67) to find out the "label"?
Click to expand...
Click to collapse
The keyCode value you are getting from the onKeyDown event (67) corresponds to the ASCII value of the character 'C', not the back button. This is why KeyEvent.KEYCODE_BACK returns a different value (4).
To answer your question, there is no direct way to reverse engineer the keyCode from the key press to find out the label. However, you may be able to infer the label by looking at the other key codes returned by other buttons on the device, and seeing if there is a pattern. You could also try consulting the device's documentation or the manufacturer's website to see if they provide any information on the hardware buttons and their key codes.
Alternatively, you could try using a KeyListener instead of the onKeyDown event to detect key presses, as the KeyListener provides additional information such as the key character and the key code. This may help you determine the label of the key corresponding to the keyCode you are getting.