3DM-GX5-45
™
GNSS-Aided Inertial Navigation System
DCP Manual
2.5
Parsing Incoming Packets
Setup is usually the easy part of programming the 3DM-GX5- 45. Once you start continuous data
streaming, parsing and processing the incoming data packet stream will become the primary focus.
The stream of data from the IMU and Kalman Filter (Estimation Filter) are usually the dominant source
of data since they come in the fastest. Polling for data may seem to be a logical solution to controlling
the data flow, and this may be appropriate for some applications, but if your application requires the
precise delivery of inertial data, it is often necessary to have the data stream drive the process rather
than having the host try to control the data stream through polling.
The “descriptor set” qualifier in the MIP packet header is a feature that greatly aids the management of
the incoming packet stream by making it easy to sort the packets into logical sub-streams and route
those streams to appropriate handlers. The first step is to parse the incoming character stream into
packets.
It is important to take an organized approach to parsing continuous data. The basic strategy is this:
parse the incoming stream of characters for the packet starting sequence “ue” and then wait for the
entire packet to come in based on the packet length byte which arrives after the “ue” and descriptor set
byte. Make sure you have a timeout on your wait loop in case your stream is out of sync and the starting
“ue” sequence winds up being a “ghost” sequence. If you timeout, restart the parsing with the first
character after the ghost “ue”. Once the stream is in sync, it is rare that you will hit a timeout unless you
have an unreliable communications link. After verifying the checksum, examine the “descriptor set” field
in the header of the packet. This tells you immediately how to handle the packet.
Based on the value of the descriptor set field in the packet header, pass the packet to either a
command handler (if it is a Base command or 3DM command descriptor set) or a data handler (if it is an
IMU, or Estimation Filter data set). Since you know beforehand that the IMU and Estimation Filter data
packets will be coming in fastest, you can tune your code to buffer or handle these packets at a high
priority. Replies to commands generally happen sequentially after a command so the incidence of
these is under program control.
For multi-threaded applications, it is often useful to use queues to buffer packets bound for different
packet handler threads. The depth of the queue can be tuned so that no packets are dropped while
waiting for their associated threads to process the packets in the queue. See
section for more information on this topic.
25