#include <CmdMessenger.h>
Public Member Functions | |
void | attach (messengerCallbackFunction newFunction) |
void | attach (byte msgId, messengerCallbackFunction newFunction) |
bool | available () |
CmdMessenger (Stream &comms, const char fld_separator= ',', const char cmd_separator= ';', const char esc_character= '/') | |
uint8_t | CommandID () |
uint8_t | compareStringArg (char *string) |
void | copyStringArg (char *string, uint8_t size) |
void | feedinSerialData () |
bool | isArgOk () |
bool | next () |
void | printLfCr (bool addNewLine=true) |
void | printSci (double f, unsigned int digits) |
template<class T > | |
T | readBinArg () |
bool | readBoolArg () |
char | readCharArg () |
double | readDoubleArg () |
float | readFloatArg () |
int16_t | readInt16Arg () |
int32_t | readInt32Arg () |
char * | readStringArg () |
template<class T > | |
bool | sendBinCmd (int cmdId, T arg, bool reqAc=false, int ackCmdId=1, int timeout=DEFAULT_TIMEOUT) |
template<class T > | |
bool | sendCmd (int cmdId, T arg, bool reqAc=false, int ackCmdId=1, int timeout=DEFAULT_TIMEOUT) |
bool | sendCmd (int cmdId) |
bool | sendCmd (int cmdId, bool reqAc, int ackCmdId) |
template<class T > | |
void | sendCmdArg (T arg) |
template<class T > | |
void | sendCmdArg (T arg, int n) |
template<class T > | |
void | sendCmdBinArg (T arg) |
bool | sendCmdEnd (bool reqAc=false, int ackCmdId=1, int timeout=DEFAULT_TIMEOUT) |
void | sendCmdEscArg (char *arg) |
void | sendCmdfArg (char *fmt,...) |
void | sendCmdSciArg (double arg, int n=6) |
void | sendCmdStart (int cmdId) |
void | unescape (char *fromChar) |
Private Member Functions | |
bool | blockedTillReply (unsigned long timeout=DEFAULT_TIMEOUT, int ackCmdId=1) __attribute__((always_inline)) |
bool | CheckForAck (int AckCommand) __attribute__((always_inline)) |
template<class T > | |
T | empty () |
int | findNext (char *str, char delim) |
void | handleMessage () __attribute__((always_inline)) |
void | init (Stream &comms, const char fld_separator, const char cmd_separator, const char esc_character) |
bool | isEscaped (char *currChar, const char escapeChar, char *lastChar) |
void | printEsc (char *str) |
void | printEsc (char str) |
uint8_t | processLine (char serialChar) __attribute__((always_inline)) |
template<class T > | |
T | readBin (char *str) |
void | reset () |
char * | split_r (char *str, const char delim, char **nextp) |
template<class T > | |
void | writeBin (const T &value) |
Private Attributes | |
char | ArglastChar |
bool | ArgOk |
uint8_t | bufferIndex |
uint8_t | bufferLastIndex |
uint8_t | bufferLength |
messengerCallbackFunction | callbackList [MAXCALLBACKS] |
char | CmdlastChar |
char | command_separator |
char | commandBuffer [MESSENGERBUFFERSIZE] |
Stream * | comms |
char * | current |
messengerCallbackFunction | default_callback |
bool | dumped |
char | escape_character |
char | field_separator |
char * | last |
uint8_t | lastCommandId |
uint8_t | messageState |
bool | pauseProcessing |
char | prevChar |
bool | print_newlines |
bool | startCommand |
char | streamBuffer [MAXSTREAMBUFFERSIZE] |
Definition at line 59 of file CmdMessenger.h.
CmdMessenger::CmdMessenger | ( | Stream & | ccomms, |
const char | fld_separator = ',' , |
||
const char | cmd_separator = ';' , |
||
const char | esc_character = '/' |
||
) |
CmdMessenger constructor
Definition at line 58 of file CmdMessenger.cpp.
void CmdMessenger::attach | ( | messengerCallbackFunction | newFunction | ) |
Attaches an default function for commands that are not explicitly attached
Definition at line 107 of file CmdMessenger.cpp.
void CmdMessenger::attach | ( | byte | msgId, |
messengerCallbackFunction | newFunction | ||
) |
Attaches a function to a command ID
Definition at line 115 of file CmdMessenger.cpp.
bool CmdMessenger::available | ( | ) |
Returns if an argument is available. Alias for next()
Definition at line 250 of file CmdMessenger.cpp.
bool CmdMessenger::blockedTillReply | ( | unsigned long | timeout = DEFAULT_TIMEOUT , |
int | ackCmdId = 1 |
||
) | [inline, private] |
Waits for reply from sender or timeout before continuing
Definition at line 190 of file CmdMessenger.cpp.
bool CmdMessenger::CheckForAck | ( | int | AckCommand | ) | [inline, private] |
Loops as long data is available to determine if acknowledge has come in
Definition at line 205 of file CmdMessenger.cpp.
uint8_t CmdMessenger::CommandID | ( | ) |
Returns the CommandID of the current command
Definition at line 266 of file CmdMessenger.cpp.
uint8_t CmdMessenger::compareStringArg | ( | char * | string | ) |
Compare the next argument with a string
Definition at line 511 of file CmdMessenger.cpp.
void CmdMessenger::copyStringArg | ( | char * | string, |
uint8_t | size | ||
) |
Return next argument as a new string Note that this is useful if the string needs to be persisted
Definition at line 496 of file CmdMessenger.cpp.
T CmdMessenger::empty | ( | ) | [inline, private] |
Definition at line 142 of file CmdMessenger.h.
void CmdMessenger::feedinSerialData | ( | ) |
Feeds serial data in CmdMessenger
Definition at line 126 of file CmdMessenger.cpp.
int CmdMessenger::findNext | ( | char * | str, |
char | delim | ||
) | [private] |
Find next argument in command
Definition at line 376 of file CmdMessenger.cpp.
void CmdMessenger::handleMessage | ( | ) | [inline, private] |
Dispatches attached callbacks based on command
Definition at line 177 of file CmdMessenger.cpp.
void CmdMessenger::init | ( | Stream & | ccomms, |
const char | fld_separator, | ||
const char | cmd_separator, | ||
const char | esc_character | ||
) | [private] |
Enables printing newline after a sent command
Definition at line 66 of file CmdMessenger.cpp.
bool CmdMessenger::isArgOk | ( | ) |
Returns if the latest argument is well formed.
Definition at line 258 of file CmdMessenger.cpp.
bool CmdMessenger::isEscaped | ( | char * | currChar, |
const char | escapeChar, | ||
char * | lastChar | ||
) | [private] |
Indicates if the current character is escaped
Definition at line 584 of file CmdMessenger.cpp.
bool CmdMessenger::next | ( | ) |
Gets next argument. Returns true if an argument is available
Definition at line 226 of file CmdMessenger.cpp.
void CmdMessenger::printEsc | ( | char * | str | ) | [private] |
Escape and print a string
Definition at line 600 of file CmdMessenger.cpp.
void CmdMessenger::printEsc | ( | char | str | ) | [private] |
Escape and print a character
Definition at line 610 of file CmdMessenger.cpp.
void CmdMessenger::printLfCr | ( | bool | addNewLine = true | ) |
Enables printing newline after a sent command
Definition at line 99 of file CmdMessenger.cpp.
void CmdMessenger::printSci | ( | double | f, |
unsigned int | digits | ||
) |
Print float and double in scientific format
Definition at line 621 of file CmdMessenger.cpp.
uint8_t CmdMessenger::processLine | ( | char | serialChar | ) | [inline, private] |
Processes bytes and determines message state
Definition at line 153 of file CmdMessenger.cpp.
T CmdMessenger::readBin | ( | char * | str | ) | [inline, private] |
Read a variable of any type in binary format
Definition at line 128 of file CmdMessenger.h.
T CmdMessenger::readBinArg | ( | ) | [inline] |
Read an argument of any type in binary format
Definition at line 284 of file CmdMessenger.h.
bool CmdMessenger::readBoolArg | ( | ) |
Read the next argument as bool
Definition at line 429 of file CmdMessenger.cpp.
char CmdMessenger::readCharArg | ( | ) |
Read the next argument as char
Definition at line 437 of file CmdMessenger.cpp.
double CmdMessenger::readDoubleArg | ( | ) |
Read the next argument as double
Definition at line 466 of file CmdMessenger.cpp.
float CmdMessenger::readFloatArg | ( | ) |
Read the next argument as float
Definition at line 451 of file CmdMessenger.cpp.
int16_t CmdMessenger::readInt16Arg | ( | ) |
Read the next argument as int
Definition at line 401 of file CmdMessenger.cpp.
int32_t CmdMessenger::readInt32Arg | ( | ) |
Read the next argument as int
Definition at line 415 of file CmdMessenger.cpp.
char * CmdMessenger::readStringArg | ( | ) |
Read next argument as string. Note that the String is valid until the current command is replaced
Definition at line 481 of file CmdMessenger.cpp.
void CmdMessenger::reset | ( | ) | [private] |
Resets the command buffer and message state
Definition at line 88 of file CmdMessenger.cpp.
bool CmdMessenger::sendBinCmd | ( | int | cmdId, |
T | arg, | ||
bool | reqAc = false , |
||
int | ackCmdId = 1 , |
||
int | timeout = DEFAULT_TIMEOUT |
||
) | [inline] |
Send a command with a single argument of any type Note that the argument is sent in binary format
Definition at line 207 of file CmdMessenger.h.
bool CmdMessenger::sendCmd | ( | int | cmdId, |
T | arg, | ||
bool | reqAc = false , |
||
int | ackCmdId = 1 , |
||
int | timeout = DEFAULT_TIMEOUT |
||
) | [inline] |
Send a command with a single argument of any type Note that the argument is sent as string
Definition at line 191 of file CmdMessenger.h.
bool CmdMessenger::sendCmd | ( | int | cmdId | ) |
Send a command without arguments, without acknowledge
Definition at line 362 of file CmdMessenger.cpp.
bool CmdMessenger::sendCmd | ( | int | cmdId, |
bool | reqAc, | ||
int | ackCmdId | ||
) |
Send a command without arguments, with acknowledge
Definition at line 350 of file CmdMessenger.cpp.
void CmdMessenger::sendCmdArg | ( | T | arg | ) | [inline] |
Send a single argument as string Note that this will only succeed if a sendCmdStart has been issued first
Definition at line 231 of file CmdMessenger.h.
void CmdMessenger::sendCmdArg | ( | T | arg, |
int | n | ||
) | [inline] |
Send a single argument as string with custom accuracy Note that this will only succeed if a sendCmdStart has been issued first
Definition at line 243 of file CmdMessenger.h.
void CmdMessenger::sendCmdBinArg | ( | T | arg | ) | [inline] |
Send a single argument in binary format Note that this will only succeed if a sendCmdStart has been issued first
Definition at line 262 of file CmdMessenger.h.
bool CmdMessenger::sendCmdEnd | ( | bool | reqAc = false , |
int | ackCmdId = 1 , |
||
int | timeout = DEFAULT_TIMEOUT |
||
) |
Send end of command
Definition at line 331 of file CmdMessenger.cpp.
void CmdMessenger::sendCmdEscArg | ( | char * | arg | ) |
Send an escaped command argument
Definition at line 288 of file CmdMessenger.cpp.
void CmdMessenger::sendCmdfArg | ( | char * | fmt, |
... | |||
) |
Send formatted argument. Note that floating points are not supported and resulting string is limited to 128 chars
Definition at line 300 of file CmdMessenger.cpp.
void CmdMessenger::sendCmdSciArg | ( | double | arg, |
int | n = 6 |
||
) |
Send double argument in scientific format. This will overcome the boundary of normal d sending which is limited to abs(f) <= MAXLONG
Send double argument in scientific format. This will overcome the boundary of normal float sending which is limited to abs(f) <= MAXLONG
Definition at line 319 of file CmdMessenger.cpp.
void CmdMessenger::sendCmdStart | ( | int | cmdId | ) |
Send start of command. This makes it easy to send multiple arguments per command
Definition at line 276 of file CmdMessenger.cpp.
char * CmdMessenger::split_r | ( | char * | str, |
const char | delim, | ||
char ** | nextp | ||
) | [private] |
Split string in different tokens, based on delimiter Note that this is basically strtok_r, but with support for an escape character
Definition at line 552 of file CmdMessenger.cpp.
void CmdMessenger::unescape | ( | char * | fromChar | ) |
Unescapes a string Note that this is done inline
Definition at line 532 of file CmdMessenger.cpp.
void CmdMessenger::writeBin | ( | const T & | value | ) | [inline, private] |
Print variable of type T binary in binary format
Definition at line 110 of file CmdMessenger.h.
char CmdMessenger::ArglastChar [private] |
Definition at line 70 of file CmdMessenger.h.
bool CmdMessenger::ArgOk [private] |
Definition at line 78 of file CmdMessenger.h.
uint8_t CmdMessenger::bufferIndex [private] |
Definition at line 67 of file CmdMessenger.h.
uint8_t CmdMessenger::bufferLastIndex [private] |
Definition at line 69 of file CmdMessenger.h.
uint8_t CmdMessenger::bufferLength [private] |
Definition at line 68 of file CmdMessenger.h.
Definition at line 89 of file CmdMessenger.h.
char CmdMessenger::CmdlastChar [private] |
Definition at line 71 of file CmdMessenger.h.
char CmdMessenger::command_separator [private] |
Definition at line 84 of file CmdMessenger.h.
char CmdMessenger::commandBuffer[MESSENGERBUFFERSIZE] [private] |
Definition at line 74 of file CmdMessenger.h.
Stream* CmdMessenger::comms [private] |
Definition at line 82 of file CmdMessenger.h.
char* CmdMessenger::current [private] |
Definition at line 79 of file CmdMessenger.h.
Definition at line 88 of file CmdMessenger.h.
bool CmdMessenger::dumped [private] |
Definition at line 77 of file CmdMessenger.h.
char CmdMessenger::escape_character [private] |
Definition at line 86 of file CmdMessenger.h.
char CmdMessenger::field_separator [private] |
Definition at line 85 of file CmdMessenger.h.
char* CmdMessenger::last [private] |
Definition at line 80 of file CmdMessenger.h.
uint8_t CmdMessenger::lastCommandId [private] |
Definition at line 66 of file CmdMessenger.h.
uint8_t CmdMessenger::messageState [private] |
Definition at line 76 of file CmdMessenger.h.
bool CmdMessenger::pauseProcessing [private] |
Definition at line 72 of file CmdMessenger.h.
char CmdMessenger::prevChar [private] |
Definition at line 81 of file CmdMessenger.h.
bool CmdMessenger::print_newlines [private] |
Definition at line 73 of file CmdMessenger.h.
bool CmdMessenger::startCommand [private] |
Definition at line 65 of file CmdMessenger.h.
char CmdMessenger::streamBuffer[MAXSTREAMBUFFERSIZE] [private] |
Definition at line 75 of file CmdMessenger.h.