11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | Macro Types:
25 | "group": a group containing more groups or macros
26 | "macro": a macro that will be executed
27 | "blank": a blank spacer for formating
28 |
29 | Keycodes (kc):
30 | 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,
31 | ZERO, ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE,
32 | ENTER, RETURN, ESCAPE, BACKSPACE, TAB, SPACEBAR, SPACE, MINUS, EQUALS, LEFT_BRACKET, RIGHT_BRACKET,
33 | BACKSLASH, POUND, SEMICOLON, QUOTE, GRAVE_ACCENT, COMMA, PERIOD, FORWARD_SLASH, CAPS_LOCK,
34 | F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14, F15, F16, F17, F18, F19, F20, F21, F22,
35 | F23, F24, PRINT_SCREEN, SCROLL_LOCK, PAUSE, INSERT, HOME, PAGE_UP, DELETE, END, PAGE_DOWN,
36 | RIGHT_ARROW, LEFT_ARROW, DOWN_ARROW, UP_ARROW, KEYPAD_NUMLOCK, KEYPAD_FORWARD_SLASH, KEYPAD_ASTERISK,
37 | KEYPAD_MINUS, KEYPAD_PLUS, KEYPAD_ENTER, KEYPAD_ONE, KEYPAD_TWO, KEYPAD_THREE, KEYPAD_FOUR, KEYPAD_FIVE,
38 | KEYPAD_SIX, KEYPAD_SEVEN, KEYPAD_EIGHT, KEYPAD_NINE, KEYPAD_ZERO, KEYPAD_PERIOD, KEYPAD_BACKSLASH,
39 | APPLICATION, POWER, KEYPAD_EQUALS, LEFT_CONTROL, CONTROL, LEFT_SHIFT, SHIFT, LEFT_ALT, ALT, OPTION,
40 | LEFT_GUI, GUI, WINDOWS, COMMAND, RIGHT_CONTROL, RIGHT_SHIFT, RIGHT_ALT, RIGHT_GUI
41 |
42 | Consumer Control Codes (ccc):
43 | MUTE, VOLUME_INCREMENT, VOLUME_DECREMENT, RECORD, FAST_FORWARD, REWIND, SCAN_NEXT_TRACK,
44 | SCAN_PREVIOUS_TRACK, STOP, EJECT, PLAY_PAUSE, BRIGHTNESS_DECREMENT, BRIGHTNESS_INCREMENT
45 |
46 | Play Tone (tone):
47 | 'frequency': the frequency of the tone (e.g. 392 | 951 | 1253)
48 | 'duration': the duration in seconds (e.g. 0.1 | 1.2)
49 |
50 | Mouse Events (mse):
51 | 'x': horizontally Mouse movement (e.g. 10 | -10)
52 | 'y': vertically Mouse movement (e.g. 10 | -10)
53 | 'w': Mousewheel movement (e.g. 1 | -1)
54 | 'b': LEFT, MIDDLE, RIGHT
55 |
56 | System Functions (sys):
57 | enable_USB, soft_reset, hard_reset, close_group, go_to_root, decrease_brightness, increase_brightness
58 |
59 | Serial Connection Commands:
60 | get_macros, set_macros, save_macros, enable_usb, soft_reset, hard_reset
61 |
62 |
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/webui/dev/main.js:
--------------------------------------------------------------------------------
1 | let connection = {};
2 | const connectionBtn = document.querySelector('#connection');
3 | const sendBtn = document.querySelector('#send');
4 | const cmdBtns = document.querySelectorAll('.simple-cmd');
5 | const data = document.querySelector('#data');
6 |
7 | function payloadHandler(payload) {
8 | if ('ERR' in payload) {
9 | console.warn('Error: ' + payload.ERR);
10 | } else if ('ACK' in payload) {
11 | switch (payload.ACK) {
12 | case 'macros':
13 | data.value = JSON.stringify(payload.CONTENT, null, 2);
14 | break;
15 | }
16 | }
17 | }
18 |
19 | function disableBtns(disable) {
20 | sendBtn.disabled = disable;
21 | cmdBtns.forEach((element) => {
22 | element.disabled = disable;
23 | });
24 | }
25 |
26 | connectionBtn.addEventListener('click', async (event) => {
27 | if (connection.connected) {
28 | connection.close();
29 | data.value = '';
30 | connectionBtn.innerText = 'Connect';
31 | disableBtns(true);
32 | } else {
33 | if ('serial' in navigator) {
34 | await navigator.serial
35 | .requestPort()
36 | .then((port) => {
37 | connection = new SerialConnectionHandler({
38 | port: port,
39 | onReceived: payloadHandler,
40 | });
41 | connectionBtn.innerText = 'Disonnected';
42 | disableBtns(false);
43 | })
44 | .catch((e) => {
45 | console.warn('Error: No port selected');
46 | });
47 | }
48 | }
49 | });
50 |
51 | sendBtn.addEventListener('click', async () => {
52 | if (data.value != '') {
53 | try {
54 | await connection.send({
55 | command: 'set_macros',
56 | content: JSON.parse(data.value),
57 | });
58 | } catch (e) {
59 | console.error('can`t parse json string');
60 | }
61 | }
62 | });
63 |
64 | cmdBtns.forEach((element) => {
65 | element.addEventListener('click', async () => {
66 | await connection.send({
67 | command: element.dataset.cmd,
68 | });
69 | });
70 | });
71 |
72 | // triggers when the device is unplugged
73 | navigator.serial.addEventListener('disconnect', (event) => {
74 | connection = {};
75 | data.value = '';
76 | connectionBtn.innerText = 'Connect';
77 | });
78 |
--------------------------------------------------------------------------------
/webui/img/macropad-128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mchilli/macropad/abba97d9af8981ea8324a1682682fb0dc713d6d2/webui/img/macropad-128.png
--------------------------------------------------------------------------------
/webui/img/macropad-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mchilli/macropad/abba97d9af8981ea8324a1682682fb0dc713d6d2/webui/img/macropad-256.png
--------------------------------------------------------------------------------
/webui/img/macropad-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mchilli/macropad/abba97d9af8981ea8324a1682682fb0dc713d6d2/webui/img/macropad-512.png
--------------------------------------------------------------------------------
/webui/img/macropad-64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mchilli/macropad/abba97d9af8981ea8324a1682682fb0dc713d6d2/webui/img/macropad-64.png
--------------------------------------------------------------------------------
/webui/img/macropad-910.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mchilli/macropad/abba97d9af8981ea8324a1682682fb0dc713d6d2/webui/img/macropad-910.png
--------------------------------------------------------------------------------
/webui/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |