Finish multidvorak layout.

This commit is contained in:
Phil Hagelberg 2019-07-02 21:43:13 -07:00
parent 31ea050cad
commit 222fae601d
4 changed files with 104 additions and 16 deletions

View file

@ -4,13 +4,13 @@ F_CPU=16000000
TARGET=menelaus
USB_DEVICE=/dev/ttyACM0
USB=/dev/ttyACM0
build: $(TARGET).hex
upload: $(TARGET).hex
while [ ! -r $(USB_DEVICE) ]; do sleep 1; done; \
avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB_DEVICE)
while [ ! -r $(USB) ]; do sleep 1; done; \
avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
test: ; racket test.rkt

View file

@ -4,6 +4,31 @@ A firmware for the
[Atreus](http://atreus.technomancy.us) keyboard, written in
[Microscheme](https://ryansuchocki.github.io/microscheme/).
## Features
* 6KRO (6 simultaneous keys, not including modifiers)
* Software debouncing
* Multiple layers (limited only by memory)
* Bind arbitrary Scheme functions to a key
* Combo keys (a single keystroke can send a modifier and a non-modifier)
## Usage
Replace `/dev/ttyACM0` with the path your OS assigns to the USB
bootloader of the microcontroller:
$ make upload USB=/dev/ttyACM0
Currently only the "multidvorak" layout is supported.
## Development
The firmware can also be run on a PC rather than on the
microcontroller in the keyboard using `test.rkt` which loads it up
into Racket and simulates the GPIO functions with a test harness:
$ make test
## License
Copyright © 2014-2019 Phil Hagelberg and contributors

View file

@ -48,6 +48,7 @@
(define key-home 74)
(define key-end 77)
(define key-insert 73)
(define key-delete 76)
(define key-semicolon 51)
(define key-comma 54)
@ -71,6 +72,23 @@
(define key-vol-up 128)
(define key-vol-down 129)
(define key-f1 58)
(define key-f2 59)
(define key-f3 60)
(define key-f4 61)
(define key-f5 62)
(define key-f6 63)
(define key-f7 64)
(define key-f8 65)
(define key-f9 66)
(define key-f10 67)
(define key-f11 68)
(define key-f12 69)
(define key-printscreen 70)
(define key-scroll-lock 71) ; lol
(define key-pause 72)
(define (modifier? keycode) (list? keycode))
(define (modify keycode) (list keycode))
(define (unmodify keycode) (car keycode))
@ -83,3 +101,5 @@
(define mod-shift (modify #x02))
(define mod-alt (modify #x04))
(define mod-super (modify #x08))
(define (sft keycode) (combo mod-shift keycode)) ; shorthand

View file

@ -14,7 +14,15 @@
(define (set-layer-0)
(set! current-layer (vector-ref layers 0)))
(vector-set!
(define (set-layer-hard)
(set! current-layer (vector-ref layers 3)))
(define (reset)
#f) ;; TODO: uh, seriously. I need this. how.
;;;; layers
(vector-set! ; base
layers 0
(vector key-q key-w key-e key-r key-t key-backslash
key-y key-u key-i key-o key-p
@ -28,23 +36,58 @@
key-esc key-tab mod-super mod-shift key-backspace mod-alt
key-space fn key-quote key-left-bracket key-enter))
(vector-set!
(vector-set! ; fn
layers 1
(vector (combo mod-shift key-1) (combo mod-shift key-2) key-up
(combo mod-shift key-dash) (combo mod-shift key-equal)
0 key-page-up key-7 key-8 key-9 (combo mod-shift key-8)
(vector (sft key-1) (sft key-2) key-up (sft key-dash) (sft key-equal) 0
key-page-up key-7 key-8 key-9 (sft key-8)
(combo mod-shift key-3) key-left key-down key-right
(combo mod-shift key-4) 0
key-page-down key-4 key-5 key-6 (combo mod-shift key-right-bracket)
(sft key-3) key-left key-down key-right (sft key-4) 0
key-page-down key-4 key-5 key-6 (sft key-right-bracket)
key-dash key-equal (combo mod-shift key-9)
(combo mod-shift key-0) (combo mod-shift key-7) mod-ctrl
key-dash key-equal (sft key-9) (sft key-0) (sft key-7) mod-ctrl
key-backtick key-1 key-2 key-3 key-backslash
set-layer-2 key-insert mod-super mod-shift key-backspace mod-alt
key-space fn key-e key-0 key-right-bracket))
(vector-set!
layers 2 ; TODO
(vector 0))
(vector-set! ; l2 (function keys, etc)
layers 2
(vector key-insert key-home key-up key-end key-page-up 0
key-up key-f7 key-f8 key-f9 key-f10
key-delete key-left key-down key-right key-page-down 0
key-down key-f4 key-f5 key-f6 key-f11
0 key-vol-up 0 0 reset mod-ctrl
set-layer-hard key-f1 key-f2 key-f3 key-f12
0 key-vol-down mod-super mod-shift key-backspace mod-alt
key-space set-layer-0 key-printscreen key-scroll-lock key-pause))
(vector-set! ; hard dvorak
layers 3
(vector key-quote key-comma key-period key-p key-y key-backslash
key-f key-g key-c key-r key-l
key-a key-o key-e key-u key-i key-backtick
key-d key-h key-t key-n key-s
key-semicolon key-q key-j key-k key-x mod-ctrl
key-b key-m key-w key-v key-z
key-esc key-tab mod-super mod-shift key-backspace mod-alt
key-space fn key-quote key-left-bracket key-enter))
(vector-set! ; hard dvorak fn
layers 4
(vector (sft key-1) (sft key-2) key-up (sft key-left-bracket) (sft key-right-bracket) 0
key-page-up key-7 key-8 key-9 (sft key-8)
(sft key-3) key-left key-down key-right (sft key-4) 0
key-page-down key-4 key-5 key-6 (sft key-equal)
key-left-bracket key-right-bracket (sft key-9) (sft key-0) (sft key-7) mod-ctrl
key-backtick key-1 key-2 key-3 key-backslash
set-layer-2 key-insert mod-super mod-shift key-backspace mod-alt
key-space fn key-e key-0 key-right-bracket))