]> git.donarmstrong.com Git - tmk_firmware.git/blob - common/action_macro.h
Add NO_ACTION_TAPPING and NO_ACTION_MACRO config options
[tmk_firmware.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 */