fast-feedback virtual target task code on STM Nucleo

Dependencies:   mbed

trial.cpp

Committer:
gwappa
Date:
2018-05-31
Revision:
8:973dcd190672
Parent:
6:13d180af7501
Child:
11:897ecd5413e0

File content as of revision 8:973dcd190672:

#include "trial.h"
#include "IO.h"
#include "random.h"

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);
    
    // set stim size
    switch(task.mode.value)
    {
    case Appear:
        if (random::unif(2) == 1) {
            response |= TrialFlags::Cues;
        }
        break;
    case Pair:
    default:
        response |= TrialFlags::Cues;
        break;
    }
    
    // reset interrupt events
    licking_events.clear();
    whisking_events.clear();
}

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");
}