/* Copyright 2013 Jun Wako This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef ACTION_MACRO_H #define ACTION_MACRO_H #include #include #define MACRO_NONE 0 #define MACRO(...) ({ static prog_macro_t _m[] PROGMEM = { __VA_ARGS__ }; _m; }) typedef uint8_t macro_t; typedef macro_t prog_macro_t PROGMEM; void action_macro_play(const prog_macro_t *macro); /* TODO: NOT FINISHED normal mode command: key(down): 0x04-7f/73(F24) key(up): 0x84-ff command: 0x00-03, 0x80-83(0x74-7f, 0xf4-ff) mods down 0x00 mods up 0x01 wait 0x02 interval 0x03 extkey down 0x80 extkey up 0x81 ext commad 0x82 ext mode 0x83 end 0xff extension mode command: NOT IMPLEMENTED key down 0x00 key up 0x01 key down + wait key up + wait mods push mods pop wait interval if loop push pop all up end */ enum macro_command_id{ /* 0x00 - 0x03 */ END = 0x00, MODS_DOWN = 0x01, MODS_UP = 0x02, MODS_SET, MODS_PUSH, MODS_POP, WAIT = 0x74, INTERVAL, /* 0x74 - 0x7f */ /* 0x80 - 0x84 */ EXT_DOWN, EXT_UP, EXT_WAIT, EXT_INTERVAL, COMPRESSION_MODE, EXTENSION_MODE = 0xff, }; /* normal mode */ #define DOWN(key) (key) #define UP(key) ((key) | 0x80) #define TYPE(key) (key), (key | 0x80) #define MODS_DOWN(mods) MODS_DOWN, (mods) #define MODS_UP(mods) MODS_UP, (mods) #define WAIT(ms) WAIT, (ms) #define INTERVAL(ms) INTERVAL, (ms) #define D(key) DOWN(KC_##key) #define U(key) UP(KC_##key) #define T(key) TYPE(KC_##key) #define MD(key) MODS_DOWN(MOD_BIT(KC_##key)) #define MU(key) MODS_UP(MOD_BIT(KC_##key)) #define W(ms) WAIT(ms) #define I(ms) INTERVAL(ms) /* extension mode */ #endif /* ACTION_MACRO_H */