dataparser.cpp
Go to the documentation of this file.
1 
2 // Copyright (c) 2003-2021 Xsens Technologies B.V. or subsidiaries worldwide.
3 // All rights reserved.
4 //
5 // Redistribution and use in source and binary forms, with or without modification,
6 // are permitted provided that the following conditions are met:
7 //
8 // 1. Redistributions of source code must retain the above copyright notice,
9 // this list of conditions, and the following disclaimer.
10 //
11 // 2. Redistributions in binary form must reproduce the above copyright notice,
12 // this list of conditions, and the following disclaimer in the documentation
13 // and/or other materials provided with the distribution.
14 //
15 // 3. Neither the names of the copyright holders nor the names of their contributors
16 // may be used to endorse or promote products derived from this software without
17 // specific prior written permission.
18 //
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
20 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21 // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
22 // THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 // SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
24 // OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR
26 // TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.THE LAWS OF THE NETHERLANDS
28 // SHALL BE EXCLUSIVELY APPLICABLE AND ANY DISPUTES SHALL BE FINALLY SETTLED UNDER THE RULES
29 // OF ARBITRATION OF THE INTERNATIONAL CHAMBER OF COMMERCE IN THE HAGUE BY ONE OR MORE
30 // ARBITRATORS APPOINTED IN ACCORDANCE WITH SAID RULES.
31 //
32 
33 
34 // Copyright (c) 2003-2021 Xsens Technologies B.V. or subsidiaries worldwide.
35 // All rights reserved.
36 //
37 // Redistribution and use in source and binary forms, with or without modification,
38 // are permitted provided that the following conditions are met:
39 //
40 // 1. Redistributions of source code must retain the above copyright notice,
41 // this list of conditions, and the following disclaimer.
42 //
43 // 2. Redistributions in binary form must reproduce the above copyright notice,
44 // this list of conditions, and the following disclaimer in the documentation
45 // and/or other materials provided with the distribution.
46 //
47 // 3. Neither the names of the copyright holders nor the names of their contributors
48 // may be used to endorse or promote products derived from this software without
49 // specific prior written permission.
50 //
51 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
52 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
53 // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
54 // THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
55 // SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
56 // OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
57 // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR
58 // TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
59 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.THE LAWS OF THE NETHERLANDS
60 // SHALL BE EXCLUSIVELY APPLICABLE AND ANY DISPUTES SHALL BE FINALLY SETTLED UNDER THE RULES
61 // OF ARBITRATION OF THE INTERNATIONAL CHAMBER OF COMMERCE IN THE HAGUE BY ONE OR MORE
62 // ARBITRATORS APPOINTED IN ACCORDANCE WITH SAID RULES.
63 //
64 
65 #include "dataparser.h"
66 #include "xscontrollerconfig.h"
67 #include <xstypes/xsmessage.h>
68 
69 
77 {
78  startThread();
79 }
80 
82 {
83  try
84  {
85  terminate();
86  }
87  catch (...)
88  {
89  }
90 }
91 
96 {
98  m_incoming.push(arr);
99  locky.unlock();
101 }
102 
106 {
107  // wait for new data
108  if (!m_newDataEvent.wait())
109  return 0;
110 
111  // get new data
112  XsByteArray raw;
113  xsens::Lock lockIncoming(&m_incomingMutex);
114  while (!m_incoming.empty() && !isTerminating())
115  {
116  raw.append(m_incoming.front());
117  m_incoming.pop();
118  lockIncoming.unlock();
119 
120  JLTRACEG("raw size: " << raw.size());
121 
122  // process data
123  if (!raw.empty() && !isTerminating())
124  {
125  std::deque<XsMessage> msgs;
126  XsResultValue res = processBufferedData(raw, msgs);
127  JLTRACEG("Parse result " << res << ": " << msgs.size() << " messages");
128 
129  if (res != XRV_TIMEOUT && res != XRV_TIMEOUTNODATA && !isTerminating())
130  {
131  for (XsMessage const& msg : msgs)
132  {
134  if (isTerminating())
135  break;
136  }
137  }
138  raw.clear();
139  }
140 
141  lockIncoming.lock();
142  }
144 
145  return 1;
146 }
147 
151 {
153  sprintf(m_parserType, "XDA %s %p", parserType(), this);
154  //JLDEBUGG("Thread " << this << " " << buffer);
156 }
157 
161 {
162  xsens::Lock lockIncoming(&m_incomingMutex);
163 
164  while (!m_incoming.empty())
165  m_incoming.pop();
166 }
167 
169 {
170  StandardThread::signalStopThread();
172 }
173 
177 {
178  JLDEBUGG("Thread " << this << " type: " << m_parserType);
179  stopThread();
180  clear();
181 }
dataparser.h
msg
msg
XsByteArray
A list of uint8_t values.
xsens::WaitEvent::wait
bool wait()
Wait for the event to be set or object termination.
Definition: threading.cpp:1119
XRV_TIMEOUT
@ XRV_TIMEOUT
258: A timeout occurred
Definition: xsresultvalue.h:128
xsens::WaitEvent::terminate
void terminate()
Terminates the thread.
Definition: threading.cpp:1162
XS_THREAD_PRIORITY_HIGH
@ XS_THREAD_PRIORITY_HIGH
Definition: xsthread.h:168
xsNameThisThread
void XSTYPES_DLL_API xsNameThisThread(const char *threadName)
Set the name of the current thread to threadName.
Definition: xsthread.c:140
xsens::WaitEvent::set
void set()
Set the event.
Definition: threading.cpp:1136
DataParser::m_parserType
char m_parserType[128]
Definition: dataparser.h:117
DataParser::signalStopThread
void signalStopThread(void) override
Tells the thread to stop but does not wait for it to end.
Definition: dataparser.cpp:168
DataParser::parserType
virtual const char * parserType() const
Definition: dataparser.h:103
xsens::Lock::lock
bool lock()
Locks the unlocked mutex.
Definition: xsens_mutex.h:1019
XRV_TIMEOUTNODATA
@ XRV_TIMEOUTNODATA
259: Operation aborted because of no data read
Definition: xsresultvalue.h:129
DataParser::processBufferedData
virtual XsResultValue processBufferedData(const XsByteArray &rawIn, std::deque< XsMessage > &messages)=0
Read all messages from the buffered read data after adding new data supplied in rawIn.
DataParser::initFunction
void initFunction() override
Initializes the thread.
Definition: dataparser.cpp:150
xsens::StandardThread::startThread
bool startThread(const char *name=NULL)
Starts the thread.
Definition: threading.cpp:281
DataParser::~DataParser
~DataParser() override
Definition: dataparser.cpp:81
XsResultValue
XsResultValue
Xsens result values.
Definition: xsresultvalue.h:82
DataParser::innerFunction
int32_t innerFunction() override
The inner thread function.
Definition: dataparser.cpp:105
DataParser::DataParser
DataParser()
Default constructor.
Definition: dataparser.cpp:76
xsens::StandardThread::isTerminating
bool isTerminating() volatile const noexcept
Returns whether the thread should (have) terminate(d)
Definition: threading.cpp:182
JLTRACEG
#define JLTRACEG(msg)
Definition: journaller.h:279
DataParser::handleMessage
virtual void handleMessage(const XsMessage &message)=0
Handles a message.
XsMessage
Structure for storing a single message.
Definition: xsmessage.h:202
DataParser::m_incomingMutex
xsens::Mutex m_incomingMutex
Definition: dataparser.h:114
xsens::Lock::unlock
bool unlock() noexcept
Unlocks the locked mutex.
Definition: xsens_mutex.h:1032
xsmessage.h
JLDEBUGG
#define JLDEBUGG(msg)
Definition: journaller.h:280
xsens::StandardThread::stopThread
void stopThread(void) noexcept
Tells the thread to stop and waits for it to end.
Definition: threading.cpp:334
xsens::Lock
A base class for a Lock.
Definition: xsens_mutex.h:947
int32_t
signed int int32_t
Definition: pstdint.h:515
DataParser::clear
void clear()
Clears the data queue.
Definition: dataparser.cpp:160
DataParser::m_newDataEvent
xsens::WaitEvent m_newDataEvent
Definition: dataparser.h:116
DataParser::m_incoming
std::queue< XsByteArray > m_incoming
Definition: dataparser.h:115
xsens::WaitEvent::reset
void reset()
Reset the event.
Definition: threading.cpp:1148
xsens::StandardThread::setPriority
bool setPriority(XsThreadPriority pri)
Sets the priority of the thread.
Definition: threading.cpp:191
DataParser::terminate
void terminate()
Terminates the thread.
Definition: dataparser.cpp:176
DataParser::addRawData
void addRawData(const XsByteArray &arr)
Adds the raw data to an array.
Definition: dataparser.cpp:95
xscontrollerconfig.h


xsens_mti_driver
Author(s):
autogenerated on Sun Sep 3 2023 02:43:20