Example getkey

From wiki.emacinc.com
Revision as of 17:02, 3 January 2014 by Jgreene (talk | contribs)
Jump to: navigation, search
TODO: {{#todo:(11.14.13-11:41->JG+);(11.14.13-15:30->MD-);(11.21.13-14:06->JG+);(11.21.13-16:15->MD-);(12.03.13-14:21->JG+);(01.04.14-17:01->JG+)|Jgreene|oe 4,oe 5,jg,md,Review}}

This is a guide to the getkey C example project included in the EMAC OE SDK.

The getkey example C project demonstrates how to use a keypad with a SoM150ES carrier board. It provides examples of how to specify, inspect and test associations between character-data and keypad-keys. It demonstrates how to turn key-presses into character-data using the same techniques as the big keyboard on your PC. It's also a good introduction to the mysteries of matrix encoding (see A Note on Matrix Encoding, below).

The getkey C example project creates one executable: getkey.


Usage and Behavior

Hardware Requirements

To use the getkey program requires the following hardware.

Som150 with keypad.JPG
SOM-150ES carrier board with keypad

Plugging the Keypad into the SOM-150ES Carrier Board

Plug the keypad into the HDR5 KEYPAD header of the SOM-150ES Carrier Board.
Example getkey howtopluginthekeypad 0.png

Ensure that pin 0 of the keypad's ribbon cable is lined up with pin 2 on the header.
Example getkey howtopluginthekeypad 1.png

The Keypad Matrix File

The keypad matrix file specifies associations between keypad-keys and characters. For each key in the keypad's grid of keys we specify a character in a grid of characters.

        Example getkey minimalkeypad.png           Example getkey matrixfile.png

In this example we see an E020-21 keypad on the left and an example keypad matrix file (Key-E020-21, included in the project) opened in a text editor on the right. The character matrix may be freely edited to suit.

A Note on Matrix Encoding

Matrix Encoding is a technique for translating individual xy locations on a 2d matrix into unique integer values. Here we see locations in a 4x4 matrix being translated into an 8bit value. Pins 0,1,2,3 handle the key y coordinate; pins 4,5,6,7 handle the x coordinate. Key A is at (7,0); B:(6,0); K:(5,2); Etc.

        Matrix encoding.png

Thus, when a key is pressed, we get a corrosponding integer value on the header.
For example: Pressing the F key sets the values on pins 1 and 6 to 1. This gives us a binary value of 01000010. Integer value: 66 . So when the value at the header equals 66 we know that the F key was pressed.
Note This is an abstract, general example of a keypad using matrix encoding. Your keypad will probably have different characters on it's keys and output slightly different values.

Using getkey

The getkey program is controlled from the console via command line parameters. You can specify the keypad device node, specify the keypad matrix file (see notes on the keypad matrix file, above), display the current matrix in the console and test individual character-key associations.

./getkey [-d device -b -g -s file] 
Specify the keypad device node. The default is /dev/keypad
Test an individual key-character association (via "read blocking"). The program will sleep until a key on the keypad is pressed, then output that key's character to the console.
Outputs the current keypad matrix (see notes on the keypad matrix file, above) to the console.
Specify the keypad matrix file. (see notes on the keypad matrix file, above). If a keypad matrix file is not specified then the character associated with the last keypad key pressed is returned.

Note on parameter order. Parameters are evaluated in order. If blocking (b) or device specifications (d) are used, they must be declared before the matrix arguments on the command line.

Usage Example. Mapping a Keypad Device Node to a Keypad Matrix File

./getkey -d /dev/keypad0 -s /path/to/this/file/Key-E020-21

The program will map the keypad at the device node /dev/keypad0 to the matrix file Key-E020-21. This associates each character in the grid of characters in the matrix file (see notes on the keypad matrix file, above) with a key in the grid of keys on the keypad.

Usage Example. Displaying the Character Presently Associated With a Key on the Keypad

./getkey -d /dev/keypad0 -b

The program will wait until a key is pressed on the keypad. When a key is pressed it will display the character associated with that pressed key, as specified in the keypad matrix file (see notes on the keypad matrix file, above).

For example:

root@som9g20:/tmp# ./getkey -d /dev/keypad0 -b

In this case I pressed the 5 key on the keypad.

Usage Example. Displaying the Character Matrix Presently Associated with the Keypad

./getkey -d /dev/keypad0 -g

The program will display the character matrix (see notes on the keypad matrix file, above) presently associated with the keypad at /dev/keypad0.

root@som9g20:/tmp# ./getkey -d /dev/keypad0 -g
1 2 3 C   
4 5 6 D   
7 8 9 E   
A 0 B F   

The character matrix displayed here is that of the Key-E020-21 file.


The getkey<code example C project demonstrates how to use a keypad with a SoM150ES carrier board.