fast-feedback virtual target task code on STM Nucleo

Dependencies:   mbed

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);
+    }
+}
+*/