The kick profile: KICK-class panel controls
The kick profile describes the real KICK-class groovebox panel, control for control,
so firmware written against it maps 1:1 onto the hardware, and the browser skin shows
the same arrangement. This page is the reference for that mapping, including the
panel's own ids, which a front-panel bridge (see runtime-native/docs/kick-panel.md)
translates from.
Sources (facts only; no code was copied): the manufacturer's published firmware
source, AGPL-3.0 (button, LED, pad and knob enums in
Kick/modules/contracts/dcl/dcl_contracts.h; SHIFT layers in
Kick/apps/kickem/simulator/kick_SimulatorMainControl.cpp; the protocol in
ComProtocol/PktMgr), and the front-panel product photo in that repository
(docs/images/kick-front.webp) for positions and groupings. OpenGroove is not
affiliated with the manufacturer. The skin is our own Lumen drawing of the layout;
it carries no third-party logo, colours or type.
The table lives in code in runtime-core/src/kick.ts; the browser and Node runtimes
use the same PROFILES.kick (runtime-core/src/host.ts).
og_device
| Field | Value |
|---|---|
profile |
OG_PROFILE_KICK (1) |
| display | 1024 × 600 RGBA8888, touch (OG_CAP_TOUCH) |
| pads | 4 × 4, RGB, velocity and pressure |
| knobs | 5, OG_KNOB_MIXED: knobs 0–3 are P1–P4 (relative encoders), knob 4 is the touch strip (absolute 0..1) |
has_jog |
1: the centre encoder sends OG_JOG; its push is OG_BTN_SELECT (ENTER) |
buttons_present |
0xFFFFEF3F: ids 0–5, 8–11, 13–31 |
buttons_present_hi |
0x7: ids 32–34 |
control_count |
39 |
There are no UP, DOWN or BANK buttons on this panel; firmware should use the jog for vertical navigation. The MASTER and REC level pots set analog levels (output and input gain) and are never reported to firmware.
Buttons
32 buttons (the jog push included), all with LEDs. A SHIFT legend has no id of its own: the firmware sees
OG_BTN_SHIFT held and then the button. A bridge that receives a shifted panel id
(GRID, for example) sends the button's og id; SHIFT is already down.
| og id | og name | panel legend | SHIFT legend | role | panel ids (main / shifted) | group |
|---|---|---|---|---|---|---|
| 0 | OG_BTN_PLAY |
PLAY | TRANSPORT | PLAY 45 |
transport | |
| 1 | OG_BTN_STOP |
STOP | TRANSPORT | STOP 44 |
transport | |
| 2 | OG_BTN_REC |
REC | TRANSPORT | RECORD 42 |
transport | |
| 3 | OG_BTN_SHIFT |
SHIFT | MODIFIER | SHIFT 31 |
side | |
| 4 | OG_BTN_LEFT |
- | NAVIGATE | MINUS 27 |
jog | |
| 5 | OG_BTN_RIGHT |
+ | NAVIGATE | PLUS 21 |
jog | |
| 8 | OG_BTN_MODE_1 |
A | E | MODE | BANK_A 0 / BANK_E 4 |
bank |
| 9 | OG_BTN_MODE_2 |
B | F | MODE | BANK_B 1 / BANK_F 5 |
bank |
| 10 | OG_BTN_MODE_3 |
C | G | MODE | BANK_C 2 / BANK_G 6 |
bank |
| 11 | OG_BTN_MODE_4 |
D | H | MODE | BANK_D 3 / BANK_H 7 |
bank |
| 13 | OG_BTN_SELECT |
ENTER | NAVIGATE | KNOB_ENTER 26 |
jog | |
| 14 | OG_BTN_BACK |
BACK | NAVIGATE | BACK 29 |
jog | |
| 15 | OG_BTN_MENU |
MENU | PREFS | NAVIGATE | MENU 22 / PREF 23 |
side |
| 16 | panel | MAIN | GRID | MODE | MAINMODE 8 / GRID 9 |
mode |
| 17 | panel | BROWSE | SAVE | MODE | BROWSE 10 / SAVE 11 |
mode |
| 18 | panel | TRACK MIX | PAD MIX | MODE | TRACK_MIX 12 / PAD_MIX 13 |
mode |
| 19 | panel | TRACK MUTE | PAD MUTE | MODE | TRACK_MUTE 14 / PAD_MUTE 15 |
mode |
| 20 | panel | NEXT SEQ | FX | MODE | NEXT_SEQ 16 / FX 17 |
mode |
| 21 | panel | TAP TEMPO | MASTER | TRANSPORT | TAP_TEMPO 18 / MASTER 19 |
side |
| 22 | panel | NOTE REPEAT | LATCH | PERFORM | NOTE_REPEAT 24 / LATCH 25 |
side |
| 23 | panel | STEP SEQ | AUTO | MODE | STEP_SEQ 32 / AUTOMATION 33 |
page |
| 24 | panel | TC | ON/OFF | PERFORM | TC 34 / ON_OFF 35 |
page |
| 25 | panel | SAMPLER | LOOP | MODE | SAMPLER 36 / LOOPER 37 |
page |
| 26 | panel | SAMPLE EDIT | LINK EDIT | MODE | SAMPLE_EDIT 38 / LINK_EDIT 39 |
page |
| 27 | panel | PROG EDIT | MIDI CTRL | MODE | PROG_EDIT 40 / MIDI_CONTROL 41 |
page |
| 28 | panel | FULL LEVEL | HALF LVL | PERFORM | FULL_LEVEL 48 / HALF_LEVEL 49 |
left |
| 29 | panel | 16 LEVELS | NOTES | PERFORM | 16LEVELS 50 / NOTES 51 |
left |
| 30 | panel | ERASE | EDIT | ERASE 52 |
left | |
| 31 | panel | LINK | TRANSPORT | LINK 47 |
link | |
| 32 | panel | COPY | EDIT | COPY 20 |
jog | |
| 33 | panel | OVERDUB | TRANSPORT | OVERDUB 43 |
transport | |
| 34 | panel | PLAY START | TRANSPORT | PLAYSTART 46 |
transport |
LEDs: ids 0–15 come from og_button_leds_ptr(), ids 16–63 from og_panel_leds_ptr()
(optional; byte n is id 16 + n). Any non-zero brightness lights the button's LED
(the panel's main id).
Other controls
| Control | og | Panel |
|---|---|---|
| P1–P4 | OG_KNOB 0–3, relative detents; descriptors ENCODER, role PARAM, labels P1–P4 |
KNOBS packets, EN_KNOB_1..4 (1–4): [knob, direction, ticks] |
| Jog | OG_JOG ±detents; descriptor PUSH_ENCODER, role DATA, paired = OG_BTN_SELECT |
EN_KNOB_CENTER (0); some code paths report turns as KNOB_CW 30 / KNOB_CCW 28 button ids: map those to OG_JOG +1 / −1 |
| Jog push (ENTER) | OG_BTN_SELECT (13) |
KNOB_ENTER 26 |
| Touch strip | OG_KNOB 4, absolute 0..1 (bottom = 0); descriptor POT, role PERFORM, label STRIP |
SLIDER packets (touch input); normalise the panel's range to 0..1. Its LED bar has no og output yet; the bridge may show the touch position. |
| Pads | OG_PAD_*, index row * 4 + col, row 0 at the top |
PAD packets [pad, state, velocity, aftertouch], pad 0–15 counted from the bottom-left as printed (1–4 bottom row): og index = (3 - pad / 4) * 4 + pad % 4. Banks A–H are buttons, not more pads. |
| Pad LEDs | og_pad_leds_ptr() RGB |
palette indices (18 colours): send the nearest |
| Screen | OG_TOUCH_* in framebuffer pixels |
the 1024 × 600 panel and its touch controller (not over the UART) |
Descriptor order
og_controls_ptr() receives, in order: P1–P4 (ENCODER, PARAM), STRIP (POT,
PERFORM, knob 4), JOG (PUSH_ENCODER, DATA, paired 13), the 31 buttons above
except ENTER (BUTTON, with the panel legend as label), PADS (16) and SCREEN
(TOUCH). Labels are the panel legends, at most 11 bytes.
Panel arrangement
Measured on the product photo, as fractions of the panel width (the panel is square):
| Group | Where |
|---|---|
| Power LED window, MASTER and REC pots, LINK with four LEDs | left column, top |
| Touch strip; FULL LEVEL, 16 LEVELS, ERASE | left column, beside the pads |
| Screen bezel (1024 × 600 glass) | top centre, 0.17–0.83 across, 0.03–0.44 down |
| P1–P4 | right edge, stacked beside the screen |
| Pads 4 × 4 | lower centre, pitch 0.12 |
| BANK A–D (E–H) | right block, first row under a BANK rule |
| MAIN, BROWSE, TRACK MIX, TRACK MUTE, NEXT SEQ | right block, second row |
| TAP TEMPO, NOTE REPEAT / jog plate (BACK, COPY, −, + around the jog) / MENU, SHIFT | right block, middle |
| STEP SEQ, TC, SAMPLER, SAMPLE EDIT, PROG EDIT | right block, fourth row |
| REC, OVERDUB, STOP, PLAY, PLAY START | right block, bottom row (round) |
Toolkit bindings
toolkit/bindings/kick.json adds the SHIFT layers and the panel buttons on top of
the capability fallback. Together:
| Control | Intent |
|---|---|
| Jog turn | focus step (navigation) or value delta (editing); SHIFT + jog: page step |
| ENTER (tap / hold) | activate / back |
| BACK | back; SHIFT + BACK: OG_CMD_UNDO |
| MENU | menu; SHIFT + MENU: OG_CMD_PREFS |
| − / + | page step (navigation) or value step (editing); SHIFT: focus ±4 |
| BANK A–D | OG_CMD_MODE_1..4; SHIFT (E–H): OG_CMD_MODE_5..8 |
| PLAY, STOP, REC | OG_CMD_PLAY, OG_CMD_STOP, OG_CMD_REC |
| MAIN | OG_CMD_HOME |
| BROWSE; SHIFT (SAVE) | OG_CMD_BROWSE; OG_CMD_SAVE |
| TRACK MIX, TRACK MUTE | OG_CMD_MIX, OG_CMD_MUTE |
| SHIFT + NEXT SEQ (FX) | OG_CMD_FX |
| TAP TEMPO, NOTE REPEAT, ERASE, COPY, OVERDUB, PLAY START | OG_CMD_TAP_TEMPO, OG_CMD_NOTE_REPEAT, OG_CMD_ERASE, OG_CMD_COPY, OG_CMD_OVERDUB, OG_CMD_PLAY_START |
| P1–P4 | value delta on slots 0–3 |
| Touch strip | not bound (role PERFORM; the firmware reads OG_KNOB 4) |
The other panel buttons (NEXT SEQ, STEP SEQ, TC, SAMPLER, SAMPLE EDIT, PROG EDIT,
LINK, FULL LEVEL, 16 LEVELS and their SHIFT legends) reach the firmware as raw button
events; bind them in your own table ("profile": "kick" lets a bindings file name
them, for example "id": "STEP_SEQ").