Keisuke Sehara
/
STM32_Whisking
fast-feedback virtual target task code on STM Nucleo
task.cpp@6:13d180af7501, 2018-05-24 (annotated)
- Committer:
- gwappa
- Date:
- Thu May 24 15:34:58 2018 +0000
- Revision:
- 6:13d180af7501
- Parent:
- 5:849446d19406
- Child:
- 8:973dcd190672
add simpler configuration functionality
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gwappa | 1:871d3066c2ab | 1 | #include "task.h" |
gwappa | 1:871d3066c2ab | 2 | #include "IO.h" |
gwappa | 1:871d3066c2ab | 3 | #include "utils.h" |
gwappa | 4:fcf597f82632 | 4 | #include "automaton.h" |
gwappa | 1:871d3066c2ab | 5 | |
gwappa | 1:871d3066c2ab | 6 | Task::Task(const Mode& mode): |
gwappa | 1:871d3066c2ab | 7 | mode(mode), |
gwappa | 5:849446d19406 | 8 | delay_min_ms(CHR_DELAY_MIN, 3000), |
gwappa | 5:849446d19406 | 9 | delay_var_ms(CHR_DELAY_VAR, 3000), |
gwappa | 5:849446d19406 | 10 | prep_dur_ms (CHR_PREP_DUR, 3000), |
gwappa | 5:849446d19406 | 11 | cue_dur_ms (CHR_CUE_DUR, 3000), |
gwappa | 5:849446d19406 | 12 | post_dur_ms (CHR_POST_DUR, 4000), |
gwappa | 5:849446d19406 | 13 | reward_ms (CHR_REWARD_DUR,10), |
gwappa | 5:849446d19406 | 14 | test_reward (CMD_TEST_REWARD, callback(this, &Task::testReward)), |
gwappa | 5:849446d19406 | 15 | run (CMD_EXECUTE, callback(this, &Task::runTrial)) |
gwappa | 1:871d3066c2ab | 16 | { } |
gwappa | 5:849446d19406 | 17 | |
gwappa | 5:849446d19406 | 18 | ModeSelection::ModeSelection(const Mode& defaultValue): |
gwappa | 5:849446d19406 | 19 | value(defaultValue) { |
gwappa | 5:849446d19406 | 20 | config::addCommand(CMD_ID_MODE, this); |
gwappa | 5:849446d19406 | 21 | } |
gwappa | 5:849446d19406 | 22 | |
gwappa | 5:849446d19406 | 23 | ModeSelection::~ModeSelection() { |
gwappa | 5:849446d19406 | 24 | config::removeCommand(CMD_ID_MODE); |
gwappa | 5:849446d19406 | 25 | } |
gwappa | 1:871d3066c2ab | 26 | |
gwappa | 5:849446d19406 | 27 | bool ModeSelection::parse(const char& c) { |
gwappa | 5:849446d19406 | 28 | switch(c) { |
gwappa | 5:849446d19406 | 29 | case CMD_MODE_PAIR: value = Pair; return true; |
gwappa | 5:849446d19406 | 30 | case CMD_MODE_REPORT: value = Report; return true; |
gwappa | 5:849446d19406 | 31 | case CMD_MODE_APPEAR: value = Appear; return true; |
gwappa | 5:849446d19406 | 32 | default: |
gwappa | 5:849446d19406 | 33 | return false; |
gwappa | 5:849446d19406 | 34 | } |
gwappa | 5:849446d19406 | 35 | } |
gwappa | 5:849446d19406 | 36 | |
gwappa | 5:849446d19406 | 37 | bool ModeSelection::writeSettings() { |
gwappa | 5:849446d19406 | 38 | #define WRITE(CHR, VAL) if (value == (VAL)) { IO::write("[%c]",CHR); } else { IO::write("%c",CHR); } |
gwappa | 1:871d3066c2ab | 39 | WRITE(CMD_MODE_PAIR, Pair) |
gwappa | 5:849446d19406 | 40 | WRITE(CMD_MODE_REPORT, Report) |
gwappa | 1:871d3066c2ab | 41 | WRITE(CMD_MODE_APPEAR, Appear) |
gwappa | 1:871d3066c2ab | 42 | #undef WRITE |
gwappa | 5:849446d19406 | 43 | return true; |
gwappa | 1:871d3066c2ab | 44 | } |
gwappa | 5:849446d19406 | 45 | |
gwappa | 5:849446d19406 | 46 | void ModeSelection::echoback() { |
gwappa | 5:849446d19406 | 47 | IO::write(IO::CONFIG_HEADER); |
gwappa | 5:849446d19406 | 48 | writeSettings(); |
gwappa | 6:13d180af7501 | 49 | IO::write("\r\n"); |
gwappa | 1:871d3066c2ab | 50 | } |
gwappa | 1:871d3066c2ab | 51 | |
gwappa | 5:849446d19406 | 52 | |
gwappa | 5:849446d19406 | 53 | void Task::testReward() { |
gwappa | 5:849446d19406 | 54 | // Cued::turnOnReward(); |
gwappa | 5:849446d19406 | 55 | // while(Cued::phase != Cued::Done); |
gwappa | 5:849446d19406 | 56 | // LOG_REWARDED |
gwappa | 5:849446d19406 | 57 | } |
gwappa | 5:849446d19406 | 58 | |
gwappa | 5:849446d19406 | 59 | void Task::runTrial() { |
gwappa | 5:849446d19406 | 60 | // TRIAL_STARTING |
gwappa | 5:849446d19406 | 61 | automaton::run(); |
gwappa | 5:849446d19406 | 62 | } |
gwappa | 5:849446d19406 | 63 | |
gwappa | 5:849446d19406 | 64 | void Task::parseFromSerial() { |
gwappa | 5:849446d19406 | 65 | config::handleSerial(); |
gwappa | 5:849446d19406 | 66 | } |
gwappa | 5:849446d19406 | 67 | |
gwappa | 5:849446d19406 | 68 | void Task::writeSettingsToSerial() { |
gwappa | 5:849446d19406 | 69 | config::writeSettingsToSerial(); |
gwappa | 5:849446d19406 | 70 | } |
gwappa | 5:849446d19406 | 71 | |
gwappa | 5:849446d19406 | 72 | /* |
gwappa | 1:871d3066c2ab | 73 | void Task::parseFromSerial() { |
gwappa | 1:871d3066c2ab | 74 | char in = IO::getc(); |
gwappa | 1:871d3066c2ab | 75 | |
gwappa | 1:871d3066c2ab | 76 | if (isWhitespace(in)) { |
gwappa | 1:871d3066c2ab | 77 | return; |
gwappa | 1:871d3066c2ab | 78 | } |
gwappa | 1:871d3066c2ab | 79 | |
gwappa | 1:871d3066c2ab | 80 | switch(in) { |
gwappa | 1:871d3066c2ab | 81 | case CMD_TEST_REWARD: |
gwappa | 1:871d3066c2ab | 82 | // Cued::turnOnReward(); |
gwappa | 1:871d3066c2ab | 83 | // while(Cued::phase != Cued::Done); |
gwappa | 1:871d3066c2ab | 84 | // LOG_REWARDED |
gwappa | 1:871d3066c2ab | 85 | IO::result("done"); |
gwappa | 1:871d3066c2ab | 86 | break; |
gwappa | 1:871d3066c2ab | 87 | |
gwappa | 1:871d3066c2ab | 88 | case CMD_EXECUTE: |
gwappa | 1:871d3066c2ab | 89 | // TRIAL_STARTING |
gwappa | 4:fcf597f82632 | 90 | automaton::run(); |
gwappa | 1:871d3066c2ab | 91 | IO::result("done"); |
gwappa | 1:871d3066c2ab | 92 | break; |
gwappa | 1:871d3066c2ab | 93 | |
gwappa | 1:871d3066c2ab | 94 | case '?': writeSettingsToSerial(); break; |
gwappa | 1:871d3066c2ab | 95 | case CMD_MODE_PAIR: mode = Pair; writeModeToSerial(); break; |
gwappa | 4:fcf597f82632 | 96 | case CMD_MODE_REPORT: mode = Report; writeModeToSerial(); break; |
gwappa | 1:871d3066c2ab | 97 | case CMD_MODE_APPEAR: mode = Appear; writeModeToSerial(); break; |
gwappa | 1:871d3066c2ab | 98 | #define PARSE(CHR, PARAM) case (CHR): PARAM = parseUnsignedFromSerial<uint16_t>(PARAM);\ |
gwappa | 1:871d3066c2ab | 99 | IO::config("%c%u",(CHR),(PARAM)); break; |
gwappa | 1:871d3066c2ab | 100 | |
gwappa | 1:871d3066c2ab | 101 | PARSE(CHR_DELAY_MIN, delay_min_ms) |
gwappa | 1:871d3066c2ab | 102 | PARSE(CHR_DELAY_VAR, delay_var_ms) |
gwappa | 1:871d3066c2ab | 103 | PARSE(CHR_PREP_DUR, prep_dur_ms) |
gwappa | 1:871d3066c2ab | 104 | PARSE(CHR_CUE_DUR, cue_dur_ms) |
gwappa | 1:871d3066c2ab | 105 | PARSE(CHR_POST_DUR, post_dur_ms) |
gwappa | 1:871d3066c2ab | 106 | PARSE(CHR_REWARD_DUR, reward_ms) |
gwappa | 1:871d3066c2ab | 107 | #undef PARSE |
gwappa | 1:871d3066c2ab | 108 | default: |
gwappa | 1:871d3066c2ab | 109 | IO::error("%c",in); |
gwappa | 1:871d3066c2ab | 110 | break; |
gwappa | 1:871d3066c2ab | 111 | } |
gwappa | 5:849446d19406 | 112 | } |
gwappa | 5:849446d19406 | 113 | |
gwappa | 5:849446d19406 | 114 | |
gwappa | 5:849446d19406 | 115 | void Task::writeSettingsToSerial() |
gwappa | 5:849446d19406 | 116 | { |
gwappa | 5:849446d19406 | 117 | writeModeToSerial(false); |
gwappa | 5:849446d19406 | 118 | IO::write(STR_DELIMITER); |
gwappa | 5:849446d19406 | 119 | #define WRITE(CHR, PARAM, END) IO::write("%c%u",CHR,PARAM); if (END) { IO::write(STR_NEWLINE); } else { IO::write(STR_DELIMITER); } |
gwappa | 5:849446d19406 | 120 | WRITE(CHR_DELAY_MIN, delay_min_ms, false) |
gwappa | 5:849446d19406 | 121 | WRITE(CHR_DELAY_VAR, delay_var_ms, false) |
gwappa | 5:849446d19406 | 122 | WRITE(CHR_PREP_DUR, prep_dur_ms, false) |
gwappa | 5:849446d19406 | 123 | WRITE(CHR_CUE_DUR, cue_dur_ms, false) |
gwappa | 5:849446d19406 | 124 | WRITE(CHR_POST_DUR, post_dur_ms, false) |
gwappa | 5:849446d19406 | 125 | WRITE(CHR_REWARD_DUR, reward_ms, true) |
gwappa | 5:849446d19406 | 126 | #undef WRITE |
gwappa | 5:849446d19406 | 127 | } |
gwappa | 5:849446d19406 | 128 | |
gwappa | 5:849446d19406 | 129 | void Task::writeModeToSerial(bool newline){ |
gwappa | 5:849446d19406 | 130 | IO::write(IO::CONFIG_HEADER); |
gwappa | 5:849446d19406 | 131 | #define WRITE(CHR, VAL) if (mode == (VAL)) { IO::write("[%c]",CHR); } else { IO::write("%c",CHR); } |
gwappa | 5:849446d19406 | 132 | WRITE(CMD_MODE_PAIR, Pair) |
gwappa | 5:849446d19406 | 133 | WRITE(CMD_MODE_APPEAR, Appear) |
gwappa | 5:849446d19406 | 134 | #undef WRITE |
gwappa | 5:849446d19406 | 135 | if (newline) { |
gwappa | 5:849446d19406 | 136 | IO::write(STR_NEWLINE); |
gwappa | 5:849446d19406 | 137 | } |
gwappa | 5:849446d19406 | 138 | } |
gwappa | 5:849446d19406 | 139 | */ |