Keisuke Sehara
/
STM32_Whisking
fast-feedback virtual target task code on STM Nucleo
trial.cpp
- Committer:
- gwappa
- Date:
- 2018-06-25
- Revision:
- 12:06ea96546af1
- Parent:
- 11:897ecd5413e0
- Child:
- 13:8ea85a33e37a
File content as of revision 12:06ea96546af1:
#include "trial.h" #include "rig.h" #include "IO.h" #include "random.h" const uint64_t MicrosecondsInSecond = 1000000; void Trial::reset(const Task& task){ // reset score response = TrialFlags::Clear; // set delay duration delay_dur_ms = task.delay_min_ms.value + random::exponential(task.delay_var_ms.value, task.delay_var_ms.value*3); aud_ticker_cycle = MicrosecondsInSecond/(task.aud_tick_hz.value * 2); // TODO: generate visual stimulus (sequence) here // reset interrupt events licking_events.clear(); whisking_events.clear(); } void Trial::markTrialStart() { starting = timer.read_ms(); trialStart.run(); timer.start(); } void Trial::markEndOfWait() { cuestarting = timer.read_ms(); waiting = cuestarting - starting; } void Trial::markTrialEnd() { trialEnd.run(); trialEnd.wait(); writeToSerial(); timer.stop(); timer.reset(); } void Trial::writeToSerial() { switch(response){ #define WRITE_SCORE(SC,REPR) case SC: IO::write("%c%s;",IO::RESULT_HEADER,REPR); break; WRITE_SCORE(Responses::Hit, "hit") WRITE_SCORE(Responses::Miss, "miss") WRITE_SCORE(Responses::Catch, "catch") WRITE_SCORE(Responses::Reject, "reject") WRITE_SCORE(Responses::Reset, "reset") #undef WRITE_SCORE case Responses::NA: default: IO::write("%c%s(%x);",IO::RESULT_HEADER,"na",response); } IO::write("wait%u",waiting); trialtime_t zero = (response == Responses::Reset)? starting : cuestarting; IO::write(";whisk"); whisking_events.writeToSerial(zero); IO::write(";lick"); licking_events.writeToSerial(zero); IO::write(";\r\n"); }