It looks like we do not explain the usage of timestamp_16 in our documentation. We will look into adding an explanation for this in the future.
timestamp_16 is a 16 bit version of the timestamp field (which is 32 bit) that represents the lower 16 bits of the timestamp. This field is meant to be used in combination with an earlier timestamp field that is used as a reference for the upper 16 bits.
The proper way to deal with this field is shown in MonitoringReader.java in the SDK and summarized as follows:
mesgTimestamp += ( timestamp_16 - ( mesgTimestamp & 0xFFFF ) ) & 0xFFFF;
Where the mesgTimestamp is the previous 32 bit timestamp (the "timestamp" field). This essentially swaps the lower 16 bits of the timestamp field with the timestamp_16 field, and deals with any rollovers that may occur.