Keisuke Sehara
/
STM32_Whisking
fast-feedback virtual target task code on STM Nucleo
task.cpp
- Committer:
- gwappa
- Date:
- 2018-10-01
- Revision:
- 30:5f975f572ffb
- Parent:
- 29:1fb060aab1f8
- Child:
- 31:b320ca61a8c0
File content as of revision 30:5f975f572ffb:
#include "task.h" #include "utils.h" #include "states.h" #include "automaton.h" Task::Task(const Mode& mode): mode(mode), delay_min_ms (CFG_DELAY_MIN), delay_var_ms (CFG_DELAY_VAR), prep_dur_ms (CFG_PREP_DUR), aud_dur_ms (CFG_AUD_DUR), aud_tick_hz (CFG_AUD_FREQ), resp_dur_ms (CFG_RESP_DUR), post_dur_ms (CFG_POST_DUR), reward_dur_ms (CFG_REWARD_DUR), onset_min_ms (CFG_ONSET_MIN), onset_steps_n (CFG_ONSET_STEPS), vis_dur_ms (CFG_VIS_DUR), vis_test_every (CFG_VIS_TEST_EVERY), whisk_debounce_ms (CFG_WHISK_DEBOUNCE), lick_debounce_ms (CFG_LICK_DEBOUNCE), test_reward (CMD_TEST_REWARD, callback(this, &Task::testReward) ), clear_index (CMD_CLEAR_INDEX, callback(this, &Task::clearTrialIndex) ), run (CMD_EXECUTE, callback(this, &Task::runTrial) ) { } const char ModeSelection::CMD_ID_MODE = '_'; const char ModeSelection::CMD_MODE_CONDITION = 'C'; const char ModeSelection::CMD_MODE_REPORT = 'R'; const char ModeSelection::CMD_MODE_ASSOCIATE = 'A'; const char ModeSelection::CMD_MODE_MOTION = 'M'; const char ModeSelection::CMD_MODE_MOTION_ALT= 'N'; 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_CONDITION: value = Condition; return true; case CMD_MODE_REPORT: value = Report; return true; case CMD_MODE_ASSOCIATE: value = Associate; return true; case CMD_MODE_MOTION: value = Motion; return true; case CMD_MODE_MOTION_ALT: value = MotionAlt; 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_CONDITION, Condition) WRITE(CMD_MODE_REPORT, Report) WRITE(CMD_MODE_ASSOCIATE, Associate) WRITE(CMD_MODE_MOTION, Motion) WRITE(CMD_MODE_MOTION_ALT, MotionAlt) #undef WRITE return true; } void ModeSelection::echoback() { IO::write(IO::CONFIG_HEADER); writeSettings(); IO::write("\r\n"); } void Task::testReward() { automaton::init<TestReward>(); automaton::run(); IO::result("done"); } void Task::clearTrialIndex() { automaton::init<ClearTrialIndex>(); automaton::run(); } void Task::runTrial() { automaton::init<Delay>(); automaton::run(); } void Task::parseFromSerial() { config::handleSerial(); } void Task::writeSettingsToSerial() { config::writeSettingsToSerial(); }