Keisuke Sehara
/
STM32_Whisking
fast-feedback virtual target task code on STM Nucleo
config.h@6:13d180af7501, 2018-05-24 (annotated)
- Committer:
- gwappa
- Date:
- Thu May 24 15:34:58 2018 +0000
- Revision:
- 6:13d180af7501
- Parent:
- 5:849446d19406
add simpler configuration functionality
Who changed what in which revision?
User | Revision | Line number | New 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 |