listen serial input and react by callback registered.
Dependents: Interference_Simple StrCommandHandler_Demo SerialInputReactionHandler_DEMO
Revision 2:4718a4eaf340, committed 2019-11-14
- Comitter:
- aktk
- Date:
- Thu Nov 14 01:52:06 2019 +0000
- Parent:
- 1:fd211f137803
- Child:
- 3:599073f82114
- Commit message:
- make the return type of callback on command (void *) and added pre/post procedure;
Changed in this revision
--- a/SerialInputReactionHandler.cpp Tue Nov 12 02:41:58 2019 +0000 +++ b/SerialInputReactionHandler.cpp Thu Nov 14 01:52:06 2019 +0000 @@ -1,26 +1,49 @@ #include "SerialInputReactionHandler.h" +//void SerialInputReactionHandler::doNothing(char const * const){} +//void SerialInputReactionHandler::doNothing(void *){} +//template <typename T> +//void SerialInputReactionHandler::doNothing(T arg) {} + char const * const SerialInputReactionHandler::ARROW_UP = "\x1b\x5b\x41"; char const * const SerialInputReactionHandler::ARROW_DOWN = "\x1b\x5b\x42"; char const * const SerialInputReactionHandler::ARROW_RIGHT= "\x1b\x5b\x43"; char const * const SerialInputReactionHandler::ARROW_LEFT = "\x1b\x5b\x44"; SerialInputReactionHandler::SerialInputReactionHandler( - Callback<int(char const * const)> arg_callback_onCommand + Callback<void *(char const * const)> arg_callback_onCommand, + Callback<void (char const * const)> arg_commonPre_callback_onCommand, + Callback<void (void *)> arg_commonPost_callback_onCommand ) { funcIfInput[KB_SINGLE_INPUT] = &SerialInputReactionHandler::listenKBSingleInput; funcIfInput[KB_TILL_ENTER] = &SerialInputReactionHandler::listenKBTillEnter; callback_onCommand = arg_callback_onCommand; + commonPre_callback_onCommand = arg_commonPre_callback_onCommand; + commonPost_callback_onCommand = arg_commonPost_callback_onCommand; } void SerialInputReactionHandler::attach( - Callback<int (char const * const)> arg_callback_onCommand + Callback<void * (char const * const)> arg_callback_onCommand ) { callback_onCommand = arg_callback_onCommand; } +void SerialInputReactionHandler::attach_PreProc( + Callback<void (char const * const)> arg_commonPre_callback_onCommand +) +{ + commonPre_callback_onCommand = arg_commonPre_callback_onCommand; +} + +void SerialInputReactionHandler::attach_PostProc( + Callback<void (void *)> arg_commonPost_callback_onCommand +) +{ + commonPost_callback_onCommand = arg_commonPost_callback_onCommand; +} + void SerialInputReactionHandler::startReception( Serial * arg_serial_socket, InputMode arg_mode @@ -36,13 +59,8 @@ m_serial_socket->attach(NULL); } -void SerialInputReactionHandler::commonProcedure() -{ -} - void SerialInputReactionHandler::sig_bind() { - commonProcedure(); (this->*funcIfInput[m_input_mode])(); } @@ -62,23 +80,6 @@ discardBuffer(); } -bool isUpperCase (const char arg_c) -{ - return ('A' <= arg_c && arg_c <= 'Z'); -} - -bool isLowerCase (const char arg_c) -{ - return ('a' <= arg_c && arg_c <= 'z'); -} - -bool isSymbol (const char arg_c) -{ - return ((0x20 <= arg_c && arg_c <= 0x40) - || (0x5B <= arg_c && arg_c <= 0x60) - || (0x7B <= arg_c && arg_c <= 0x7E)); -} - bool SerialInputReactionHandler::isArrowSymbol() { // If only 0x1B, ESC KEY should be Pressed, else some symbol sequence.
--- a/SerialInputReactionHandler.h Tue Nov 12 02:41:58 2019 +0000 +++ b/SerialInputReactionHandler.h Thu Nov 14 01:52:06 2019 +0000 @@ -14,17 +14,20 @@ static char const * const ARROW_LEFT; SerialInputReactionHandler( - Callback<int (char const * const)> arg_callback_onCommand = &echoCommand + Callback<void * (char const * const)> arg_callback_onCommand = &echoCommand, + Callback<void (char const * const)> arg_commonPre_callback_onCommand = &doNothing, + Callback<void (void *)> arg_commonPost_callback_onCommand = &doNothing ); - void attach(Callback<int (char const * const)> arg_callback_onCommand); + void attach(Callback<void * (char const * const)> arg_callback_onCommand); + void attach_PreProc(Callback<void (char const * const)> arg_commonPre_callback_onCommand); + void attach_PostProc(Callback<void (void *)> arg_commonPost_callback_onCommand); void startReception(Serial * arg_serial_socket, InputMode arg_mode = KB_SINGLE_INPUT); void quit(); void changeMode(InputMode arg_mode); private: - void commonProcedure(); void listenKBSingleInput(); void listenKBTillEnter(); void discardBuffer(); @@ -40,8 +43,14 @@ */ void sig_bind(); - Callback<int (char const * const)> callback_onCommand; - static int echoCommand (char const * const); + Callback<void * (char const * const)> callback_onCommand; + static void * echoCommand (char const * const); + Callback<void (char const * const)> commonPre_callback_onCommand; + Callback<void (void *)>commonPost_callback_onCommand; + template <typename T> + static void doNothing(T arg){} + //static void doNothing(char const * const); + //static void doNothing(void *); Serial * m_serial_socket; @@ -52,10 +61,10 @@ bool isArrowSymbol(); }; -inline int SerialInputReactionHandler::echoCommand (char const * const arg_str) +inline void * SerialInputReactionHandler::echoCommand (char const * const arg_str) { printf("%s", arg_str); - return 0; + return NULL; } inline void SerialInputReactionHandler::discardBuffer() { @@ -63,4 +72,22 @@ m_buffer_s = ""; } + +inline bool isUpperCase (const char arg_c) +{ + return ('A' <= arg_c && arg_c <= 'Z'); +} + +inline bool isLowerCase (const char arg_c) +{ + return ('a' <= arg_c && arg_c <= 'z'); +} + +inline bool isSymbol (const char arg_c) +{ + return ((0x20 <= arg_c && arg_c <= 0x40) + || (0x5B <= arg_c && arg_c <= 0x60) + || (0x7B <= arg_c && arg_c <= 0x7E)); +} + #endif