fast-feedback virtual target task code on STM Nucleo

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 */