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,14 +66,6 @@ void DigitalIO::startAcquisition()
6666{
6767}
6868
69- void DigitalIO::stopAcquisition ()
70- {
71- while (!frameArray.isEmpty ())
72- {
73- oni_destroy_frame (frameArray.removeAndReturn (0 ));
74- }
75- }
76-
7769EventChannel::Settings DigitalIO::getEventChannelSettings (DataStream* stream)
7870{
7971 EventChannel::Settings settings{
@@ -88,21 +80,16 @@ EventChannel::Settings DigitalIO::getEventChannelSettings(DataStream* stream)
8880 return settings;
8981}
9082
91- void DigitalIO::addFrame (oni_frame_t * frame)
92- {
93- frameArray.add (frame);
94- }
95-
9683int DigitalIO::getNumberOfWords ()
9784{
98- return eventWords.size ();
85+ return eventWords.size_approx ();
9986}
10087
10188void DigitalIO::processFrames ()
10289{
103- while (!frameArray.isEmpty ())
90+ oni_frame_t * frame;
91+ while (frameQueue.try_dequeue (frame))
10492 {
105- oni_frame_t * frame = frameArray.removeAndReturn (0 );
10693
10794 uint16_t * dataPtr = (uint16_t *)frame->data ;
10895 uint64_t timestamp = deviceContext->convertTimestampToSeconds (frame->time );
@@ -113,21 +100,22 @@ void DigitalIO::processFrames()
113100 uint64_t buttonState = *(dataPtr + dataOffset + 1 );
114101
115102 uint64_t ttlEventWord = (buttonState & 0x3F ) << 8 | (portState & 0xFF );
116- eventWords.add (ttlEventWord);
103+ eventWords.enqueue (ttlEventWord);
117104
118105 oni_destroy_frame (frame);
119106 }
120107}
121108
122109uint64_t DigitalIO::getEventWord ()
123110{
124- if (eventWords.size () != 0 )
125- return eventWords.removeAndReturn (0 );
111+ uint64_t eventWord;
112+ if (eventWords.try_dequeue (eventWord))
113+ return eventWord;
126114
127115 return 0 ;
128116}
129117
130118bool DigitalIO::hasEventWord ()
131119{
132- return eventWords.size () > 0 ;
120+ return eventWords.peek () != nullptr ;
133121}
0 commit comments