Git Product home page Git Product logo

controller's Introduction

The Kiibohd Controller

This is the main Kiibohd Firmware. In general, this should be the only git repo you need to clone. The KLL compiler is automatically retrieved during the build process and will warn you if your KLL compiler is too old.

Please refer to the KLL repo or kiibohd.com for details on the KLL (Keyboard Layout Language) Spec.

GitHub Action Status GitHub Action Status Release Environment Total alerts Language grade: Python Release Version

Visit our IRC channel

Visit our Discord Channel

--> Wiki <-- If you have questions start here

Official Keyboards

The Kiibohd firmware supports a lot of other keyboards, but these are more obscure/custom/lesser known.

Compilation

Compilation is possible and tested on Windows/Linux/macOS. However, the recommended method is using a Dockerfile.

Then, once you have a docker environment, you can select a build script here.

To compile natively for your platform, refer to the wiki.

Supported Microcontrollers

Adding support for more microcontrollers is possible. Some considerations for minimum specs:

  • ~16 kB of SRAM
  • ~64 kB of Flash

It's possible to port chips with lower specs, but will be more effort and have fewer features.

Modules

           +------------------------------------------------+
           |     Lib                              Debug     |
           +------------------------------------------------+

           +-------------+  +-------------+  +--------------+
Input +---->    Scan     +--+    Macro    +--+    Output    +----> Output
Data       | +---------+ |  | +--------+  |  |              |      Data
           | | Devices +------+ Pixels |  |  |              |
           | +----+----+ |  | +--------+  |  |              |
           +------|------+  +-------------+  +--------------+
                  |
                  v

               Hardware
               Control

General Code can be found in Lib.

KLL

KLL Overview

Bootloader

A custom bootloader (based off of McHCK) is available. This is only necessary when assembling a keyboard with a blank MCU or if you're attempting to re-flash your bootloader (requires external tools).

Bootloader

Contributions

Contributions welcome!

  • Bug reports
  • Documentation and Wiki editing
  • Patches (including new features)

Licensing

Licensing is done on a per-file basis. Some of the source code is from PJRC/Teensy, other source code is from the McHck Project. Code written specifically for the Kiibohd Controller use the following licenses:

  • MIT
  • GPLv3
  • Public Domain

controller's People

Contributors

9ary avatar aclowes avatar acn-adammclark avatar akatrevorjay avatar bkerley avatar cryham avatar dankm avatar haata avatar iwanders avatar jbondeson avatar jceaser avatar jlsalvador avatar joshuaflanagan avatar kevinfrei avatar kkoltzau avatar lekashman avatar mattventura avatar mythmon avatar ntietz avatar ovahkeel avatar paol avatar parak avatar patrickdepinguin avatar r4v5 avatar ryansb avatar smasher816 avatar stephengroat avatar stephengroat-dd avatar timgates42 avatar victorluft avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

controller's Issues

Fix UNKNOWN name in dfu bootloader

dfu-util --list
dfu-util 0.8

Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2014 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to [email protected]

Found DFU: [1c11:b007] ver=0000, devnum=19, cfg=1, intf=0, alt=0, name="UNKNOWN", serial="mk20dx128vlf5"

This is non-upgradeable code. But this should just be a cosmetic fix.

Feature Request: Triggers for *exact* response

Current behaviour:
"Alt"+"A":"B" becomes "Alt"+"A"+"B"
"Alt"+"Shift"+"A":"CMD"+"B" becomes "Alt"+"Shift"+"A"+"CMD"+"B"

What it should be:
"Alt"+"A":"B" becomes "B" (Alt cancelled and re-instated later on)
"Alt"+"Shift"+"A":"CMD"+"B" becomes "CMD"+"B" (Alt+Shift cancelled + re-instated later on)

In this scenario, an old "Alt"+"A":"B" would be replaced by "Alt"+"A":"Alt"+"B" - so this feature would extend what's possible with triggers

What I'm ultimately saying is, triggers just trigger additional actions, yet there is a need for altering behaviour to create pure modification combos

I want "Shift"+"Esc":"~" to become a Tilde, yet the "Esc" is never cancelled, messes up in the Terminal
I also want to merge my function layer with the Command modifier, so Command+C should be Copy, yet Command+[ should be F14 (Command modifier cancelled with a custom exact trigger and F14 sent instead)

None of these are possible with the current feature set
I'm actually not asking for the current behaviour to be changed, however there should be a specific feature for what I'm asking, a new syntax element / trigger type maybe


If the firmware would allow manual key_up and key_down controls for example
"Alt"+"Shift"+"A":"A_cancel"+"Shift_keyup"+"Alt_keyup"+"CMD"+"B"+"Alt_keydown"+"Shift_keydown"
would achieve what I want (on second thought, the A has to be cancelled, edited)

Yet it's probably better to add a feature that will do this more simply and automatically

Will this work with Atmega32a?

I'm attempting to find a replacement firmware for my FaceW pcb (to replace ps2avru). Problem is, it requires software USB support and I'm not sure if kiibohd has that built in.

Thanks!

SYS/CON codes from KLL doesn't work

I hope I'm missing something obvious but the SYS/CON definitions doesn't work

U"P" : CON”Play”;

For example

The Consumer/System code table is impressive, can't wait to try them, yet couldn't figure out how to do it yet

readLEDs reporting incorrect values

I've wired up and configured my keyboard with a Teensy 3.1, and I was hoping I could come up with a hack to enable a numpad layer (it's a Truly Ergonomic, was a hell to mod but the original controller was fried) when numlock is on.
Still haven't wired the status LEDs but it looks like the controller is not updating the LED register value properly as readLEDs always returns the value the LEDs had when plugging the keyboard in.
I have a Logitech keyboard hooked up to the same machine and the LEDs behave properly on that. I'm running Arch 64 bit and I'm affected by #58. Happens both in X11 and in the virtual console. Just tested on Windows 10 on the same machine, same issue there.

Ubuntu LTS 14.04 Serial Terminal Blank

Ubuntu LTS 14.04 has an issue with the Virtual Serial Port

screen /dev/ttyACM0

Terminal will accept commands, but will not show any text. It is likely an issue with either the kernel or some external program Ubuntu uses. This is likely fixable through changes in the virtual serial port descriptor, but it's not obvious what needs to be fixed.

Not an issue on Windows, Mac, or Arch Linux.

consumer code not releasing on key release

example kll:

U"Function2" : consCtrlOut( 0x0cd );
U"LAlt" : consCtrlOut( 0x0B5 );

Expected functionality:

When Function2 is pressed, consumer code 0x0cd should be sent. When Function2 is released, code should be cleared.

Actual functionality:

When Function2 is pressed, consumer code 0x0cd should be sent. When Function2 is released, code is sent again. If another consumer code is sent, it overwrites the first and continues to be sent.

Debug output using above kll:

From pressing & releasing Function2, Function2, LAlt, Function2

DEBUG - NKRO USB: ConsCtrl[CD]
DEBUG - NKRO USB: ConsCtrl[CD]
DEBUG - NKRO USB: ConsCtrl[CD]
DEBUG - NKRO USB: ConsCtrl[CD]
DEBUG - NKRO USB: ConsCtrl[B5]
DEBUG - NKRO USB: ConsCtrl[B5]
DEBUG - NKRO USB: ConsCtrl[CD]
DEBUG - NKRO USB: ConsCtrl[CD]

Fail to Load, Shows no errors.

I compiled and attempted to load onto a Teensy 3.1, and it failed to do so without a meaningful error message, at least that I noted.

Console Output:
http://pastebin.com/XJ1stiCq

I can supply the rest of my configs, I just don't know what's needed. I don't think I'm doing anything wrong, at least according to the documentation (to the best of my knowledge).

Porting firmware to proprietary keyboards

I recently learned about the infinity keyboard and this github project. At least to me, what seems most appealing is this open source firmware.

Are there any thought on porting this firmware to propietary keyboards?

I own a poker 3 which has a HT32F1655 arm chipset, so I would love to help in the effort. Probably the upload won't be possible through dfu unless the chip is flashed through swd first with another bootloader, but perhaps there are bigger hurdles than this.

Thoughts?

Not firing key-up when layer shift is released out of order.

I have a key that triggers layerShift( 1 ). On the associated layer, I have a key to press the left arrow key. If I hold the layerShift key, then hold the left arrow key, then release the layerShift key, and then release the left arrow key, the left arrow keyup event is not sent, and the key repeats until any other key is pressed.

I'm using an Infinity keyboard.

Trying to build Infinity for Teensy 2.0

I changed the chip type in infinity.bash. How about the scan settings? I get:

~/src/kiibohd/Keyboards master → ./infinity.bash
-- Compiler Family:
avr
-- MCU Selected:
atmega32u4
-- CPU Selected:
megaAVR
-- Bootloader Type:
Teensy
CMake Error at Lib/CMake/modules.cmake:53 (message):
  Scan/MatrixARM does not support the avr family...
Call Stack (most recent call first):
  Lib/CMake/modules.cmake:114 (ModuleCompatibility)
  Scan/MD1/setup.cmake:14 (AddModule)
  Lib/CMake/modules.cmake:91 (include)
  Lib/CMake/modules.cmake:140 (AddModule)
  CMakeLists.txt:152 (include)


-- Configuring incomplete, errors occurred!
See also "/Users/tybenz/src/kiibohd/Keyboards/template/CMakeFiles/CMakeOutput.log".
make: *** No targets specified and no makefile found.  Stop.
Firmware has been compiled into: 'template'

How can I get this to work? Here's my modified infinity.bash:

#!/bin/bash
# this is a build script template
# these build scripts are just a convenience for configuring your keyboard (less daunting than cmake)
# jacob alexander 2015



#################
# configuration #
#################

# feel free to change the variables in this section to configure your keyboard

buildpath="template"

## kll configuration ##

# generally shouldn't be changed, this will affect every layer
basemap="defaultmap"

# this is the default layer of the keyboard
# note: to combine kll files into a single layout, separate them by spaces
# e.g.  defaultmap="mylayout mylayoutmod"
defaultmap="infinity"

# this is where you set the additional layers
# note: indexing starts at 1
# note: each new layer is another array entry
# e.g.  partialmaps[1]="layer1 layer1mod"
#       partialmaps[2]="layer2"
#       partialmaps[3]="layer3"
partialmaps[1]="infinity1"



##########################
# advanced configuration #
##########################

# don't change the variables in this section unless you know what you're doing
# these are useful for completely custom keyboards
# note: changing any of these variables will require a force build to compile correctly

# keyboard module configuration
scanmodule="md1"
macromodule="partialmap"
outputmodule="pjrcusb"
debugmodule="full"

# microcontroller
chip="atmega32u4"

# compiler selection
compiler="gcc"



########################
# bash library include #
########################

# shouldn't need to touch this section

# check if the library can be found
if [ ! -f cmake.bash ]; then
    echo "error: cannot find 'cmake.bash'"
    exit 1
fi

# load the library
source cmake.bash

Make it possible to send different keycodes for short- and longpresses of keys

A feature I'd like to see in KLL would be to send different keycodes depending if a key is being pressed or being hold.

For example: remap the capslock key to send control if held down, but if just pressed send esc.
I set this up in software already using Karabiner on OS X, but having this in hardware would be better.

MD2?

My Infinity keyboard wasn't the first massdrop group buy, I got mine with the last one that had the bent plate.

What's MD2? Is it for the fancy new ergodox with the screen on it?

Anyways, I tried building with ScanModule=MD2 and I ended up with a strange compile error:

Linking C executable kiibohd.elf
/usr/local/Cellar/cmake/3.0.0/bin/cmake -E cmake_link_script CMakeFiles/kiibohd.elf.dir/link.txt --verbose=1
/usr/local/bin/arm-none-eabi-gcc    -Wl,-headerpad_max_install_names   -mthumb -nostdlib -fdata-sections -ffunction-sections -fshort-wchar -fno-builtin -nostartfiles -Wl,-Map=link.map,--cref -Wl,--gc-sections -Wl,--no-wchar-size-warning -T/Users/steven/Documents/kiibohd-controller/Lib/mk20dx128vlf5.ld CMakeFiles/kiibohd.elf.dir/main.c.o CMakeFiles/kiibohd.elf.dir/Lib/mk20dx.c.o CMakeFiles/kiibohd.elf.dir/Lib/delay.c.o CMakeFiles/kiibohd.elf.dir/Scan/ISSILed/led_scan.c.o CMakeFiles/kiibohd.elf.dir/Scan/MatrixARM/matrix_scan.c.o CMakeFiles/kiibohd.elf.dir/Scan/MD2/scan_loop.c.o CMakeFiles/kiibohd.elf.dir/Macro/PartialMap/macro.c.o CMakeFiles/kiibohd.elf.dir/Output/pjrcUSB/output_com.c.o CMakeFiles/kiibohd.elf.dir/Output/pjrcUSB/arm/usb_desc.c.o CMakeFiles/kiibohd.elf.dir/Output/pjrcUSB/arm/usb_dev.c.o CMakeFiles/kiibohd.elf.dir/Output/pjrcUSB/arm/usb_keyboard.c.o CMakeFiles/kiibohd.elf.dir/Output/pjrcUSB/arm/usb_mem.c.o CMakeFiles/kiibohd.elf.dir/Output/pjrcUSB/arm/usb_serial.c.o CMakeFiles/kiibohd.elf.dir/Debug/cli/cli.c.o CMakeFiles/kiibohd.elf.dir/Debug/led/led.c.o CMakeFiles/kiibohd.elf.dir/Debug/print/print.c.o  -o kiibohd.elf
CMakeFiles/kiibohd.elf.dir/Scan/MD2/scan_loop.c.o: In function `I2C_BufferLen':
/Users/steven/Documents/kiibohd-controller/build/../Scan/MD2/scan_loop.c:358: multiple definition of `I2C_BufferLen'
CMakeFiles/kiibohd.elf.dir/Scan/ISSILed/led_scan.c.o:/Users/steven/Documents/kiibohd-controller/build/../Scan/ISSILed/led_scan.c:440: first defined here
CMakeFiles/kiibohd.elf.dir/Scan/MD2/scan_loop.c.o: In function `I2C_BufferPush':
/Users/steven/Documents/kiibohd-controller/build/../Scan/MD2/scan_loop.c:367: multiple definition of `I2C_BufferPush'
CMakeFiles/kiibohd.elf.dir/Scan/ISSILed/led_scan.c.o:/Users/steven/Documents/kiibohd-controller/build/../Scan/ISSILed/led_scan.c:449: first defined here
CMakeFiles/kiibohd.elf.dir/Scan/MD2/scan_loop.c.o: In function `I2C_TxBufferPop':
/Users/steven/Documents/kiibohd-controller/build/../Scan/MD2/scan_loop.c:394: multiple definition of `I2C_TxBufferPop'
CMakeFiles/kiibohd.elf.dir/Scan/ISSILed/led_scan.c.o:/Users/steven/Documents/kiibohd-controller/build/../Scan/ISSILed/led_scan.c:476: first defined here
CMakeFiles/kiibohd.elf.dir/Scan/MD2/scan_loop.c.o: In function `i2c0_isr':
/Users/steven/Documents/kiibohd-controller/build/../Scan/MD2/scan_loop.c:119: multiple definition of `i2c0_isr'
CMakeFiles/kiibohd.elf.dir/Scan/ISSILed/led_scan.c.o:/Users/steven/Documents/kiibohd-controller/build/../Scan/ISSILed/led_scan.c:136: first defined here
CMakeFiles/kiibohd.elf.dir/Scan/MD2/scan_loop.c.o: In function `I2C_Send':
/Users/steven/Documents/kiibohd-controller/build/../Scan/MD2/scan_loop.c:444: multiple definition of `I2C_Send'
CMakeFiles/kiibohd.elf.dir/Scan/ISSILed/led_scan.c.o:/Users/steven/Documents/kiibohd-controller/build/../Scan/ISSILed/led_scan.c:526: first defined here
CMakeFiles/kiibohd.elf.dir/Scan/MD2/scan_loop.c.o: In function `cliFunc_i2cRecv':
/Users/steven/Documents/kiibohd-controller/build/../Scan/MD2/scan_loop.c:630: multiple definition of `cliFunc_i2cRecv'
CMakeFiles/kiibohd.elf.dir/Scan/ISSILed/led_scan.c.o:/Users/steven/Documents/kiibohd-controller/build/../Scan/ISSILed/led_scan.c:648: first defined here
CMakeFiles/kiibohd.elf.dir/Scan/MD2/scan_loop.c.o: In function `cliFunc_i2cSend':
/Users/steven/Documents/kiibohd-controller/build/../Scan/MD2/scan_loop.c:582: multiple definition of `cliFunc_i2cSend'
CMakeFiles/kiibohd.elf.dir/Scan/ISSILed/led_scan.c.o:/Users/steven/Documents/kiibohd-controller/build/../Scan/ISSILed/led_scan.c:600: first defined here
CMakeFiles/kiibohd.elf.dir/Scan/MD2/scan_loop.c.o: In function `LED_zeroPages':
/Users/steven/Documents/kiibohd-controller/build/../Scan/MD2/scan_loop.c:243: multiple definition of `LED_zeroPages'
CMakeFiles/kiibohd.elf.dir/Scan/ISSILed/led_scan.c.o:/Users/steven/Documents/kiibohd-controller/build/../Scan/ISSILed/led_scan.c:281: first defined here
CMakeFiles/kiibohd.elf.dir/Scan/MD2/scan_loop.c.o: In function `cliFunc_ledZero':
/Users/steven/Documents/kiibohd-controller/build/../Scan/MD2/scan_loop.c:678: multiple definition of `cliFunc_ledZero'
CMakeFiles/kiibohd.elf.dir/Scan/ISSILed/led_scan.c.o:/Users/steven/Documents/kiibohd-controller/build/../Scan/ISSILed/led_scan.c:702: first defined here
CMakeFiles/kiibohd.elf.dir/Scan/MD2/scan_loop.c.o:(.data.I2C_RxBuffer+0x0): multiple definition of `I2C_RxBuffer'
CMakeFiles/kiibohd.elf.dir/Scan/ISSILed/led_scan.c.o:(.data.I2C_RxBuffer+0x0): first defined here
CMakeFiles/kiibohd.elf.dir/Scan/MD2/scan_loop.c.o:(.data.I2C_TxBuffer+0x0): multiple definition of `I2C_TxBuffer'
CMakeFiles/kiibohd.elf.dir/Scan/ISSILed/led_scan.c.o:(.data.I2C_TxBuffer+0x0): first defined here
CMakeFiles/kiibohd.elf.dir/Scan/MD2/scan_loop.c.o:(.rodata.ledZeroCLIDict_DescEntry+0x0): multiple definition of `ledZeroCLIDict_DescEntry'
CMakeFiles/kiibohd.elf.dir/Scan/ISSILed/led_scan.c.o:(.rodata.ledZeroCLIDict_DescEntry+0x0): first defined here
CMakeFiles/kiibohd.elf.dir/Scan/MD2/scan_loop.c.o:(.rodata.i2cSendCLIDict_DescEntry+0x0): multiple definition of `i2cSendCLIDict_DescEntry'
CMakeFiles/kiibohd.elf.dir/Scan/ISSILed/led_scan.c.o:(.rodata.i2cSendCLIDict_DescEntry+0x0): first defined here
CMakeFiles/kiibohd.elf.dir/Scan/MD2/scan_loop.c.o:(.rodata.i2cRecvCLIDict_DescEntry+0x0): multiple definition of `i2cRecvCLIDict_DescEntry'
CMakeFiles/kiibohd.elf.dir/Scan/ISSILed/led_scan.c.o:(.rodata.i2cRecvCLIDict_DescEntry+0x0): first defined here
/usr/local/Cellar/gcc-arm-none-eabi/20130916/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/bin/ld: Warning: size of symbol `i2cRecvCLIDict_DescEntry' changed from 121 in CMakeFiles/kiibohd.elf.dir/Scan/ISSILed/led_scan.c.o to 118 in CMakeFiles/kiibohd.elf.dir/Scan/MD2/scan_loop.c.o
collect2: error: ld returned 1 exit status
make[2]: *** [kiibohd.elf] Error 1
make[1]: *** [CMakeFiles/kiibohd.elf.dir/all] Error 2
make: *** [all] Error 2

I am just hoping that this isn't actually ready yet and I should actually be using MD1. (which I have been until now)

Build error when setting DefaultMap and PartialMaps to ""

I'm trying to start from the ground up to get a good feel for how to build layout maps, and I figured I'd try with just the default/scan map.

Per the docs in CMakeLists.txt:

##| Layer additonal .kll maps on the BaseMap, layers are in order from 1st to nth
##| Can be set to "" 
set(  DefaultMap "md1Overlay stdFuncMap"
    CACHE STRING "KLL DefaultMap" )

##| ParitalMaps available on top of the BaseMap. See above for syntax on specifying multiple layers vs. layering
##| Can be set to ""
set( PartialMaps "hhkbpro2"
    CACHE STRING "KLL PartialMaps/Layer Definitions" )

Both explicitly say Can be set to ""

I figure "cool", and issue the following from a fresh checkout:

~/code/controller$ mkdir build_infinity
~/code/controller$ cd build_infinity
~/code/controller/build_infinity$ cmake -DDefaultMap="" -DPartialMaps="" ..
[... blah blah blah ...]
~/code/controller/build_infinity$ make
[  5%] Generating KLL Layout
Traceback (most recent call last):
  File "../kll/kll.py", line 640, in <module>
    gitChanges
  File "/home/kb/code/controller/kll/backends/kiibohd.py", line 109, in process
    for file, name in zip( variables.layerVariables[0]['*LayerFiles'], variables.layerVariables[0]['*NameStack'] ):
KeyError: '*LayerFiles'
CMakeFiles/kiibohd.elf.dir/build.make:55: recipe for target 'generatedKeymap.h' failed
make[2]: *** [generatedKeymap.h] Error 1
CMakeFiles/Makefile2:95: recipe for target 'CMakeFiles/kiibohd.elf.dir/all' failed
make[1]: *** [CMakeFiles/kiibohd.elf.dir/all] Error 2
Makefile:72: recipe for target 'all' failed
make: *** [all] Error 2

Death. Destruction. And no flashable firmware.

I am a sad panda

sad panda

I'll dig in a bit more and see if I can submit a PR, but it seems like a quick fix and you might be able to take care of it super quick.

Result sequence/combinations doesn't work

I've tried U"F13"+U"I"+U"F13" in various combinations, none worked, sometimes one F13 registers only once

The U["Q"-"Y"],U["Enter"] example only prints Y and enters

Overall, I've tried various things, however I couldn't implement basic macros, with neither of sequnces/combinations

(F13 is my language change key, I'm trying to add special characters to my layer, by shifting the language with a macro and restoring it later on)

After reading the documents, it's unclear how sequences/combinations are supposed to work / their differences etc.

COM port for Windows?

Sorry about starting so many damn issues!

I figured it would be nice if I could use PuTTY on windows to connect to the USB serial in order to use the debugger interface.

But it seems like the drivers arent autoinstalled. It tries to Windows Update some drivers, they fail, and it appears to "fall back" to just being a keyboard, which is fine, but I've got no COM port.

So I'm wondering if this uses the CPU's onboard UART or something or is there a USB to Serial chipset involved? Something I can fetch a driver for.

Optimize Single Key States

Currently every trigger and result requires state variables. Including single shot (one key or single combos) keys. These triggers and results do not need any state at all.

Because these are most keys, there should be a large ram savings by implementing this optimization.
Requires changes to PartialMap and kll compiler.

NKRO/Boot mode capabilities not working on teensy 3.1?

So I wired a keyboard with a teensy 3.1, and everything worked exactly as I wanted to, except I could not use my keyboard in my grub bootloader when I start up my computer. So I configured f9 and f10 to set NKRO and Boot respectively in my function layer. However, this seems to have no effect and I still cannot use my keyboard in grub. Also I used this link https://www.microsoft.com/appliedsciences/content/projects/KeyboardGhostingDemo.aspx to verify that my keyboard is always in NKRO mode.

Here is the code in my kll file, accessed via layerShift ( 1 );
U"F9" : kbdProtocolNKRO();
U"F10" : kbdProtocolBoot();

I'm using arch linux 64bit.

Media keys don't work after a reboot. Possibly stuck in bios mode?

So I've been having issues with mediakeys deciding not to work. I initially thought it was from booting in to windows, which I didn't quite understand, so I tried some more things, and it turned out, that a restart would have the same effect.

I would flash the keyboard with a .bin, and media keys would work fine in Linux, but after a reboot they wouldn't work. Un-plugging, and replugging the keyboard however, will make them work again.

This made me thing that the keyboard might be stuck in bios compatible mode, and a replug takes it out of that.

Mouse Key Control

Would be nice to have mouse control like on the tmk firmware.

Requires:

  • kll spec enhancements for mouse control
  • Mouse capabilties in the USB module
  • kll compiler enhancements

Layers locked from another layer don't take priority.

Using this base layer + 2 partial layers to demonstrate the issue:
screenshot_2015-05-28_11-46-02

If I press 'asd', it types 'asd' as expected.
If I press Ctrl then type it again, it types 'qwd' as expected.
However, if I press 'z', then type 'asd' again, it types 'qwe' when 'fwe' would be expected.

Debug CLI, first with neither layer on, then with layer 1, with both, and back to layer 1 only:
screenshot_2015-05-28_11-43-14

Sequence trigger behavior

So if I use either of these in my KLL file:

S0x1D , S0x2B : U"5";
U"Control" , U"z" : U"5";

Then after plugging the keyboard in, pressing control and then z results in a z then a 5, occasionally with the 5 repeating itself until another key is pressed. After this, the sequence no longer works. The same behavior is experienced with both the Scan codes and USB codes.

Add program detection to load script

Add program detection to load scripts. LoadFile/*

  • Make sure mac support is working
  • Find command-line serial utility for Cygwin/Windows (screen doesn't work on Windows for serial ports)
  • Check for all needed programs before running them

Causes OS X kernel-panic/freeze/reboot

I have not even the slightest clue about how to test this. Maybe using a logic analyzer reading the USB signals, continuously logging output to a separate computer...

Has only happened twice so far.

The second time I was just typing. First time I don't remember.

Mac Issues

I'm starting this thread to discuss mac issues

I have this in my function layer: U"Esc":consCtrlOut(0x032);
Holding it a bit sleeps the computer

I noticed a mac issue after using this sleep method, it's probably unrelated, but I just want to check whether other's experience it too, normally osx should ask for a password only after 4 hours in my system, however after testing this method for a bit, it started to always ask for a password, a restart fixed the issue

After the restart, I noticed that the keyboard doesn't work at the password screen, don't know what's the cause of this, re-connecting it didn't seem to make it work

dc562cd bricks my Infinity board

It's now responding (responding is not the right word) to a small subset of keys, and will repeat them about 30x.

The USB serial port debug interface will drop about 3 seconds after typing the first characters. As long as I don't type on it, the command line is quite responsive.

Seems very bricked because while I can update firmware with DFU util, it does not fix the behavior.

Can I rescue it by reloading the bootloader? (I don't have a bus pirate yet, but I just ordered one)

Feature request: Custom startup behavior

It would be nice to have a "startup" trigger on the base layer that fires when the keyboard starts, for example to have a particular layer locked by default. Something like a Startup keyword so you could do Startup : layerLock(3).

KLL Layout error during build

I'm trying to build for the Infinity ErgoDox according to the "How To Load Layouts to Keyboard" wiki page, and I'm getting the following error message using the ergodox.bash script:

funcparserlib.lexer.LexerError: cannot tokenize data: 88,16: "U"PERIOD" : U"V";"

It displays this message for whatever trigger:response pair is on the bottom of my layout file.

Crash when pressing keys

specificlly when pressing buttons that does not have any defined trigger macro.
Only thing ive modified is the matrix file to suit my 19x6matrix :)

Documentation Improvements

Is it just my Ruby/Non C addled brain but could there be some improvements with the documentation? Especially around the build process, and what is absolutely needed to generate a .bin file? Is there room for me to pitch in and help with this?

Can't get serial to work

Hi, I built my infinity keyboard today and I'm on a Mac trying to receive serial output. I figured I want to get debug output working first before diving into KLL and other things!

I do have a /dev/tty.usbmodem1423 that exists whenever the keyboard is plugged in, and also the keyboard does work when plugged in, the orange LED does light if I press the flash button, and indeed ./load works at this point.

But I am unable to receive any output when I run screen /dev/tty.usbmodem1423.

In the wiki, TODO: Add a summary of useful commands one might want to use in the serial console. I was wondering maybe someone can elaborate on that? I read somewhere I should be able to make the LED come on if i type led into the serial, but this does not happen. So it seems like I have not actually been able to establish a serial connection here.

Unnecessary scrollbars added to windows in OS X Yosemite

When using the Infinity keyboard, the firmware will add unnecessary scrollbars to textEdit and iTerm2 windows for example. When I press the button to flash the firmware, the scrollbars disappear, but as soon as the firmware is loaded, they show up again. Possibly related to joystick and mouse descriptors.

USB to Bluetooth adapter doesnt seem to work

I'm quite a ways from making progress on debugging this but basically I have one of these:

http://www.amazon.com/Nulaxy-Wired-Keyboard-Bluetooth-Adapter/dp/B00T5YXNL0

And it's not able to complete the pairing procedure...

I guess this is not an easy problem to solve and it is easier to try out more of these devices until we find one that works. I was hoping if it worked out of the box that I could just take the casing apart and embed it into the infinity keyboard and I'd have myself a bluetooth-capable infinity bent plate board.

So I'm wondering if anyone's tried gadgets like this and experienced success.

Volume keybindings not working in Windows

I just brought my infinity keyboard at work where I use Windows on my workstation. The volume up, down and mute all work on my macbook pro (yosemite) but not on windows. No response or anything. I haven't checked the play/prev/play keys yet, but will update/post more on it.

The firmware is compiled and flashed using Mac. Any ideas on how to solve this? I plan to use this keyboard at work where I only use Windows (and Linux VMs). Thanks.

/usr/lib/gcc/arm-none-eabi/4.9.2/include/stdint.h:9:26: fatal error: stdint.h: No such file or directory

./infinity.bash
-- Compiler Family:
arm
-- Compiler Selected:
gcc
-- Chip Selected:
mk20dx128vlf5
-- Chip Family:
mk20dx
-- CPU Selected:
cortex-m4
-- Compiler Source Files:
Lib/mk20dx.c;Lib/delay.c
-- Bootloader Type:
dfu
-- Detected Scan Module Source Files:
Scan/MatrixARM/matrix_scan.c;Scan/MD1/scan_loop.c
-- Detected Macro Module Source Files:
Macro/PartialMap/macro.c
-- Detected Output Module Source Files:
Output/pjrcUSB/output_com.c;Output/pjrcUSB/arm/usb_desc.c;Output/pjrcUSB/arm/usb_dev.c;Output/pjrcUSB/arm/usb_keyboard.c;Output/pjrcUSB/arm/usb_mem.c;Output/pjrcUSB/arm/usb_serial.c
-- Detected Debug Module Source Files:
Debug/cli/cli.c;Debug/led/led.c;Debug/print/print.c
-- Found Git: /usr/bin/git (found version "2.3.4") 
-- Found Ctags: /usr/bin/ctags (found version "5.8") 
-- Detected Layout Files:
/home/pablo/code/kiibo/controller/Scan/MatrixARM/capabilities.kll
/home/pablo/code/kiibo/controller/Macro/PartialMap/capabilities.kll
/home/pablo/code/kiibo/controller/Output/pjrcUSB/capabilities.kll
/home/pablo/code/kiibo/controller/Scan/MD1/defaultMap.kll
/home/pablo/code/kiibo/controller/kll/layouts/md1Overlay.kll
/home/pablo/code/kiibo/controller/kll/layouts/stdFuncMap.kll
/home/pablo/code/kiibo/controller/kll/layouts/hhkbpro2.kll
-- Configuring done
-- Generating done
-- Build files have been written to: /home/pablo/code/kiibo/controller/Keyboards/template
Scanning dependencies of target kiibohd.elf
[  5%] Building C object CMakeFiles/kiibohd.elf.dir/main.c.o
In file included from ../../Lib/mk20dx.h:57:0,
                 from ../../Lib/Interrupts.h:34,
                 from ../../Lib/MainLib.h:32,
                 from ../../main.c:25:
/usr/lib/gcc/arm-none-eabi/4.9.2/include/stdint.h:9:26: fatal error: stdint.h: No such file or directory
 # include_next <stdint.h>
                          ^
compilation terminated.
CMakeFiles/kiibohd.elf.dir/build.make:68: recipe for target 'CMakeFiles/kiibohd.elf.dir/main.c.o' failed
make[2]: *** [CMakeFiles/kiibohd.elf.dir/main.c.o] Error 1
CMakeFiles/Makefile2:95: recipe for target 'CMakeFiles/kiibohd.elf.dir/all' failed
make[1]: *** [CMakeFiles/kiibohd.elf.dir/all] Error 2
Makefile:75: recipe for target 'all' failed
make: *** [all] Error 2
Firmware has been compiled into: 'template'

Is this a bug within the arm-none-eabi-gcc package?

Combinations using Shift do not block the shift key.

Putting this in a kll file does not produce expected results:

U"Shift" + U"Esc" : U"Backtick";

But this does:

U"Ctrl" + U"Esc" : U"Backtick";

Relevant snippet from CMakeLists.txt

set(     BaseMap "defaultMap"
    CACHE STRING "KLL BaseMap/Scancode Keymapping" )

##| Layer additonal .kll maps on the BaseMap, layers are in order from 1st to nth
##| Can be set to ""
set(  DefaultMap "mcmLayer0 stdFuncMap"
    CACHE STRING "KLL DefaultMap" )

##| ParitalMaps available on top of the BaseMap. See above for syntax on specifying multiple layers vs. layering
##| Can be set to ""
set( PartialMaps "mcmLayer1"
    CACHE STRING "KLL PartialMaps/Layer Definitions" )

mcmLayer0.kll:

Name = mcmLayer0;
Version = 0.1;
Author = "Steve McMaster";
KLL = 0.3;
Date = 2015-02-20;
U"Function2" : U"Function1";
U"Backtick" : U"Delete";

mcmLayer1.kll:

Name = mcmLayer1;
Version = 0.1;
Author = "Steve McMaster";
KLL = 0.3;
Date = 2015-02-20;
U"Esc" : U"Backtick";
U"1" : U"F1";
U"2" : U"F2";
U"3" : U"F3";
U"4" : U"F4";
U"5" : U"F5";
U"6" : U"F6";
U"7" : U"F7";
U"8" : U"F8";
U"9" : U"F9";
U"0" : U"F10";
U"-" : U"Home";
U"=" : U"End";
U"Backslash" : U"PageUp";
U"Backtick" : U"PageDown";
U"Backspace" : U"Delete";
U"W" : U"Up";
U"A" : U"Left";
U"S" : U"Down";
U"D" : U"Right";
U"{" : U"Up";
U";" : U"Left";
U"'" : U"Right";
U"/" : U"Down";

Instead of getting a backtick when pressing Shift + Esc, escape is produced.

Add dfu suffix signing

dfu-util complains about needing a suffix. And that it will be required in future versions of the dfu-util.

Can be done with dfu-suffix.
This does a couple things that are good:

  • Adds a crc
  • Can specify the exact product and vendor id that the kiibohd firmware uses

Interested in accessing serial separately from USB

I am wondering if there are pins I can use to access the serial interface? I am thinking about having a separate MCU with its own display or colored LEDs that I can use to show the layer and lock statuses that the keyboard is in. You know, because infinity keyboard only has a single LED, and it's on the bottom and not really bright.

Infinity firmware resets to flash mode on wake up from sleep (OSX)

Specs:

Late 2013 Retina MacBook Pro 13"
OSX Yosemite 10.10.2

Whenever my laptop goes to sleep, the Infinity keyboard will not wake the laptop, and I have to use the internal keyboard or trackpad wake it up. Once the computer has woken up, the Infinity board is unresponsive and eventually the orange flash-mode LED lights up and I have to unplug and re-plug in the keyboard to get it working again.

Not sure what else I can provide to help, but I'll be happy to provide some debug output if necessary.

Sometimes the keyboard follow X configuratio

I have my laptop setup to a latam layout, set through xorg.conf. Sometimes, the infinity keyboard tries to act as one too, leading to weird situations :/. Right now for example, the Infinity has the "ñ", making a lot of keys just dissapear (in latam layout there are 3 keys to the right of the l:

ñ { }

When the infinity acts a latam layout, I lose the }.

Any idea what could be happening? (reflashing, removing/reinsertng the keyboard doesn't work).

Lock OFF capability?

I am envisioning this: Left corner and right corner bottom row (Function 2 and Function 4 from defaultMap) are both to be Shift keys for Layer 1.

Special tweak: I want to make them lock on a layer when both are pressed. That seems easy enough.

But now I want a different (easier) way to un-lock them.

First off, there seems to be no "unlock layer x" capability defined. It's toggle or bust, it seems. This is slightly non-ideal because in the absence of bright-ass LED's, I am liable to want to spam keys to make sure I hit them. Like Esc gets spammed a lot. If you are a Vim user, you know what I'm talking about.

Anyway, I was thinking, I'd like to be hitting either of those corner keys once to take me out of the lock. Originally I was wondering about multiple binds in the same layer for the same key but this example isn't a valid use-case of that, here, all we need is to put a Lock OFF capability on Layer 1 onto both of the corner keys.

(Let me know if you rather I make a separate issue for this:) Along another line of questioning I have found so far that Latch() works like Lock but doesnt toggle. It doesnt latch back off after a key. So it seems like Latch() is currently (I still need to test this more) functioning as a spammable Lock ON capability. So we're still definitely missing a Lock OFF capability.

Are USB codes the "lowest level"?

It seems to me that the specification for keys does not allow for the specificity of defining, for example, the fact that Shift+/ produces a ?.

Now this may just be my ignorance, but I am realizing only now that it is perhaps up to the operating system and its locale mappings (or whatever else) to determine what to do with Shift Slash.

I guess what this means is that essentially if one wants to make a question-mark key, that we'd have to make a trigger that results in the combination U"Shift" + U"Slash", as this turns out to be the only portable way to emit a question mark.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.