Skip to content

Commit

Permalink
Changed onCommand()
Browse files Browse the repository at this point in the history
  • Loading branch information
tinkerspy committed Sep 13, 2015
1 parent 061a18c commit d3cfd66
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 8 deletions.
22 changes: 18 additions & 4 deletions Atm_command.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand All @@ -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 );
Expand Down Expand Up @@ -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;
Expand Down
11 changes: 7 additions & 4 deletions Atm_command.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 );
};

Expand Down

0 comments on commit d3cfd66

Please sign in to comment.