listen serial input and react by callback registered.

Dependents:   Interference_Simple StrCommandHandler_Demo SerialInputReactionHandler_DEMO

Files at this revision

API Documentation at this revision

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

SerialInputReactionHandler.cpp Show annotated file Show diff for this revision Revisions of this file
SerialInputReactionHandler.h Show annotated file Show diff for this revision Revisions of this file
--- 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