Filtered#

#include <iostream>
#include <thread>
#include <chrono>

#include "maxlab/maxlab.h"
#include <unistd.h>

int main(int argc, char * argv[])
{
    if (argc < 2)
    {
        std::cerr << "Call with:\t" << argv[0] << "\t[detection_channel]" << std::endl;
        exit(1);
    }
    const int detection_channel = atoi(argv[1]);

    uint8_t targetWell{0};

    uint64_t blanking{0};
    maxlab::checkVersions();
    maxlab::verifyStatus(maxlab::DataStreamerFiltered_open(maxlab::FilterType::IIR));
    std::this_thread::sleep_for(std::chrono::seconds(2));;//Allow data stream to open

    maxlab::FilteredFrameData frameData;
    while (true)
    {
        maxlab::Status status = maxlab::DataStreamerFiltered_receiveNextFrame(&frameData);
        if (status == maxlab::Status::MAXLAB_NO_FRAME)
            continue;

        if (frameData.frameInfo.well_id != targetWell)
            continue;

        if (blanking > 0)
        {
            blanking--;
            continue;
        }

        for (uint64_t i = 0; i < frameData.spikeCount; ++i)
        {
            const maxlab::SpikeEvent & spike = frameData.spikeEvents[i];
            if (spike.channel == detection_channel)
            {
                maxlab::verifyStatus(maxlab::sendSequence("closed_loop"));
                blanking = 8000;
            }
        }
    }
    maxlab::verifyStatus(maxlab::DataStreamerFiltered_close());
}