qmk_firmware/keyboards/handwired/promethium/keymaps/priyadi
Jeff Epler 9632360caa
Use a macro to compute the size of arrays at compile time (#18044)
* Add ARRAY_SIZE and CEILING utility macros

* Apply a coccinelle patch to use ARRAY_SIZE

* fix up some straggling items

* Fix 'make test:secure'

* Enhance ARRAY_SIZE macro to reject acting on pointers

The previous definition would not produce a diagnostic for
```
int *p;
size_t num_elem = ARRAY_SIZE(p)
```
but the new one will.

* explicitly get definition of ARRAY_SIZE

* Convert to ARRAY_SIZE when const is involved

The following spatch finds additional instances where the array is
const and the division is by the size of the type, not the size of
the first element:
```
@ rule5a using "empty.iso" @
type T;
const T[] E;
@@

- (sizeof(E)/sizeof(T))
+ ARRAY_SIZE(E)

@ rule6a using "empty.iso" @
type T;
const T[] E;
@@

- sizeof(E)/sizeof(T)
+ ARRAY_SIZE(E)
```

* New instances of ARRAY_SIZE added since initial spatch run

* Use `ARRAY_SIZE` in docs (found by grep)

* Manually use ARRAY_SIZE

hs_set is expected to be the same size as uint16_t, though it's made
of two 8-bit integers

* Just like char, sizeof(uint8_t) is guaranteed to be 1

This is at least true on any plausible system where qmk is actually used.

Per my understanding it's universally true, assuming that uint8_t exists:
https://stackoverflow.com/questions/48655310/can-i-assume-that-sizeofuint8-t-1

* Run qmk-format on core C files touched in this branch

Co-authored-by: Stefan Kerkmann <karlk90@pm.me>
2022-08-30 10:20:04 +02:00
..
config.h Remove full bootmagic config (#17702) 2022-07-19 02:28:23 +01:00
flash.sh Trackpoint initialization 2016-12-05 01:15:04 +07:00
keymap.c Use a macro to compute the size of arrays at compile time (#18044) 2022-08-30 10:20:04 +02:00
README.md Keymap updates and some adjustment for latest version of QMK 2017-04-19 02:52:57 +07:00
rgbtheme_carbon.h Simple RGB backlight theming 2017-04-30 18:04:58 +07:00
rgbtheme_default.h Simple RGB backlight theming 2017-04-30 18:04:58 +07:00
rgbtheme.h Simple RGB backlight theming 2017-04-30 18:04:58 +07:00
rules.mk Move Bluetooth config to common_features.mk (#14404) 2021-09-12 08:22:03 -07:00

Priyadi Keymap for Planck-like Keyboards

Main layer modifications from default Planck layout:

  • Enter moved to quotes position
  • Quotes moved to semicolon position.
  • QWERTZ style colon & semicolon. shift-. = : shift-, = ; This is done in hardware, no layout switching needed in software.
  • < & > occupied precious real estate, and so they are moved down to punctuation layer.
  • Right-shift on Enter position.
  • Removed arrow keys, they are on another layer now.
  • Put Ctrl-Alt-Super and Super-AltGr-Ctrl in left & right corners.
  • Lower & Raise is now called Num and Fun.
  • OS & Left keys become another thumb modifier: Empty & Greek (Empty because I used this for another use and my muscle memory is not adapted to it yet)

On Promethium, Trackpoint is enabled on PD2 and PD3. We impersonate a Thinkpad keyboard to be able to use Thinkpad driver on Windows (still needs verification).

AltGr & Compose dual use key. Tap for Compose (mapped to Scroll Lock in hardware) and press for AltGr.

Supported layouts: QWERTY, DVORAK, Colemak, Workman, Norman. Switchable from SYS layer. In DVORAK, semicolon is replaced by /? key.

Num activates NUM layer: hexkeypad on the right side and most punctuation on the left side. Hexkeypad is optimized for C-style hex, IPv6, HTML RGB triplets, etc.

Fun activates FUN layer: arrow cluster on right home row, F-numbers on left side.

Pressing Num+Fun activates PUNC layer: same punctuations as NUM layer on the left side, parens on the right side.

Greek activates either GREEKU or GREEKL layer, depending whether shift is pressed or not. Shift state changes are also taken into account when the layer is active.

Greek+Empty activates EMOJI layer. The whole keyboard now outputs emojis!

Pressing both spacebars (spacekeys, actually) activates GUI layer. QWERTYUIOP switches to a virtual desktop. J & L switches virtual desktop to the left or right. S & F behaves like Alt-Tab and Alt-Shift-Tab. This works by sending Alt press when entering the layer, and Alt release when other than S or F keys are pressed.

Pressing both Ctrls activates SYS layer for configuring the keyboard.

On Promethium, USB or Bluetooth output is detected on startup. If USB is connected, then USB is used initially. SYS-U and SYS-B switch output to USB or Bluetooth at runtime. Current active output is indicated with LEDs.

SYS-W, SYS-L, SYS-M switch Unicode input method. SYS-Q, SYS-D, SYS-C, SYS-K, SYS-N switch to QWERTY, DVORAK, Colemak, Workman and Norman, respectively.

SYS-A (mnemonic: audio) toggles faux clicky: use buzzer to emit clicks on key presses and releases.

On Promethium there are 16 indicator LEDs, and under switch LEDs on each switches, including Trackpoint buttons. Totaling 67 LEDs. Output is limited to 0xF for each LEDs to conserve power. SYS-G (mnemonic: glow) toggles various backlighting modes.

On Promethium, there's a LED to indicate battery level. Hue indicates level: green is full, red is empty.