Keisuke Sehara
/
STM32_Whisking
fast-feedback virtual target task code on STM Nucleo
task.cpp
- Committer:
- gwappa
- Date:
- 2018-05-24
- Revision:
- 5:849446d19406
- Parent:
- 4:fcf597f82632
- Child:
- 6:13d180af7501
File content as of revision 5:849446d19406:
#include "task.h" #include "IO.h" #include "utils.h" #include "automaton.h" Task::Task(const Mode& mode): mode(mode), 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); } 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 return true; } 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(); 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_REPORT: mode = Report; 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; } } 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); } } */