Henning Port Devices Driver Download

  • 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

    1. 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

    1. 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

    1. 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

    1. Repaired not working J003 mono sensor pattern fix on particular video formats.
    2. 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

    1. 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

    1. 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

    1. 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

    1. 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

    1. 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

    1. Support of DFK ECU010-L34 with serial number property.
    2. 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

    1. 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

    1. 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

    1. Support for IMX236 based cameras.
    2. Support for RGB64 color formats.
    3. 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

    1. Added new properties: Brightness, sharpness, de-noise, saturation, hue and contrast.
    2. Added new property: Highlight reduction.
    3. Added new property: White balance temperature controls.
    4. Pixelfix for Y16 cameras now works as expected.
    5. 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

    1. Fixed missing auto-gain for DFK AFU130.
    2. Fixed focus when start value is out of auto_focus_range.
    3. Fixed problem with AUTOFOCUS_ROI_RIGHT: minimum possibly wrong.
    4. Fixed auto focus ROI not working for 21*UC cameras.
    5. Fixed crash on load/connect with certain cameras 22/72xUC.
    6. Fixed previous exposure settings not being loaded on reconnect.
    7. Complete reworking of internal property system.
    8. Fixed Windows XP driver load crash.
    9. Fixed drop counter to be accessible from DirectShow.
    10. 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).
    11. 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

    1. WHQL certification.
Keyman64 Rev.4

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
  • 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 package

  • keyman64-bootloader-updater-1.6.hex
    updates the bootloader, suitable when updating from versions prior to 1.4 using the already installed bootloader

  • keyman64-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 programmer

  • keyman64-application-1.6.hex
    keyman64-application-1.6.bin
    contains only the application part of the firmware

  • keyman64-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

ReferenceTypeValuePackage/RM
C1Ceramic capacitor18pF2.5mm
C2Ceramic capacitor18pF2.5mm
C6Ceramic/film capacitor100nF2.5mm
C7Ceramic/film capacitor100nF2.5mm
C8Ceramic/film capacitor100nF2.5mm
C9Ceramic/film capacitor100nF2.5mm
C10Ceramic/film capacitor100nF2.5mm
C11Ceramic/film capacitor100nF2.5mm
D1Zener Diode3.6VDO-204
D2Zener Diode3.6VDO-204
R1Precision Resistor1k56.5mm, ∅ 2.5mm
R2Precision Resistor686.5mm, ∅ 2.5mm
R3Precision Resistor686.5mm, ∅ 2.5mm
P3USB Mini-B Socket-Through-Hole
SW1Push Button-6x6mm print
SW2Push Button-6x6mm print
X1Quartz Crystal16MhzHC49/U-S
U174HC22106 or MT8808-DIP28
U2Atmega1284P-DIP40
U374HC00-DIP14
U474HC4051-DIP16
U574HC4520-DIP16
U674HC4051-DIP16
U774HC22106 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 programtarget of the toplevel Makefile as well.

Since version 1.4 the firmware can also be updated using the updatecommand:

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:

VendorOpenMoko, Inc.
ManufacturerHenning Bekel
DeviceKeyman64
Vendor ID1d50
Product ID60e9

While in bootloader mode, the bootloader device will be accessiblefrom the PC. This device will identify itself to the host using thefollowing properties:

VendorVan Ooijen Technische Informatica shared ID for use with libusb
Manufacturerwww.fischl.de
DeviceUSBasp
Vendor ID16c0
Product ID05dc

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 MINGW32variable 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 RUNSTOPkey.

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.

Henning Port Devices Driver Download

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 convertcommand, 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:

Keyman6474595 pin numberDescriptionOther common names on breakout-boards or in datasheets
CLOCK11shift register clock inputCLK, SCK, SHCP, SRCLK
DATA14serial data inputDS, SER, SER-IN
LATCH12storage register clock inputSTCP, RCLK
ENABLE13output enable input (active low)OE, EN
RESET10serial 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.

Henning Port Devices Driver Download

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 number
  • 00000010 <key> : hold the specified key down
  • 00000011 <key> : release the specified key
  • 00000100 <key> : press the specified key (down for 20ms, release)
  • 00000101 <pin> <key>: (re)map the specified pin to the specified key
  • 00000111 <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.asmin 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 RUNSTOPkey:

Defining keyboard macros

The type command can be bound to a key as well:

Now pressing <meta>-d will type load'$',8<return>. The rescape 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).