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").