struct Action { int keyID; int keyModifierID; }; //Hardware buttons and Actions are ordered from the bottom left to the top right matrix. Rotary encoder: left, right then press Action presets[][15] = { { {KEY_MEDIA_PREV_TRACK, 0}, {KEY_MEDIA_PLAY_PAUSE, 0}, {KEY_MEDIA_NEXT_TRACK, 0}, {KEY_F16, 0}, {KEY_F17, 0}, {KEY_F18, 0}, {KEY_F19, 0}, {KEY_F20, 0}, {KEY_F21, 0}, {KEY_F22, 0}, {KEY_F23, 0}, {-1, 0}, //menu / back {KEY_MEDIA_VOLUME_DEC, 0}, {KEY_MEDIA_VOLUME_INC, 0}, {KEY_MEDIA_MUTE, 0} }, { {KEY_F13, MODIFIERKEY_SHIFT}, {KEY_F14, MODIFIERKEY_SHIFT}, {KEY_F15, MODIFIERKEY_SHIFT}, {KEY_F16, MODIFIERKEY_SHIFT}, {KEY_F17, MODIFIERKEY_SHIFT}, {KEY_F18, MODIFIERKEY_SHIFT}, {KEY_F19, MODIFIERKEY_SHIFT}, {KEY_F20, MODIFIERKEY_SHIFT}, {KEY_F21, MODIFIERKEY_SHIFT}, {KEY_F22, MODIFIERKEY_SHIFT}, {KEY_F23, MODIFIERKEY_SHIFT}, {-1, 0}, //menu / back {KEYPAD_MINUS, MODIFIERKEY_ALT}, {KEYPAD_PLUS, MODIFIERKEY_ALT}, {KEYPAD_ASTERIX, MODIFIERKEY_ALT} }, { {KEY_F13, MODIFIERKEY_CTRL}, {KEY_F14, MODIFIERKEY_CTRL}, {KEY_F15, MODIFIERKEY_CTRL}, {KEY_F16, MODIFIERKEY_CTRL}, {KEY_F17, MODIFIERKEY_CTRL}, {KEY_F18, MODIFIERKEY_CTRL}, {KEY_F19, MODIFIERKEY_CTRL}, {KEY_F20, MODIFIERKEY_CTRL}, {KEY_F21, MODIFIERKEY_CTRL}, {KEY_F22, MODIFIERKEY_CTRL}, {KEY_F23, MODIFIERKEY_CTRL}, {-1, 0}, //menu / back {KEYPAD_MINUS, MODIFIERKEY_CTRL}, {KEYPAD_PLUS, MODIFIERKEY_CTRL}, {KEYPAD_ASTERIX, MODIFIERKEY_CTRL} } }; int getPresetsCount() { return sizeof(presets)/(sizeof(Action)*15); } Action getAction(int presetID, int physicalKeyID) { int presetCount = getPresetsCount(); return presets[(presetID % presetCount)][physicalKeyID]; }