Code Monkey home page Code Monkey logo

ergodox-firmware's People

Contributors

benblazak avatar nacitar avatar robotmaxtron avatar unnawut 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

ergodox-firmware's Issues

I have numerous problems with the layout.

Hi, I have some problems with this firmware.

To refer to the Keys, I use this chart: https://imgur.com/23oq21M

How do I add a Key that activates a layer? What I did so far:

  • The symbol in _kb_layout seems irrelevant, but replace it with something meaningful to keep track.
  • Add a pointer to _kbfun_layer_push_N in _kb_layout_press.
  • Add a pointer to _kbfun_layer_pop_N in _kb_layout_release.
    I want Key K02 in the diagram to enter Layer 1, and leave it if i release the key. So far I only toggles it.

Also kbfun_transparent seems to get in my way. I do not see why one would want such a function, but fine, I replaced it with kbfun_press_release. Yet, some strange things happen I suspect to be related with that.

K0A and K39 on layer 1 are mapped to backspace. However, only K39 actually produces a backspace. K0A produces Spaces, as on layer 0. I can't figure out why.

On Layer 1 The left half is a flipped version of the right half. That works for most keys just fine. However key k42, that should produce a "o", does produce a "shiftL + o" and so a captial "o", and I don't know why.

keys K20 and KD2 do behave like shift keys, and this is intended behavior. However that does not make sense to me, as they are mapped to kbfun_2_keys_capslock_press_release rather than to kbfun_shift_press_release. I'd like to map key K2D on layer 2 to shift lock, how do I do this?

Here is my C-Source code: https://gist.github.com/Miko4/974c2ecc5bda0becb5bd

Thumb shift layout?

My wife grew up learning to type on Japanese thumb-shift keyboards, which are difficult to find out here. I've wondered if I could reasonably expect to write a layout for her that would approximate that old style, and if this would be the right place to start?

(some?) Unicode Doesn't Work

This applies to the partial rewrite branch. I recently got the zodiac set (http://www.pimpmykeyboard.com/marketplace.php) and thought it would be kinda fun to have a layer that would literally type those keys. Here is the patch I wrote to do that:

     diff --git a/firmware/keyboard/ergodox/layout/qwerty-kinesis-mod.c b/firmware/keyboard/ergodox/layout/qwerty-kinesis-mod.c
     index 3418ab1..e56cb05 100644
     --- a/firmware/keyboard/ergodox/layout/qwerty-kinesis-mod.c
     +++ b/firmware/keyboard/ergodox/layout/qwerty-kinesis-mod.c
     @@ -102,6 +102,8 @@ void keys__press__m_undo(void) {
          usb__kb__set_key(false, KEYBOARD__z_Z);
      }
      void R(m_undo)(void) {}
     +void P(m_aries)(void) { KF(type_string)( PSTR("♈") ); }
     +void R(m_aries)(void) {}

      // ----------------------------------------------------------------------------
      // layout
     @@ -145,7 +147,7 @@ static _layout_t _layout = {
         btldr,       F1,       F2,       F3,       F4,       F5,       F6,
        transp,   transp,   m_word,   transp,   transp,   transp,   transp,
        transp,   transp,   transp,   transp,   transp,   transp,
     -  transp,   transp,      del,   transp,   transp,  m_bword,   transp,
     +  transp, lpupo2l2,      del,   transp,   transp,  m_bword,   transp,
        transp,   transp,   transp,   transp,   transp,
                                                                    transp,   transp,
                                                          transp,   transp,   transp,
     @@ -166,7 +168,7 @@ static _layout_t _layout = {
      // macro, unused,
             K,    nop,
      // left hand ...... ......... ......... ......... ......... ......... .........
     -   btldr,      nop,      nop,      nop,      nop,      nop,      nop,
     +     nop,      m_aries,  nop,      nop,      nop,      nop,      nop,
           nop,      nop,      nop,      nop,      nop,      nop,      nop,
           nop,      nop,      nop,      nop,      nop,      nop,
           nop,      nop,      nop,      nop,      nop,      nop,      nop,

When I do hit the Aries key with the appropriate push keys held down it sends a set of control characters that interact poorly with pretty much every application.

Clearly this isn't super important but I figure that if it doesn't work here there may be real applications that it doesn't work for.

push/pop of layer keys doesn't work as expected

Question Ben: When I push a layer (say layer 4) and then I push another layer (say layer 3), when I then pop layer 3, shouldn't it go back to layer 4? In the partial-rewrite, this is currently not working for me (toggling of layers works fine though).

Macros for Cut/Copy/Paste

Hello Ben,

Here is just a message that you may use whenever you get questions from people wanting macros for Copy/Cut/Paste.
I used your macro function (code copied and adapted from example given by Frew).
I added one "usb__kb__send_report();" to avoid a problem when my host OS (Win7) was remote connecting to another Windows host using Remote Desktop.
Without this additional "send_report", the remote host was printing "V" instead of pasting which is probably because he got the event wrongly sequenced somehow.

I hope it may help others:

void keys__press__m_cut(void) { // Send a ^X
usb__kb__set_key(true, KEYBOARD__LeftControl);
usb__kb__send_report();
usb__kb__set_key(true, KEYBOARD__x_X);
usb__kb__send_report();
usb__kb__set_key(false, KEYBOARD__x_X);
usb__kb__set_key(false, KEYBOARD__LeftControl);
}
void R(m_cut)(void) {}

void keys__press__m_copy(void) { // Send a ^C
usb__kb__set_key(true, KEYBOARD__LeftControl);
usb__kb__send_report();
usb__kb__set_key(true, KEYBOARD__c_C);
usb__kb__send_report();
usb__kb__set_key(false, KEYBOARD__c_C);
usb__kb__set_key(false, KEYBOARD__LeftControl);
}
void R(m_copy)(void) {}

void keys__press__m_paste(void) { // Send a ^V
usb__kb__set_key(true, KEYBOARD__LeftControl);
usb__kb__send_report();
//_delay_ms(333);
usb__kb__set_key(true, KEYBOARD__v_V);
usb__kb__send_report();
usb__kb__set_key(false, KEYBOARD__v_V);
usb__kb__set_key(false, KEYBOARD__LeftControl);
}
void R(m_paste)(void) {}

Best regards,

Pierre

macro capability

tentative, based on time and interest.

whether only available on specific keys, of fixed or variable length, assignable on the keyboard (record -> playback) or only through reflashing, etc., etc., i do not know. but i can see how they'd be useful at times.

Timebased keys

I'm considering to buy the ergodox this year. I just want to know something beforehand.

I use space as [space and shift].
If i press space quickly (the key press lasts less then 260 ms) only then its a space.
If i hold it then its shift.

My question: Is it possible to write "macros" in the firmware that are timebased?

On the ergodox i want to have the thumb keys as:
Space as [Space and shift]
Ctrl as [Ctrl and enter]
Alt as [Alt and backspace]
...

My current Autohotkey macro:

; == space/shift ==
$space::
   send {LShift down} 
   Spacedown := A_TickCount 
   Return    
$+space up::
   ; The space-down set the shift-key, so the space-up event is now shift+space-up
   send {LShift up}   
   if (A_TickCount - Spacedown <260) 
      ; If short time between space-down and space-up...  
      Send {Space}
   Return

partial rewrite

Because it seems like it'd be nice at this point (taking all i've learned) to rewrite it. We shall see.

Layer-shift and Shift problems

Hi there,
I'm attempting to get this working on my ergodox and I'm having problems with layers that shouldn't be happening. I can't seem to push anything besides layer 1 onto the stack; neither layer 2 or 3 work (all from layer 0), while layer 1 works fine. Furthermore on layer 1 I must press shift first if I want to get shifted keys; pressing shift after I press my layer key results in only lowercase keypresses.

I'm on master right now but this didn't work on partial-rewrite either. I'm on Ubuntu 13.10. My make output looks like this:

--- making keyboard/ergodox/layout/qwerty-kinesis-mod.o ---
avr-gcc -c -mmcu=atmega32u4 -DF_CPU=16000000 -DMAKEFILE_BOARD='teensy-2-0' -DMAKEFILE_KEYBOARD='ergodox' -DMAKEFILE_KEYBOARD_LAYOUT='qwerty-kinesis-mod' -DMAKEFILE_DEBOUNCE_TIME='5' -DMAKEFILE_LED_BRIGHTNESS='0.5' -std=gnu99 -Os -Wall -Wstrict-prototypes -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -MMD -MP -MF keyboard/ergodox/layout/qwerty-kinesis-mod.o.dep keyboard/ergodox/layout/qwerty-kinesis-mod.c -o keyboard/ergodox/layout/qwerty-kinesis-mod.o 

--- making firmware.elf ---
avr-gcc -mmcu=atmega32u4 -DF_CPU=16000000 -DMAKEFILE_BOARD='teensy-2-0' -DMAKEFILE_KEYBOARD='ergodox' -DMAKEFILE_KEYBOARD_LAYOUT='qwerty-kinesis-mod' -DMAKEFILE_DEBOUNCE_TIME='5' -DMAKEFILE_LED_BRIGHTNESS='0.5' -std=gnu99 -Os -Wall -Wstrict-prototypes -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -Wl,-Map=firmware.map,--cref -Wl,--relax -Wl,--gc-sections main.o keyboard/ergodox/controller.o keyboard/ergodox/controller/mcp23018.o keyboard/ergodox/controller/teensy-2-0.o keyboard/ergodox/layout/qwerty-kinesis-mod.o lib/key-functions/private.o lib/twi/teensy-2-0.o lib/usb/TODO.o lib/key-functions/public/basic.o lib/key-functions/public/device.o lib/key-functions/public/special.o lib-other/pjrc/usb_keyboard/usb_keyboard.o --output firmware.elf

--- making firmware.hex ---
\# from the WinAVR makefile template (modified)
avr-objcopy -O ihex \
        -R .eeprom -R .fuse -R .lock -R .signature \
        firmware.elf firmware.hex

--- making firmware.eep ---
\# from the WinAVR makefile template (modified)
avr-objcopy -O ihex \
        -j .eeprom \
        --set-section-flags=.eeprom="alloc,load" \
        --change-section-lma .eeprom=0 \
        --no-change-warnings \
        firmware.elf firmware.eep || exit 0

------- done --------------------------------------------------

avr-size --target=ihex firmware.hex
   text    data     bss     dec     hex filename
      0    9744       0    9744    2610 firmware.hex

avr-size --target=ihex firmware.eep
   text    data     bss     dec     hex filename
      0       0       0       0       0 firmware.eep

you can load "firmware.hex" and "firmware.eep" onto the
Teensy using the Teensy loader

---------------------------------------------------------------

and my layout.c, for brevity, is posted on pastebin here: http://pastebin.com/v9VV8B06

is there anything crazy I'm doing wrong? Is this done another way in the Massdrop Configurator? My layers used to work fine on that, but sadly the configurator isn't working right now and I didn't save any of the source code from the layouts I generated with multiple layers.

Thank you

keymap : Arensito

I'd really like to give this layout a shot, and this keyboard will be my first real chance to do so, so I'll do my best to implement this one.

"Windows" (LGui) keys not supported?

EDIT: Tried again and it seems to work. Maybe I didn't give it enough time before resetting or something? I don't know.

ORIGINAL (Ignore now):
Using the massdrop configurator I tried to make a configuration with a "windows" key, but in linux showkey and xev don't receive a keycode. I use these keys all the time (I use i3 and use win as my command for moving around), so how can I make this work?

German ß marked as Reserved Key - why?

The german char ß has the Keycode

keycode 34 (keysym 0xdf, ssharp)

If i had a look inside of _ergodox_firmware/lib/usb/usage-page/keyboard.h there is a row (258) like this:

// (Reserved) 0xDE..0xDF // - - - -

Why this Keycode is reserved? How can i got the ß to work.

BTW: On the Massdrop Configurator there am i able to add "Teensy" as key. I think this is to simulate the Button Press to reflash teensy. Which keycode can i use to have this on a Key of my Keyboard.

Does `gen-layout.py` still work?

I'm trying to use build-script/gen-layout.py to generate a visual representation of the generated firmware but I can't get it to work. If I do a make and watch the output I see no errors but the firmware--ui-info.json files in build/* are empty.

If I run the generated command by make by hand:

./'build-scripts/gen-ui-info.py' \
        --current-date '2014-06-09 22:35:15+02:00' \
        --git-commit-date '2012-12-20 16:34:08 -0800' \
        --git-commit-id '43ee200b2b6e2e234ee8d13d8824e1d5068ba7d0' \
        --map-file-path 'build/ergodox-firmware--master--20121221T013408--43ee200--qwerty-kinesis-mod/firmware.map' \
        --source-code-path 'src' \
        --matrix-file-path 'src/keyboard/ergodox/matrix.h' \
        --layout-file-path \
            'src/keyboard/ergodox/layout/qwerty-kinesis-mod.c'

I get the following error:

Traceback (most recent call last):
  File "./build-scripts/gen-ui-info.py", line 474, in <module>
    main()
  File "./build-scripts/gen-ui-info.py", line 463, in main
    dict_merge(output, parse_mapfile(args.map_file_path))
  File "./build-scripts/gen-ui-info.py", line 206, in parse_mapfile
    raise ValueError("invalid 'map_file_path' given")
ValueError: invalid 'map_file_path' given

because build/ergodox-firmware--master--20121221T013408--43ee200--qwerty-kinesis-mod/firmware.map doesn't exist.

Is the generation of html/svg files of a layout broken or am I missing something?

layer pushing keys are released when not wanted

I have a key in each hand to push to the layer 2, this layer contains special programming chars, so i use it most of the times, because it is so many used I press the key to push to this layer from one hand to another constantly, and there is where starts the problem, example:

  1. press the layer key from the left hand (there is meant that without release it you pick some char keys around)
  2. press the layer key from the right hand (without having released yet the one from the left, because you type fast)
  3. now try to press a character that is meant to be printed on this second layer "layout", but instead you have the chars typed from the first layer "layout"

What happens here?
Seems like the cause is that the function to push/pop the layers don't remember them by identifiers or stacks or something like that, so in a natural typing when you switch to the other hand to press this layer key most of the times you release the first one after to have pressed the second one, which pushes you "out" of the layer 2, no matter if you still having the second key pressed or not.

Embedded numpad

It would be nice to have an embedded numpad that is activated with the num-lock (similar to the realforce 87u and IBM SSK).

Extended numpad keys

I looked through the keyboard.h and I can they're not supported on any platform. Why is that? I looked through the rewrites' equivalent and they're absent entirely. Will they never be supported? If so I'm curious for the technical reason. I'd hoped my layout could e.g. always send an ' @ ' rather than a ' " ' regardless of the OS's regional layout.

Failed to generate json and keymap

Build from master branch and encounter error in last step.

------- done --------------------------------------------------

avr-size --target=ihex firmware.hex
text data bss dec hex filename
0 9582 0 9582 256e firmware.hex

avr-size --target=ihex firmware.eep
text data bss dec hex filename
0 0 0 0 0 firmware.eep

you can load "firmware.hex" and "firmware.eep" onto the
Teensy using the Teensy loader


make[1]: Leaving directory `/home/khl/Downloads/ErgoDox/new/ergodox-firmware/src'
cp 'src/firmware.hex' 'build/ergodox-firmware--master--20130818T220607--8e7ab89--colemak-symbol-mod/firmware.hex'
cp 'src/firmware.eep' 'build/ergodox-firmware--master--20130818T220607--8e7ab89--colemak-symbol-mod/firmware.eep'
cp 'src/firmware.map' 'build/ergodox-firmware--master--20130818T220607--8e7ab89--colemak-symbol-mod/firmware.map'
( ./'build-scripts/gen-ui-info.py'
--current-date '2013-08-18 22:41:07+08:00'
--git-commit-date '2013-08-18 22:06:07 +0800'
--git-commit-id '8e7ab89466ffa958d0e46ae37ef3582d37744ea0'
--map-file-path 'build/ergodox-firmware--master--20130818T220607--8e7ab89--colemak-symbol-mod/firmware.map'
--source-code-path 'src'
--matrix-file-path 'src/keyboard/ergodox/matrix.h'
--layout-file-path
'src/keyboard/ergodox/layout/colemak-symbol-mod.c'
) > 'build/ergodox-firmware--master--20130818T220607--8e7ab89--colemak-symbol-mod/firmware--ui-info.json'
Traceback (most recent call last):
File "./build-scripts/gen-ui-info.py", line 475, in
main()
File "./build-scripts/gen-ui-info.py", line 467, in main
args.layout_file_path ))
File "./build-scripts/gen-ui-info.py", line 396, in gen_mappings
parse_layout_file(layout_file_path) )
File "./build-scripts/gen-ui-info.py", line 375, in parse_layout_file
[[eval(el) for el in layer] for layer in layout['_kb_layout']]
KeyError: '_kb_layout'
make: *** [build/ergodox-firmware--master--20130818T220607--8e7ab89--colemak-symbol-mod/firmware--ui-info.json] Error 1

Ergodox is not registered as keyboard (on Linux) after loading firmware. Halfkay does work however.

Hello!

I have followed the steps in the docs to load the firmware to my Ergodox. The problem is that the keyboard does not show up as a registered usb device, which also means that nothing happens when I press any buttons.

I expect to see something like this in /var/log/kern.log:

Oct  3 19:47:45 shinji kernel: [10114.648568] usb 8-2: new full-speed USB device number 42 using uhci_hcd
Oct  3 19:47:45 shinji kernel: [10114.833354] usb 8-2: New USB device found, idVendor=046d, idProduct=c52b
Oct  3 19:47:45 shinji kernel: [10114.833361] usb 8-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Oct  3 19:47:45 shinji kernel: [10114.833364] usb 8-2: Product: USB Receiver
Oct  3 19:47:45 shinji kernel: [10114.833368] usb 8-2: Manufacturer: Logitech
Oct  3 19:47:45 shinji kernel: [10114.849787] logitech-djreceiver 0003:046D:C52B.0034: hiddev0,hidraw1: USB HID v1.11 Device [Logitech USB Receiver] on usb-0000:00:1d.2-2/input2

But nothing shows up.

However, when I press the reset button the Teensy to activate Halfkay the device shows up as expected:

Oct  3 19:58:10 shinji kernel: [10740.252579] usb 8-2: new full-speed USB device number 55 using uhci_hcd
Oct  3 19:58:11 shinji kernel: [10740.403434] usb 8-2: New USB device found, idVendor=16c0, idProduct=0478
Oct  3 19:58:11 shinji kernel: [10740.403440] usb 8-2: New USB device strings: Mfr=0, Product=0, SerialNumber=0
Oct  3 19:58:11 shinji kernel: [10740.407815] hid-generic 0003:16C0:0478.0048: hidraw4: USB HID v1.11 Device [HID 16c0:0478] on usb-0000:00:1d.2-2/input0

Any advice on what my next steps would be to solve this problem?
I figured this would be software related to the Teensy since the keyboard doesn't even show up as a registered device.

Many thanks in advance!

Edit:

I forgot to mention that a simple blink demo works as expected and non of the problems in the PJRC Troubleshooting guide applies to this problem.

I have tried the firmware from the v1 release, I have tried firmware downloaded from Massdrops confiugrator and I have tried the firmware built from master.

Python error while compiling

I just check out master and tried to compile (On Mac OS X) and I get this error:

cp 'src/firmware.map' 'build/ergodox-firmware--master--20140731T155009--e330dbd--qwerty-kinesis-mod/firmware.map'
 ( ./'build-scripts/gen-ui-info.py' \
    --current-date '2014-07-31 15:50:31-04:00' \
    --git-commit-date '2014-07-31 15:50:09 -0400' \
    --git-commit-id 'e330dbdd97a45391bb50dc067589aeccc7533caf' \
    --map-file-path 'build/ergodox-firmware--master--20140731T155009--e330dbd--qwerty-kinesis-mod/firmware.map' \
    --source-code-path 'src' \
    --matrix-file-path 'src/keyboard/ergodox/matrix.h' \
    --layout-file-path \
        'src/keyboard/ergodox/layout/qwerty-kinesis-mod.c' \
) > 'build/ergodox-firmware--master--20140731T155009--e330dbd--qwerty-kinesis-mod/firmware--ui-info.json'
Traceback (most recent call last):
  File "./build-scripts/gen-ui-info.py", line 474, in <module>
    main()
  File "./build-scripts/gen-ui-info.py", line 463, in main
    dict_merge(output, parse_mapfile(args.map_file_path))
  File "./build-scripts/gen-ui-info.py", line 214, in parse_mapfile
    dict_merge(output, parse_keyboard_function(f, line))
  File "./build-scripts/gen-ui-info.py", line 171, in parse_keyboard_function
    name = search.group(1)
AttributeError: 'NoneType' object has no attribute 'group'
make: *** [build/ergodox-firmware--master--20140731T155009--e330dbd--qwerty-kinesis-mod/firmware--ui-info.json] Error 1

I'm new to compiling the project, so I'm not really sure what that means.

usb (or macro): add unicode input (to the extent possible...)

The best way available might be to implement a macro that expands, for unicode character 0x****, into "alt + * * * *" (which should work for most, but not all, programs on both Windows and OS X, but only after enabling it in the OS).

This has certain problems though, obviously, and I'm hoping (against probability) to ultimately get this feature some other way.

Use LEDs to indicate the active layer

I have plans to use the LEDs to indicate the active layer.
I'm thinking about making them work as a binary number:

  • Layer 0: all LEDs off
  • Layer 1: LEDa on
  • Layer 2: LEDb on
  • Layer 3: LEDa and LEDb on
  • Layer 4: LEDc on

Or maybe if there are only 3 layers programmed, each LED is used for 1 layer each.

I might implement this myself, but maybe someone already did. So you can let me know in the comments.

Non-US desktop PC

Disclaimer: I was not able to test this, because I don't have my ErgoDox yet.

My plan is to connect my ErgoDox and another standard keyboard to my PC. The OS will be configured to use querz (German layout), because people coming to my desktop shall be able to type. The ErgoDox should allow me to type in my layout of choice (http://neo-layout.org).

If I understand correctly from inspecting the source code, there are some issues when the keyboard is connected to a PC using a non-US layout:

First of all, the neo layout does support some chars, that are not available on the standard querz keyboard. Therefore I would use the key_function type_string. This method tries to send key codes for all the chars available on a standard ansi keyboard. But that will result in wrong keycodes being send for these chars: "[Groovy, Baby]" with the keyboard attached to a German PC will send "üGroovz, Babz+". Workaround: Only use that method for chars that are not on a US keyboard.

Second: I need to define the layout using the US layout in mind, to get the correct char when pressing a particular key. E.g. when pressing the key where there would be a "z" on a German keyboard ("y" on a US keyboard), I really want it to be an "ü". To get an "ü" when the OS thinks the keyboard uses the German layout, it has to send the keycode for "[" on a US keyboard.

It should be easy to define the desired outcome without having to think in respect to the US layout. There should be some #define statement to set the target language code, and then I want to be able to just type what each key should produce.

numPush seems broken

I'm basing my firmware off the partial-rewrite branch, if you don't recall. This is where I'm at right now: https://github.com/frioux/ergodox-firmware/commits/frew

The 10-key commit is: frioux@6b89f23

The main issue is that even though I use numPush instead of lpu3l3, the number keys are still in arrow mode or non numlock. If that were fixed I'd just move on. There are a couple other strange issues as well that I figure I might as well mention.

If I use the numPush on my Z key in layer 1, it correctly pushes the numpad onto the stack (albeit still not in numlock mode.) If I use the numPush mode on the key underneath V it doesn't push onto the stack. It does something else, but I can't quite tell what, maybe esc then some keys.

Lastly, if you are interested, your commit called "(planning)" made the code no longer compile.

Keys registered twice.

Hello Ben,

Thank you for your great work. We love it.

This is not really a bug report but I fill it here to maybe help people facing the same issue than me.

I sometimes had my Ergodox randomly sending some of the keys twice and that was pretty annoying.
I changed the following value from 5 to 15 in the firmware\keyboard\ergodox\options.h

define OPT__DEBOUNCE_TIME 15

// in milliseconds

Since then, I never had the problem.

I read some reports from people that were bored by the 5ms and lowed it to 2 because it was not fast enough for them ??? I'm not so fast so 15ms is ok for me.

Best regards,

Pierre

USB features

Wished for features include:

  • NKRO
  • mouse keys
  • media keys
  • wake on keypress

I might attempt this by merging / porting hasu's version the the PJRC USB stack, or possibly by rewriting the whole thing (or most of it) myself. Neither option (for me, right now) would be trivial, and depending on interest, etc., there's a chance it won't get done... but it'd be really nice if it did. We'll see how it works out.

sticky keys (originally: "dead key" layer?)

is it possible to add a feature or function so that dead-key is handled by keyboard rather than OS?
This can be useful for non-English languages that use accents (like Ě) as well as other usages.
So basically by pressing a key, a layer is pushed to the top of stack. the next key that's pressed when this special layer is active will produce the desired code and immediately pop the layer out of stack, eliminating the need to remove the layer manually.

documentation - troubleshooting

Hey there!

I'm trying to use the firmware with a non-ergodox keyboard, and i'm trying to diagnose if i've got everything hooked up right. Any tips for troubleshooting/dev mode/getting any kind of debug info from the teensy that might indicate what i've screwed up?

Thanks much for consideration

Queue and dispatch events for fixes and having gorgeous features

I was trying to configure the layout and I have just encountered a very annoying issue: it makes other keys to be wrongly typed, like:

Use case example:

I have set the "<" and ">" to unique/single keys, because they are very used, specially for xml or just write a small html chunk, I had always difficulties to type those chars in other layouts because they are not very friendly and so slow to type a small chunk of html content

Then i tried to play with some <ul><li> in my ergodox to see if they are friendly to type, and then I noticed something: I got things like:
<Li> and <Ul>

Why this happened? because seems like the < and > chars are in the code a hack that makes use of the shift key, so a normal person when types fastly in the keyboard (and not so fast, just normal typing), most of the times you don't finish to release the key before to press the next one, and this will generate a "not yet released shift" when you have pressed the next one (note: I'm mostly speculating what the code does)

Then I said "oh my god, again this annoying issue" (I had a similar problem typing ":wq" on vim with my os-modified layout: https://github.com/Elive/programmerskblayout , i was so much annoyed by it that I have even needed to write a map in my vim conf to correct it), anyways...

Solutions

The first thing that come to my head: we need a generic-for-everybody driver to install in the OS where it is assigned an "ergodox layout", country/language-agnostic, where the ppl can configure his layout in any language - too much painful, difficult, time and work.

Then I realized another solution:

The super-dupper queue and dispatch smart manager !

So let's think the idea about something like this:

  • Each keypress is sent to a queue waiting to be dispatched, which will be inmediately sent to the computer if there's not a special meaning assigned to it, for example: if you press a "marco-shifted-mode" key like <, and before to have released it you press another normal key, the dispatcher makes sure to first release it before to mark as pressed the next one

This can perfectly solve the issue!

(And then an universe of new ideas blinked in front of my eyes)...

So what about new horizon of possibilities ? See those nice ideas:

  • dead keys: this can allow to make functions for really-dead keys (that acts like), so you can make the key to not be sent to the computer until the next one is pressed (to generate a special one)
  • one-touch layered keys mode (like dead keys): if you press a layer key (ex. L3) and release it (instead of keep it pressed), then you press another key (ex. "m"), then it will be sent the "m" equivalent-key from the layer 3 -- this improves in speed and ergonomic health by not stressing the wrist when pressing more than one key at the same time
    • friendly example: you have layer L4 set to "media keys", so you hit the media key and then (after to release) you press the key "n" which means "next song"
  • special combos:
    • if you press three times the backspace key you will have 3 chars deleted, but instead you can say in the dispatcher that if this key is pressed three times it should send the combo "shift + home + backspace" (will delete everything from-cursor to start-of-line)
    • note: this could include a "lag" of not send anything to the computer until it knows that the next key is or not another backspace, but it can also dispatch things instantly and then trigger the combo in case that this step was reached
  • replacements: similar to the previous idea let's say i write emailsignature1, a function that is defined to replace this will count the number of characters to send the same amount of "backspace" to delete the word and then type a chunk of text that you commonly use for sign your emails --> this can be a friendly replacement of "remember all your keys in all the layouts of your keyboard"
  • Create infinite layers: A small problem that I have see is that I want to set all of my keys in the first layer to be able to have all of them, but then i have no space for set the ones assigned to the layers, so I have now in my draft "only" 6 layers, i dont see the way to have more than sacrificing other keys, using this dispatcher idea you can configure things like:
    • if i press the key L1 and then L2 (one after the other or at the same time) then I go to the layer L3 --> (L1 + L2 = L3, easy to remember)
    • if I press L2 twice I go to L4
    • if I press Lx "a layer trigger" and then the number 9 I go to the layer 9
  • OMG how much ideas can happen with a dispatcher! I should stop thinking NOW! :)

Note that these are just ideas of possibilities, I don't mean that we should have all those features but making the keys work on a queue/dispatcher way can allow all those possibilities to exist, and with a few entries (or just a copypaste of these ideas) in the documentation there would be eventually people that would write nice features like these listed ideas :)

Workman-p

Am curious about using a layout such as workman-p. Where the number row is the symbols (shifted numbers), and then you have to shift to get the numbers. What would be required for that?

How to press one key and send a key-combo?

For example if I press a certain key (only one) in the ergodox, the computer receives it as cmd+shift+d or control+tab+z

Is it possible to implement this on the current state of ergodox-firmware? What files should I be looking at to achieve this?

on-keyboard remap capability

Tentative, based on time and interest.

This would be implemented per keymap, the goal being to have something like the Kinesis.

Also, the UI being written by OrangeJewce and effh should (for windows people at least) make it much easier to do firmware remapping on the computer than it would be to do it on the keyboard alone. For the rest of us (and any power remappers), I plan to include a nice howto in the final documentation about modifying keymaps in the source code.

Non-standard shifted keys

Somewhat related to issue #35: If I understand correctly, it is supported to move every key to every place. But the default for all keys is to keep their meaning, i.e. 2 becomes @ when shift is pressed on a US keyboard, and " on a German keyboard.

But is it possible to use shift for the normal keys (a-z), but define the shifted meaning exactly for the other keys? --> Shift+2 with the neo layout should become §.

One workaround I see would be to define the first layer without shift and use use a layer switch instead, defining a-z on the first layer and A-Z and all the other keys explicitly on the second layer. Problem: Shortcuts with shift will not work any more.

json keymap info fails to build

( ./'build-scripts/gen-ui-info.py' \
        --current-date '2014-03-03 19:37:55-08:00' \
        --git-commit-date '2014-03-03 19:31:45 -0800' \
        --git-commit-id 'c87e2824d6fad4e3d38a85651b864ac281c59f14' \
        --map-file-path 'build/ergodox-firmware--master--20140303T193145--c87e282--qwerty-kinesis-mod/firmware.map' \
        --source-code-path 'src' \
        --matrix-file-path 'src/keyboard/ergodox/matrix.h' \
        --layout-file-path \
            'src/keyboard/ergodox/layout/qwerty-kinesis-mod.c' \
    ) > 'build/ergodox-firmware--master--20140303T193145--c87e282--qwerty-kinesis-mod/firmware--ui-info.json'
Traceback (most recent call last):
  File "./build-scripts/gen-ui-info.py", line 476, in <module>
    main()
  File "./build-scripts/gen-ui-info.py", line 465, in main
    dict_merge(output, parse_mapfile(args.map_file_path))
  File "./build-scripts/gen-ui-info.py", line 218, in parse_mapfile
    dict_merge(output, parse_layout_matrices(f, line))
  File "./build-scripts/gen-ui-info.py", line 186, in parse_layout_matrices
    name = re.search(r'.progmem.data.(_kb_layout\S*)', line).group(1)
AttributeError: 'NoneType' object has no attribute 'group'
make: *** [build/ergodox-firmware--master--20140303T193145--c87e282--qwerty-kinesis-mod/firmware--ui-info.json] Error 1

Note that this is not the same error as #30

NKRO

I'd like to get this done, but I've never done anything with USB before, so I can only promise to try.

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.