fast-feedback virtual target task code on STM Nucleo

Dependencies:   mbed

Committer:
gwappa
Date:
Wed May 23 15:15:03 2018 +0000
Revision:
4:fcf597f82632
Parent:
1:871d3066c2ab
Child:
5:849446d19406
make Pair mode work

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 1:871d3066c2ab 8 delay_min_ms(3000),
gwappa 1:871d3066c2ab 9 delay_var_ms(3000),
gwappa 1:871d3066c2ab 10 prep_dur_ms (3000),
gwappa 1:871d3066c2ab 11 cue_dur_ms (3000),
gwappa 1:871d3066c2ab 12 post_dur_ms (4000),
gwappa 1:871d3066c2ab 13 reward_ms (10)
gwappa 1:871d3066c2ab 14 { }
gwappa 1:871d3066c2ab 15
gwappa 1:871d3066c2ab 16
gwappa 1:871d3066c2ab 17
gwappa 1:871d3066c2ab 18 void Task::writeModeToSerial(bool newline){
gwappa 1:871d3066c2ab 19 IO::write(IO::CONFIG_HEADER);
gwappa 1:871d3066c2ab 20 #define WRITE(CHR, VAL) if (mode == (VAL)) { IO::write("[%c]",CHR); } else { IO::write("%c",CHR); }
gwappa 1:871d3066c2ab 21 WRITE(CMD_MODE_PAIR, Pair)
gwappa 1:871d3066c2ab 22 WRITE(CMD_MODE_APPEAR, Appear)
gwappa 1:871d3066c2ab 23 #undef WRITE
gwappa 1:871d3066c2ab 24 if (newline) {
gwappa 1:871d3066c2ab 25 IO::write(STR_NEWLINE);
gwappa 1:871d3066c2ab 26 }
gwappa 1:871d3066c2ab 27 }
gwappa 1:871d3066c2ab 28
gwappa 1:871d3066c2ab 29
gwappa 1:871d3066c2ab 30 void Task::writeSettingsToSerial()
gwappa 1:871d3066c2ab 31 {
gwappa 1:871d3066c2ab 32 writeModeToSerial(false);
gwappa 1:871d3066c2ab 33 IO::write(STR_DELIMITER);
gwappa 1:871d3066c2ab 34 #define WRITE(CHR, PARAM, END) IO::write("%c%u",CHR,PARAM); if (END) { IO::write(STR_NEWLINE); } else { IO::write(STR_DELIMITER); }
gwappa 1:871d3066c2ab 35 WRITE(CHR_DELAY_MIN, delay_min_ms, false)
gwappa 1:871d3066c2ab 36 WRITE(CHR_DELAY_VAR, delay_var_ms, false)
gwappa 1:871d3066c2ab 37 WRITE(CHR_PREP_DUR, prep_dur_ms, false)
gwappa 1:871d3066c2ab 38 WRITE(CHR_CUE_DUR, cue_dur_ms, false)
gwappa 1:871d3066c2ab 39 WRITE(CHR_POST_DUR, post_dur_ms, false)
gwappa 1:871d3066c2ab 40 WRITE(CHR_REWARD_DUR, reward_ms, true)
gwappa 1:871d3066c2ab 41 #undef WRITE
gwappa 1:871d3066c2ab 42 }
gwappa 1:871d3066c2ab 43
gwappa 1:871d3066c2ab 44 void Task::parseFromSerial() {
gwappa 1:871d3066c2ab 45 char in = IO::getc();
gwappa 1:871d3066c2ab 46
gwappa 1:871d3066c2ab 47 if (isWhitespace(in)) {
gwappa 1:871d3066c2ab 48 return;
gwappa 1:871d3066c2ab 49 }
gwappa 1:871d3066c2ab 50
gwappa 1:871d3066c2ab 51 switch(in) {
gwappa 1:871d3066c2ab 52 case CMD_TEST_REWARD:
gwappa 1:871d3066c2ab 53 // Cued::turnOnReward();
gwappa 1:871d3066c2ab 54 // while(Cued::phase != Cued::Done);
gwappa 1:871d3066c2ab 55 // LOG_REWARDED
gwappa 1:871d3066c2ab 56 IO::result("done");
gwappa 1:871d3066c2ab 57 break;
gwappa 1:871d3066c2ab 58
gwappa 1:871d3066c2ab 59 case CMD_EXECUTE:
gwappa 1:871d3066c2ab 60 // TRIAL_STARTING
gwappa 4:fcf597f82632 61 automaton::run();
gwappa 1:871d3066c2ab 62 IO::result("done");
gwappa 1:871d3066c2ab 63 break;
gwappa 1:871d3066c2ab 64
gwappa 1:871d3066c2ab 65 case '?': writeSettingsToSerial(); break;
gwappa 1:871d3066c2ab 66 case CMD_MODE_PAIR: mode = Pair; writeModeToSerial(); break;
gwappa 4:fcf597f82632 67 case CMD_MODE_REPORT: mode = Report; writeModeToSerial(); break;
gwappa 1:871d3066c2ab 68 case CMD_MODE_APPEAR: mode = Appear; writeModeToSerial(); break;
gwappa 1:871d3066c2ab 69 #define PARSE(CHR, PARAM) case (CHR): PARAM = parseUnsignedFromSerial<uint16_t>(PARAM);\
gwappa 1:871d3066c2ab 70 IO::config("%c%u",(CHR),(PARAM)); break;
gwappa 1:871d3066c2ab 71
gwappa 1:871d3066c2ab 72 PARSE(CHR_DELAY_MIN, delay_min_ms)
gwappa 1:871d3066c2ab 73 PARSE(CHR_DELAY_VAR, delay_var_ms)
gwappa 1:871d3066c2ab 74 PARSE(CHR_PREP_DUR, prep_dur_ms)
gwappa 1:871d3066c2ab 75 PARSE(CHR_CUE_DUR, cue_dur_ms)
gwappa 1:871d3066c2ab 76 PARSE(CHR_POST_DUR, post_dur_ms)
gwappa 1:871d3066c2ab 77 PARSE(CHR_REWARD_DUR, reward_ms)
gwappa 1:871d3066c2ab 78 #undef PARSE
gwappa 1:871d3066c2ab 79 default:
gwappa 1:871d3066c2ab 80 IO::error("%c",in);
gwappa 1:871d3066c2ab 81 break;
gwappa 1:871d3066c2ab 82 }
gwappa 1:871d3066c2ab 83 }