fast-feedback virtual target task code on STM Nucleo

Dependencies:   mbed

Revision:
1:871d3066c2ab
Child:
4:fcf597f82632
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/task.cpp	Mon May 14 17:37:26 2018 +0000
@@ -0,0 +1,81 @@
+#include "task.h"
+#include "IO.h"
+#include "utils.h"
+
+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)
+{ }
+    
+    
+
+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);
+    }
+}
+    
+    
+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::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_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;
+    }
+}
\ No newline at end of file