2013-02-04 13:53:45 +00:00
/*
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 "action.h"
2014-01-28 01:55:51 +00:00
# include "action_util.h"
2013-02-04 13:53:45 +00:00
# include "action_macro.h"
2014-06-16 15:57:59 +00:00
# include "wait.h"
2013-02-04 13:53:45 +00:00
2013-05-14 07:18:22 +00:00
# ifdef DEBUG_ACTION
# include "debug.h"
# else
# include "nodebug.h"
# endif
2013-02-04 13:53:45 +00:00
2013-03-19 15:28:13 +00:00
# ifndef NO_ACTION_MACRO
2014-06-16 15:57:59 +00:00
# define MACRO_READ() (macro = MACRO_GET(macro_p++))
2013-05-20 13:42:29 +00:00
void action_macro_play ( const macro_t * macro_p )
2013-02-04 13:53:45 +00:00
{
macro_t macro = END ;
uint8_t interval = 0 ;
if ( ! macro_p ) return ;
while ( true ) {
switch ( MACRO_READ ( ) ) {
2013-07-22 22:45:25 +00:00
case KEY_DOWN :
2013-02-04 13:53:45 +00:00
MACRO_READ ( ) ;
2013-07-22 22:45:25 +00:00
dprintf ( " KEY_DOWN(%02X) \n " , macro ) ;
2014-01-28 01:55:51 +00:00
if ( IS_MOD ( macro ) ) {
add_weak_mods ( MOD_BIT ( macro ) ) ;
} else {
register_code ( macro ) ;
}
2013-02-04 13:53:45 +00:00
break ;
2013-07-22 22:45:25 +00:00
case KEY_UP :
2013-02-04 13:53:45 +00:00
MACRO_READ ( ) ;
2013-07-22 22:45:25 +00:00
dprintf ( " KEY_UP(%02X) \n " , macro ) ;
2014-01-28 01:55:51 +00:00
if ( IS_MOD ( macro ) ) {
del_weak_mods ( MOD_BIT ( macro ) ) ;
} else {
unregister_code ( macro ) ;
}
2013-02-04 13:53:45 +00:00
break ;
2013-07-22 22:45:25 +00:00
case WAIT :
2013-02-04 13:53:45 +00:00
MACRO_READ ( ) ;
2013-07-22 22:45:25 +00:00
dprintf ( " WAIT(%u) \n " , macro ) ;
2014-06-16 15:57:59 +00:00
{ uint8_t ms = macro ; while ( ms - - ) wait_ms ( 1 ) ; }
2013-07-22 22:45:25 +00:00
break ;
case INTERVAL :
interval = MACRO_READ ( ) ;
dprintf ( " INTERVAL(%u) \n " , interval ) ;
2013-02-04 13:53:45 +00:00
break ;
case 0x04 . . . 0x73 :
2013-07-22 22:45:25 +00:00
dprintf ( " DOWN(%02X) \n " , macro ) ;
2013-02-04 13:53:45 +00:00
register_code ( macro ) ;
break ;
case 0x84 . . . 0xF3 :
2013-07-22 22:45:25 +00:00
dprintf ( " UP(%02X) \n " , macro ) ;
2013-02-04 13:53:45 +00:00
unregister_code ( macro & 0x7F ) ;
break ;
case END :
default :
return ;
}
// interval
2014-06-16 15:57:59 +00:00
{ uint8_t ms = interval ; while ( ms - - ) wait_ms ( 1 ) ; }
2013-02-04 13:53:45 +00:00
}
}
2013-03-19 15:28:13 +00:00
# endif