- Henning Port Devices Driver Downloads
- Henning Port Devices Driver Download Windows 10
- Henning Port Devices Driver Download Windows 7
- Henning Port Devices Driver Download Win 7
- August 22, 2019 2.9.8
Device driver for all The Imaging Source USB cameras except the 33U, 37U, 38U and AFU auto focus series.
Version
2.9.8
Released
August 22, 2019
Type
ZIP
Filesize
3MB
Requirements
- Intel Core i3 or similar, 2 GB RAM
- USB 3.0 controller
- Graphics card with 24 or 32 bit
- Windows 7 (32 & 64 bit), Windows 8 (32 & 64 bit), Windows 10 (32 & 64 bit)
- DirectX 9.0c or higher
Changelog
- Added several internal interfaces for particular sensors (J003).
- January 25, 2019 2.9.6
Device driver for all The Imaging Source USB cameras except the 33U, 37U, 38U and AFU auto focus series.
Version
2.9.6
Released
January 25, 2019
Type
ZIP
Filesize
3MB
Requirements
- Intel Core i3 or similar, 2 GB RAM
- USB 3.0 controller
- Graphics card with 24 or 32 bit
- Windows 7 (32 & 64 bit), Windows 8 (32 & 64 bit), Windows 10 (32 & 64 bit)
- DirectX 9.0c or higher
Changelog
- Added missing Tonemapping Auto property.
- May 4, 2018 2.9.5
Device driver for all The Imaging Source USB cameras except the 33U, 37U, 38U and AFU auto focus series.
Version
2.9.5
Released
May 4, 2018
Type
ZIP
Filesize
3MB
Requirements
- Intel Core i3 or similar, 2 GB RAM
- USB 3.0 controller
- Graphics card with 24 or 32 bit
- Windows 7 (32 & 64 bit), Windows 8 (32 & 64 bit), Windows 10 (32 & 64 bit)
- DirectX 9.0c or higher
Changelog
- Enabled tonemapping for 8bit video formats, e.g. Y800, RGB24 and RGB32.
- November 21, 2017 2.9.4
Device driver for all The Imaging Source USB cameras except the 33U, 37U, 38U and AFU auto focus series.
Version
2.9.4
Released
November 21, 2017
Type
ZIP
Filesize
3.2MB
Requirements
- Intel Core i3 or similar, 2 GB RAM
- USB 3.0 or USB 2.0 controller (depends upon camera model)
- Graphics card with 24 or 32 bit
- Windows XP, Windows Vista, Windows 7 (32 & 64 bit), Windows 8 (32 & 64 bit), Windows 10 (32 & 64 bit)
- DirectX 9.0c or higher
Changelog
- Repaired not working J003 mono sensor pattern fix on particular video formats.
- This driver version is the last that works in Windows XP.
- January 9, 2017 2.9.3
Device driver for all The Imaging Source USB cameras except the 33U, 37U, 38U and AFU auto focus series.
Version
2.9.3
Released
January 9, 2017
Type
ZIP
Filesize
3.2MB
Requirements
- Intel Core i3 or similar, 2 GB RAM
- USB 3.0 or USB 2.0 controller (depends upon camera model)
- Graphics card with 24 or 32 bit
- Windows XP, Windows Vista, Windows 7 (32 & 64 bit), Windows 8 (32 & 64 bit), Windows 10 (32 & 64 bit)
- DirectX 9.0c or higher
Changelog
- Added a pattern fix for J003 mono sensors.
- January 9, 2017 2.9.1
Device driver for all The Imaging Source USB cameras except the 33U, 37U, 38U and AFU auto focus series.
Version
2.9.1
Released
January 9, 2017
Type
ZIP
Filesize
3.2MB
Requirements
- Intel Core i3 or similar, 2 GB RAM
- USB 3.0 or USB 2.0 controller (depends upon camera model)
- Graphics card with 24 or 32 bit
- Windows XP, Windows Vista, Windows 7 (32 & 64 bit), Windows 8 (32 & 64 bit), Windows 10 (32 & 64 bit)
- DirectX 9.0c or higher
Changelog
- Fixed the driver signature Code 52 error on new Windows 10 v1607 systems.
- January 15, 2016 2.8.9
Device driver for all The Imaging Source USB cameras except the 33U, 37U, 38U and AFU auto focus series.
Version
2.8.9
Released
January 15, 2016
Type
ZIP
Filesize
2.3MB
Requirements
- Intel Core i3 or similar, 2 GB RAM
- USB 3.0 or USB 2.0 controller (depends upon camera model)
- Graphics card with 24 or 32 bit
- Windows XP, Windows Vista, Windows 7 (32 & 64 bit), Windows 8 (32 & 64 bit), Windows 10 (32 & 64 bit)
- DirectX 9.0c or higher
Changelog
- Changed certificates so that the driver can also be installed in Vista.
- November 9, 2015 2.8.7
Device driver for all The Imaging Source USB cameras except the 33U, 37U, 38U and AFU auto focus series.
Version
2.8.7
Released
November 9, 2015
Type
ZIP
Filesize
2.3MB
Requirements
- Intel Core i3 or similar, 2 GB RAM
- USB 3.0 or USB 2.0 controller (depends upon camera model)
- Graphics card with 24 or 32 bit
- Windows XP, Windows Vista, Windows 7 (32 & 64 bit), Windows 8 (32 & 64 bit), Windows 10 (32 & 64 bit)
- DirectX 9.0c or higher
Changelog
- Fixed an error which can appear when using sharpness on older CPUs.
- October 20, 2015 2.8.5
Device driver for all The Imaging Source USB cameras except the 33U, 37U, 38U and AFU auto focus series.
Version
2.8.5
Released
October 20, 2015
Type
ZIP
Filesize
2.3MB
Requirements
- Intel Core i3 or similar, 2 GB RAM
- USB 3.0 or USB 2.0 controller (depends upon camera model)
- Graphics card with 24 or 32 bit
- Windows XP, Windows Vista, Windows 7 (32 & 64 bit), Windows 8 (32 & 64 bit), Windows 10 (32 & 64 bit)
- DirectX 9.0c or higher
Changelog
- Fixed a bug which can appear on LivePause call.
- July 15, 2015 2.8.0
Device driver for all The Imaging Source USB cameras except the 33U, 37U, 38U and AFU auto focus series.
Version
2.8.0
Released
July 15, 2015
Type
ZIP
Filesize
2.4MB
Requirements
- Intel Core i3 or similar, 2 GB RAM
- USB 3.0 or USB 2.0 controller (depends upon camera model)
- Graphics card with 24 or 32 bit
- Windows XP, Windows Vista, Windows 7 (32 & 64 bit), Windows 8 (32 & 64 bit), Windows 10 (32 & 64 bit)
- DirectX 9.0c or higher
Changelog
- Support of DFK ECU010-L34 with serial number property.
- Added tone mapping.
- February 17, 2015 2.7.33
Device driver for all The Imaging Source USB cameras except the 33U, 37U, 38U and AFU auto focus series.
Version
2.7.33
Released
February 17, 2015
Type
ZIP
Filesize
2.4MB
Requirements
- Intel Core i3 or similar, 2 GB RAM
- USB 3.0 or USB 2.0 controller (depends upon camera model)
- Graphics card with 24 or 32 bit
- Windows XP, Windows Vista, Windows 7 (32 & 64 bit), Windows 8 (32 & 64 bit), Windows 10 (32 & 64 bit)
- DirectX 9.0c or higher
Changelog
- The Auto Focus Onepush Running flag now resets correctly after the auto focus has finished.
- February 5, 2015 2.7.32
Device driver for all The Imaging Source USB cameras except the 33U, 37U, 38U and AFU auto focus series.
Version
2.7.32
Released
February 5, 2015
Type
ZIP
Filesize
2.4MB
Requirements
- Intel Core i3 or similar, 2 GB RAM
- USB 3.0 or USB 2.0 controller (depends upon camera model)
- Graphics card with 24 or 32 bit
- Windows XP, Windows Vista, Windows 7 (32 & 64 bit), Windows 8 (32 & 64 bit), Windows 10 (32 & 64 bit)
- DirectX 9.0c or higher
Changelog
- Video format MJPG (2592x1944) of DFK AFU050-L34 camera can now be used.
- January 14, 2015 2.7.31
Device driver for all The Imaging Source USB cameras except the 33U, 37U, 38U and AFU auto focus series.
Version
2.7.31
Released
January 14, 2015
Type
ZIP
Filesize
2.3MB
Requirements
- Intel Core i3 or similar, 2 GB RAM
- USB 3.0 or USB 2.0 controller (depends upon camera model)
- Graphics card with 24 or 32 bit
- Windows XP, Windows Vista, Windows 7 (32 & 64 bit), Windows 8 (32 & 64 bit), Windows 10 (32 & 64 bit)
- DirectX 9.0c or higher
Changelog
- Support for IMX236 based cameras.
- Support for RGB64 color formats.
- Several performance improvements.
- June 6, 2014 2.7.9.1152
Device driver for all The Imaging Source USB cameras except the 33U, 37U, 38U and AFU auto focus series.
Version
2.7.9.1152
Released
June 6, 2014
Type
ZIP
Filesize
2.1MB
Requirements
- Intel Core i3 or similar, 2 GB RAM
- USB 3.0 or USB 2.0 controller (depends upon camera model)
- Graphics card with 24 or 32 bit
- Windows XP, Windows Vista, Windows 7 (32 & 64 bit), Windows 8 (32 & 64 bit), Windows 10 (32 & 64 bit)
- DirectX 9.0c or higher
Changelog
- Added new properties: Brightness, sharpness, de-noise, saturation, hue and contrast.
- Added new property: Highlight reduction.
- Added new property: White balance temperature controls.
- Pixelfix for Y16 cameras now works as expected.
- VideoControl_ExternalTrigger (DirectShow property) can now be set as expected.
- January 1, 2014 2.6.5.1014
Device driver for all The Imaging Source USB cameras except the 33U, 37U, 38U and AFU auto focus series.
Version
2.6.5.1014
Released
January 1, 2014
Type
ZIP
Filesize
1.9MB
Requirements
- Intel Pentium IV or similar, 2 GB RAM
- USB 3.0 or USB 2.0 controller (depends upon camera model)
- Graphics card with 24 or 32 bit
- Windows XP, Windows Vista, Windows 7 (32 & 64 bit), Windows 8 (32 & 64 bit)
- DirectX 9.0c or higher
Changelog
- Fixed missing auto-gain for DFK AFU130.
- Fixed focus when start value is out of auto_focus_range.
- Fixed problem with AUTOFOCUS_ROI_RIGHT: minimum possibly wrong.
- Fixed auto focus ROI not working for 21*UC cameras.
- Fixed crash on load/connect with certain cameras 22/72xUC.
- Fixed previous exposure settings not being loaded on reconnect.
- Complete reworking of internal property system.
- Fixed Windows XP driver load crash.
- Fixed drop counter to be accessible from DirectShow.
- Fixed Windows 8 problem with certain video formats needing converters with standard DirectShow filters (e.g. Y800, capturing to an Y800 avi file was not possible).
- Fixed a problem with Windows 8 usbxhci driver not allowing transfers larger then 4 MB.
- February 26, 2013 2.4.14.851
Device driver for all The Imaging Source USB cameras except the 33U, 37U, 38U and AFU auto focus series.
Version
2.4.14.851
Released
February 26, 2013
Type
ZIP
Filesize
1.9MB
Requirements
- Intel Pentium IV or similar, 2 GB RAM
- USB 3.0 or USB 2.0 controller (depends upon camera model)
- Graphics card with 24 or 32 bit
- Windows XP, Windows Vista, Windows 7 (32 & 64 bit), Windows 8 (32 & 64 bit)
- DirectX 9.0c or higher
Changelog
- WHQL certification.
Since 1985, SIIG Inc. Has led the way in creating IT and AV connectivity solutions you can trust. Built on core values of professional integrity with customer satisfaction as the focus point, our company is committed to providing top-notch service, support, and product. The package provides the installation files for FTDI USB Serial Port Driver version 2.12.16.0. If the driver is already installed on your system, updating (overwrite-installing) may fix various issues, add new functions, or just upgrade to the available version. You should see an open port named 'USB Serial Port' Right click on the 'USB Serial Port' and choose the 'Update Driver Software' option. Next, choose the 'Browse my computer for Driver software' option. Finally, select the driver file named 'FTDI USB Drivers', located in the 'Drivers' folder of the Arduino Software download.
The keyman64 is a programmable keyboard interceptor and hardwarecontrol system for computers equipped with a simple 64-key matrixkeyboard.
It is installed between the keyboard and the computer, continuallyscanning the keyboard matrix and relaying the keyboard state to thecomputer using a crosspoint switch. To the computer, the crosspointswitch matrix looks just like a physical keyboard, while the keyman64gains the ability to intercept keystrokes and control the matrix seenby the computer.
The keyman64 can be configured to intercept special key combinationsand invoke arbitrary sequences of commands to alter the state ofsixteen general purpose control lines provided on the board. Theselines can be used to control additional hardware instead of usingphysical buttons or switches.
Thus the keyman64 eliminates the need to install physical switches orbuttons into the computer case.
Additional features include the ability to send predefined keyboardmacros or to redefine the keyboard layout. Commands can also be sentfrom a remote PC via USB, or send on simple serial wire interface,allowing remote control from either a PC or another microcontroller orsimilar device.
For some concrete examples of what the keyman64 can do, see theconfiguration examples.
Documentation is available in both english and german.
Basic mode of operation
During normal operation, the device simply relays all keyboard eventsto the computer, except when a special key defined as the meta key isheld down. As long as this key is held down, any additional keypresses invoke the user-defined command sequences bound to therespective key. When the meta key is released again, the devicecontinues to relay keyboard events to the computer.
If no special key has been pressed while the meta key was down, apress of the meta key itself is simulated on the matrix seen by thecomputer. This way the meta key is not lost, it can still be pressedas usual in order to type the associated character. The onlydifference is that the computer will notice the simulated key down andup events only after the physical key has been released.
This scheme works well if the meta key only needs to be pressed once,but not if the meta key is supposed to be held down for a longerperiod of time. But this can still be accomplished by using a keycombination invoking the down command for the meta keyitself, for example:
Assuming that the arrow-left key is used as the meta key, this bindingcan be invoked by holding down arrow-left and pressing m
. Thevirtual arrow-left key now appears held down to the computer as longas the physical meta key is kept down. Once the physical meta key isreleased, the device beings scanning and relaying the physicalkeyboard state again, effectively releasing the virtual meta key seenby the computer.
The meta key defaults to the arrow-left key. To change it to adifferent key, use the meta command described below.
Software
A simple commandline configuration and control utility isprovided. Its main purpose is to convert a plain text configurationfile into a binary format. The binary configuration file is flashed tothe Atmegas EEPROM Memory. See Configuration fordetails.
In addition, the utility allows remote control of the keyman64 viaUSB. Arbitrary commands can be send via USB and will be immediatelyexecuted on the keyman64.
Hardware design
The device is based on an Atmega1284p, a crosspoint switch IC and somediscrete 74xx logic ICs. Supported crosspoint switches are theCD74HC22106 or the MT8808 in either DIP or PLCC package. A USB socketis provided to allow easy configuration and firmware updates using aUSB bootloader preinstalled on the Atmega. Please see design documentsin the source distribution and the relevant sections in this documentfor further details.
Compatibility
In theory, the device should work with any computer using a passive8x8 matrix keyboard. However, the layout of the connectors and thekeynames follow those of the C64. Also the type command willuse key combinations specific to the C64 to type the ASCII charactersgiven as the argument. If you need software support for a differenthomecomputer, please feel free to post a feature request on thegithub issue tracker,preferably providing the required information.
- Downloads
- Errata
- Ordering Assembly Kits
- Building the hardware
- Installing the firmware
- Installing the bootloader manually
- Configuring USB devices on the PC
- Installing the configuration and control utility
- Source
- Configuration
- Syntax
- Bits
- Commands for configuration and maintenance
- Commands for modifying control lines
- Commands for controlling the keyboard matrix
- Commands for controlling execution
- Commands for displaying information
- Syntax
- Configuration and control utility
- Transferring the Configuration
- Port expansion
- Serial interface
- Configuration examples
- Switching the kernal and performing a reset
Source
The source distribution includes the sources for the firmware and theconfiguration utility as well asschematics and pcb layouts in KiCadformat for building the hardware.
Latest stable is keyman64-1.6.tar.gz.
All releases can be found under /download/keyman64
Latest developments are available via github:
The Changelog lists all changes in detail.
Binaries
keyman64-1.6.msi
configuration utility, Windows 32-bit installer packagekeyman64-bootloader-updater-1.6.hex
updates the bootloader, suitable when updating from versions prior to 1.4 using the already installed bootloaderkeyman64-application-and-bootloader-1.6.hex
keyman64-application-and-bootloader-1.6.bin
combined images containing both bootloader and application, suitable for use with an external programmerkeyman64-application-1.6.hex
keyman64-application-1.6.bin
contains only the application part of the firmwarekeyman64-gerber-r4.zip
Gerber files for pcb revision 4
Schematics
Revision 3
The USB level conversion circuit is not correct in this and allprevious revisions. This may result in missing USB functionality. Itobviously depends on the specific type of 3.6V zener diodesused. While the diodes I have shipped with revisions 1 and 2 seem tohave worked (more by accident than by design), the ones shipped withrevision 3 boards have failed to work properly, so I have onlydiscovered this error after shipping revision 3.
In order to fix an already assembled board or when assembling theboard, the diodes have to be soldered in like this:
As you can see, the cathodes have to go directly to the D- and D+lines from the USB socket. You can solder them directly to the leadsof the 68Ω resistors, given that you installed them as suggestedby the silkscreen.
This error has been fixed with revision 4
Revision 2
The negative voltage generator ICL7660 is not required, although itdoes not hurt to leave it in. It has been removed in favor of analternative PLCC socket in Revision 3.
Also, the mounting holes added in this revision are 3mm in diameter,which makes them unsuitable for mounting using common self-adhesivepcb holders, which require at least 4mm holes. The holes have beenchanged to 4mm in Revision 3.
I’m offering assembly kits including the keyman64 pcb, the preprogrammed Atmega and all required components (except connection cables) for 30€ each. Worldwide shipping via regular mail isfree of charge.
You can order kits via email athenning.liebenau@protonmail.com
To place an order, please include the word “keyman64” in thesubject. State your full name, your complete international shippingaddress and the number of kits you wish to buy. Note that orders arelimited to a maximum of two kits per person. You will receive an emailcontaining payment information (bank transfer only). You will have topay in advance to confirm your order.
Notes on availability
I try to keep a sufficent number of kits on stock, but please notethat I’m doing all of this in my spare time, on a short budget and aminimal profit margin. My primary motivation is to serve thecommunity, not to run a profitable business.
This means that in case I am currently out of stock, it may take a fewweeks until I can put together a new batch of kits to fullfill yourorder. I may even need to collect a sufficient number of prepaidorders before I can afford to order the necessary parts myself. Inthese cases I will regularily inform you about the status of yourorder. Thus some patience and trust may be required on your part.
Please refer to the list of parts and the placementon board below below.
Power supply
+5V must be supplied to the center pin of J1. You can either supply+5V from the computers main board directly to this pin, or use ajumper bridge to supply power from pin 4 of P1 (the mainboard keyboardsocket) or from the USB socket. To supply power from themainboard socket, bridge the left and center pin of J1. To supply power fromUSB, bridge the center and right pin of J1.
Supplying power from the USB socket is only recommended forstandalone operation of the keyman64, i.e. when P1 it is notconnected to the io ports of a computer and none of the externaldevices connected to the keyman64 are powered from a different source.In general, all devices involved (the computer, the keyman64 and thedevices controlled by it) must be powered from the same source. Forexample, if the keyman64 was configured to source power over USB andthe computer is powered on without the USB cable being connected, thekeyman64 might still sink current over the ESD-protection diodes ofthe Atmels io ports from the io ports of the computer or the externaldevices, which might cause severe damage to any of the io portsinvolved.
Connections
The pin layouts of P1 and P2 follow the layout of the C64 keyboardconnector. The RESTORE line is simply passed through on the board.
List of parts
Reference | Type | Value | Package/RM |
---|---|---|---|
C1 | Ceramic capacitor | 18pF | 2.5mm |
C2 | Ceramic capacitor | 18pF | 2.5mm |
C6 | Ceramic/film capacitor | 100nF | 2.5mm |
C7 | Ceramic/film capacitor | 100nF | 2.5mm |
C8 | Ceramic/film capacitor | 100nF | 2.5mm |
C9 | Ceramic/film capacitor | 100nF | 2.5mm |
C10 | Ceramic/film capacitor | 100nF | 2.5mm |
C11 | Ceramic/film capacitor | 100nF | 2.5mm |
D1 | Zener Diode | 3.6V | DO-204 |
D2 | Zener Diode | 3.6V | DO-204 |
R1 | Precision Resistor | 1k5 | 6.5mm, ∅ 2.5mm |
R2 | Precision Resistor | 68 | 6.5mm, ∅ 2.5mm |
R3 | Precision Resistor | 68 | 6.5mm, ∅ 2.5mm |
P3 | USB Mini-B Socket | - | Through-Hole |
SW1 | Push Button | - | 6x6mm print |
SW2 | Push Button | - | 6x6mm print |
X1 | Quartz Crystal | 16Mhz | HC49/U-S |
U1 | 74HC22106 or MT8808 | - | DIP28 |
U2 | Atmega1284P | - | DIP40 |
U3 | 74HC00 | - | DIP14 |
U4 | 74HC4051 | - | DIP16 |
U5 | 74HC4520 | - | DIP16 |
U6 | 74HC4051 | - | DIP16 |
U7 | 74HC22106 or MT8808 | - | PLCC28 |
For the crosspoint switch you can either use an MT8808 or a 74HC22106, and you can either use U1 for a DIP28 package or U7 for a PLCC28 package version.
When using a 74HC22106, you will have to configure the deviceaccordingly by executing the configuration command using atstartup.
IC-Sockets are not listed.
Placement on board
If you bought an assembly kit from me, the Atmega is alreadyprogrammed with the latest firmware and bootloader versions and isready to use.
Otherwise, if you have no means of initially programming the Atmegayourself then you can send it to me and I will prepare it foryou. Just drop me a line at henning.liebenau@protonmail.com.
Installing the combined firmware image
The easiest way to bootstrap the Atmega is to install the combinedbinary image. The image contains both the bootloader andthe application part of the firmware. If you have a programming devicecapable of programming the complete PROGMEM area from a single binaryimage or intel hex file (e.g. the TL866), use this method.
Note that you also have to check and eventually program the fuses ofthe Atmega as well. The required fuse values are:
This corresponds to the following fuses programmed: SUT1, CKSEL3,SPIEN, EESAVE, BOOTSZ0, BOOTSZ1, BOOTRST, BODLEVEL0, BODLEVEL1. Allother fuses must remain unprogrammed.
Installing the bootloader manually
The Atmega1284p must contain the USBaspLoader, which must be uploadedto the Atmega via ISP prior to installing it on the board.
There is a preconfigured version of the bootloader in the source tarball.
Change to the bootloader
directory and edit the Makefile.inc
andadjust the PROGRAMMER
settings to according to your setup. Thenissue
The Atmega can now be installed on the device. When entering thebootloader, it identifies itself to thehost like this:
16c0:05dc Van Ooijen Technische Informatica shared ID for use with libusb
It can be accessed using avrdude -p m1284p -c usbasp <commands...>
Note that you may need to configure the USBdevices on your systembeforehand.
Entering the bootloader
To manually enter the bootloader, hold down the BOOT Button andpress the RESET button, then release the BOOT button again.
Once the device is installed you can configure a key combination usingthe boot command. For example, by using
you can enter the bootloader simply by pressing <meta>-b
.
You can also just send the boot
command via USB from the PC:
Updating the bootloader
Eventually firmware updates will require an update of the bootloaderalready installed on the device.
For this purpose, an updating application is provided inkeyman64-bootloader-updater-1.6.hex.
To upgrade, connect and power on the keyman64 and enter the existingbootloader, then run
This will overwrite the existing application code (i.e. the keyman64application), run the updater application and thus update the bootloader.
After this, manually enter the bootloader and proceed by reinstallingthe keyman64 application as described in the following section.
Installing and updating the firmware
Once the Atmega is equipped with a USB bootloader the application partof the firmware can be installed with the following command:
If you have build the firmware from source you can use the program
target of the toplevel Makefile as well.
Since version 1.4 the firmware can also be updated using the update
command:
This will automatically enter the bootloader and update the firmware.
Since version 1.5 the update
command also accepts firmware images inIntel HEX format. The file extensions .bin
and .hex
are recognizedand determine the respective file format.
Since version 1.6 the update
command accepts a configuration file asan optional second argument. If a configuration file is specified, theupdate command will first disable the existing configuration on thedevice, then update the firmware and finally recreate and flash theconfiguration from the specified file to the device. This is requiredfor updates which change the binary configuration format. If thisprocedure is necessary, it will be explicitly stated in the releasenotes and Changelog.
The keyman64 implements two separate USB devices, a remote controldevice and a bootloader device.
During normal operation, the remote control device will be active andaccessible from the PC using the configuration and controlutility. This device will identify itself to the host using thefollowing properties:
Vendor | OpenMoko, Inc. |
Manufacturer | Henning Bekel |
Device | Keyman64 |
Vendor ID | 1d50 |
Product ID | 60e9 |
While in bootloader mode, the bootloader device will be accessiblefrom the PC. This device will identify itself to the host using thefollowing properties:
Vendor | Van Ooijen Technische Informatica shared ID for use with libusb |
Manufacturer | www.fischl.de |
Device | USBasp |
Vendor ID | 16c0 |
Product ID | 05dc |
Linux
On Linux, the required udev rules are installed alongside theconfiguration and control utility. After installation, issue
When in bootloader mode, the bootloader device will be symlinked to/dev/usbasp
. During normal operation, the keyman64 control devicewill be symlinked to /dev/keyman64
. These symlinks are created withfile permissions 0666
, allowing access for any user.
Windows
Once you connect one of the usb devices for the first time, Windowswill insist on trying to download and install a driver for thesedevices. Since both devices are general purpose USB devices, this isfutile, since there simply are no drivers for windows to install. Youmust abort the windows driver installation dialog to prevent windowsfrom permanently marking the device as unusable due to its perceivedlack of “proper” drivers.
Instead, use the Zadig tool to generate andinstall minimal drivers that simply associate the devices with thesubsystems required for general purpose access.
Run Zadig, connect the usb cable to the keyman64 and power up thedevice. Zadig should now detect the Keyman64
device. Install theWinUSB driver for this device.
Now enter the bootloader. The Zadig toolshould now detect the USBasp
device. For use with the keyman64client, install the WinUSB driver for the bootloader device. For usewith avrdude
, install the libusb-win32 driver for this device. Inthis case, also make sure that the libusb0.dll
is present on yoursystem (it should come with avrdude). If not, follow the link forlibusb-win32 shown in the “More information” section of the Zadigwindow and install libusb-win32 on your system.
Binary
For the windows version, use the binary installerpackage. This will also install the requiredlibusb-1.0.dll. The installation directory will be added to yourPATH
environment variable.
Source
Linux & MacOSX
libusb-1.0
and corresponding development packages (if any) need tobe installed on your system.
Extract the tarball, change to the source directory and type make
.
Use make install
to install the keyman64
binary into/usr/local/bin
. The PREFIX
variable can be used to install with adifferent prefix, e.g. use make PREFIX=/usr install
to install into/usr/bin
instead. The DESTDIR
variable can be used for a stagedinstall.
On linux, the udev rules required for the USB devices will beinstalled to /etc/udev/rules.d
as well. As root, run
after installation.
Windows
If you’re using cygwin you can build a windows binary in the same wayas under Linux or MacOSX. The required packages are libusb-1.0
andlibusb-1.0-devel
. Note that the resulting binary will still needcygwin dlls to be present.
A native win32 binary can be build using mingw32 under Linux orCygwin. If necessary, edit the Makefile
and adjust the MINGW32
variable to the proper prefix for your toolchain. Then use makewin32
to build keyman64.exe
.
The configuration file is a plain text file containing configurationcommands and keybindings in a human readable format. Using thekeyman64 utility this file is converted to a binary format which canbe flashed into the EEPROM memory of the Microcontroller. SeeTransferring the configuration.
Syntax
Whitespace and comments
Empty lines as well as leading and trailing whitespace characters areignored. Whitespace is only significant to separate individual tokensand keywords.
Comments begin with a hash character #
and continue for theremainder of the current line.
Keywords
All keywords, like command and key names, as well as user definedsymbols are case-insensitive. E.g. CLEAR
is equivalent toclear
, SPACE
is equivalent to space
and so on.
Commands and bindings
Each line must contain one command specification, optionally prefixedby a key specification:
[<key>:][<policy>] <command> [<arguments>]
If no key specification is given, the command will be executed onpowerup/reset of the microcontroller, and can thus be used toconfigure the initial state of the device.
If a key specification is given, the command will be bound to thespecified key.
If multiple commands are bound to the same key, the commands will beexecuted in sequence, in the order in which they appear in theconfiguration file.
Command sequences can also be bound to “slots” by using numeric keyspecifications between $40
and $F9
. These command sequences cannot be invoked directly by a key combination, but may be invokedindirectly via the exec command.
The optional policy argument can be set to either 0
or 1
, meaningeven or odd. If even, the command will only be executed on the second,fourth, sixth etc. time the key is pressed. If odd, the command willonly be executed on the first, third, fifth etc. time the key ispressed.
Keynames
Keys can be specified by using literal key names like DEL
, A
,RUNSTOP
or ONE
. To obtain a list of valid key names and theirsynonyms, run keyman64 --keys
.
Keys may also be specified by number, denoting the key position in theC64 keyboard matrix. Keys are numbered from left to right, from row 0,column 0 down to row 7, column 7.
Thus $00
corresponds to the DEL
key, $3f
denotes the RUNSTOP
key.
Key numbers may be given in decimal or hexadecimalnotation. Hexadecimal numbers must be prefixed with a dollar sign $
or the literal string 0x
.
Ports
The sixteen control lines are organized into two 8-bit wide ports. Forcommands modifying the state of these control lines, the respectiveport can be specified using the keyword port
, followed by theliteral string a
or b
:
port [a|b]
Bits
Commands modifying the state of the control lines can be limited toindividual bits or ranges of successive bits. Bits are denoted by adecimal number in the range 0-7.
bit <n>
bits <s>-<e>
Where n
denotes an individual and s
and e
denote the start andend bit of a bitrange (inclusive).
Short notation for ports and bits
As of version 1.6 control lines and ranges of control lines can bespecified with a short notation combining the existing notations forports and bits:
<port>[[<s>][-<e>]]
Thus expressions like port a bit 3
or port b bits 0-2
can be shortenedto a3
or b0-2
respectively.
Durations
Durations can be specified by a series of decimal values and unit specifiers:
[<n><unit>...][<n>]
Available unit specifiers are d
, h
, m
, s
, ms
for days,hours, minutes, seconds and milliseconds respectively. If no unitspecifier is given, the preceding value is interpreted asmilliseconds.
The maximum possible duration is 232 milliseconds, about 49days. Specifications that exceed this value will be truncatedaccordingly.
Examples:
1m30s
= one minute and thirty seconds
1s500
= one second and fivehundred milliseconds
10
= ten milliseconds
Values
Values can be specified in hexadecimal or binary notation. Hexadecimalvalues need to be prefixed with $
. Binary values need to be prefixedwith %
Symbols
Custom symbols can improve the readability of the configurationfile. They are defined using simple name/value pairs.
<name> = <value>
Symbol names must consist of alphanumeric characters, digits andunderscores only. If a symbol name equals one of the reserved key orcommand names, a corresponding error message will be issued.
Once a symbol has been defined, any subsequent occurrence is replacedby its literal value. If a symbol is used before it is defined, anerror message will be generated.
For example, this configuration
can be made easier to read and change:
Commands for configuration and maintenance
using
using <8808|22106>
Specify which crosspoint switch IC is installed in the device. Eithera CD74HC22106 or an MT8808 may be used. Default is 8808
.
speed
speed <fast|slow>
Specify the speed at which the keyboard matrix is scanned. Fast modeis the default and should work well in most setups. Slow mode isrequired when the length of the cable is significantly longer than thestock keyboard cable, e.g. when installing the device in a CommodoreSX64.
Note that selecting slow mode will not impact the responsiveness ofthe keyboard in any way. Both modes are still quite fast in scanningthe keyboard.
expand
expand ports=<n> clock=<line> data=<line> latch=<line> enable=<line>
Configures a port expansion of <n> daisy chained 74595 serialshift registers, where the CLOCK, DATA, LATCH and ENABLE lines of thefirst shift register in the chain are connected to the respectivenative port lines.
Note that in this case the port lines need to be specified in shortnotation.
See port expansion for details.
meta
meta <key>
The meta command defines the meta key to be used. Default is ARROWLEFT
.
boot
boot
Enter the bootloader and expect configuration or firmware updates viaUSB. The device will remain bootloader mode until a new configurationor firmware has been programmed or the reset button has been pressed.
When sending the boot command via the remote USB interface, e.g. byexecuting keyman64 boot
on the PC, the firmware will immediatelyjump into the bootloader without properly terminating the current USBcommunication properly, which will result in the followingnon-critical error message:
This message can be ignored as long as the AVR has successfullyentered the bootloader.
save
save
Permanently saves the current state of the control lines toeeprom. This state can be restored later using the restorecommand.
restore
restore
Restore the state of the control lines that were stored in eeprom by apreceding save
command. If no state has been saved before, alllines are set to tristate.
memorize
memorize
Temporarily memorize the current state of the control lines toRAM. This state can be restored later using the recallcommand.
recall
recall
Restore the state of the control lines that was stored in ram by apreceding memorize
command. If no state has been memorized before,all lines are set to tristate.
Commands for modifying control lines
set
set <port> [<bits>] [to <value>]
Sets the specified bits of the specified port to the specified value.If value is omitted, it defaults to setting all bits to 1 (high). Ifbits are omitted, sets all bits of the specified port.
Examples:
set port a bit 3 to 1
– sets bit 3 of port a to high
set port b bits 3-4 to 2
– sets bit 3 to low and bit 4 to high on port b
set port a
– sets bits 0-7 to high
clear
Henning Port Devices Driver Downloads
clear <port> [<bits>]
Clears the specified bits of the specified ports, i.e. sets them to 0(low). If bits are omitted, clears all bits of the specified port.
tristate
tristate <port> [<bits>]
Tristates the specified bits on the specified port. If bits areomitted, tristates all bits on the specified port.
Tristating a line means setting it to a high-impedance state which isneither high nor low. This is equivalent to physically disconnectingthe line.
invert
invert <port> [<bits>]
Inverts the state of the specified bits on the specified ports. Ifbits are omitted, inverts all bits of the specified port. If a bithas been set to tristate beforehand, it will be set to output high.
increment
increment <port> [<bits>]
Increment the state of the specified bits on the specified port byone. If bits are omitted, increments the state of all bits on thespecified port.
This can be used to implement a binary counter on a port or a specificbit range on a port. If all bits are already set (e.g. the counter hasreached its maximum) then all bits are cleared again.
Example of a four-bit binary up-counter in the lower part of port a:
increment port a bits 0-3
decrement
decrement <port> [<bits>]
Decrements the state of the specified bits. Works similar to theincrement
command.
Commands for controlling the keyboard matrix
down
down <key>
Holds down the key on the matrix seen by the computer. The key willremain held down until an up
command for the key is executed or themeta key is released.
up
up <key>
Releases the specified key on the matrix seen by the computer. The keywill remain released until a down
command for the key is executed orthe meta key is released.
press
press <key>
Presses the specified key on the matrix seen by the computer, i.e. thekey is held down for 20 milliseconds and then released again. This isa shortcut for
type
type <string>
Types the specified string on the matrix seen by the computer. Toinsert a press of the RETURN key, add the escape sequence r
.
Lower case ASCII characters will cause the corresponding key to bepressed without modifiers. Upper case and special characters will bepressed in conjunction with the required modifier to type the correctcharacter.
To type PETSCII characters that are not present in the ASCII characterset, you can simply use the ASCII character at the respective positionin the ASCII table. For example, the pound symbol, which is atposition 92 in the PETSCII table, can be specified by using thecorresponding ASCII backslash character.
Alternatively, any PETSCII character can be typed by inserting itusing a numeric escape sequence, specified in either decimal orhexadecimal notation:
In addition, the following escape sequences are predefined:
Note that the keyman can only type those characters that can actuallybe typed on a real C64 keyboard. This excludes the PETSCII-codes forexplicitly setting the character set (upper or mixed case, codes 14and 142) and for locking/unlocking manual switching of character sets(codes 8 and 9).
Example (on the C64):
type load'*',8,1r
– types LOAD'*',8,1
and presses RETURN
swap
swap <key> <key>
Swaps the specified keys against each other before relaying them tothe computer. This can be used to redefine the keyboard layout,e.g. to switch to a QWERTZ layout on the C64:
swap Z Y
Note that this applies only to the keys relayed to the computer, notto the keys interpreted as a part of a key binding. Commands bound tothe physical key Z
can still be invoked by pressing <meta>-Z
inthis example.
map
map <port> <bit> to <key>
Maps the specified control pin to a key. The control pin becomes anactive-low input pin and will hold down the specified key when low.
Note that once mapped, a pin should not be modified by other commandsin any way.
password
password
Interactively set the password used for unlocking the keyboard afterit has been locked using the lock command. The C64 needs tobe in direct mode for this as the keyman prompts for the password bysimply typing on the keyboard.
The password needs to be entered twice. If both passwords match, thepassword is permanently stored in EEPROM memory.
Henning Port Devices Driver Download Windows 10
To clear the password, simply enter an empty password, i.e. hit returntwice.
lock
lock
If a password has been set using the password command,the keyboard will be locked and no keys will be passed through to thecomputer until the user enters the correct password followed byRETURN.
Any commands bound to the virtual key LOCKED will be executed beforelocking the keyboard. Likewise, any commands bound to the virtual keyUNLOCKED will be executed before unlocking the keyboard again.
Commands for controlling execution
exec
exec <key>|<slot>
Executes the command sequence bound to the specified key or slotnumber. Execution of the current command sequence will resume afterthe specified sequence has been executed.
sleep
sleep <duration>
Suspend execution of the current command sequence for the specifiedduration. No keyboard processing will occur during sleep, e.g. keypresses will neither be relayed nor interpreted as bindings.
requires
<key>: requires <n>
This directive instructs the keyman to execute the command sequencebound to the respective key
only after n
consecutive presses ofthe key have been registered while the meta key is being held down.
This is useful to protect against accidental executions of adisruptive action, such as resetting the machine while having unsavedchanges in an editor. For example, the following reset sequencerequires three presses to execute:
This only applies to interactive use, i.e. exec r
will still run theabove sequence immediately.
Commands for displaying information
version
version
Types out the current firmware version and build date. Note that theC64 has to be in direct mode for the text to appear on screen.
status
status
Types out the current state of the control lines. Note that the C64has to be in direct mode for the text to appear on screen.
The state of the control lines will be displayed similar to this:
Where 0 is low, 1 is high and X is tristate.
$ keyman64 --help
Transferring the Configuration
Version 1.4 and later
As of version 1.4 the configuration file can be converted and flashedto the keyman64 in one step using the configure
command:
This will parse the configuration file keyman64.conf
, convert it toa binary format and transfer it to the Atmega’s eeprom memory. Whenfinished, the keyman64 will be reset and the new configuration shouldbecome effective.
The previous method described below can still be used alternatively.
Versions prior to 1.4
The convert
command of the configuration and control utility is usedto convert the configuration file to a binary format which can then bewritten to the Atmega1284p’s EEPROM memory over USB.
Assuming you have written a configuration file named keyman64.conf
,you can convert it using
If no errors are encountered this results in the filekeyman64.bin
.
Make the keyman64 enter the bootloader.
Then use avrdude
to write the configuration to the EEPROM memory:
After the configuration has been transfered, the keyman64 will resetand the new configuration should be in effect.
Please note that the bootloader will reset the AVR immediately afterthe update operation has completed, even before the current USBcommunication between the bootloader and avrdude has beencompleted. This results in the following non-critical error messagefrom avrdude:
This message can be ignored as long as avrdude reports that it hassuccessfully written and verified eeprom contents.
Preserving saved state when updating the configuration
Note that the –preserve option is no longer necessary in versions 1.5and later, since saved state is no longer overwritten when transferringa new configuration.
If the current eeprom contains a saved control state, this state willbe lost if a new binary configuration is created using the convert
command, since the eeprom will be flashed with new values.
In order to preserve a saved state, the --preserve
option may beused in conjunction with the convert
command. The utility will thentry to obtain the currently saved state of the control lines via USBand insert this state into the newly created binaryconfiguration. Thus the device has to powered up and connected viaUSB.
Note that when using the configure
command described above, anysaved state will be preserved automatically.
Remote control
Any command can be send from the PC via USB to the keyman64, where itwill be executed immediately.
A single command can be executed by passing it directly on thecommandline, e.g.
If no arguments are specified on the commandline, the keyman64 utilitywill read commands from STDIN, where one command can be given on eachline. Note that the commands will get parsed and executed after STDINhas been closed, e.g. all commands have been entered/piped in:
If the first argument to the keyman64 utility is a file, commands willbe read from this file and subsequently sent to the keyman64.
Thus you can create a file containing a script like the following:
and run this script via
The --delay
option will add an additional delay of 250ms after eachcommand. This avoids having to add explicit sleep
commands in thescript.
On Linux and MacOSX, the she-bang mechanism can be used to create anexecutable script. Just make the script executable and add anappropriate she-bang line at the top, e.g.
then chmod +x
the script and you can execute it like any othercommand.
As of version 1.6 the number of available control lines can beexpanded by connecting one or more daisy chained 74595 serial shiftregisters. Four of the existing control lines need to be connected tothe first (or only) 74595, while each 74595 added to the chain willadd another 8-bit control port.
The 74595 is available on easily chainable breakout boards fromvarious sources, for example the Artekit shop offers a breakoutboardwell suited for this purpose.
The expand configuration directive is used to tell thekeyman64 about the number of available additional ports and which ofits native control lines are connected to the required pins of thefirst shift register. Once configured, the expanded ports will belabeled alphabetically beginning with the letter “c”. They can be usedjust like the existing ports a and b in other configuration directivesand commands.
The expand directive names the required shift register pins as CLOCK,DATA, LATCH and ENABLE. Depending on the datasheet or breakout-boardused, these pins may be named differently:
Keyman64 | 74595 pin number | Description | Other common names on breakout-boards or in datasheets |
CLOCK | 11 | shift register clock input | CLK, SCK, SHCP, SRCLK |
DATA | 14 | serial data input | DS, SER, SER-IN |
LATCH | 12 | storage register clock input | STCP, RCLK |
ENABLE | 13 | output enable input (active low) | OE, EN |
RESET | 10 | serial clear input (active low) | MR, CLR, SRCLR |
The ENABLE and RESET signals should be pulled up via a 4.7kresistor. (This is already the case for the artekit board linkedabove).
Henning Port Devices Driver Download Windows 7
When the keyman starts up, all expanded ports will be initiallytristated. Once any of the expanded port lines is set or modified by acommand, all registers will be enabled, and all port lines whose statehas not explicitly defined yet will be driven low by default.
Note that the virtual ports cannot be used as inputs and cannot be putinto tristate, thus the commands map and tristateare not allowed to be used with expanded port lines. The configurationutility will issue an appropriate error message in this case.
Example
This illustration shows how to wire one or more 74595 breakoutboards. Here the lower four control lines of port b are connected to the74595.
The corresponding expand directive for using two additional ports is thus:
Any command following this directive in the configuration file can nowrefer to the additional ports as ports c and d, e.g.
The P4 connector offers a simple serial interface allowing remotecontrol of the keyman64 by external hardware. The left pin providesthe input for an active-low clock signal (denoted as /CLK on theboard). The right pin provides the data input (denoted DATA). On thefalling edge of the clock signal the value present on the data inputis transferred to the keyman64.
Each command consists of a command-byte, followed by one or moreargument bytes. Bytes are transferred individually in little-endianorder, i.e. the least significant bit is send first. For example, topress RUNSTOP
, the actual command looks like this:
00000100 00111111
=> 0x4 (command) 0x3f (argument)
but must be transferred like this:
00100000 11111100
=> command, then argument, both lsb first.
The following commands are available:
00000001 <key>
: execute command sequence bound to key or slot number00000010 <key>
: hold the specified key down00000011 <key>
: release the specified key00000100 <key>
: press the specified key (down for 20ms, release)00000101 <pin> <key>
: (re)map the specified pin to the specified key00000111 <code>
: type the specified PETSCII code
The pin for the map command is denoted by bits 0-2 and the port isdenoted by bit 3 (low = port a, high = port b).
Note that if a key is held down via the serial interface it willremain in this state until explicitly released via the serialinterface again. The state of the physical key will be ignored duringthis time.
Connecting the Serial interface to the C64
One possible way of using the serial interface is to connect it to theC64 via bits 3 and 4 of the 6510 IO port. These are available as“Cassette Sense” and “Cassette Write” at the tapeport (assuming youdon’t use the tapeport for anything else). “Cassette Sense” will beused as the /CLK signal and “Cassette Write” as the DATA signal.
The source distribution contains the file serial.h
and serial.asm
in KickAssembler3 format. These files can be used to issue serialcommands from the C64 using the 6510 IO port.
For example, the following code will execute the command sequencebound to <meta>-RUNSTOP
:
Switching the kernal and performing a reset
Let’s assume you have a dual-kernal adapter installed in yourC64. These adapters usually come with a switch that controls thehighest address line of the eprom and thus chooses the kernal that isseen by the C64. You are expected to drill a hole in your C64 case toinstall the switch.
Using keyman64 you can avoid drilling a hole in your precious case.
Simply remove the switch and connect the highest address line of theeprom to one of the 16 control lines of the keyman64. For thisexample, we’ll assume that we’re using the highest line of the firstcontrol port (port a bit 7
).
Create a configuration file with the following contents:
Convert and transfer it using the keyman64
command line tool:
After the configuration is written, the keyman64 will reset. First itexecutes any command not bound to a key. This allows us to set theinitial state of the control lines. In this case, all lines areinitially pulled low using the clear
command).
Henning Port Devices Driver Download Win 7
Now the key combination <meta>-k
will invert the state of theeprom address line, effectively switching back and forth between thetwo kernal images on each invocation.
While this does the job on the hardware level, it might still causethe C64 to crash, since you might swap the kernal contents whilekernal code is being executed. So it would be nice to also reset theC64 after switching the kernal rom.
We’ll connect the C64 reset line to the first line of the firstcontrol port and change the configuration to:
Now if we press <meta>-r
, the reset line will be driven from tristateto low for 10 milliseconds and is then tristated again, effectivelycausing the C64 to reset.
And if we press <meta>-k
, the kernal will be switched just likebefore, but then the reset sequence bound to <meta>-r
will beexecuted in addition.
Thus we can switch the kernal and immediately reset the C64 simply bypressing <meta>-k
instead of having to turn off the C64, flip aswitch and turn the C64 back on every time we want to change thekernal.
Holding down a key during reset
Some expansion port modules execute special functions when a key isheld down during reset. Things like this can be simulated as well. Thefollowing binding performs a reset while holding down the RUNSTOP
key:
Defining keyboard macros
The type
command can be bound to a key as well:
Now pressing <meta>-d
will type load'$',8<return>
. The r
escape sequence denotes a newline in this context.
Remapping the keyboard
The swap
command can be used to virtually swap two keys on thekeyboard. For example, to change the keyboard layout to QWERTZ, just add
to your configuration.
If you want to switch between both layouts on the fly, you can simplybind the swap command to a key:
Copyright (C) 2016 Henning bekel <h.bekel@googlemail.com>
Hardware licensed under CERN OHL v.1.2, see ./hardware/LICENSE.txt
Software and firmware licensed under GNU GPLv3, see ./LICENSE
The software contains MIT licensed code fromhttps://github.com/arkku/ihex for reading Intel HEX files, copyright(C) 2013-2015 Kimmo Kulovesi, see ./intelhex/LICENSE
The firmware contains the V-USB Driver (https://www.obdev.at/vusb),(C)2008 Objective Development GmbH.
Distributed in the./bootloaderdirectory is the USBasp bootloader, (C)2013 Stephan Baerwolf(matrixstorm@gmx.de) and (C)2008 Objective Development GmbH(https://www.obdev.at/vusb).
In compliance with the terms of the (identical) V-USB driver andUSBasp bootloader licenses (./firmware/usbdrv/License.txt and./bootloader/License.txt, the entire project is published under
In addition, this distribution contains
- a circuit diagram in PDF format, see ./hardware/keyman64-schematics.pdf
- the full source code for the host software in ./firmware
- a README file in ASCII format which describes the purpose of the project and what can be found in which directories and which files
- references to (https://www.obdev.at/vusb)
The USB Product and Vendor IDs for the Keyman64 USB device have kindlybeen provided by OpenMoko, Inc (http://openmoko.org).