Code Monkey home page Code Monkey logo

special-purposes-keyboard's Introduction

special-purposes-keyboard

๐Ÿ Python 3 CLI utility to programming special purposes keyboard


This is an multi-OS implementation of programming a special purposes keyboard:

Usage scenario

  • Edit layout file.
  • Program special purposes keyboard by this utility with command-line interface.

Advantages of this utility

  • You may have several layout files.
  • Not need to use GUI to program and even for edit layout file (Unix way ๐Ÿค–).
  • Multi-OS usage. Feel free. ๐Ÿค 

Layout file

Key programming pattern:

key=symbol

  where:
key    - special purposes keyboard key;
symbol - keyboard/mouse action to do.

Symbols examples:

multi-key sequence:
a,b,c

with special keys:
ctrl+shift+alt+meta+a

the same:
c+s+a+m+a

multi-key sequence:
c+s+a+m+a,b,c

For knob programming use section with name Kn for knob n. Example:

[K1]
left=<-
right=->
press=enter

For keys programming use KEYS section. Example:

[KEYS]
1=a
2=s+b
3=a+s+c,d,e

Available knobs and keys depends of special purposes keyboard model.

For rgb leds mode, use LED section. Example:

[LED]
mode=1

3 modes are available :

  • 0 : switched off
  • 1 : pulsing last pressed key (alternating RGB)
  • 2 : continuous 'snake like' pattern

See layout file complete example: layout.ini

And another example: layout_volume_play.ini

Available symbols

Here's the list of the symbols usable in the layout files, mapped on a ISO (105 keys) keyboard

iso105

Image created with http://www.keyboard-layout-editor.com

Programming

Be aware that USB subsystem access needs relevant rights. sudo for Kubuntu.

Install Python requirements before usage:

pip install -r requirements.txt

Command line help:

python3 ./keyboard_program.py -h
usage: keyboard_program.py [-h] [-l FILEPATH] [-d] [-v]

Programming utility of special purposes keyboard with encoders and keys.

options:
  -h, --help            show this help message and exit
  -l FILEPATH, --layout FILEPATH
                        keyboard layout file path; default: layout.ini
  -d, --dry             don't iteract with keyboard. Set this option to validate keyboard layout file
  -v, --verbose, -v     verbose level; use multiple times to increase log level; example: -vv

Special keys: CTRL, SHIFT, ALT, META or WIN. Example: "ctrl+shift+alt+meta+<-" or "c+s+a+m+<-". Example
multi-key sequence: "a,b,c" or "c+s+a+m+a,b,c". Known special keyboard USB Vendor:Product: 1189:8890.
Known symbols: esc, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f14, f15, f16, f17, f18, f19,
f20, f21, f22, f23, f24, prtscn, scrolllock, pause, tilda, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, minus, +,
plus, backspace, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, space,
tab, capslock, enter, [{, ]}, \|, ;:, bracket, ,<, .>, /?, ins, del, home, end, pgup, pgdn, ->, <-,
arrowdn, arrowup, numlock, numdiv, nummul, num-, num+, num., menu, num1, num2, num3, num4, num5, num6,
num7, num8, num9, num0, mouseleft, mouseright, mousemiddle, mouseweelup, mouseweeldn, play/pause, play,
pause, mute, volume+, volume-, nextsong, prevsong

Check layout file layout.ini:

sudo python3 ./keyboard_program.py -l "layout.ini" -vd
DRY RUN !
Read layout config file "layout.ini"
Encoder 1 left  programming to "<-"
Encoder 1 right programming to "->"
Encoder 1 press programming to "enter"
Key 03 programming to "3"
Key 02 programming to "2"
Key 01 programming to "1"
Key 06 programming to "6"
Key 05 programming to "5"
Key 04 programming to "4"
DONE

Command line programming example with verbose output (use default layout file name layout.ini):

sudo python3 ./keyboard_program.py -v
Read layout config file "layout.ini"
SPECIAL KEYBOARD CONNECTED
Encoder 1 left  programming to "<-"
Encoder 1 right programming to "->"
Encoder 1 press programming to "enter"
Key 03 programming to "3"
Key 02 programming to "2"
Key 01 programming to "1"
Key 06 programming to "6"
Key 05 programming to "5"
Key 04 programming to "4"
DONE

Command line programming example with more verbose output (use default layout file name layout.ini):

sudo python3 ./keyboard_program.py -vv
Read layout config file "layout.ini"
SPECIAL KEYBOARD CONNECTED
Encoder 1 left  programming to "<-"
Encoder 1 left  programming
        Bind KEY13 to codes=('0x50',) mod=none
Encoder 1 right programming to "->"
Encoder 1 right programming
        Bind KEY15 to codes=('0x4F',) mod=none
Encoder 1 press programming to "enter"
Encoder 1 press programming
        Bind KEY14 to codes=('0x28',) mod=none
Key 03 programming to "3"
Key 03 programming to code=0x20 mod=none
        Bind KEY03 to codes=('0x20',) mod=none
Key 02 programming to "2"
Key 02 programming to code=0x1F mod=none
        Bind KEY02 to codes=('0x1F',) mod=none
Key 01 programming to "1"
Key 01 programming to code=0x1E mod=none
        Bind KEY01 to codes=('0x1E',) mod=none
Key 06 programming to "6"
Key 06 programming to code=0x23 mod=none
        Bind KEY06 to codes=('0x23',) mod=none
Key 05 programming to "5"
Key 05 programming to code=0x22 mod=none
        Bind KEY05 to codes=('0x22',) mod=none
Key 04 programming to "4"
Key 04 programming to code=0x21 mod=none
        Bind KEY04 to codes=('0x21',) mod=none
DONE

USB data exchange log scenario on Linux-based machines

# 1. Attach special-purposes-keyboard by USB

# 2. Get USB bus number of keyboard USB connection:
lsusb
# Example out (keyboard is attached to bus 1):
# Bus 001 Device 006: ID 1189:8890 Acer Communications & Multimedia

# 3. Enable USB log by usbmon kernel module:
sudo modprobe usbmon

# 4. Write USB log to keyboard-program.log file (stay this console running while USB logging):
#    1u is for bus 1. You can also filter device using grep (... | grep 1:006 >> ...)
sudo cat /sys/kernel/debug/usb/usbmon/1u >> keyboard-program.log

# 5. Run "MINI KeyBoard.exe" on VirtualBox. Check USB access are granted

# 6. Program
# 6. Add label to USB log file (that help to analyze programming byte sequence):
echo "DOWNLOAD KEY1 = A" >> keyboard-program.log
# 6.1 program KEY1 = A with "MINI KeyBoard.exe"

# 7. Repeat p.6 for another keys/mouse/LED programming

# 8. Stop USB log (press <Ctrl+C> in console)

special-purposes-keyboard's People

Contributors

jerome-labidurie avatar vika-sonne avatar

Stargazers

 avatar

Watchers

 avatar

special-purposes-keyboard's Issues

f13-f24 keys

I'm glad I saw your review on the product page! The CLI works well and the instructions are clear.

I suggest adding more fn row keys to avoid conflict with standard keyboard. This worked for me:

  'f14': 0x69,
  'f15': 0x6A,
  'f16': 0x6B,
  'f17': 0x6C,
  'f18': 0x6D,
  'f19': 0x6E,
  'f20': 0x6F,
  'f21': 0x70,
  'f22': 0x71,
  'f23': 0x72,
  'f24': 0x73,

More here http://www.quadibloc.com/comp/scan.htm

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.