fast-feedback virtual target task code on STM Nucleo

Dependencies:   mbed

Committer:
gwappa
Date:
Thu Dec 13 07:18:43 2018 +0000
Revision:
32:1416e015016c
Parent:
26:b4421d1ee57a
change to use the Staged state

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gwappa 5:849446d19406 1 #ifndef CONFIG_H_
gwappa 5:849446d19406 2 #define CONFIG_H_
gwappa 5:849446d19406 3
gwappa 5:849446d19406 4 #include "mbed.h"
gwappa 5:849446d19406 5 #include "utils.h"
gwappa 5:849446d19406 6
gwappa 5:849446d19406 7 #define CMD_CHAR_HELP '?'
gwappa 5:849446d19406 8
gwappa 5:849446d19406 9 namespace config
gwappa 5:849446d19406 10 {
gwappa 5:849446d19406 11 struct CommandResponder
gwappa 5:849446d19406 12 {
gwappa 5:849446d19406 13 virtual ~CommandResponder() { }
gwappa 5:849446d19406 14 virtual bool parse(const char& c)=0;
gwappa 5:849446d19406 15 virtual bool writeSettings()=0;
gwappa 5:849446d19406 16 virtual void echoback()=0;
gwappa 5:849446d19406 17 };
gwappa 5:849446d19406 18
gwappa 5:849446d19406 19 void addCommand(const char& command, CommandResponder* resp);
gwappa 5:849446d19406 20 void removeCommand(const char& command);
gwappa 5:849446d19406 21
gwappa 5:849446d19406 22 void handleSerial();
gwappa 5:849446d19406 23
gwappa 5:849446d19406 24 void writeSettingsToSerial();
gwappa 5:849446d19406 25 }
gwappa 5:849446d19406 26
gwappa 5:849446d19406 27 template<typename V>
gwappa 5:849446d19406 28 struct Property: public config::CommandResponder
gwappa 5:849446d19406 29 {
gwappa 5:849446d19406 30 explicit Property(const char& command, const V& defaultValue):
gwappa 5:849446d19406 31 command(command), value(defaultValue)
gwappa 5:849446d19406 32 {
gwappa 5:849446d19406 33 config::addCommand(command, this);
gwappa 5:849446d19406 34 }
gwappa 5:849446d19406 35
gwappa 5:849446d19406 36 Property(); // not allowed
gwappa 5:849446d19406 37
gwappa 5:849446d19406 38 virtual ~Property(){
gwappa 5:849446d19406 39 config::removeCommand(command);
gwappa 5:849446d19406 40 }
gwappa 5:849446d19406 41
gwappa 5:849446d19406 42 /**
gwappa 5:849446d19406 43 * returns: if this property accepts this command
gwappa 5:849446d19406 44 */
gwappa 5:849446d19406 45 virtual bool parse(const char& c)
gwappa 5:849446d19406 46 {
gwappa 5:849446d19406 47 if (c != command) {
gwappa 5:849446d19406 48 return false;
gwappa 5:849446d19406 49 }
gwappa 5:849446d19406 50
gwappa 5:849446d19406 51 value = parseUnsignedFromSerial<V>(value); // TODO: deal with signedness?
gwappa 6:13d180af7501 52 return true;
gwappa 5:849446d19406 53 }
gwappa 5:849446d19406 54
gwappa 5:849446d19406 55 virtual bool writeSettings()
gwappa 5:849446d19406 56 {
gwappa 5:849446d19406 57 IO::write("%c%u",command,value); // TODO: deal with signedness?
gwappa 5:849446d19406 58 return true;
gwappa 5:849446d19406 59 }
gwappa 5:849446d19406 60
gwappa 5:849446d19406 61 virtual void echoback()
gwappa 5:849446d19406 62 {
gwappa 5:849446d19406 63 IO::write(IO::CONFIG_HEADER);
gwappa 5:849446d19406 64 writeSettings();
gwappa 6:13d180af7501 65 IO::write("\r\n");
gwappa 5:849446d19406 66 }
gwappa 5:849446d19406 67
gwappa 5:849446d19406 68 const char command;
gwappa 5:849446d19406 69 V value;
gwappa 5:849446d19406 70 };
gwappa 5:849446d19406 71
gwappa 5:849446d19406 72 class Action: public config::CommandResponder
gwappa 5:849446d19406 73 {
gwappa 5:849446d19406 74 public:
gwappa 5:849446d19406 75 explicit Action(const char& command, Callback<void()> f);
gwappa 5:849446d19406 76
gwappa 5:849446d19406 77 virtual ~Action();
gwappa 5:849446d19406 78
gwappa 5:849446d19406 79 virtual bool parse(const char& c);
gwappa 5:849446d19406 80
gwappa 5:849446d19406 81 virtual bool writeSettings();
gwappa 5:849446d19406 82
gwappa 5:849446d19406 83 virtual void echoback();
gwappa 5:849446d19406 84
gwappa 5:849446d19406 85 private:
gwappa 5:849446d19406 86 const char command_;
gwappa 5:849446d19406 87 Callback<void()> handler_;
gwappa 5:849446d19406 88 };
gwappa 5:849446d19406 89
gwappa 5:849446d19406 90 #endif