Keisuke Sehara
/
STM32_Whisking
fast-feedback virtual target task code on STM Nucleo
Diff: task.cpp
- Revision:
- 5:849446d19406
- Parent:
- 4:fcf597f82632
- Child:
- 6:13d180af7501
--- a/task.cpp Wed May 23 15:15:03 2018 +0000 +++ b/task.cpp Thu May 24 14:47:48 2018 +0000 @@ -5,42 +5,70 @@ 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) + delay_min_ms(CHR_DELAY_MIN, 3000), + delay_var_ms(CHR_DELAY_VAR, 3000), + prep_dur_ms (CHR_PREP_DUR, 3000), + cue_dur_ms (CHR_CUE_DUR, 3000), + post_dur_ms (CHR_POST_DUR, 4000), + reward_ms (CHR_REWARD_DUR,10), + test_reward (CMD_TEST_REWARD, callback(this, &Task::testReward)), + run (CMD_EXECUTE, callback(this, &Task::runTrial)) { } - - + +ModeSelection::ModeSelection(const Mode& defaultValue): + value(defaultValue) { + config::addCommand(CMD_ID_MODE, this); +} + +ModeSelection::~ModeSelection() { + config::removeCommand(CMD_ID_MODE); +} -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); } +bool ModeSelection::parse(const char& c) { + switch(c) { + case CMD_MODE_PAIR: value = Pair; return true; + case CMD_MODE_REPORT: value = Report; return true; + case CMD_MODE_APPEAR: value = Appear; return true; + default: + return false; + } +} + +bool ModeSelection::writeSettings() { +#define WRITE(CHR, VAL) if (value == (VAL)) { IO::write("[%c]",CHR); } else { IO::write("%c",CHR); } WRITE(CMD_MODE_PAIR, Pair) + WRITE(CMD_MODE_REPORT, Report) WRITE(CMD_MODE_APPEAR, Appear) #undef WRITE - if (newline) { - IO::write(STR_NEWLINE); - } + return true; } - - -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 ModeSelection::echoback() { + IO::write(IO::CONFIG_HEADER); + writeSettings(); } + +void Task::testReward() { + // Cued::turnOnReward(); + // while(Cued::phase != Cued::Done); + // LOG_REWARDED +} + +void Task::runTrial() { + // TRIAL_STARTING + automaton::run(); +} + +void Task::parseFromSerial() { + config::handleSerial(); +} + +void Task::writeSettingsToSerial() { + config::writeSettingsToSerial(); +} + +/* void Task::parseFromSerial() { char in = IO::getc(); @@ -80,4 +108,31 @@ IO::error("%c",in); break; } -} \ No newline at end of file +} + + +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::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); + } +} +*/