kiibohd / controller Goto Github PK
View Code? Open in Web Editor NEWKiibohd Controller
License: GNU General Public License v3.0
Kiibohd Controller
License: GNU General Public License v3.0
U"Function2" : consCtrlOut( 0x0cd );
U"LAlt" : consCtrlOut( 0x0B5 );
When Function2 is pressed, consumer code 0x0cd should be sent. When Function2 is released, code should be cleared.
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.
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]
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.
Would be useful to see which files were changed when building a binary.
Similar to what is now done with the generatedKeymap.h file for the kll compiler.
Using this base layer + 2 partial layers to demonstrate the issue:
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:
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
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.
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)
.
Add program detection to load scripts. LoadFile/*
Would be nice to have mouse control like on the tmk firmware.
Requires:
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.
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
arm/usb_joystick.c
and arm/usb_mouse.c
were just introduced by 20b62af in Output/pjrcUSB/setup.cmake. These files have not been committed so the cmake build (via infinity.bash
) fails.
It looks like these includes were accidentally introduced with work on #4.
Simply commenting out the lines allows the build to succeed.
Say for example, I want RALT to become LCTRL+LSHIFT+LALT. Can I do this:
U"RALT" : U"LCTRL+LSHIFT+LALT";
Is there a documentation somewhere on how to bind keys? Thanks.
./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?
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.
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.
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.
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.
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.
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.
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
I have a numkeypad defined on layer2, which works fine in windows, but same keyboard under linux does not work. The switch to layer2 works but the numkeypad types garbage on the screen. Attached is a dropbox link to a zip file containing the kll and *.h and .bin file. Thanks.
https://www.dropbox.com/s/nk9qfh0ya0m5i9w/tchan20150220.zip?dl=0
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.
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.
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.
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.
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.
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.
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.
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.
Firmware currently does not wake up a sleeping/suspended computer.
There are a few things that need to happen to make this work:
http://cache.freescale.com/files/32bit/doc/ref_manual/K20P48M50SF0RM.pdf 40.4.9
When the computer is sleeping, to wake it up this needs to be done.
USB0_CTL |= USB_CTL_RESUME;
Whenever there is a keypress (signal over usb) + usb has suspended, a resume signal should be sent.
(Likely USB0_ISTAT & USB_ISTAT_SLEEP).
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.
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).
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)
specificlly when pressing buttons that does not have any defined trigger macro.
Only thing ive modified is the matrix file to suit my 19x6matrix :)
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).
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?
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)
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
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.
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.
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!
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:
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.
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.
This bug occurs rarely maybe a few times per day or so.
The keyboards appears to lock up - typing keys won't outtput them - and either just ssits frozen or repeats the last key pressed about 100 times over 2-3 seconds. Then it resumes as normal.
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?
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.
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
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.