From d3cfd6655431cb9e8dbdbfe27b4938a60192b5a3 Mon Sep 17 00:00:00 2001 From: Tinkerspy Date: Sun, 13 Sep 2015 17:30:38 +0200 Subject: [PATCH] Changed onCommand() --- Atm_command.cpp | 22 ++++++++++++++++++---- Atm_command.h | 11 +++++++---- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/Atm_command.cpp b/Atm_command.cpp index e1ba0dc..1b0bcea 100755 --- a/Atm_command.cpp +++ b/Atm_command.cpp @@ -20,9 +20,17 @@ ATM_CLASSNAME & ATM_CLASSNAME::begin( Stream * stream, char buffer[], int size ) return *this; } -ATM_CLASSNAME & ATM_CLASSNAME::onCmd( void (*callback)( ATM_CLASSNAME * cmd ) ) +ATM_CLASSNAME & ATM_CLASSNAME::onCommand(void (*callback)( int idx ), const char * commands ) { - _callback = callback; + _callback_idx = callback; + _commands = commands; + return *this; +} + +ATM_CLASSNAME & ATM_CLASSNAME::onCommand( void (*callback)( ATM_CLASSNAME * cmd ) ) +{ + _callback_obj = callback; + _commands = 0; return *this; } @@ -48,7 +56,7 @@ char * ATM_CLASSNAME::arg( int id ) { return &_buffer[i]; } -int ATM_CLASSNAME::command( int id, const char * cmdlist ) { +int ATM_CLASSNAME::lookup( int id, const char * cmdlist ) { int cnt = 0; char * pamem = arg( id ); @@ -98,7 +106,13 @@ void ATM_CLASSNAME::action( int id ) return; case ACT_SEND : _buffer[--_bufptr] = '\0'; - (*_callback)( this ); + if ( _commands == 0 ) { + (*_callback_obj)( this ); + } else { + int idx = lookup( 0, _commands ); + if ( idx > -1 ) + (*_callback_idx)( idx ); + } _lastch = '\0'; _bufptr = 0; return; diff --git a/Atm_command.h b/Atm_command.h index a883c18..807914d 100755 --- a/Atm_command.h +++ b/Atm_command.h @@ -14,23 +14,26 @@ class ATM_CLASSNAME: public Machine { public: ATM_CLASSNAME( void ) : Machine() { class_label = "CMD"; }; - void (*_callback)( ATM_CLASSNAME * cmd ) = 0; + void (*_callback_obj)( ATM_CLASSNAME * cmd ) = 0; + void (*_callback_idx)( int idx ) = 0; Stream * _stream; char * _buffer; int _bufsize, _bufptr; char _eol, _lastch; const char * _sep; + const char * _commands; enum { IDLE, READCHAR, SEND } STATES; enum { EVT_INPUT, EVT_EOL, ELSE } EVENTS; - enum { ACT_READCHAR, ACT_SEND } ACTIONS; + enum { ACT_READCHAR, ACT_SEND } ACTIONS; ATM_CLASSNAME & begin( Stream * stream, char buffer[], int size ); int event( int id ); void action( int id ); - ATM_CLASSNAME & onCmd( void (*callback)( ATM_CLASSNAME * cmd ) ); + ATM_CLASSNAME & onCommand(void (*callback)( int idx ), const char * commands ); + ATM_CLASSNAME & onCommand( void (*callback)( ATM_CLASSNAME * cmd ) ); ATM_CLASSNAME & separator( const char sep[] ); - int command( int id, const char * cmdlist ); + int lookup( int id, const char * cmdlist ); char * arg( int id ); };