This section covers the installation and use of the Mini-Box USB LCD (picoLCD 20x2) display.
The picoLCD page indicates that the device can be connected via I2C or USART. This lcdproc driver, however, is limited to the USB connected model.
The picoLCD device as used by this driver is USB connected and may be purchased with an internal USB header connector (5-pin to 5-pin) or an external cable (Type-A to 5-pin). See: http://www.mini-box.com/picoLCD-20x2-OEM. It may also come pre-installed on systems like the Mini-Box M300: http://www.mini-box.com/Mini-Box-M300-LCD.
Using the USB LCD with this driver requires the usblcd library from Mini-box.com (available at http://www.mini-box.com/picoLCD-20x2-OEM).i The usblcd library requires libusb and libhcd. Your distribution may or may not already provide these libraries. The only kernel driver required is the USB host controller driver (uhci_hcd on the M300) required to fire up the usb bus to which the LCD is attached.
Lastly, the usbfs file system must be mounted on /proc/bus/usb
.
mount -t usbfs usbfs /proc/bus/usb
Once connected and with libusblcd, libusb and libhid installed, testing the USB LCD can be done with the usblcd program that comes with the usblcd library. You can also change the USB LCD's initial display (what it shows when you initialize the device) by using the usblcd binary's splash command.
To use the picolcd with LCDproc, add picolcd to the LCDproc configure drivers option (or use all) and then start LCDd with the "-d picolcd" option. The driver has sane default options and the options that are user configurable are limited to mostly simple items, like contrast and which keys to lights up.
CONTRAST
Contrast: 0
-1000
.
0
is visible, and 1000
is not on my M300.
Default is 0
.
yes
| no
}
Allow key LEDs to be turned on or off. Default is yes
.
yes
| no
}
If Keylights is set, you can disable the directional pad LED by
setting this value to no
. Default is yes
.
yes
| no
}
If Keylights is set, you can disable the F1 LED by setting this value
to no
. Default is yes
.
yes
| no
}
If Keylights is set, you can disable the F2 LED by setting this value
to no
. Default is yes
.
yes
| no
}
If Keylights is set, you can disable the F3 LED by setting this value
to no
. Default is yes
.
yes
| no
}
If Keylights is set, you can disable the F4 LED by setting this value
to no
. Default is yes
.
yes
| no
}
If Keylights is set, you can disable the F5 LED by setting this value
to no
. Default is yes
.
DURATION
(Advanced) This value controls how long LCDd waits for a key press when
get_key() is called. The value represents microseconds and the default is 500
or .5 seconds. Lowering this value will make LCDd more responsive but also causes LCDd to use
more CPU time and, as the timeout grows shorter, key presses become harder to detect.
Larger values make key presses more reliable if somewhat slow to take effect.
The lcdproc picolcd driver relies upon Mini-Box's usblcd library to setup the USB/HID interface. Unfortunately the usblcd library is very thin and tends to put function results on stdout/stderr instead of in return values. They (Mini-Box) really had scripting interfaces in mind.
The primary example of this is that I had to write a replacement (get_key_events) for usblcd's read_events so that I could get the key presses back to the calling function instead of on stdout. usblcd also has a large number of function shells for which no code exists yet. I am not an expert on HID and USB coding, but if and as time permits and hardware is available I will try and improve this drivers access to the hardware in order to get back data (get_contrast for example) and to potentially drive multiple pcioLCDs at once (or pick the one we want out of many).
To sum up, this driver right now stabs and hopes since response data is lacking.
The hardware also reports key-up events. Normally this would be of no issue (they are usually a 0 or 'no key') except that when keys are used in combonation, the key-up event may actually come back as multiple events depending on how the user released the keys. If the key-up event for a multiple key press comes back as two events, the first up event will actually look like a new key press. The algorithm in get_key tries to deal with this in a sane way and toss out all key-up events for now. The hardware is touchy and both combo key-down and key-up actions may be reported as mutiple events if the user is more than a tenth of a second (maybe less?) off in motions.