listen serial input and react by callback registered.

Dependents:   Interference_Simple StrCommandHandler_Demo SerialInputReactionHandler_DEMO

Committer:
aktk
Date:
Tue Nov 12 01:10:29 2019 +0000
Revision:
0:ec916055f0dd
Child:
1:fd211f137803
First Implement;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aktk 0:ec916055f0dd 1 #ifndef SERIAL_INPUT_REACTION_HANDLER_H
aktk 0:ec916055f0dd 2 #define SERIAL_INPUT_REACTION_HANDLER_H
aktk 0:ec916055f0dd 3
aktk 0:ec916055f0dd 4 #include "mbed.h"
aktk 0:ec916055f0dd 5 #include <string>
aktk 0:ec916055f0dd 6
aktk 0:ec916055f0dd 7 class SerialInputReactionHandler
aktk 0:ec916055f0dd 8 {
aktk 0:ec916055f0dd 9 public:
aktk 0:ec916055f0dd 10 enum InputMode {KB_SINGLE_INPUT = 0, KB_TILL_ENTER, NUMBEROFMODES};
aktk 0:ec916055f0dd 11 static char const * const ARROW_UP;
aktk 0:ec916055f0dd 12 static char const * const ARROW_DOWN;
aktk 0:ec916055f0dd 13 static char const * const ARROW_RIGHT;
aktk 0:ec916055f0dd 14 static char const * const ARROW_LEFT;
aktk 0:ec916055f0dd 15
aktk 0:ec916055f0dd 16 SerialInputReactionHandler(
aktk 0:ec916055f0dd 17 Callback<int (char const * const)> arg_callback_onCommand = &echoCommand
aktk 0:ec916055f0dd 18 );
aktk 0:ec916055f0dd 19
aktk 0:ec916055f0dd 20 void attach(Callback<int (char const * const)> arg_callback_onCommand);
aktk 0:ec916055f0dd 21 void startReception(Serial * arg_serial_socket, InputMode arg_mode = KB_SINGLE_INPUT);
aktk 0:ec916055f0dd 22 void quit();
aktk 0:ec916055f0dd 23
aktk 0:ec916055f0dd 24 void changeMode(InputMode arg_mode);
aktk 0:ec916055f0dd 25
aktk 0:ec916055f0dd 26 private:
aktk 0:ec916055f0dd 27 void commonProcedure();
aktk 0:ec916055f0dd 28 void listenKBSingleInput();
aktk 0:ec916055f0dd 29 void listenKBTillEnter();
aktk 0:ec916055f0dd 30 void discardBuffer();
aktk 0:ec916055f0dd 31
aktk 0:ec916055f0dd 32 void (SerialInputReactionHandler::*funcIfInput[NUMBEROFMODES])();
aktk 0:ec916055f0dd 33
aktk 0:ec916055f0dd 34 /** Wrapper function that executes commonProcedure() and a function
aktk 0:ec916055f0dd 35 * listed in funcIfInput[]()
aktk 0:ec916055f0dd 36 *
aktk 0:ec916055f0dd 37 * This function is supposed to be used as callback attached to such like
aktk 0:ec916055f0dd 38 * Serial.attach(), so that it is called evrey a key input thry keyboard
aktk 0:ec916055f0dd 39 * or a byte written thru communication with like PCs.
aktk 0:ec916055f0dd 40 */
aktk 0:ec916055f0dd 41 void sig_bind();
aktk 0:ec916055f0dd 42
aktk 0:ec916055f0dd 43 Callback<int (char const * const)> callback_onCommand;
aktk 0:ec916055f0dd 44 static int echoCommand (char const * const);
aktk 0:ec916055f0dd 45
aktk 0:ec916055f0dd 46 Serial * m_serial_socket;
aktk 0:ec916055f0dd 47
aktk 0:ec916055f0dd 48 InputMode m_input_mode;
aktk 0:ec916055f0dd 49 uint8_t m_buffer_c;
aktk 0:ec916055f0dd 50 string m_buffer_s;
aktk 0:ec916055f0dd 51 };
aktk 0:ec916055f0dd 52
aktk 0:ec916055f0dd 53 inline int SerialInputReactionHandler::echoCommand (char const * const arg_str)
aktk 0:ec916055f0dd 54 {
aktk 0:ec916055f0dd 55 printf("%s", arg_str);
aktk 0:ec916055f0dd 56 return 0;
aktk 0:ec916055f0dd 57 }
aktk 0:ec916055f0dd 58
aktk 0:ec916055f0dd 59 #endif