mtbdatalogger.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 "mtbdatalogger.h"
66 #include "iointerfacefile.h"
67 #include "protocolhandler.h"
68 
76  m_lastResult(XRV_OK)
77 {
78 }
79 
81 {
82  try
83  {
84  close(false);
85  }
86  catch (...)
87  {
88  }
89 }
90 
98 bool MtbDataLogger::create(const XsString& filename)
99 {
100  if (m_ioInterfaceFile)
101  {
103  return false;
104  }
105 
106  m_ioInterfaceFile = std::shared_ptr<IoInterfaceFile>(new IoInterfaceFile);
108  if (m_lastResult != XRV_OK)
109  {
110  m_ioInterfaceFile.reset();
111  return false;
112  }
113 
114  //m_readOnly = false;
115 
116  // check if we can actually write to the file
117  char testData[] = "Xsens";
118  XsByteArray test((unsigned char*) testData, 5, XSDF_None);
119 
120  m_lastResult = m_ioInterfaceFile->writeData(test, nullptr);
121  if (m_lastResult == XRV_OK)
122  m_lastResult = m_ioInterfaceFile->deleteData(0, 5);
123  if (m_lastResult != XRV_OK)
124  {
125  m_ioInterfaceFile->close();
126  m_ioInterfaceFile.reset();
127  }
128  return m_lastResult == XRV_OK;
129 }
130 
134 {
135  close(false);
136 }
137 
141 void MtbDataLogger::close(bool deleteFile)
142 {
143  if (m_ioInterfaceFile)
144  {
145  if (deleteFile)
146  m_ioInterfaceFile->closeAndDelete();
147  else
148  m_ioInterfaceFile->close();
149  //removeChainedManager(m_ioInterfaceFile);
150  m_ioInterfaceFile.reset();
151  }
152 }
153 
157 {
158  if (!m_ioInterfaceFile)
159  {
161  return false;
162  }
163 
164  XsByteArray raw;
165  if (ProtocolHandler::composeMessage(raw, message) != -1)
166  m_lastResult = m_ioInterfaceFile->writeData(raw, nullptr);
167  else
169 
170  return m_lastResult == XRV_OK;
171 }
172 
175 {
176  if (!m_ioInterfaceFile)
177  {
179  return false;
180  }
181 
182  m_lastResult = m_ioInterfaceFile->writeData(raw, nullptr);
183  return m_lastResult == XRV_OK;
184 }
185 
189 {
190  if (!m_ioInterfaceFile)
191  return XsString();
192  return m_ioInterfaceFile->getFileName();
193 }
XsString
struct XsString XsString
Definition: xsstring.h:87
XsByteArray
A list of uint8_t values.
MtbDataLogger::m_lastResult
XsResultValue m_lastResult
Definition: mtbdatalogger.h:88
MtbDataLogger::writeMessage
bool writeMessage(const XsMessage &message) override
Overloadable function to allow easier testing.
Definition: mtbdatalogger.cpp:156
protocolhandler.h
IoInterfaceFile
The low-level file communication class.
Definition: iointerfacefile.h:74
XRV_ALREADYOPEN
@ XRV_ALREADYOPEN
269: An I/O device is already opened with this object
Definition: xsresultvalue.h:139
XRV_NOFILEOPEN
@ XRV_NOFILEOPEN
287: No file opened for reading/writing
Definition: xsresultvalue.h:158
MtbDataLogger::~MtbDataLogger
~MtbDataLogger() override
Definition: mtbdatalogger.cpp:80
test
XRV_OK
@ XRV_OK
0: Operation was performed successfully
Definition: xsresultvalue.h:85
ProtocolHandler::composeMessage
static int composeMessage(XsByteArray &raw, const XsMessage &msg)
Compose a message for transmission.
Definition: protocolhandler.cpp:278
MtbDataLogger::writeRaw
bool writeRaw(const XsByteArray &message)
Write precomposed raw data to the file stream.
Definition: mtbdatalogger.cpp:174
mtbdatalogger.h
MtbDataLogger::MtbDataLogger
MtbDataLogger()
Default constructor.
Definition: mtbdatalogger.cpp:75
MtbDataLogger::filename
XsString filename() const
Definition: mtbdatalogger.cpp:188
XsMessage
Structure for storing a single message.
Definition: xsmessage.h:202
MtbDataLogger::close
void close() override
Closes the file.
Definition: mtbdatalogger.cpp:133
XSDF_None
@ XSDF_None
No flag set.
Definition: xstypedefs.h:109
iointerfacefile.h
XsString
A 0-terminated managed string of characters.
MtbDataLogger::create
bool create(const XsString &filename)
Open a log file for output.
Definition: mtbdatalogger.cpp:98
XRV_DATACORRUPT
@ XRV_DATACORRUPT
278: A trusted data stream proves to contain corrupted data
Definition: xsresultvalue.h:148
MtbDataLogger::m_ioInterfaceFile
std::shared_ptr< IoInterfaceFile > m_ioInterfaceFile
Definition: mtbdatalogger.h:89


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