listen serial input and react by callback registered.
Dependents: Interference_Simple StrCommandHandler_Demo SerialInputReactionHandler_DEMO
SerialInputReactionHandler.h@0:ec916055f0dd, 2019-11-12 (annotated)
- 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?
User | Revision | Line number | New 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 |