2626using namespace OnixSourcePlugin ;
2727
2828DigitalIO::DigitalIO (std::string name, std::string hubName, const oni_dev_idx_t deviceIdx_, std::shared_ptr<Onix1> oni_ctx)
29- : OnixDevice(name, hubName, DigitalIO::getDeviceType(), deviceIdx_, oni_ctx)
29+ : OnixDevice(name, hubName, DigitalIO::getDeviceType(), deviceIdx_, oni_ctx), eventWords( 64 )
3030{
3131}
3232
@@ -66,12 +66,8 @@ void DigitalIO::startAcquisition()
6666{
6767}
6868
69- void DigitalIO::stopAcquisition ( )
69+ void DigitalIO::addSourceBuffers (OwnedArray<DataBuffer>& sourceBuffers )
7070{
71- while (!frameArray.isEmpty ())
72- {
73- oni_destroy_frame (frameArray.removeAndReturn (0 ));
74- }
7571}
7672
7773EventChannel::Settings DigitalIO::getEventChannelSettings (DataStream* stream)
@@ -88,21 +84,16 @@ EventChannel::Settings DigitalIO::getEventChannelSettings(DataStream* stream)
8884 return settings;
8985}
9086
91- void DigitalIO::addFrame (oni_frame_t * frame)
92- {
93- frameArray.add (frame);
94- }
95-
9687int DigitalIO::getNumberOfWords ()
9788{
98- return eventWords.size ();
89+ return eventWords.size_approx ();
9990}
10091
10192void DigitalIO::processFrames ()
10293{
103- while (!frameArray.isEmpty ())
94+ oni_frame_t * frame;
95+ while (frameQueue.try_dequeue (frame))
10496 {
105- oni_frame_t * frame = frameArray.removeAndReturn (0 );
10697
10798 uint16_t * dataPtr = (uint16_t *)frame->data ;
10899 uint64_t timestamp = deviceContext->convertTimestampToSeconds (frame->time );
@@ -113,21 +104,22 @@ void DigitalIO::processFrames()
113104 uint64_t buttonState = *(dataPtr + dataOffset + 1 );
114105
115106 uint64_t ttlEventWord = (buttonState & 0x3F ) << 8 | (portState & 0xFF );
116- eventWords.add (ttlEventWord);
107+ eventWords.enqueue (ttlEventWord);
117108
118109 oni_destroy_frame (frame);
119110 }
120111}
121112
122113uint64_t DigitalIO::getEventWord ()
123114{
124- if (eventWords.size () != 0 )
125- return eventWords.removeAndReturn (0 );
115+ uint64_t eventWord;
116+ if (eventWords.try_dequeue (eventWord))
117+ return eventWord;
126118
127119 return 0 ;
128120}
129121
130122bool DigitalIO::hasEventWord ()
131123{
132- return eventWords.size () > 0 ;
124+ return eventWords.peek () != nullptr ;
133125}
0 commit comments