fast-feedback virtual target task code on STM Nucleo

Dependencies:   mbed

Committer:
gwappa
Date:
Mon Jul 02 09:04:45 2018 +0000
Revision:
20:4c06d3041337
Parent:
18:66246d6c5476
Child:
22:41163fb3fdc6
try extending Pulse to allow tickering output

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 18:66246d6c5476 8 delay_min_ms (CFG_DELAY_MIN),
gwappa 18:66246d6c5476 9 delay_var_ms (CFG_DELAY_VAR),
gwappa 18:66246d6c5476 10 prep_dur_ms (CFG_PREP_DUR),
gwappa 18:66246d6c5476 11 aud_dur_ms (CFG_AUD_DUR),
gwappa 18:66246d6c5476 12 aud_tick_hz (CFG_AUD_FREQ),
gwappa 18:66246d6c5476 13 resp_dur_ms (CFG_RESP_DUR),
gwappa 18:66246d6c5476 14 post_dur_ms (CFG_POST_DUR),
gwappa 18:66246d6c5476 15 reward_dur_ms (CFG_REWARD_DUR),
gwappa 18:66246d6c5476 16 pre_min_ms (CFG_PRE_MIN),
gwappa 18:66246d6c5476 17 vis_min_ms (CFG_VIS_MIN),
gwappa 18:66246d6c5476 18 vis_avg_ms (CFG_VIS_AVG),
gwappa 20:4c06d3041337 19 vis_blink_hz (CFG_VIS_FREQ),
gwappa 18:66246d6c5476 20 vis_fail_perc (CFG_VIS_FAIL),
gwappa 16:33c17c62840e 21 test_reward (CMD_TEST_REWARD, callback(this, &Task::testReward)),
gwappa 16:33c17c62840e 22 run (CMD_EXECUTE, callback(this, &Task::runTrial))
gwappa 1:871d3066c2ab 23 { }
gwappa 5:849446d19406 24
gwappa 11:897ecd5413e0 25 const char ModeSelection::CMD_ID_MODE = '_';
gwappa 11:897ecd5413e0 26 const char ModeSelection::CMD_MODE_PAIR = 'P';
gwappa 11:897ecd5413e0 27 const char ModeSelection::CMD_MODE_REPORT = 'R';
gwappa 11:897ecd5413e0 28 const char ModeSelection::CMD_MODE_ASSOCIATE = 'A';
gwappa 11:897ecd5413e0 29 const char ModeSelection::CMD_MODE_MOTION = 'M';
gwappa 16:33c17c62840e 30 const char ModeSelection::CMD_MODE_MOTION_ALT= 'N';
gwappa 9:e136394bdb39 31
gwappa 5:849446d19406 32 ModeSelection::ModeSelection(const Mode& defaultValue):
gwappa 5:849446d19406 33 value(defaultValue) {
gwappa 5:849446d19406 34 config::addCommand(CMD_ID_MODE, this);
gwappa 5:849446d19406 35 }
gwappa 5:849446d19406 36
gwappa 5:849446d19406 37 ModeSelection::~ModeSelection() {
gwappa 5:849446d19406 38 config::removeCommand(CMD_ID_MODE);
gwappa 5:849446d19406 39 }
gwappa 1:871d3066c2ab 40
gwappa 5:849446d19406 41 bool ModeSelection::parse(const char& c) {
gwappa 5:849446d19406 42 switch(c) {
gwappa 11:897ecd5413e0 43 case CMD_MODE_PAIR: value = Pair; return true;
gwappa 11:897ecd5413e0 44 case CMD_MODE_REPORT: value = Report; return true;
gwappa 11:897ecd5413e0 45 case CMD_MODE_ASSOCIATE: value = Associate; return true;
gwappa 11:897ecd5413e0 46 case CMD_MODE_MOTION: value = Motion; return true;
gwappa 16:33c17c62840e 47 case CMD_MODE_MOTION_ALT: value = MotionAlt; return true;
gwappa 5:849446d19406 48 default:
gwappa 5:849446d19406 49 return false;
gwappa 5:849446d19406 50 }
gwappa 5:849446d19406 51 }
gwappa 5:849446d19406 52
gwappa 5:849446d19406 53 bool ModeSelection::writeSettings() {
gwappa 5:849446d19406 54 #define WRITE(CHR, VAL) if (value == (VAL)) { IO::write("[%c]",CHR); } else { IO::write("%c",CHR); }
gwappa 11:897ecd5413e0 55 WRITE(CMD_MODE_PAIR, Pair)
gwappa 11:897ecd5413e0 56 WRITE(CMD_MODE_REPORT, Report)
gwappa 11:897ecd5413e0 57 WRITE(CMD_MODE_ASSOCIATE, Associate)
gwappa 11:897ecd5413e0 58 WRITE(CMD_MODE_MOTION, Motion)
gwappa 16:33c17c62840e 59 WRITE(CMD_MODE_MOTION_ALT, MotionAlt)
gwappa 1:871d3066c2ab 60 #undef WRITE
gwappa 5:849446d19406 61 return true;
gwappa 1:871d3066c2ab 62 }
gwappa 5:849446d19406 63
gwappa 5:849446d19406 64 void ModeSelection::echoback() {
gwappa 5:849446d19406 65 IO::write(IO::CONFIG_HEADER);
gwappa 5:849446d19406 66 writeSettings();
gwappa 6:13d180af7501 67 IO::write("\r\n");
gwappa 1:871d3066c2ab 68 }
gwappa 1:871d3066c2ab 69
gwappa 5:849446d19406 70
gwappa 5:849446d19406 71 void Task::testReward() {
gwappa 8:973dcd190672 72 automaton::init<TestReward>();
gwappa 8:973dcd190672 73 automaton::run();
gwappa 10:7c216d528c35 74 IO::result("done");
gwappa 5:849446d19406 75 }
gwappa 5:849446d19406 76
gwappa 5:849446d19406 77 void Task::runTrial() {
gwappa 8:973dcd190672 78 automaton::init<Delay>();
gwappa 5:849446d19406 79 automaton::run();
gwappa 5:849446d19406 80 }
gwappa 5:849446d19406 81
gwappa 5:849446d19406 82 void Task::parseFromSerial() {
gwappa 5:849446d19406 83 config::handleSerial();
gwappa 5:849446d19406 84 }
gwappa 5:849446d19406 85
gwappa 5:849446d19406 86 void Task::writeSettingsToSerial() {
gwappa 5:849446d19406 87 config::writeSettingsToSerial();
gwappa 5:849446d19406 88 }