Exemplo n.º 1
0
    void Update()
    {
        if (bufferClient.errorReturned != BufferClient.BUFFER_READ_ERROR && bufferIsConnected)
        {
            SamplesEventsCount count = bufferClient.wait(latestCapturedSample + 1, lastNumberOfEvents + 1, timeout);
            latestNumebrOfEventsInBuffer = count.nEvents;
            latestBufferSample           = count.nSamples;

            while (lastNumberOfEvents < latestNumebrOfEventsInBuffer)
            {
                bufferEvents.Add(bufferClient.getEvents(lastNumberOfEvents, lastNumberOfEvents)[0]);
                lastNumberOfEvents += 1;
                if (bufferEvents.Count > bufferEventsMaxCapacity)
                {
                    bufferEvents.RemoveAt(0);
                }
                OnNewEventsAdded(EventArgs.Empty);                //This notifies anyone who's listening that there had been an extra event added in the buffer
            }

            if (latestBufferSample > latestCapturedSample)
            {
                nSamples = latestBufferSample - latestCapturedSample;
                data     = bufferClient.getFloatData(latestCapturedSample, latestBufferSample - 1); //TO DO: The getFloat needs to change according to the buffers type of data
                bufferTimer.addSampleToRegression(latestBufferSample);                              //Updates the bufferTimer with the new samples.
                latestCapturedSample = latestBufferSample;
                OnNewDataCaptured(EventArgs.Empty);                                                 //That notifies anyone who's listening that data have been updated in the buffer
                if (newDataIn)
                {
                    dataPacketsLost += 1;
                }
                else
                {
                    newDataIn = true;
                }
            }
        }
    }
Exemplo n.º 2
0
    // N.B. this function is called EVERY VIDEO FRAME!..... so should be as fast as possible...
    // TODO: the buffer communication should really move to be in a seperate thread!!!
    void updateBuffer()
    {
        if (bufferClient != null && bufferConnectionInitialized)
        {
            //int dataTrigger=-1;
            //if ( storeData ) {
            //	dataTrigger = latestCapturedSample+DATAUPDATEINTERVAL_SAMP;
            //}
            SamplesEventsCount count = null;
            bufferIsConnected = bufferClient.isConnected();
            if (!bufferIsConnected)                 // if we are not connected try to re-connect..
            {
                Debug.LogError("Buffer connection closed..... trying to reconnect!");
                bufferClient.reconnect();
                return;
            }
            try {
                count = bufferClient.poll();
            } catch {             // poll failed.... why?
                Debug.LogError("Poll failed.... waiting for valid response!");
                return;
            }
            latestNumberOfEventsInBuffer = count.nEvents;
            latestBufferSample           = count.nSamples;
            // reset if we have been re-awoken
            if (latestCapturedSample < 0)
            {
                latestCapturedSample = latestBufferSample;
            }
            if (lastNumberOfEvents < 0)
            {
                lastNumberOfEvents = latestNumberOfEventsInBuffer;
            }
            if (latestBufferSample < latestCapturedSample)
            {
                Debug.LogError("Buffer restart detected .. skipping everything before now...");
                bufferTimer.reset();
                latestCapturedSample = latestBufferSample;
                lastNumberOfEvents   = latestNumberOfEventsInBuffer;
            }
            bufferTimer.addSampleToRegression(latestBufferSample);            //Updates the bufferTimer with the new samples.

            // Loop ot push events to the event stream
            while (lastNumberOfEvents < latestNumberOfEventsInBuffer)
            {
                try {                 // Watch out can miss events if we are too slow...
                    bufferEvents.Add(bufferClient.getEvents(lastNumberOfEvents, lastNumberOfEvents)[0]);
                } catch (IOException ex) {
                }
                lastNumberOfEvents += 1;
                if (bufferEvents.Count > bufferEventsMaxCapacity)                // Implement a ring-buffer for the events we store...
                {
                    bufferEvents.RemoveAt(0);
                }
                OnNewEventsAdded(EventArgs.Empty);                //This notifies anyone who's listening that there had been an extra event added in the buffer
            }
            lastNumberOfEvents = latestNumberOfEventsInBuffer;

            // push new data into the data event stream
            if (latestBufferSample > latestCapturedSample)
            {
                if (storeData)                     // if we should track and store the data
                {
                    storedSamples = latestBufferSample - latestCapturedSample;
                    if (storedSamples * nChans > MAXDATASAMPLES)
                    {
                        storedSamples = MAXDATASAMPLES / nChans;
                    }
                    data = bufferClient.getFloatData(latestBufferSample - storedSamples, latestBufferSample - 1); //TO DO: The getFloat needs to change according to the buffers type of data
                    OnNewDataCaptured(EventArgs.Empty);                                                           //That notifies anyone who's listening that data have been updated in the buffer
                    if (newDataIn)
                    {
                        dataPacketsLost += 1;
                    }
                    else
                    {
                        newDataIn = true;
                    }
                }
            }
            latestCapturedSample = latestBufferSample;
        }
    }
Exemplo n.º 3
0
    // N.B. this function is called EVERY VIDEO FRAME!..... so should be as fast as possible...
    // TODO: the buffer communication should really move to be in a seperate thread!!!
    void Update()
    {
        if (bufferIsConnected && bufferClient != null && bufferClient.errorReturned != BufferClient.BUFFER_READ_ERROR && bufferClient.isConnected())
        {
            //int dataTrigger=-1;
            //if ( storeData ) {
            //	dataTrigger = latestCapturedSample+DATAUPDATEINTERVAL_SAMP;
            //}
            SamplesEventsCount count = bufferClient.poll();
            latestNumberOfEventsInBuffer = count.nEvents;
            latestBufferSample           = count.nSamples;
            // reset if we have been re-awoken
            if (latestCapturedSample < 0)
            {
                latestCapturedSample = latestBufferSample;
            }
            if (lastNumberOfEvents < 0)
            {
                lastNumberOfEvents = latestNumberOfEventsInBuffer;
            }

            while (lastNumberOfEvents < latestNumberOfEventsInBuffer)
            {
                try {                 // Watch out can miss events if we are too slow...
                    bufferEvents.Add(bufferClient.getEvents(lastNumberOfEvents, lastNumberOfEvents)[0]);
                } catch (IOException ex) {
                }
                lastNumberOfEvents += 1;
                if (bufferEvents.Count > bufferEventsMaxCapacity)                // Implement a ring-buffer for the events we store...
                {
                    bufferEvents.RemoveAt(0);
                }
                OnNewEventsAdded(EventArgs.Empty);                //This notifies anyone who's listening that there had been an extra event added in the buffer
            }
            lastNumberOfEvents = latestNumberOfEventsInBuffer;

            if (latestBufferSample > latestCapturedSample)
            {
                if (storeData)                     // if we should track and store the data
                {
                    storedSamples = latestBufferSample - latestCapturedSample;
                    if (storedSamples * nChans > MAXDATASAMPLES)
                    {
                        storedSamples = MAXDATASAMPLES / nChans;
                    }
                    data = bufferClient.getFloatData(latestBufferSample - storedSamples, latestBufferSample - 1); //TO DO: The getFloat needs to change according to the buffers type of data
                    OnNewDataCaptured(EventArgs.Empty);                                                           //That notifies anyone who's listening that data have been updated in the buffer
                    if (newDataIn)
                    {
                        dataPacketsLost += 1;
                    }
                    else
                    {
                        newDataIn = true;
                    }
                }
            }
            else if (latestBufferSample < latestCapturedSample)
            {
                Debug.LogError("Buffer restart detected");
                bufferTimer.reset();
            }
            bufferTimer.addSampleToRegression(latestBufferSample);            //Updates the bufferTimer with the new samples.
            latestCapturedSample = latestBufferSample;
        }
    }