]> git.gir.st - tmk_keyboard.git/blob - common/action_macro.h
Merge pull request #30 from Wraul/phantom_debounce_fix
[tmk_keyboard.git] / common / action_macro.h
1 /*
2 Copyright 2013 Jun Wako <wakojun@gmail.com>
3
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 2 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17 #ifndef ACTION_MACRO_H
18 #define ACTION_MACRO_H
19 #include <stdint.h>
20 #include <avr/pgmspace.h>
21
22
23 #define MACRO_NONE 0
24 #define MACRO(...) ({ static prog_macro_t _m[] PROGMEM = { __VA_ARGS__ }; _m; })
25
26
27 typedef uint8_t macro_t;
28 typedef macro_t prog_macro_t PROGMEM;
29
30
31 #ifndef NO_ACTION_MACRO
32 void action_macro_play(const prog_macro_t *macro);
33 #else
34 #define action_macro_play(macro)
35 #endif
36
37
38
39 /* TODO: NOT FINISHED
40 normal mode command:
41 key(down): 0x04-7f/73(F24)
42 key(up): 0x84-ff
43 command: 0x00-03, 0x80-83(0x74-7f, 0xf4-ff)
44 mods down 0x00
45 mods up 0x01
46 wait 0x02
47 interval 0x03
48 extkey down 0x80
49 extkey up 0x81
50 ext commad 0x82
51 ext mode 0x83
52 end 0xff
53
54 extension mode command: NOT IMPLEMENTED
55 key down 0x00
56 key up 0x01
57 key down + wait
58 key up + wait
59 mods push
60 mods pop
61 wait
62 interval
63 if
64 loop
65 push
66 pop
67 all up
68 end
69 */
70 enum macro_command_id{
71 /* 0x00 - 0x03 */
72 END = 0x00,
73 MODS_DOWN = 0x01,
74 MODS_UP = 0x02,
75 MODS_SET,
76 MODS_PUSH,
77 MODS_POP,
78
79 WAIT = 0x74,
80 INTERVAL,
81 /* 0x74 - 0x7f */
82 /* 0x80 - 0x84 */
83
84 EXT_DOWN,
85 EXT_UP,
86 EXT_WAIT,
87 EXT_INTERVAL,
88 COMPRESSION_MODE,
89
90 EXTENSION_MODE = 0xff,
91 };
92
93
94 /* normal mode */
95 #define DOWN(key) (key)
96 #define UP(key) ((key) | 0x80)
97 #define TYPE(key) (key), (key | 0x80)
98 #define MODS_DOWN(mods) MODS_DOWN, (mods)
99 #define MODS_UP(mods) MODS_UP, (mods)
100 #define WAIT(ms) WAIT, (ms)
101 #define INTERVAL(ms) INTERVAL, (ms)
102
103 #define D(key) DOWN(KC_##key)
104 #define U(key) UP(KC_##key)
105 #define T(key) TYPE(KC_##key)
106 #define MD(key) MODS_DOWN(MOD_BIT(KC_##key))
107 #define MU(key) MODS_UP(MOD_BIT(KC_##key))
108 #define W(ms) WAIT(ms)
109 #define I(ms) INTERVAL(ms)
110
111
112 /* extension mode */
113
114
115 #endif /* ACTION_MACRO_H */
Imprint / Impressum