diff options
| author | tmk <nobody@nowhere> | 2013-02-11 12:48:49 +0900 | 
|---|---|---|
| committer | tmk <nobody@nowhere> | 2013-02-11 12:48:49 +0900 | 
| commit | 8c80deb775ac151001dc1592a2e94e8677b49964 (patch) | |
| tree | aa62c5cbef8419d9cdded26440cfdb42f7d806fd /common/action_macro.c | |
| parent | 4701b08b71b187cb3d015bec7e05d30e35c344ac (diff) | |
| parent | 39d093339393e1758eede06f736b1f99a68ac74c (diff) | |
| download | firmware-8c80deb775ac151001dc1592a2e94e8677b49964.tar.gz firmware-8c80deb775ac151001dc1592a2e94e8677b49964.tar.bz2 firmware-8c80deb775ac151001dc1592a2e94e8677b49964.zip  | |
Merge branch 'keymap2'
Conflicts:
	common/keyboard.c
Diffstat (limited to 'common/action_macro.c')
| -rw-r--r-- | common/action_macro.c | 67 | 
1 files changed, 67 insertions, 0 deletions
diff --git a/common/action_macro.c b/common/action_macro.c new file mode 100644 index 000000000..72859c0dd --- /dev/null +++ b/common/action_macro.c @@ -0,0 +1,67 @@ +/* +Copyright 2013 Jun Wako <wakojun@gmail.com> + +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 <http://www.gnu.org/licenses/>. +*/ +#include <util/delay.h> +#include "debug.h" +#include "action.h" +#include "action_macro.h" + + +#define MACRO_READ()  (macro = pgm_read_byte(macro_p++)) +void action_macro_play(const prog_macro_t *macro_p) +{ +    macro_t macro = END; +    uint8_t interval = 0; + +    if (!macro_p) return; +    while (true) { +        switch (MACRO_READ()) { +            case INTERVAL: +                interval = MACRO_READ(); +                debug("INTERVAL("); debug_dec(interval); debug(")\n"); +                break; +            case WAIT: +                MACRO_READ(); +                debug("WAIT("); debug_dec(macro); debug(")\n"); +                { uint8_t ms = macro; while (ms--) _delay_ms(1); } +                break; +            case MODS_DOWN: +                MACRO_READ(); +                debug("MODS_DOWN("); debug_hex(macro); debug(")\n"); +                debug("MODS_UP("); debug_hex(macro); debug(")\n"); +                add_mods(macro); +                break; +            case MODS_UP: +                MACRO_READ(); +                debug("MODS_UP("); debug_hex(macro); debug(")\n"); +                del_mods(macro); +                break; +            case 0x04 ... 0x73: +                debug("DOWN("); debug_hex(macro); debug(")\n"); +                register_code(macro); +                break; +            case 0x84 ... 0xF3: +                debug("UP("); debug_hex(macro); debug(")\n"); +                unregister_code(macro&0x7F); +                break; +            case END: +            default: +                return; +        } +        // interval +        { uint8_t ms = interval; while (ms--) _delay_ms(1); } +    } +}  | 
