listen serial input and react by callback registered.
Dependents: Interference_Simple StrCommandHandler_Demo SerialInputReactionHandler_DEMO
Diff: SerialInputReactionHandler.cpp
- Revision:
- 3:599073f82114
- Parent:
- 2:4718a4eaf340
--- a/SerialInputReactionHandler.cpp Thu Nov 14 01:52:06 2019 +0000 +++ b/SerialInputReactionHandler.cpp Wed Nov 27 23:35:41 2019 +0000 @@ -1,49 +1,47 @@ #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<void *(char const * const)> arg_callback_onCommand, - Callback<void (char const * const)> arg_commonPre_callback_onCommand, - Callback<void (void *)> arg_commonPost_callback_onCommand + Callback<void (char const * const)> arg_Pre_callback_onCommand, + Callback<void (char const * const, void *)> arg_Post_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; + m_callback_onCommand = arg_callback_onCommand; + m_Pre_callback_onCommand = arg_Pre_callback_onCommand; + m_Post_callback_onCommand = arg_Post_callback_onCommand; } + + void SerialInputReactionHandler::attach( Callback<void * (char const * const)> arg_callback_onCommand ) { - callback_onCommand = arg_callback_onCommand; + m_callback_onCommand = arg_callback_onCommand; } + + void SerialInputReactionHandler::attach_PreProc( - Callback<void (char const * const)> arg_commonPre_callback_onCommand + Callback<void (char const * const)> arg_Pre_callback_onCommand ) { - commonPre_callback_onCommand = arg_commonPre_callback_onCommand; + m_Pre_callback_onCommand = arg_Pre_callback_onCommand; } + + void SerialInputReactionHandler::attach_PostProc( - Callback<void (void *)> arg_commonPost_callback_onCommand + Callback<void (char const * const, void *)> arg_Post_callback_onCommand ) { - commonPost_callback_onCommand = arg_commonPost_callback_onCommand; + m_Post_callback_onCommand = arg_Post_callback_onCommand; } + + void SerialInputReactionHandler::startReception( Serial * arg_serial_socket, InputMode arg_mode @@ -54,32 +52,51 @@ m_serial_socket->attach(callback(this, &SerialInputReactionHandler::sig_bind)); } + + void SerialInputReactionHandler::quit() { m_serial_socket->attach(NULL); } + + void SerialInputReactionHandler::sig_bind() { (this->*funcIfInput[m_input_mode])(); } + + void SerialInputReactionHandler::changeMode(InputMode arg_mode) { discardBuffer(); m_input_mode = arg_mode; } + + +void SerialInputReactionHandler::callback_onCommand(char const * const arg_command) +{ + void * l_rescallback; + m_Pre_callback_onCommand(arg_command); + l_rescallback = m_callback_onCommand(arg_command); + m_Post_callback_onCommand(arg_command, l_rescallback); +} + + + void SerialInputReactionHandler::listenKBSingleInput() { m_buffer_c = m_serial_socket->getc(); m_buffer_s = m_buffer_c; - if(m_buffer_c != 0x1B && isArrowSymbol()) + if(m_buffer_c != 0x1B || m_buffer_c == 0x1B && isArrowSymbol()) callback_onCommand(m_buffer_s.c_str()); - m_serial_socket->printf("Single key board input: %c (%x)\n", m_buffer_c, m_buffer_c); discardBuffer(); } + + bool SerialInputReactionHandler::isArrowSymbol() { // If only 0x1B, ESC KEY should be Pressed, else some symbol sequence. @@ -101,6 +118,7 @@ } + void SerialInputReactionHandler::listenKBTillEnter() { __disable_irq(); @@ -116,8 +134,8 @@ } else if ( m_buffer_c == '\n' || m_buffer_c == '\r') { + m_serial_socket->putc(m_buffer_c); callback_onCommand(m_buffer_s.c_str()); - m_serial_socket->putc(m_buffer_c); discardBuffer(); } else if (isArrowSymbol()) {