Keisuke Sehara
/
STM32_Whisking
fast-feedback virtual target task code on STM Nucleo
Diff: task.cpp
- Revision:
- 1:871d3066c2ab
- Child:
- 4:fcf597f82632
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/task.cpp Mon May 14 17:37:26 2018 +0000 @@ -0,0 +1,81 @@ +#include "task.h" +#include "IO.h" +#include "utils.h" + +Task::Task(const Mode& mode): + mode(mode), + delay_min_ms(3000), + delay_var_ms(3000), + prep_dur_ms (3000), + cue_dur_ms (3000), + post_dur_ms (4000), + reward_ms (10) +{ } + + + +void Task::writeModeToSerial(bool newline){ + IO::write(IO::CONFIG_HEADER); +#define WRITE(CHR, VAL) if (mode == (VAL)) { IO::write("[%c]",CHR); } else { IO::write("%c",CHR); } + WRITE(CMD_MODE_PAIR, Pair) + WRITE(CMD_MODE_APPEAR, Appear) +#undef WRITE + if (newline) { + IO::write(STR_NEWLINE); + } +} + + +void Task::writeSettingsToSerial() +{ + writeModeToSerial(false); + IO::write(STR_DELIMITER); +#define WRITE(CHR, PARAM, END) IO::write("%c%u",CHR,PARAM); if (END) { IO::write(STR_NEWLINE); } else { IO::write(STR_DELIMITER); } + WRITE(CHR_DELAY_MIN, delay_min_ms, false) + WRITE(CHR_DELAY_VAR, delay_var_ms, false) + WRITE(CHR_PREP_DUR, prep_dur_ms, false) + WRITE(CHR_CUE_DUR, cue_dur_ms, false) + WRITE(CHR_POST_DUR, post_dur_ms, false) + WRITE(CHR_REWARD_DUR, reward_ms, true) +#undef WRITE +} + +void Task::parseFromSerial() { + char in = IO::getc(); + + if (isWhitespace(in)) { + return; + } + + switch(in) { + case CMD_TEST_REWARD: + // Cued::turnOnReward(); + // while(Cued::phase != Cued::Done); + // LOG_REWARDED + IO::result("done"); + break; + + case CMD_EXECUTE: + // TRIAL_STARTING + // automaton::run(); + IO::result("done"); + break; + + case '?': writeSettingsToSerial(); break; + case CMD_MODE_PAIR: mode = Pair; writeModeToSerial(); break; + case CMD_MODE_APPEAR: mode = Appear; writeModeToSerial(); break; +#define PARSE(CHR, PARAM) case (CHR): PARAM = parseUnsignedFromSerial<uint16_t>(PARAM);\ + IO::config("%c%u",(CHR),(PARAM)); break; + + PARSE(CHR_DELAY_MIN, delay_min_ms) + PARSE(CHR_DELAY_VAR, delay_var_ms) + PARSE(CHR_PREP_DUR, prep_dur_ms) + PARSE(CHR_CUE_DUR, cue_dur_ms) + PARSE(CHR_POST_DUR, post_dur_ms) + PARSE(CHR_REWARD_DUR, reward_ms) +#undef PARSE + default: + IO::error("%c",in); + break; + } +} \ No newline at end of file