listen serial input and react by callback registered.

Dependents:   Interference_Simple StrCommandHandler_Demo SerialInputReactionHandler_DEMO

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()) {