Go to the documentation of this file.
39 #define CMT2LOG CMTLOG
58 if (pre >= bufferLength)
return -1;
61 length = bufferLength - pre;
97 if (
res == -1)
return -1;
108 Cmt2s::Cmt2s() : m_onMessageReceived(nullptr), m_onMessageSent(nullptr)
164 CMT2LOG(
"L2: Opening port %s @baud %d\n", portName, baudRate);
179 CMT2LOG(
"L2: Opening port %d @baud %d\n", (
int32_t)portNumber, baudRate);
199 bool extended =
false;
224 CMT2LOG(
"L2: readMessage no preamble found in buffer\n");
230 "L2: readMessage preamble found at position %u\n",
242 CMT2LOG(
"L2: readMessage not enough header data read\n");
253 "L2: readMessage not enough extended header data "
269 "L2: readMessage bytes in buffer=%u, extended=%u, target=%u\n",
277 "L2: readMessage invalid message length %u\n",
294 "L2: readMessage readBufferCount %u < target %u\n",
302 CMT2LOG(
"L2: readMessage OK\n");
311 #ifdef _LOG_CALLBACKS
313 "C2: m_onMessageReceived(%d,(%d,%d),%p)\n",
331 "L2: readMessage invalid checksum %02x %02x %02x %02x %02x\n",
339 CMT2LOG(
"L2: readMessage timed out\n");
372 CMT2LOG(
"L2: Setting timeout to %u ms\n", ms);
384 bool acceptErrorMessage)
396 "L2: waitForMessage x%02x, TO=%u, TOend=%u, TOO=%u\n", (
uint32_t)msgId,
404 if (timeoutOverride != 0)
460 "L2: waitForMessage timeout occurred trying to read header\n");
479 "L2: waitForMessage timeout occurred trying to read "
480 "extended header\n");
512 CMT2LOG(
"L2: waitForMessage timeout occurred\n");
521 "L2: waitForMessage received msg Id x%02x while expecting "
522 "x%02x, msg size=%u\n",
532 #ifdef _LOG_CALLBACKS
534 "C2: m_onMessageReceived(%d,(%d,%d),%p)\n",
563 CMT2LOG(
"L2: waitForMessage load from string failed\n");
575 CMT2LOG(
"L2: waitForMessage found message in message\n");
584 rcv, msgId, 0, acceptErrorMessage);
602 "L2: writeMessage %2x %2x %2x %2x %2x\n",
621 "L2: writeMessage wrote %u of %u bytes, returns %d: %s\n", written,
634 #ifdef _LOG_CALLBACKS
636 "C2: m_onMessageSent(%d,(%d,%d),%p)\n",
645 CMT2LOG(
"L2: writeMessage successful\n");
XsensResultValue close(void)
Close the serial communication port.
Cmt1s m_cmt1s
The CMT level 1 object that this class operates on.
XsensResultValue writeMessage(const Message *msg)
Write a message to the end of the file.
XsensResultValue open(const char *filename, const bool create, const bool readOnly)
Open a file.
XsensResultValue setTimeout(const uint32_t ms=CMT2_DEFAULT_TIMEOUT)
Set the default timeout value to use in blocking operations.
uint16_t getTotalMessageSize(void) const
Return the length of the message buffer.
XsensResultValue setReadPosition(CmtFilePos pos)
Set the read position to the given position.
uint8_t getPortNr(void) const
Retrieve the port number that was last successfully opened.
@ CMT_CALLBACK_ONMESSAGERECEIVED
Callback function, called when a full message has been received from a port.
void * m_onMessageSentParam
Custom, user supplied parameter for the OnMessageSent callback function, passed as the last argument.
uint8_t m_readBuffer[CMT_DEFAULT_READ_BUFFER_SIZE]
Buffer for reading data until a valid message is read.
unsigned __int16 uint16_t
int32_t findValidMessage(const uint8_t *buffer, const uint16_t bufferLength)
Find a valid message in the given buffer.
XsensResultValue close(void)
Close the file.
Cmt2f()
Default constructor.
uint32_t getTimeOfDay(tm *date_, time_t *secs_)
A platform-independent clock.
@ XRV_OK
Operation was performed successfully.
XsensResultValue readMessage(Message *msg, const uint8_t msgId=0)
Read the next message from the file, when msgId is non-zero, the first matching message will be retur...
XsensResultValue waitForMessage(Message *rcv, const uint8_t msgId, uint32_t timeoutOverride, bool acceptErrorMessage)
Wait for a message to arrive.
XsensResultValue getName(char *filename) const
Retrieve the filename that was last successfully opened.
void clear(void)
Clear all data in the message.
XsensResultValue writeData(const uint32_t length, const uint8_t *data, uint32_t *written)
Write the data to the serial port.
XsensResultValue create(const char *filename)
Open an empty file.
XsensResultValue getPortNr(uint8_t &port) const
Retrieve the port that the object is connected to.
#define XSENS_MS_PER_DAY
The number of milliseconds in a normal day.
XsensResultValue open(const char *portName, const uint32_t baudRate=CMT_DEFAULT_BAUD_RATE)
Open a communication channel to the given serial port name.
bool isOpen(void) const
Return whether the file is open or not.
XsensResultValue find(const void *needle, const uint32_t needleLength, CmtFilePos &pos)
Find a string of bytes in the file.
~Cmt2s()
Destructor, de-initialize, free memory allocated for buffers, etc.
GLuint GLsizei GLsizei * length
XsensResultValue setReadPos(const CmtFilePos pos)
Set the new absolute read position.
void getPortName(char *portname) const
Retrieve the port name that was last successfully opened.
Cmt1f m_cmt1f
The Cmt1f object that is used for the low-level operations.
int32_t m_onMessageSentInstance
Custom, user supplied parameter for the OnMessageSent callback function, passed as the first argument...
XsensResultValue close(void)
Close the file.
XsensResultValue closeAndDelete(void)
Close the file and delete it.
XsensResultValue open(const char *filename, const bool readOnly=false)
Open a file and read the header.
#define CMT_DEFAULT_BAUD_RATE
The default baud rate of the Cmt1s serial communication.
XsensResultValue(__cdecl * CmtCallbackFunction)(int32_t, CmtCallbackSelector, void *, void *)
XsensResultValue getPortName(char *portname) const
XsensResultValue loadFromString(const uint8_t *source, const uint16_t size)
Read the entire message from the given source string.
const char * xsensResultText(const XsensResultValue result)
XsensResultValue closeAndDelete(void)
Close the file and delete it.
bool m_readOnly
When set to true, the file is read-only and attempts to write to it will fail.
XsensResultValue setCallbackFunction(CmtCallbackSelector tp, int32_t instance, CmtCallbackFunction func, void *param)
Set the callback function for when a message has been received or sent.
bool isOpen(void) const
Return whether the file is open or not.
uint8_t getMessageId(void) const
Return the current value of the m_messageId field.
XsensResultValue m_lastResult
The last result of an operation.
XsensResultValue getLastResult(void) const
Return the error code of the last operation.
const uint8_t * getMessageStart(void) const
Return the start of the message buffer.
#define CMT2_DEFAULT_TIMEOUT
Timeout in ms for level 2.
XsensResultValue deleteData(const CmtFilePos start, const uint32_t length)
Delete the given data from the file. The function erases the given data from the file at the given wr...
The low-level file communication class.
XsensResultValue create(const char *filename)
Create a new file with level 2 header.
CmtFilePos getFileSize(void)
Get the current file size.
XsensResultValue m_lastResult
The last result of an operation.
#define CMT_LEN_MSGEXTHEADERCS
XsensResultValue getName(char *filename) const
Retrieve the filename that was last successfully opened.
XsensResultValue appendData(const uint32_t length, const void *data)
Write data to the end of the file.
uint16_t m_readBufferCount
The number of valid bytes in the readBuffer.
Cmt1f * getCmt1f(void)
Get a reference to the embedded Cmt1f object.
void * m_onMessageReceivedParam
Custom, user supplied parameter for the OnMessageReceived callback function, passed as the last argum...
int32_t m_onMessageReceivedInstance
Custom, user supplied parameter for the OnMessageReceived callback function, passed as the first argu...
#define CMT_LEN_MSGHEADERCS
XsensResultValue readData(const uint32_t maxLength, void *data, uint32_t *length)
Read data from the file and put it into the data buffer.
XsensResultValue readMessage(Message *rcv)
Read a message from the COM port.
uint32_t m_baudrate
The baudrate that was last set to be used by the port.
#define CMT_LEN_MSGHEADER
uint8_t m_data[CMT_MAXMSGLEN]
CmtFilePos getReadPosition(void)
Get the current read position.
XsensResultValue writeMessage(Message *msg)
Send a message over the COM port.
XsensResultValue setTimeout(const uint32_t ms=CMT1_DEFAULT_TIMEOUT)
Set the default timeout value to use in blocking operations.
CmtFilePos getFileSize(void) const
Return the size of the file.
Class for storing a single message.
CmtFilePos getReadPos(void) const
Return the current read position.
XsensResultValue writeData(const uint32_t length, const void *data)
Write data to the file.
XsensResultValue
Xsens return values.
CmtCallbackFunction m_onMessageReceived
The message received function.
CmtCallbackFunction m_onMessageSent
The message sent function.
bool isChecksumOk(void) const
Compute the checksum and compare it with the stored checksum.
uint32_t m_timeout
Timeout in ms for blocking operations.
Cmt2s()
Default constructor, initialize all members to their default values.
XsensResultValue close(void)
Close the serial communication port.
XsensResultValue open(const char *portName, const uint32_t baudRate=CMT_DEFAULT_BAUD_RATE, uint32_t readBufSize=CMT_DEFAULT_READ_BUFFER_SIZE, uint32_t writeBufSize=CMT_DEFAULT_WRITE_BUFFER_SIZE)
Open a communcation channel to the given serial port name.
The namespace of all Xsens software since 2006.
unsigned __int32 uint32_t
uint32_t m_toEnd
The timestamp at which to end an operation.
@ CMT_CALLBACK_ONMESSAGESENT
Callback function, called when a full message has been sent by a port.
void memcpy(void *dest, size_t destSize, const void *src, size_t copyCount) noexcept
An OS and compiler independent version of "memcpy".
XsensResultValue readData(const uint32_t maxLength, uint8_t *data, uint32_t *length=nullptr)
Read data from the serial port and put it into the data buffer.
Page generated by Doxygen 1.8.17 for MRPT 1.9.9 Git: ad3a9d8ae Tue May 1 23:10:22 2018 -0700 at mié 12 jul 2023 10:03:34 CEST | |