fast-feedback virtual target task code on STM Nucleo

Dependencies:   mbed

Committer:
gwappa
Date:
Thu May 24 14:47:48 2018 +0000
Revision:
5:849446d19406
Child:
6:13d180af7501
add configuration functionality (to be tested)

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 5:849446d19406 52 }
gwappa 5:849446d19406 53
gwappa 5:849446d19406 54 virtual bool writeSettings()
gwappa 5:849446d19406 55 {
gwappa 5:849446d19406 56 IO::write("%c%u",command,value); // TODO: deal with signedness?
gwappa 5:849446d19406 57 return true;
gwappa 5:849446d19406 58 }
gwappa 5:849446d19406 59
gwappa 5:849446d19406 60 virtual void echoback()
gwappa 5:849446d19406 61 {
gwappa 5:849446d19406 62 IO::write(IO::CONFIG_HEADER);
gwappa 5:849446d19406 63 writeSettings();
gwappa 5:849446d19406 64 }
gwappa 5:849446d19406 65
gwappa 5:849446d19406 66 const char command;
gwappa 5:849446d19406 67 V value;
gwappa 5:849446d19406 68 };
gwappa 5:849446d19406 69
gwappa 5:849446d19406 70 class Action: public config::CommandResponder
gwappa 5:849446d19406 71 {
gwappa 5:849446d19406 72 public:
gwappa 5:849446d19406 73 explicit Action(const char& command, Callback<void()> f);
gwappa 5:849446d19406 74
gwappa 5:849446d19406 75 virtual ~Action();
gwappa 5:849446d19406 76
gwappa 5:849446d19406 77 virtual bool parse(const char& c);
gwappa 5:849446d19406 78
gwappa 5:849446d19406 79 virtual bool writeSettings();
gwappa 5:849446d19406 80
gwappa 5:849446d19406 81 virtual void echoback();
gwappa 5:849446d19406 82
gwappa 5:849446d19406 83 private:
gwappa 5:849446d19406 84 const char command_;
gwappa 5:849446d19406 85 Callback<void()> handler_;
gwappa 5:849446d19406 86 };
gwappa 5:849446d19406 87
gwappa 5:849446d19406 88 #endif