fast-feedback virtual target task code on STM Nucleo

Dependencies:   mbed

Committer:
gwappa
Date:
Thu Dec 13 07:18:43 2018 +0000
Revision:
32:1416e015016c
Parent:
31:b320ca61a8c0
change to use the Staged state

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gwappa 1:871d3066c2ab 1 #include "task.h"
gwappa 1:871d3066c2ab 2 #include "utils.h"
gwappa 8:973dcd190672 3 #include "states.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 25:56c4b22ec034 8 delay_min_ms (CFG_DELAY_MIN),
gwappa 25:56c4b22ec034 9 delay_var_ms (CFG_DELAY_VAR),
gwappa 25:56c4b22ec034 10 prep_dur_ms (CFG_PREP_DUR),
gwappa 25:56c4b22ec034 11 aud_dur_ms (CFG_AUD_DUR),
gwappa 25:56c4b22ec034 12 aud_tick_hz (CFG_AUD_FREQ),
gwappa 25:56c4b22ec034 13 resp_dur_ms (CFG_RESP_DUR),
gwappa 25:56c4b22ec034 14 post_dur_ms (CFG_POST_DUR),
gwappa 25:56c4b22ec034 15 reward_dur_ms (CFG_REWARD_DUR),
gwappa 29:1fb060aab1f8 16 onset_min_ms (CFG_ONSET_MIN),
gwappa 29:1fb060aab1f8 17 onset_steps_n (CFG_ONSET_STEPS),
gwappa 29:1fb060aab1f8 18 vis_dur_ms (CFG_VIS_DUR),
gwappa 29:1fb060aab1f8 19 vis_test_every (CFG_VIS_TEST_EVERY),
gwappa 25:56c4b22ec034 20 whisk_debounce_ms (CFG_WHISK_DEBOUNCE),
gwappa 25:56c4b22ec034 21 lick_debounce_ms (CFG_LICK_DEBOUNCE),
gwappa 30:5f975f572ffb 22 test_reward (CMD_TEST_REWARD, callback(this, &Task::testReward) ),
gwappa 30:5f975f572ffb 23 clear_index (CMD_CLEAR_INDEX, callback(this, &Task::clearTrialIndex) ),
gwappa 30:5f975f572ffb 24 run (CMD_EXECUTE, callback(this, &Task::runTrial) )
gwappa 1:871d3066c2ab 25 { }
gwappa 5:849446d19406 26
gwappa 11:897ecd5413e0 27 const char ModeSelection::CMD_ID_MODE = '_';
gwappa 32:1416e015016c 28 const char ModeSelection::CMD_MODE_PAIR = 'P';
gwappa 32:1416e015016c 29 const char ModeSelection::CMD_MODE_STAGE = 'S';
gwappa 11:897ecd5413e0 30 const char ModeSelection::CMD_MODE_REPORT = 'R';
gwappa 11:897ecd5413e0 31 const char ModeSelection::CMD_MODE_ASSOCIATE = 'A';
gwappa 11:897ecd5413e0 32 const char ModeSelection::CMD_MODE_MOTION = 'M';
gwappa 16:33c17c62840e 33 const char ModeSelection::CMD_MODE_MOTION_ALT= 'N';
gwappa 9:e136394bdb39 34
gwappa 5:849446d19406 35 ModeSelection::ModeSelection(const Mode& defaultValue):
gwappa 5:849446d19406 36 value(defaultValue) {
gwappa 5:849446d19406 37 config::addCommand(CMD_ID_MODE, this);
gwappa 5:849446d19406 38 }
gwappa 5:849446d19406 39
gwappa 5:849446d19406 40 ModeSelection::~ModeSelection() {
gwappa 5:849446d19406 41 config::removeCommand(CMD_ID_MODE);
gwappa 5:849446d19406 42 }
gwappa 1:871d3066c2ab 43
gwappa 5:849446d19406 44 bool ModeSelection::parse(const char& c) {
gwappa 5:849446d19406 45 switch(c) {
gwappa 32:1416e015016c 46 case CMD_MODE_PAIR: value = Pair; return true;
gwappa 11:897ecd5413e0 47 case CMD_MODE_REPORT: value = Report; return true;
gwappa 32:1416e015016c 48 case CMD_MODE_STAGE: value = Stage; return true;
gwappa 11:897ecd5413e0 49 case CMD_MODE_ASSOCIATE: value = Associate; return true;
gwappa 11:897ecd5413e0 50 case CMD_MODE_MOTION: value = Motion; return true;
gwappa 16:33c17c62840e 51 case CMD_MODE_MOTION_ALT: value = MotionAlt; return true;
gwappa 5:849446d19406 52 default:
gwappa 5:849446d19406 53 return false;
gwappa 5:849446d19406 54 }
gwappa 5:849446d19406 55 }
gwappa 5:849446d19406 56
gwappa 5:849446d19406 57 bool ModeSelection::writeSettings() {
gwappa 5:849446d19406 58 #define WRITE(CHR, VAL) if (value == (VAL)) { IO::write("[%c]",CHR); } else { IO::write("%c",CHR); }
gwappa 32:1416e015016c 59 WRITE(CMD_MODE_PAIR, Pair)
gwappa 11:897ecd5413e0 60 WRITE(CMD_MODE_REPORT, Report)
gwappa 32:1416e015016c 61 WRITE(CMD_MODE_STAGE, Stage)
gwappa 11:897ecd5413e0 62 WRITE(CMD_MODE_ASSOCIATE, Associate)
gwappa 11:897ecd5413e0 63 WRITE(CMD_MODE_MOTION, Motion)
gwappa 16:33c17c62840e 64 WRITE(CMD_MODE_MOTION_ALT, MotionAlt)
gwappa 1:871d3066c2ab 65 #undef WRITE
gwappa 5:849446d19406 66 return true;
gwappa 1:871d3066c2ab 67 }
gwappa 5:849446d19406 68
gwappa 5:849446d19406 69 void ModeSelection::echoback() {
gwappa 5:849446d19406 70 IO::write(IO::CONFIG_HEADER);
gwappa 5:849446d19406 71 writeSettings();
gwappa 6:13d180af7501 72 IO::write("\r\n");
gwappa 1:871d3066c2ab 73 }
gwappa 1:871d3066c2ab 74
gwappa 5:849446d19406 75
gwappa 5:849446d19406 76 void Task::testReward() {
gwappa 8:973dcd190672 77 automaton::init<TestReward>();
gwappa 8:973dcd190672 78 automaton::run();
gwappa 31:b320ca61a8c0 79 IO::result("out");
gwappa 5:849446d19406 80 }
gwappa 30:5f975f572ffb 81
gwappa 30:5f975f572ffb 82 void Task::clearTrialIndex() {
gwappa 30:5f975f572ffb 83 automaton::init<ClearTrialIndex>();
gwappa 30:5f975f572ffb 84 automaton::run();
gwappa 31:b320ca61a8c0 85 IO::result("cleared");
gwappa 30:5f975f572ffb 86 }
gwappa 5:849446d19406 87
gwappa 5:849446d19406 88 void Task::runTrial() {
gwappa 8:973dcd190672 89 automaton::init<Delay>();
gwappa 5:849446d19406 90 automaton::run();
gwappa 5:849446d19406 91 }
gwappa 5:849446d19406 92
gwappa 5:849446d19406 93 void Task::parseFromSerial() {
gwappa 5:849446d19406 94 config::handleSerial();
gwappa 5:849446d19406 95 }
gwappa 5:849446d19406 96
gwappa 5:849446d19406 97 void Task::writeSettingsToSerial() {
gwappa 5:849446d19406 98 config::writeSettingsToSerial();
gwappa 5:849446d19406 99 }