Requirements
The client, a manufacturer of marine devices for vessel identification and tracking, needed application software written to allow configuration of client devices by end-users and resellers. The application software needed to run on MacOS and Windows.
Implementation
The software was written in C++ using a cross-platform framework capable of porting the application to MacOS and Windows.
The client devices communicate with the application via a USB/Serial port in accordance with National Marine Electronics Association NMEA 0183 specification for marine devices.
The NMEA 0183 standard defines messages (also referred to as “sentences”) as a sequence of printable ASCII characters containing a message header, comma-delimited data fields, possibly a message checksum and a <CarriageReturn><LineFeed> sequence to end the message.
Typically an application sends a message to the device and some time later the device sends back a message response indicating success or failure. It is possible, however, that a device can be sending out other messages (eg. alerts/alarms). And so the application needs a scheme by which it can identify the response to a pending message.
Software Primitives achieved this by implementing a “comms engine” with built-in message retry capability and using message-specific regular expressions to simplify message response matching and capturing of message-specific data. The “comms engine” also implemented a subscriber interface by which an application would be receive notifications of messages subscribed to by the application.

