Table of Contents
LoadSensing G7 Nodes Message API
Documentation defining the format of the messages used in the communications with the LS mote. This includes both the application level messages’ format and the interface level protocols, encryption, …
NOTE: The documentation is being transitioned from the original LS - Command & Packets list V[2,3] google docs document. This page only contains the messages that have been ported to the CIR format are present in this document. The remaining messages remain in the original doc.
The LS - Command & Packets list V[2,3] documentation can be accessed through the:
Navigation
- Output Messages — Uplink messages sent from the node to the gateway.
- Input Messages — Downlink messages sent from the gateway to the node.
- Technical Annex — Additional technical details and references.
- 🖨️ Print / Export PDF — Full site on a single printable page.
Documentation Format
Each message documentation page contains a table describing the binary layout with the following fields:
| Column | Description |
|---|---|
| Field | Field name with tree-drawing characters showing nesting |
| Bits | Number of bits the field occupies |
| Type | Field type (UInt, Int, Bool, Enum, Struct, Switch, Seq, etc.) |
| Condition | When the field is present (Always, or a conditional expression) |
| Description | Additional information, including enum value mappings |
Auto-generated documentation — Copyright © 2026 Worldsensing S.L.
Output Messages
Output messages
Uplink messages sent from the node to the gateway.
Format
Output messages are formatted as follows:
0 1 2 3 4 5 6 7 8 9 ... n bytes
+--+--+--+--+--+--+--+--+--+--+- ... -+--+
| HEADER | | PAYLOAD |
+--+--+--+--+--+--+--+--+--+--+- ... -+--+
^
AM_TYPE
Header
VERSION
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 bits
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0 1 0 0|ID HIGH| PRCODE | MOTE ID LOW |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SeqNbr |
+-+-+-+-+-+-+-+-+
AM Types
| AM Type | Message |
|---|---|
| 10 | Til90EDataStrMsg |
| 21 | MiscCmdsStructMsg |
| 22 | ReceptionOpportunityMsg |
| 24 | DigLuaFileCmdStrMsg |
| 76 | Til90DataStrMsg |
| 79 | HealthV3DataStructMsg |
| 80 | Til90EDataStrMsg |
| 82 | DynDataStrMsg |
| 83 | DynRawDataStrMsg |
| 84 | GnssStatisticsStrMsg |
| 85 | GnssDataStrMsg |
| 86 | DynRawDataStrMsg |
| 88 | VwDataStrMsg |
| 91 | TMDataStrMsg |
| 92 | DigGenDataStrMsg |
| 93 | DigPcDataStrMsg |
| 94 | DigTDRDataStrMsg |
| 151 | DigGmmInstructionsPort0CfgStrMsg |
| 167 | LoRaAdrAckCfgStructMsg |
| 168 | DigPort0CfgStrMsg |
| 169 | DigPort1CfgStrMsg |
| 170 | DigPort2CfgStrMsg |
| 171 | DigPcCfgStrMsg |
| 172 | CommPeriodCfgStructMsg |
| 173 | DigTDRCfgStrMsg |
| 174 | DigGmmInstructionsPort1CfgStrMsg |
| 175 | DigGmmInstructionsPort2CfgStrMsg |
| 192 | AggregatedReportingPeriodAndSlotTime |
Digital Generic Integrations
Payload messages carried inside DigGenDataStrMsg (AM Type 92).
| AM Type | Message |
|---|---|
| 92 | DigGenDataStrMsg |
| IntID: 0, v0 | DigGenSDI12GenericDataStrMsg |
| IntID: 1, v0 | DigGenGeosenseInclinometerAsciiDataStrMsg |
| IntID: 2, v0 | DigGenRstInclinometerAsciiDataStrMsg |
| IntID: 3, v0 | DigGenRstInclinometerModbusDataStrMsg |
| IntID: 4, v0 | DigGenGeosenseInclinometerModbusDataStrMsg |
| IntID: 5, v0 | DigGenGeokonIPIDataStrMsg |
| IntID: 6, v0 | DigGenOspreyOtsInclinationDataStrMsg |
| IntID: 7, v0 | DigGenOspreyOtsVectorDataStrMsg |
| IntID: 8, v0 | DigGenOspreyAspDataStrMsg |
| IntID: 9, v0 | DigGenOspreyIpxDataStrMsg |
| IntID: 10, v0 | DigGenGintecAficDataStrMsg |
| IntID: 65534, v0 | DigGenDummyIntegrationForTestsDataStrMsgV0 |
| IntID: 65534, v1 | DigGenDummyIntegrationForTestsDataStrMsgV1 |
| IntID: 65534, v2 | DigGenDummyIntegrationForTestsDataStrMsgV2 |
TriggerMeasurements
TMDataStrMsg
TM Data Str Msg
AM Type: 91
Source Code
| Field | Bits | Type | Unit | Condition | Mutator | Error | Validator | Description |
|---|---|---|---|---|---|---|---|---|
| ls_header | — | Struct | Always | |||||
| ├── uplink_version | 4 | UInt | Always | |||||
| ├── node_id_high | 4 | Fragment | Always | |||||
| ├── product_code | 8 | UInt | Always | |||||
| ├── node_id | 16 | UInt | Always | |||||
| ├── sequence_number | 8 | UInt | Always | |||||
| └── am_type | 8 | UInt | Always | |||||
| readTimestamp | 32 | TimestampField | Always | TimestampMutator | ||||
| version | 4 | UInt | Always | ValueValidator(0) | ||||
| msgType | 2 | Enum | Always | PERIODIC (0), TRIGGER (1), BASELINE (2), RFU (3) | ||||
| msgTypePayload | — | Switch | Always | |||||
| ├── numEvents | 8 | UInt | count | msgType == PERIODIC | EntryError(DATA_OUT_OF_RANGE, 255) | RangeValidator[0, 254] | ||
| ├── totalActivityDuration | 12 | UInt | s | msgType == PERIODIC | EntryError(DATA_OUT_OF_RANGE, 4095) | RangeValidator[0, 4094] | ||
| ├── eventStartTime | 32 | TimestampField | datetime | msgType == TRIGGER | TimestampMutator | |||
| ├── eventDuration | 14 | UInt | s | msgType == TRIGGER | EntryError(DATA_OUT_OF_RANGE, 16383) | RangeValidator[0, 10800] | ||
| ├── dataMessageTime | 32 | TimestampField | datetime | msgType == TRIGGER | TimestampMutator | |||
| └── | 0 | — | msgType == default | |||||
| triggerType | 2 | Enum | Always | ACCELERATION (0), ABSOLUTE_ANGLE (1), ANGULAR_VELOCITY (2), UNUSED (3) | ||||
| triggerTypePayload | — | Switch | Always | |||||
| ├── inactivityPeakAccel | 16 | UInt | mg_acc | triggerType == ACCELERATION | ScalingMutator(×10) | EntryError(NOT_VALID, 65534), EntryError(DATA_OUT_OF_RANGE, 65535) | RangeValidator[0, 2000] | |
| ├── maxActivityPeakAccel | 16 | UInt | mg_acc | msgType != BASELINE | ScalingMutator(×10) | EntryError(NOT_VALID, 65534), EntryError(DATA_OUT_OF_RANGE, 65535) | RangeValidator[0, 2000] | |
| ├── meanInactivityAngleX | 10 | UInt | deg | triggerType == ABSOLUTE_ANGLE | OffsetMutator(+90), DividerMutator(÷2.0), ScalingMutator(×10) | EntryError(NOT_VALID, 1022), EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[-90, 90] | |
| ├── meanInactivityAngleY | 10 | UInt | deg | triggerType == ABSOLUTE_ANGLE | OffsetMutator(+90), DividerMutator(÷2.0), ScalingMutator(×10) | EntryError(NOT_VALID, 1022), EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[-90, 90] | |
| ├── meanInactivityAngleZ | 10 | UInt | deg | triggerType == ABSOLUTE_ANGLE | OffsetMutator(+90), DividerMutator(÷2.0), ScalingMutator(×10) | EntryError(NOT_VALID, 1022), EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[-90, 90] | |
| ├── maxAngleDeviationX | 10 | UInt | deg | msgType != BASELINE | OffsetMutator(+90), DividerMutator(÷2.0), ScalingMutator(×10) | EntryError(NOT_VALID, 1022), EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[-90, 90] | |
| ├── maxAngleDeviationY | 10 | UInt | deg | msgType != BASELINE | OffsetMutator(+90), DividerMutator(÷2.0), ScalingMutator(×10) | EntryError(NOT_VALID, 1022), EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[-90, 90] | |
| ├── maxAngleDeviationZ | 10 | UInt | deg | msgType != BASELINE | OffsetMutator(+90), DividerMutator(÷2.0), ScalingMutator(×10) | EntryError(NOT_VALID, 1022), EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[-90, 90] | |
| ├── meanInactivityAngularVelX | 9 | UInt | deg/s | triggerType == ANGULAR_VELOCITY | ScalingMutator(×100) | EntryError(NOT_VALID, 510), EntryError(DATA_OUT_OF_RANGE, 511) | RangeValidator[0, 2.55] | |
| ├── meanInactivityAngularVelY | 9 | UInt | deg/s | triggerType == ANGULAR_VELOCITY | ScalingMutator(×100) | EntryError(NOT_VALID, 510), EntryError(DATA_OUT_OF_RANGE, 511) | RangeValidator[0, 2.55] | |
| ├── meanInactivityAngularVelZ | 9 | UInt | deg/s | triggerType == ANGULAR_VELOCITY | ScalingMutator(×100) | EntryError(NOT_VALID, 510), EntryError(DATA_OUT_OF_RANGE, 511) | RangeValidator[0, 2.55] | |
| ├── maxAngularVelX | 9 | UInt | deg/s | msgType != BASELINE | ScalingMutator(×100) | EntryError(NOT_VALID, 510), EntryError(DATA_OUT_OF_RANGE, 511) | RangeValidator[0, 2.55] | |
| ├── maxAngularVelY | 9 | UInt | deg/s | msgType != BASELINE | ScalingMutator(×100) | EntryError(NOT_VALID, 510), EntryError(DATA_OUT_OF_RANGE, 511) | RangeValidator[0, 2.55] | |
| ├── maxAngularVelZ | 9 | UInt | deg/s | msgType != BASELINE | ScalingMutator(×100) | EntryError(NOT_VALID, 510), EntryError(DATA_OUT_OF_RANGE, 511) | RangeValidator[0, 2.55] | |
| └── | 0 | — | triggerType == default |
VibrationMeter
DynDataStrMsg
Dyn Data Str Msg
AM Type: 82
Source Code
| Field | Bits | Type | Unit | Condition | Mutator | Error | Validator | Description |
|---|---|---|---|---|---|---|---|---|
| ls_header | — | Struct | Always | |||||
| ├── uplink_version | 4 | UInt | Always | |||||
| ├── node_id_high | 4 | Fragment | Always | |||||
| ├── product_code | 8 | UInt | Always | |||||
| ├── node_id | 16 | UInt | Always | |||||
| ├── sequence_number | 8 | UInt | Always | |||||
| └── am_type | 8 | UInt | Always | |||||
| timestamp | 32 | TimestampField | Always | TimestampMutator | ||||
| version | 4 | UInt | Always | RangeValidator[0, 2] | ||||
| commonHeader | — | Switch | Always | |||||
| ├── reserved | 2 | Reserved | version == 0 | |||||
| ├── outputParameter | 2 | Enum | version == 0 | NO_ALGORITHM (0), MTVV (1), PPV (2), PGA (3), PSA (4) | ||||
| ├── reserved | 1 | Reserved | version == 1 | |||||
| ├── alertReport | 1 | Bool | version == 1 | |||||
| ├── outputParameter | 2 | Enum | version == 1 | NO_ALGORITHM (0), MTVV (1), PPV (2), PGA (3), PSA (4) | ||||
| ├── alertReport | 1 | Bool | version == 2 | |||||
| └── outputParameter | 3 | Enum | version == 2 | NO_ALGORITHM (0), MTVV (1), PPV (2), PGA (3), PSA (4) | ||||
| readings | — | Switch | Always | |||||
| ├── frameHeader | — | Struct | (outputParameter, version) == (MTVV, 0) | |||||
| │ ├── frameNumber | 1 | UInt | (outputParameter, version) == (MTVV, 0) | |||||
| │ ├── totalEvents | 4 | UInt | (outputParameter, version) == (MTVV, 0) | RangeValidator[0, 9] | ||||
| │ ├── nEvents | 3 | UInt | frameNumber == 0 | RangeValidator[0, 4] | ||||
| │ └── nEvents | 3 | UInt | not (frameNumber == 0) | RangeValidator[0, 5] | ||||
| ├── transmissionThreshold | 10 | Mtvv | dB | frameNumber == 0 | OffsetMutator(-55), MultiplierMutator(×20) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[55.0, 100.0] | |
| ├── reportingPeriodSummary | — | Struct | frameNumber == 0 | |||||
| │ ├── numEventsAboveReportThreshold | 6 | UInt | count | frameNumber == 0 | EntryError(DATA_OUT_OF_RANGE, 63) | |||
| │ ├── numEventsBelowReportThreshold | 6 | UInt | count | frameNumber == 0 | EntryError(DATA_OUT_OF_RANGE, 63) | |||
| │ └── numActiveWindows | 20 | UInt | count | frameNumber == 0 | EntryError(DATA_OUT_OF_RANGE, 1048575) | |||
| ├── Reporting Events [nEvents] | — | Seq | (outputParameter, version) == (MTVV, 0) | |||||
| │ ├── timestampEvent | 32 | TimestampField | — | TimestampMutator | ||||
| │ ├── numWindowsEvent | 7 | UInt | count | — | EntryError(DATA_OUT_OF_RANGE, 127) | |||
| │ ├── xAxis | — | Struct | — | |||||
| │ │ └── MTVV | 10 | Mtvv | dB | — | OffsetMutator(-55), MultiplierMutator(×20) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[55.0, 100.0] | |
| │ ├── yAxis | — | Struct | — | |||||
| │ │ └── MTVV | 10 | Mtvv | dB | — | OffsetMutator(-55), MultiplierMutator(×20) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[55.0, 100.0] | |
| │ └── zAxis | — | Struct | — | |||||
| │ └── MTVV | 10 | Mtvv | dB | — | OffsetMutator(-55), MultiplierMutator(×20) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[55.0, 100.0] | |
| ├── frameHeader | — | Struct | (outputParameter, version) == (MTVV, 1) | |||||
| │ ├── frameNumber | 1 | UInt | (outputParameter, version) == (MTVV, 1) | |||||
| │ ├── totalEvents | 4 | UInt | (outputParameter, version) == (MTVV, 1) | RangeValidator[0, 9] | ||||
| │ ├── nEvents | 3 | UInt | frameNumber == 0 | RangeValidator[0, 4] | ||||
| │ └── nEvents | 3 | UInt | not (frameNumber == 0) | RangeValidator[0, 5] | ||||
| ├── temperature | 12 | Int | Cel | frameNumber == 0 | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 2047) | ||
| ├── transmissionThreshold | 10 | Mtvv | dB | frameNumber == 0 | OffsetMutator(-55), MultiplierMutator(×20) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[55.0, 100.0] | |
| ├── reportingPeriodSummary | — | Struct | frameNumber == 0 | |||||
| │ ├── numEventsAboveReportThreshold | 6 | UInt | count | frameNumber == 0 | EntryError(DATA_OUT_OF_RANGE, 63) | |||
| │ ├── numEventsBelowReportThreshold | 6 | UInt | count | frameNumber == 0 | EntryError(DATA_OUT_OF_RANGE, 63) | |||
| │ └── numActiveWindows | 20 | UInt | count | frameNumber == 0 | EntryError(DATA_OUT_OF_RANGE, 1048575) | |||
| ├── Reporting Events [nEvents] | — | Seq | (outputParameter, version) == (MTVV, 1) | |||||
| │ ├── timestampEvent | 32 | TimestampField | — | TimestampMutator | ||||
| │ ├── numWindowsEvent | 7 | UInt | count | — | EntryError(DATA_OUT_OF_RANGE, 127) | |||
| │ ├── xAxis | — | Struct | — | |||||
| │ │ └── MTVV | 10 | Mtvv | dB | — | OffsetMutator(-55), MultiplierMutator(×20) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[55.0, 100.0] | |
| │ ├── yAxis | — | Struct | — | |||||
| │ │ └── MTVV | 10 | Mtvv | dB | — | OffsetMutator(-55), MultiplierMutator(×20) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[55.0, 100.0] | |
| │ └── zAxis | — | Struct | — | |||||
| │ └── MTVV | 10 | Mtvv | dB | — | OffsetMutator(-55), MultiplierMutator(×20) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[55.0, 100.0] | |
| ├── frameHeader | — | Struct | (outputParameter, version) == (MTVV, 2) | |||||
| │ ├── frameNumber | 1 | UInt | (outputParameter, version) == (MTVV, 2) | |||||
| │ ├── totalEvents | 3 | UInt | (outputParameter, version) == (MTVV, 2) | RangeValidator[0, 4] | ||||
| │ └── nEvents | 2 | UInt | (outputParameter, version) == (MTVV, 2) | RangeValidator[0, 2] | ||||
| ├── temperature | 12 | Int | Cel | frameNumber == 0 | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 2047) | ||
| ├── reportingPeriodSummary | — | Struct | frameNumber == 0 | |||||
| │ ├── numEventsAboveReportThreshold | 6 | UInt | count | frameNumber == 0 | EntryError(DATA_OUT_OF_RANGE, 63) | |||
| │ ├── numEventsBelowReportThreshold | 6 | UInt | count | frameNumber == 0 | EntryError(DATA_OUT_OF_RANGE, 63) | |||
| │ └── numActiveWindows | 20 | UInt | count | frameNumber == 0 | EntryError(DATA_OUT_OF_RANGE, 1048575) | |||
| ├── Reporting Events [nEvents] | — | Seq | (outputParameter, version) == (MTVV, 2) | |||||
| │ ├── timestampEvent | 32 | TimestampField | — | TimestampMutator | ||||
| │ ├── numWindowsEvent | 7 | UInt | count | — | EntryError(DATA_OUT_OF_RANGE, 127) | |||
| │ ├── xAxis | — | Struct | — | |||||
| │ │ └── MTVV | 10 | Mtvv | dB | — | OffsetMutator(-55), MultiplierMutator(×20) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[55.0, 100.0] | |
| │ ├── yAxis | — | Struct | — | |||||
| │ │ └── MTVV | 10 | Mtvv | dB | — | OffsetMutator(-55), MultiplierMutator(×20) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[55.0, 100.0] | |
| │ └── zAxis | — | Struct | — | |||||
| │ └── MTVV | 10 | Mtvv | dB | — | OffsetMutator(-55), MultiplierMutator(×20) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[55.0, 100.0] | |
| ├── frameHeader | — | Struct | (outputParameter, version) == (PPV, 0) | |||||
| │ ├── frameNumber | 1 | UInt | (outputParameter, version) == (PPV, 0) | |||||
| │ ├── totalEvents | 3 | UInt | (outputParameter, version) == (PPV, 0) | RangeValidator[0, 7] | ||||
| │ ├── nEvents | 3 | UInt | frameNumber == 0 | RangeValidator[0, 3] | ||||
| │ └── nEvents | 3 | UInt | not (frameNumber == 0) | RangeValidator[0, 4] | ||||
| ├── transmissionThreshold | 13 | Ppv | mm/s | frameNumber == 0 | ScalingMutator(×100) | EntryError(DATA_OUT_OF_RANGE, 8191) | RangeValidator[0, 60.0] | |
| ├── reportingPeriodSummary | — | Struct | frameNumber == 0 | |||||
| │ ├── numEventsAboveReportThreshold | 6 | UInt | count | frameNumber == 0 | EntryError(DATA_OUT_OF_RANGE, 63) | |||
| │ ├── numEventsBelowReportThreshold | 6 | UInt | count | frameNumber == 0 | EntryError(DATA_OUT_OF_RANGE, 63) | |||
| │ └── numActiveWindows | 20 | UInt | count | frameNumber == 0 | EntryError(DATA_OUT_OF_RANGE, 1048575) | |||
| ├── Reporting Events [nEvents] | — | Seq | (outputParameter, version) == (PPV, 0) | |||||
| │ ├── timestampEvent | 17 | UInt | — | RelativeTimestampMutator | RelativeTimestampValidator[0, 86399] | |||
| │ ├── numWindowsEvent | 7 | UInt | count | — | EntryError(DATA_OUT_OF_RANGE, 127) | |||
| │ ├── xAxis | — | Struct | — | |||||
| │ │ ├── PPV | 13 | Ppv | mm/s | — | ScalingMutator(×100) | EntryError(DATA_OUT_OF_RANGE, 8191) | RangeValidator[0, 60.0] | |
| │ │ └── predominantFrequency | 8 | PFrequency | Hz | — | MultiplierMutator(×2) | EntryError(DATA_OUT_OF_RANGE, 255) | RangeValidator[0, 100] | |
| │ ├── yAxis | — | Struct | — | |||||
| │ │ ├── PPV | 13 | Ppv | mm/s | — | ScalingMutator(×100) | EntryError(DATA_OUT_OF_RANGE, 8191) | RangeValidator[0, 60.0] | |
| │ │ └── predominantFrequency | 8 | PFrequency | Hz | — | MultiplierMutator(×2) | EntryError(DATA_OUT_OF_RANGE, 255) | RangeValidator[0, 100] | |
| │ └── zAxis | — | Struct | — | |||||
| │ ├── PPV | 13 | Ppv | mm/s | — | ScalingMutator(×100) | EntryError(DATA_OUT_OF_RANGE, 8191) | RangeValidator[0, 60.0] | |
| │ └── predominantFrequency | 8 | PFrequency | Hz | — | MultiplierMutator(×2) | EntryError(DATA_OUT_OF_RANGE, 255) | RangeValidator[0, 100] | |
| ├── frameHeader | — | Struct | (outputParameter, version) == (PPV, 1) | |||||
| │ ├── frameNumber | 1 | UInt | (outputParameter, version) == (PPV, 1) | |||||
| │ ├── totalEvents | 3 | UInt | (outputParameter, version) == (PPV, 1) | RangeValidator[0, 5] | ||||
| │ ├── nEvents | 3 | UInt | frameNumber == 0 | RangeValidator[0, 2] | ||||
| │ └── nEvents | 3 | UInt | not (frameNumber == 0) | RangeValidator[0, 3] | ||||
| ├── temperature | 12 | Int | Cel | frameNumber == 0 | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 2047) | ||
| ├── transmissionThreshold | 13 | Ppv | mm/s | frameNumber == 0 | ScalingMutator(×100) | EntryError(DATA_OUT_OF_RANGE, 8191) | RangeValidator[0, 60.0] | |
| ├── reportingPeriodSummary | — | Struct | frameNumber == 0 | |||||
| │ ├── numEventsAboveReportThreshold | 6 | UInt | count | frameNumber == 0 | EntryError(DATA_OUT_OF_RANGE, 63) | |||
| │ ├── numEventsBelowReportThreshold | 6 | UInt | count | frameNumber == 0 | EntryError(DATA_OUT_OF_RANGE, 63) | |||
| │ └── numActiveWindows | 20 | UInt | count | frameNumber == 0 | EntryError(DATA_OUT_OF_RANGE, 1048575) | |||
| ├── Reporting Events [nEvents] | — | Seq | (outputParameter, version) == (PPV, 1) | |||||
| │ ├── timestampEvent | 17 | UInt | — | RelativeTimestampMutator | RelativeTimestampValidator[0, 86399] | |||
| │ ├── numWindowsEvent | 7 | UInt | count | — | EntryError(DATA_OUT_OF_RANGE, 127) | |||
| │ ├── xAxis | — | Struct | — | |||||
| │ │ ├── PPV | 13 | Ppv | mm/s | — | ScalingMutator(×100) | EntryError(DATA_OUT_OF_RANGE, 8191) | RangeValidator[0, 60.0] | |
| │ │ └── predominantFrequency | 8 | PFrequency | Hz | — | MultiplierMutator(×2) | EntryError(DATA_OUT_OF_RANGE, 255) | RangeValidator[0, 100] | |
| │ ├── yAxis | — | Struct | — | |||||
| │ │ ├── PPV | 13 | Ppv | mm/s | — | ScalingMutator(×100) | EntryError(DATA_OUT_OF_RANGE, 8191) | RangeValidator[0, 60.0] | |
| │ │ └── predominantFrequency | 8 | PFrequency | Hz | — | MultiplierMutator(×2) | EntryError(DATA_OUT_OF_RANGE, 255) | RangeValidator[0, 100] | |
| │ ├── zAxis | — | Struct | — | |||||
| │ │ ├── PPV | 13 | Ppv | mm/s | — | ScalingMutator(×100) | EntryError(DATA_OUT_OF_RANGE, 8191) | RangeValidator[0, 60.0] | |
| │ │ └── predominantFrequency | 8 | PFrequency | Hz | — | MultiplierMutator(×2) | EntryError(DATA_OUT_OF_RANGE, 255) | RangeValidator[0, 100] | |
| │ └── composedAxis | — | Struct | — | |||||
| │ └── PPV | 13 | Ppv | mm/s | — | ScalingMutator(×100) | EntryError(DATA_OUT_OF_RANGE, 8191) | RangeValidator[0, 60.0] | |
| ├── frameHeader | — | Struct | (outputParameter, version) == (PPV, 2) | |||||
| │ ├── frameNumber | 1 | UInt | (outputParameter, version) == (PPV, 2) | |||||
| │ ├── totalEvents | 3 | UInt | (outputParameter, version) == (PPV, 2) | RangeValidator[0, 4] | ||||
| │ └── nEvents | 2 | UInt | (outputParameter, version) == (PPV, 2) | RangeValidator[0, 2] | ||||
| ├── temperature | 12 | Int | Cel | frameNumber == 0 | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 2047) | ||
| ├── reportingPeriodSummary | — | Struct | frameNumber == 0 | |||||
| │ ├── numEventsAboveReportThreshold | 6 | UInt | count | frameNumber == 0 | EntryError(DATA_OUT_OF_RANGE, 63) | |||
| │ ├── numEventsBelowReportThreshold | 6 | UInt | count | frameNumber == 0 | EntryError(DATA_OUT_OF_RANGE, 63) | |||
| │ └── numActiveWindows | 20 | UInt | count | frameNumber == 0 | EntryError(DATA_OUT_OF_RANGE, 1048575) | |||
| ├── Reporting Events [nEvents] | — | Seq | (outputParameter, version) == (PPV, 2) | |||||
| │ ├── timestampEvent | 17 | UInt | — | RelativeTimestampMutator | EntryError(DATA_OUT_OF_RANGE, 131071) | |||
| │ ├── numWindowsEvent | 8 | UInt | count | — | EntryError(DATA_OUT_OF_RANGE, 255) | |||
| │ ├── xAxis | — | Struct | — | |||||
| │ │ ├── PPV | 15 | Ppv | mm/s | — | ScalingMutator(×100) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 200.0] | |
| │ │ └── predominantFrequency | 10 | PFrequency | Hz | — | MultiplierMutator(×2) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[0, 315] | |
| │ ├── yAxis | — | Struct | — | |||||
| │ │ ├── PPV | 15 | Ppv | mm/s | — | ScalingMutator(×100) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 200.0] | |
| │ │ └── predominantFrequency | 10 | PFrequency | Hz | — | MultiplierMutator(×2) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[0, 315] | |
| │ ├── zAxis | — | Struct | — | |||||
| │ │ ├── PPV | 15 | Ppv | mm/s | — | ScalingMutator(×100) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 200.0] | |
| │ │ └── predominantFrequency | 10 | PFrequency | Hz | — | MultiplierMutator(×2) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[0, 315] | |
| │ └── composedAxis | — | Struct | — | |||||
| │ └── PPV | 15 | Ppv | mm/s | — | ScalingMutator(×100) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 200.0] | |
| ├── frameHeader | — | Struct | (outputParameter, version) == (PGA, 2) | |||||
| │ ├── frameNumber | 1 | UInt | (outputParameter, version) == (PGA, 2) | |||||
| │ ├── totalEvents | 3 | UInt | (outputParameter, version) == (PGA, 2) | RangeValidator[0, 4] | ||||
| │ └── nEvents | 2 | UInt | (outputParameter, version) == (PGA, 2) | RangeValidator[0, 2] | ||||
| ├── temperature | 12 | Int | Cel | frameNumber == 0 | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 2047) | ||
| ├── numEventsCounted | 6 | UInt | count | frameNumber == 0 | ||||
| ├── numActiveWindows | 14 | UInt | count | frameNumber == 0 | EntryError(DATA_OUT_OF_RANGE, 16383) | |||
| ├── samplingRate | 2 | Enum | frameNumber == 0 | F62_5HZ (0), F125HZ (1), F250HZ (2), F500HZ (3) | ||||
| ├── samplingRate | 2 | Enum | not (frameNumber == 0) | F62_5HZ (0), F125HZ (1), F250HZ (2), F500HZ (3) | ||||
| ├── Reporting Events [nEvents] | — | Seq | (outputParameter, version) == (PGA, 2) | |||||
| │ ├── timestampEvent | 17 | UInt | — | RelativeTimestampMutator | EntryError(DATA_OUT_OF_RANGE, 131071) | |||
| │ ├── composedPGAEvent | 15 | PGA | mg_acc | — | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 2000.0] | |
| │ ├── composedRMSEvent | 14 | RMS | mg_acc | — | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 16383) | RangeValidator[0, 1000.0] | |
| │ ├── xAxis | — | Struct | — | |||||
| │ │ ├── PGA | 15 | PGA | mg_acc | — | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 2000.0] | |
| │ │ └── frequency | 11 | UInt | Hz | — | RawFrequencyToFrequencyMutator | |||
| │ ├── yAxis | — | Struct | — | |||||
| │ │ ├── PGA | 15 | PGA | mg_acc | — | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 2000.0] | |
| │ │ └── frequency | 11 | UInt | Hz | — | RawFrequencyToFrequencyMutator | |||
| │ └── zAxis | — | Struct | — | |||||
| │ ├── PGA | 15 | PGA | mg_acc | — | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 2000.0] | |
| │ └── frequency | 11 | UInt | Hz | — | RawFrequencyToFrequencyMutator | |||
| ├── reportingInfo | — | Struct | (outputParameter, version) == (PSA, 2) | |||||
| │ ├── temperature | 12 | Int | Cel | (outputParameter, version) == (PSA, 2) | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 2047) | ||
| │ ├── numEventsCounted | 6 | UInt | count | (outputParameter, version) == (PSA, 2) | ||||
| │ ├── numActiveWindows | 14 | UInt | count | (outputParameter, version) == (PSA, 2) | EntryError(DATA_OUT_OF_RANGE, 16383) | |||
| │ ├── samplingRate | 2 | Enum | (outputParameter, version) == (PSA, 2) | F62_5HZ (0), F125HZ (1), F250HZ (2), F500HZ (3) | ||||
| │ └── acquisitionMode | 1 | Enum | (outputParameter, version) == (PSA, 2) | ALWAYS_ON (0), PERIODIC (1) | ||||
| ├── timestampEvent | 17 | UInt | numActiveWindows > 0 | RelativeTimestampMutator | EntryError(DATA_OUT_OF_RANGE, 131071) | |||
| ├── xAxis | — | Struct | numActiveWindows > 0 | |||||
| │ ├── PGA | 15 | PGA | mg_acc | numActiveWindows > 0 | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 2000.0] | |
| │ ├── RMS | 14 | RMS | mg_acc | numActiveWindows > 0 | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 16383) | RangeValidator[0, 1000.0] | |
| │ └── Frequencies [5] | — | Seq | numActiveWindows > 0 | |||||
| │ └── | 11 | UInt | Hz | — | RawFrequencyToFrequencyMutator | |||
| ├── yAxis | — | Struct | numActiveWindows > 0 | |||||
| │ ├── PGA | 15 | PGA | mg_acc | numActiveWindows > 0 | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 2000.0] | |
| │ ├── RMS | 14 | RMS | mg_acc | numActiveWindows > 0 | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 16383) | RangeValidator[0, 1000.0] | |
| │ └── Frequencies [5] | — | Seq | numActiveWindows > 0 | |||||
| │ └── | 11 | UInt | Hz | — | RawFrequencyToFrequencyMutator | |||
| ├── zAxis | — | Struct | numActiveWindows > 0 | |||||
| │ ├── PGA | 15 | PGA | mg_acc | numActiveWindows > 0 | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 2000.0] | |
| │ ├── RMS | 14 | RMS | mg_acc | numActiveWindows > 0 | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 16383) | RangeValidator[0, 1000.0] | |
| │ └── Frequencies [5] | — | Seq | numActiveWindows > 0 | |||||
| │ └── | 11 | UInt | Hz | — | RawFrequencyToFrequencyMutator | |||
| └── | 0 | — | (outputParameter, version) == default |
DynRawDataStrMsg
Dyn Raw Data Str Msg
AM Type: 83
Source Code
| Field | Bits | Type | Unit | Condition | Mutator | Error | Validator | Description |
|---|---|---|---|---|---|---|---|---|
| ls_header | — | Struct | Always | |||||
| ├── uplink_version | 4 | UInt | Always | |||||
| ├── node_id_high | 4 | Fragment | Always | |||||
| ├── product_code | 8 | UInt | Always | |||||
| ├── node_id | 16 | UInt | Always | |||||
| ├── sequence_number | 8 | UInt | Always | |||||
| └── am_type | 8 | UInt | Always | |||||
| timestamp | 32 | TimestampField | Always | TimestampMutator | ||||
| version | 4 | UInt | Always | RangeValidator[0, 1] | ||||
| commonHeader | — | Switch | Always | |||||
| ├── reserved | 2 | Reserved | version == 0 | |||||
| ├── outputParameter | 2 | Enum | version == 0 | NO_ALGORITHM (0), MTVV (1), PPV (2), PGA (3), PSA (4) | ||||
| ├── outputParameter | 3 | Enum | version == 1 | NO_ALGORITHM (0), MTVV (1), PPV (2), PGA (3), PSA (4) | ||||
| └── reserved | 1 | Reserved | version == 1 | |||||
| readings | — | Switch | Always | |||||
| ├── isShortMonitoringEvent | 1 | Bool | (outputParameter, version) == (MTVV, 0) | |||||
| ├── wakeUpThreshold | 16 | UInt | (outputParameter, version) == (MTVV, 0) | |||||
| ├── transmissionThreshold | 10 | Mtvv | dB | (outputParameter, version) == (MTVV, 0) | OffsetMutator(-55), MultiplierMutator(×20) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[55.0, 100.0] | |
| ├── reading | — | Struct | (outputParameter, version) == (MTVV, 0) | |||||
| │ ├── numWindowsEvent | 7 | UInt | count | (outputParameter, version) == (MTVV, 0) | EntryError(DATA_OUT_OF_RANGE, 127) | |||
| │ ├── xAxis | — | Struct | (outputParameter, version) == (MTVV, 0) | |||||
| │ │ └── MTVV | 10 | Mtvv | dB | (outputParameter, version) == (MTVV, 0) | OffsetMutator(-55), MultiplierMutator(×20) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[55.0, 100.0] | |
| │ ├── yAxis | — | Struct | (outputParameter, version) == (MTVV, 0) | |||||
| │ │ └── MTVV | 10 | Mtvv | dB | (outputParameter, version) == (MTVV, 0) | OffsetMutator(-55), MultiplierMutator(×20) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[55.0, 100.0] | |
| │ └── zAxis | — | Struct | (outputParameter, version) == (MTVV, 0) | |||||
| │ └── MTVV | 10 | Mtvv | dB | (outputParameter, version) == (MTVV, 0) | OffsetMutator(-55), MultiplierMutator(×20) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[55.0, 100.0] | |
| ├── temperature | 12 | Int | Cel | (outputParameter, version) == (MTVV, 1) | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 2047) | ||
| ├── reading | — | Struct | (outputParameter, version) == (MTVV, 1) | |||||
| │ ├── numWindowsEvent | 7 | UInt | count | (outputParameter, version) == (MTVV, 1) | EntryError(DATA_OUT_OF_RANGE, 127) | |||
| │ ├── xAxis | — | Struct | (outputParameter, version) == (MTVV, 1) | |||||
| │ │ └── MTVV | 10 | Mtvv | dB | (outputParameter, version) == (MTVV, 1) | OffsetMutator(-55), MultiplierMutator(×20) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[55.0, 100.0] | |
| │ ├── yAxis | — | Struct | (outputParameter, version) == (MTVV, 1) | |||||
| │ │ └── MTVV | 10 | Mtvv | dB | (outputParameter, version) == (MTVV, 1) | OffsetMutator(-55), MultiplierMutator(×20) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[55.0, 100.0] | |
| │ └── zAxis | — | Struct | (outputParameter, version) == (MTVV, 1) | |||||
| │ └── MTVV | 10 | Mtvv | dB | (outputParameter, version) == (MTVV, 1) | OffsetMutator(-55), MultiplierMutator(×20) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[55.0, 100.0] | |
| ├── isShortMonitoringEvent | 1 | Bool | (outputParameter, version) == (PPV, 0) | |||||
| ├── wakeUpThreshold | 16 | UInt | (outputParameter, version) == (PPV, 0) | |||||
| ├── transmissionThreshold | 13 | Ppv | mm/s | (outputParameter, version) == (PPV, 0) | ScalingMutator(×100) | EntryError(DATA_OUT_OF_RANGE, 8191) | RangeValidator[0, 60.0] | |
| ├── reading | — | Struct | (outputParameter, version) == (PPV, 0) | |||||
| │ ├── numWindowsEvent | 7 | UInt | count | (outputParameter, version) == (PPV, 0) | EntryError(DATA_OUT_OF_RANGE, 127) | |||
| │ ├── xAxis | — | Struct | (outputParameter, version) == (PPV, 0) | |||||
| │ │ ├── PPV | 13 | Ppv | mm/s | (outputParameter, version) == (PPV, 0) | ScalingMutator(×100) | EntryError(DATA_OUT_OF_RANGE, 8191) | RangeValidator[0, 60.0] | |
| │ │ └── predominantFrequency | 8 | PFrequency | Hz | (outputParameter, version) == (PPV, 0) | MultiplierMutator(×2) | EntryError(DATA_OUT_OF_RANGE, 255) | RangeValidator[0, 100] | |
| │ ├── yAxis | — | Struct | (outputParameter, version) == (PPV, 0) | |||||
| │ │ ├── PPV | 13 | Ppv | mm/s | (outputParameter, version) == (PPV, 0) | ScalingMutator(×100) | EntryError(DATA_OUT_OF_RANGE, 8191) | RangeValidator[0, 60.0] | |
| │ │ └── predominantFrequency | 8 | PFrequency | Hz | (outputParameter, version) == (PPV, 0) | MultiplierMutator(×2) | EntryError(DATA_OUT_OF_RANGE, 255) | RangeValidator[0, 100] | |
| │ └── zAxis | — | Struct | (outputParameter, version) == (PPV, 0) | |||||
| │ ├── PPV | 13 | Ppv | mm/s | (outputParameter, version) == (PPV, 0) | ScalingMutator(×100) | EntryError(DATA_OUT_OF_RANGE, 8191) | RangeValidator[0, 60.0] | |
| │ └── predominantFrequency | 8 | PFrequency | Hz | (outputParameter, version) == (PPV, 0) | MultiplierMutator(×2) | EntryError(DATA_OUT_OF_RANGE, 255) | RangeValidator[0, 100] | |
| ├── temperature | 12 | Int | Cel | (outputParameter, version) == (PPV, 1) | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 2047) | ||
| ├── reading | — | Struct | (outputParameter, version) == (PPV, 1) | |||||
| │ ├── numWindowsEvent | 8 | UInt | count | (outputParameter, version) == (PPV, 1) | EntryError(DATA_OUT_OF_RANGE, 255) | |||
| │ ├── xAxis | — | Struct | (outputParameter, version) == (PPV, 1) | |||||
| │ │ ├── PPV | 15 | Ppv | mm/s | (outputParameter, version) == (PPV, 1) | ScalingMutator(×100) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 200.0] | |
| │ │ └── predominantFrequency | 10 | PFrequency | Hz | (outputParameter, version) == (PPV, 1) | MultiplierMutator(×2) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[0, 315] | |
| │ ├── yAxis | — | Struct | (outputParameter, version) == (PPV, 1) | |||||
| │ │ ├── PPV | 15 | Ppv | mm/s | (outputParameter, version) == (PPV, 1) | ScalingMutator(×100) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 200.0] | |
| │ │ └── predominantFrequency | 10 | PFrequency | Hz | (outputParameter, version) == (PPV, 1) | MultiplierMutator(×2) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[0, 315] | |
| │ └── zAxis | — | Struct | (outputParameter, version) == (PPV, 1) | |||||
| │ ├── PPV | 15 | Ppv | mm/s | (outputParameter, version) == (PPV, 1) | ScalingMutator(×100) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 200.0] | |
| │ └── predominantFrequency | 10 | PFrequency | Hz | (outputParameter, version) == (PPV, 1) | MultiplierMutator(×2) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[0, 315] | |
| ├── temperature | 12 | Int | Cel | (outputParameter, version) == (PGA, 1) | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 2047) | ||
| ├── samplingRate | 2 | Enum | (outputParameter, version) == (PGA, 1) | F62_5HZ (0), F125HZ (1), F250HZ (2), F500HZ (3) | ||||
| ├── reading | — | Struct | (outputParameter, version) == (PGA, 1) | |||||
| │ ├── composedPGAEvent | 15 | PGA | mg_acc | (outputParameter, version) == (PGA, 1) | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 2000.0] | |
| │ ├── composedRMSEvent | 14 | RMS | mg_acc | (outputParameter, version) == (PGA, 1) | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 16383) | RangeValidator[0, 1000.0] | |
| │ ├── xAxis | — | Struct | (outputParameter, version) == (PGA, 1) | |||||
| │ │ ├── PGA | 15 | PGA | mg_acc | (outputParameter, version) == (PGA, 1) | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 2000.0] | |
| │ │ └── frequency | 11 | UInt | Hz | (outputParameter, version) == (PGA, 1) | RawFrequencyToFrequencyMutator | |||
| │ ├── yAxis | — | Struct | (outputParameter, version) == (PGA, 1) | |||||
| │ │ ├── PGA | 15 | PGA | mg_acc | (outputParameter, version) == (PGA, 1) | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 2000.0] | |
| │ │ └── frequency | 11 | UInt | Hz | (outputParameter, version) == (PGA, 1) | RawFrequencyToFrequencyMutator | |||
| │ └── zAxis | — | Struct | (outputParameter, version) == (PGA, 1) | |||||
| │ ├── PGA | 15 | PGA | mg_acc | (outputParameter, version) == (PGA, 1) | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 2000.0] | |
| │ └── frequency | 11 | UInt | Hz | (outputParameter, version) == (PGA, 1) | RawFrequencyToFrequencyMutator | |||
| ├── temperature | 12 | Int | Cel | (outputParameter, version) == (PSA, 1) | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 2047) | ||
| ├── samplingRate | 2 | Enum | (outputParameter, version) == (PSA, 1) | F62_5HZ (0), F125HZ (1), F250HZ (2), F500HZ (3) | ||||
| ├── reading | — | Struct | (outputParameter, version) == (PSA, 1) | |||||
| │ ├── xAxis | — | Struct | (outputParameter, version) == (PSA, 1) | |||||
| │ │ ├── PGA | 15 | PGA | mg_acc | (outputParameter, version) == (PSA, 1) | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 2000.0] | |
| │ │ ├── RMS | 14 | RMS | mg_acc | (outputParameter, version) == (PSA, 1) | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 16383) | RangeValidator[0, 1000.0] | |
| │ │ └── Frequencies [5] | — | Seq | (outputParameter, version) == (PSA, 1) | |||||
| │ │ └── | 11 | UInt | Hz | — | RawFrequencyToFrequencyMutator | |||
| │ ├── yAxis | — | Struct | (outputParameter, version) == (PSA, 1) | |||||
| │ │ ├── PGA | 15 | PGA | mg_acc | (outputParameter, version) == (PSA, 1) | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 2000.0] | |
| │ │ ├── RMS | 14 | RMS | mg_acc | (outputParameter, version) == (PSA, 1) | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 16383) | RangeValidator[0, 1000.0] | |
| │ │ └── Frequencies [5] | — | Seq | (outputParameter, version) == (PSA, 1) | |||||
| │ │ └── | 11 | UInt | Hz | — | RawFrequencyToFrequencyMutator | |||
| │ └── zAxis | — | Struct | (outputParameter, version) == (PSA, 1) | |||||
| │ ├── PGA | 15 | PGA | mg_acc | (outputParameter, version) == (PSA, 1) | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 2000.0] | |
| │ ├── RMS | 14 | RMS | mg_acc | (outputParameter, version) == (PSA, 1) | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 16383) | RangeValidator[0, 1000.0] | |
| │ └── Frequencies [5] | — | Seq | (outputParameter, version) == (PSA, 1) | |||||
| │ └── | 11 | UInt | Hz | — | RawFrequencyToFrequencyMutator | |||
| └── | 0 | — | (outputParameter, version) == default |
DynRawDataStrMsg
Dyn Raw Data Str Msg
AM Type: 86
Source Code
| Field | Bits | Type | Unit | Condition | Mutator | Error | Validator | Description |
|---|---|---|---|---|---|---|---|---|
| ls_header | — | Struct | Always | |||||
| ├── uplink_version | 4 | UInt | Always | |||||
| ├── node_id_high | 4 | Fragment | Always | |||||
| ├── product_code | 8 | UInt | Always | |||||
| ├── node_id | 16 | UInt | Always | |||||
| ├── sequence_number | 8 | UInt | Always | |||||
| └── am_type | 8 | UInt | Always | |||||
| timestamp | 32 | TimestampField | Always | TimestampMutator | ||||
| version | 4 | UInt | Always | RangeValidator[0, 1] | ||||
| commonHeader | — | Switch | Always | |||||
| ├── outputParameter | 4 | Enum | version == 0 | NO_ALGORITHM (0), MTVV (1), PPV (2), PGA (3), PSA (4) | ||||
| ├── outputParameter | 3 | Enum | version == 1 | NO_ALGORITHM (0), MTVV (1), PPV (2), PGA (3), PSA (4) | ||||
| └── reserved | 1 | Reserved | version == 1 | |||||
| readings | — | Switch | Always | |||||
| ├── frameHeader | — | Struct | (outputParameter, version) == (MTVV, 0) | |||||
| │ ├── frameNumber | 8 | UInt | (outputParameter, version) == (MTVV, 0) | |||||
| │ └── eod | 1 | UInt | (outputParameter, version) == (MTVV, 0) | |||||
| ├── totalNumFrames | 8 | UInt | frameNumber == 0 | |||||
| ├── temperature | 12 | Int | Cel | frameNumber == 0 | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 2047) | ||
| ├── maxLawDbX | — | Struct | frameNumber == 0 | |||||
| │ └── MTVV | 10 | Mtvv | dB | frameNumber == 0 | OffsetMutator(-55), MultiplierMutator(×20) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[55.0, 100.0] | |
| ├── maxLawDbY | — | Struct | frameNumber == 0 | |||||
| │ └── MTVV | 10 | Mtvv | dB | frameNumber == 0 | OffsetMutator(-55), MultiplierMutator(×20) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[55.0, 100.0] | |
| ├── maxLawDbZ | — | Struct | frameNumber == 0 | |||||
| │ └── MTVV | 10 | Mtvv | dB | frameNumber == 0 | OffsetMutator(-55), MultiplierMutator(×20) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[55.0, 100.0] | |
| ├── maxInRawDataX | 1 | Bool | frameNumber == 0 | |||||
| ├── maxInRawDataY | 1 | Bool | frameNumber == 0 | |||||
| ├── maxInRawDataZ | 1 | Bool | frameNumber == 0 | |||||
| ├── rawPadding | 2 | Reserved | frameNumber == 0 | |||||
| ├── data | — | Struct | frameNumber == 0 | |||||
| │ ├── Data Buffer X [18] | — | Seq | frameNumber == 0 | |||||
| │ │ └── | 32 | Float | — | |||||
| │ ├── Data Buffer Y [18] | — | Seq | frameNumber == 0 | |||||
| │ │ └── | 32 | Float | — | |||||
| │ └── Data Buffer Z [18] | — | Seq | frameNumber == 0 | |||||
| │ └── | 32 | Float | — | |||||
| ├── nSamples | 5 | UInt | not (frameNumber == 0) | RangeValidator[0, 20] | ||||
| ├── rawPadding | 2 | Reserved | not (frameNumber == 0) | |||||
| ├── data | — | Struct | not (frameNumber == 0) | |||||
| │ ├── Data Buffer X [nSamples] | — | Seq | not (frameNumber == 0) | |||||
| │ │ └── | 32 | Float | — | |||||
| │ ├── Data Buffer Y [nSamples] | — | Seq | not (frameNumber == 0) | |||||
| │ │ └── | 32 | Float | — | |||||
| │ └── Data Buffer Z [nSamples] | — | Seq | not (frameNumber == 0) | |||||
| │ └── | 32 | Float | — | |||||
| ├── frameHeader | — | Struct | (outputParameter, version) == (MTVV, 1) | |||||
| │ ├── frameNumber | 8 | UInt | (outputParameter, version) == (MTVV, 1) | |||||
| │ └── eod | 1 | UInt | (outputParameter, version) == (MTVV, 1) | |||||
| ├── totalNumFrames | 8 | UInt | frameNumber == 0 | |||||
| ├── temperature | 12 | Int | Cel | frameNumber == 0 | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 2047) | ||
| ├── maxLawDbX | — | Struct | frameNumber == 0 | |||||
| │ └── MTVV | 10 | Mtvv | dB | frameNumber == 0 | OffsetMutator(-55), MultiplierMutator(×20) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[55.0, 100.0] | |
| ├── maxLawDbY | — | Struct | frameNumber == 0 | |||||
| │ └── MTVV | 10 | Mtvv | dB | frameNumber == 0 | OffsetMutator(-55), MultiplierMutator(×20) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[55.0, 100.0] | |
| ├── maxLawDbZ | — | Struct | frameNumber == 0 | |||||
| │ └── MTVV | 10 | Mtvv | dB | frameNumber == 0 | OffsetMutator(-55), MultiplierMutator(×20) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[55.0, 100.0] | |
| ├── maxInRawDataX | 1 | Bool | frameNumber == 0 | |||||
| ├── maxInRawDataY | 1 | Bool | frameNumber == 0 | |||||
| ├── maxInRawDataZ | 1 | Bool | frameNumber == 0 | |||||
| ├── rawPadding | 2 | Reserved | frameNumber == 0 | |||||
| ├── data | — | Struct | frameNumber == 0 | |||||
| │ ├── Data Buffer X [18] | — | Seq | frameNumber == 0 | |||||
| │ │ └── | 32 | Float | — | |||||
| │ ├── Data Buffer Y [18] | — | Seq | frameNumber == 0 | |||||
| │ │ └── | 32 | Float | — | |||||
| │ └── Data Buffer Z [18] | — | Seq | frameNumber == 0 | |||||
| │ └── | 32 | Float | — | |||||
| ├── nSamples | 5 | UInt | not (frameNumber == 0) | RangeValidator[0, 20] | ||||
| ├── rawPadding | 2 | Reserved | not (frameNumber == 0) | |||||
| ├── data | — | Struct | not (frameNumber == 0) | |||||
| │ ├── Data Buffer X [nSamples] | — | Seq | not (frameNumber == 0) | |||||
| │ │ └── | 32 | Float | — | |||||
| │ ├── Data Buffer Y [nSamples] | — | Seq | not (frameNumber == 0) | |||||
| │ │ └── | 32 | Float | — | |||||
| │ └── Data Buffer Z [nSamples] | — | Seq | not (frameNumber == 0) | |||||
| │ └── | 32 | Float | — | |||||
| ├── frameHeader | — | Struct | (outputParameter, version) == (PPV, 0) | |||||
| │ ├── frameNumber | 8 | UInt | (outputParameter, version) == (PPV, 0) | |||||
| │ └── eod | 1 | UInt | (outputParameter, version) == (PPV, 0) | |||||
| ├── totalNumFrames | 8 | UInt | frameNumber == 0 | |||||
| ├── temperature | 12 | Int | Cel | frameNumber == 0 | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 2047) | ||
| ├── xAxis | — | Struct | frameNumber == 0 | |||||
| │ ├── PPV | 13 | Ppv | mm/s | frameNumber == 0 | ScalingMutator(×100) | EntryError(DATA_OUT_OF_RANGE, 8191) | RangeValidator[0, 60.0] | |
| │ └── predominantFrequency | 8 | PFrequency | Hz | frameNumber == 0 | MultiplierMutator(×2) | EntryError(DATA_OUT_OF_RANGE, 255) | RangeValidator[0, 100] | |
| ├── yAxis | — | Struct | frameNumber == 0 | |||||
| │ ├── PPV | 13 | Ppv | mm/s | frameNumber == 0 | ScalingMutator(×100) | EntryError(DATA_OUT_OF_RANGE, 8191) | RangeValidator[0, 60.0] | |
| │ └── predominantFrequency | 8 | PFrequency | Hz | frameNumber == 0 | MultiplierMutator(×2) | EntryError(DATA_OUT_OF_RANGE, 255) | RangeValidator[0, 100] | |
| ├── zAxis | — | Struct | frameNumber == 0 | |||||
| │ ├── PPV | 13 | Ppv | mm/s | frameNumber == 0 | ScalingMutator(×100) | EntryError(DATA_OUT_OF_RANGE, 8191) | RangeValidator[0, 60.0] | |
| │ └── predominantFrequency | 8 | PFrequency | Hz | frameNumber == 0 | MultiplierMutator(×2) | EntryError(DATA_OUT_OF_RANGE, 255) | RangeValidator[0, 100] | |
| ├── composedAxis | — | Struct | frameNumber == 0 | |||||
| │ └── PPV | 13 | Ppv | mm/s | frameNumber == 0 | ScalingMutator(×100) | EntryError(DATA_OUT_OF_RANGE, 8191) | RangeValidator[0, 60.0] | |
| ├── maxInRawDataX | 1 | Bool | frameNumber == 0 | |||||
| ├── maxInRawDataY | 1 | Bool | frameNumber == 0 | |||||
| ├── maxInRawDataZ | 1 | Bool | frameNumber == 0 | |||||
| ├── rawPadding | 4 | Reserved | frameNumber == 0 | |||||
| ├── data | — | Struct | frameNumber == 0 | |||||
| │ ├── Data Buffer X [18] | — | Seq | frameNumber == 0 | |||||
| │ │ └── | 32 | Float | — | |||||
| │ ├── Data Buffer Y [18] | — | Seq | frameNumber == 0 | |||||
| │ │ └── | 32 | Float | — | |||||
| │ └── Data Buffer Z [18] | — | Seq | frameNumber == 0 | |||||
| │ └── | 32 | Float | — | |||||
| ├── nSamples | 5 | UInt | not (frameNumber == 0) | RangeValidator[0, 20] | ||||
| ├── rawPadding | 2 | Reserved | not (frameNumber == 0) | |||||
| ├── data | — | Struct | not (frameNumber == 0) | |||||
| │ ├── Data Buffer X [nSamples] | — | Seq | not (frameNumber == 0) | |||||
| │ │ └── | 32 | Float | — | |||||
| │ ├── Data Buffer Y [nSamples] | — | Seq | not (frameNumber == 0) | |||||
| │ │ └── | 32 | Float | — | |||||
| │ └── Data Buffer Z [nSamples] | — | Seq | not (frameNumber == 0) | |||||
| │ └── | 32 | Float | — | |||||
| ├── frameHeader | — | Struct | (outputParameter, version) == (PPV, 1) | |||||
| │ ├── frameNumber | 8 | UInt | (outputParameter, version) == (PPV, 1) | |||||
| │ └── eod | 1 | UInt | (outputParameter, version) == (PPV, 1) | |||||
| ├── totalNumFrames | 8 | UInt | frameNumber == 0 | |||||
| ├── temperature | 12 | Int | Cel | frameNumber == 0 | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 2047) | ||
| ├── xAxis | — | Struct | frameNumber == 0 | |||||
| │ ├── PPV | 15 | Ppv | mm/s | frameNumber == 0 | ScalingMutator(×100) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 200.0] | |
| │ └── predominantFrequency | 10 | PFrequency | Hz | frameNumber == 0 | MultiplierMutator(×2) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[0, 315] | |
| ├── yAxis | — | Struct | frameNumber == 0 | |||||
| │ ├── PPV | 15 | Ppv | mm/s | frameNumber == 0 | ScalingMutator(×100) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 200.0] | |
| │ └── predominantFrequency | 10 | PFrequency | Hz | frameNumber == 0 | MultiplierMutator(×2) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[0, 315] | |
| ├── zAxis | — | Struct | frameNumber == 0 | |||||
| │ ├── PPV | 15 | Ppv | mm/s | frameNumber == 0 | ScalingMutator(×100) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 200.0] | |
| │ └── predominantFrequency | 10 | PFrequency | Hz | frameNumber == 0 | MultiplierMutator(×2) | EntryError(DATA_OUT_OF_RANGE, 1023) | RangeValidator[0, 315] | |
| ├── composedAxis | — | Struct | frameNumber == 0 | |||||
| │ └── PPV | 15 | Ppv | mm/s | frameNumber == 0 | ScalingMutator(×100) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 200.0] | |
| ├── maxInRawDataX | 1 | Bool | frameNumber == 0 | |||||
| ├── maxInRawDataY | 1 | Bool | frameNumber == 0 | |||||
| ├── maxInRawDataZ | 1 | Bool | frameNumber == 0 | |||||
| ├── rawPadding | 6 | Reserved | frameNumber == 0 | |||||
| ├── data | — | Struct | frameNumber == 0 | |||||
| │ ├── Data Buffer X [18] | — | Seq | frameNumber == 0 | |||||
| │ │ └── | 32 | Float | — | |||||
| │ ├── Data Buffer Y [18] | — | Seq | frameNumber == 0 | |||||
| │ │ └── | 32 | Float | — | |||||
| │ └── Data Buffer Z [18] | — | Seq | frameNumber == 0 | |||||
| │ └── | 32 | Float | — | |||||
| ├── nSamples | 5 | UInt | not (frameNumber == 0) | RangeValidator[0, 22] | ||||
| ├── rawPadding | 2 | Reserved | not (frameNumber == 0) | |||||
| ├── data | — | Struct | not (frameNumber == 0) | |||||
| │ ├── Data Buffer X [nSamples] | — | Seq | not (frameNumber == 0) | |||||
| │ │ └── | 32 | Float | — | |||||
| │ ├── Data Buffer Y [nSamples] | — | Seq | not (frameNumber == 0) | |||||
| │ │ └── | 32 | Float | — | |||||
| │ └── Data Buffer Z [nSamples] | — | Seq | not (frameNumber == 0) | |||||
| │ └── | 32 | Float | — | |||||
| ├── frameHeader | — | Struct | (outputParameter, version) == (PGA, 1) | |||||
| │ ├── frameNumber | 8 | UInt | (outputParameter, version) == (PGA, 1) | |||||
| │ └── eod | 1 | UInt | (outputParameter, version) == (PGA, 1) | |||||
| ├── totalNumFrames | 8 | UInt | frameNumber == 0 | |||||
| ├── temperature | 12 | Int | Cel | frameNumber == 0 | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 2047) | ||
| ├── samplingRate | 2 | Enum | frameNumber == 0 | F62_5HZ (0), F125HZ (1), F250HZ (2), F500HZ (3) | ||||
| ├── composedPGA | 15 | PGA | mg_acc | frameNumber == 0 | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 2000.0] | |
| ├── composedRMS | 14 | RMS | mg_acc | frameNumber == 0 | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 16383) | RangeValidator[0, 1000.0] | |
| ├── xAxis | — | Struct | frameNumber == 0 | |||||
| │ ├── PGA | 15 | PGA | mg_acc | frameNumber == 0 | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 2000.0] | |
| │ └── frequency | 11 | UInt | Hz | frameNumber == 0 | RawFrequencyToFrequencyMutator | |||
| ├── yAxis | — | Struct | frameNumber == 0 | |||||
| │ ├── PGA | 15 | PGA | mg_acc | frameNumber == 0 | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 2000.0] | |
| │ └── frequency | 11 | UInt | Hz | frameNumber == 0 | RawFrequencyToFrequencyMutator | |||
| ├── zAxis | — | Struct | frameNumber == 0 | |||||
| │ ├── PGA | 15 | PGA | mg_acc | frameNumber == 0 | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 2000.0] | |
| │ └── frequency | 11 | UInt | Hz | frameNumber == 0 | RawFrequencyToFrequencyMutator | |||
| ├── rawPadding | 6 | Reserved | frameNumber == 0 | |||||
| ├── data | — | Struct | frameNumber == 0 | |||||
| │ ├── Data Buffer X [18] | — | Seq | frameNumber == 0 | |||||
| │ │ └── | 32 | Float | — | |||||
| │ ├── Data Buffer Y [18] | — | Seq | frameNumber == 0 | |||||
| │ │ └── | 32 | Float | — | |||||
| │ └── Data Buffer Z [18] | — | Seq | frameNumber == 0 | |||||
| │ └── | 32 | Float | — | |||||
| ├── nSamples | 5 | UInt | not (frameNumber == 0) | RangeValidator[0, 20] | ||||
| ├── rawPadding | 2 | Reserved | not (frameNumber == 0) | |||||
| ├── data | — | Struct | not (frameNumber == 0) | |||||
| │ ├── Data Buffer X [nSamples] | — | Seq | not (frameNumber == 0) | |||||
| │ │ └── | 32 | Float | — | |||||
| │ ├── Data Buffer Y [nSamples] | — | Seq | not (frameNumber == 0) | |||||
| │ │ └── | 32 | Float | — | |||||
| │ └── Data Buffer Z [nSamples] | — | Seq | not (frameNumber == 0) | |||||
| │ └── | 32 | Float | — | |||||
| ├── frameHeader | — | Struct | (outputParameter, version) == (PSA, 1) | |||||
| │ ├── frameNumber | 8 | UInt | (outputParameter, version) == (PSA, 1) | |||||
| │ └── eod | 1 | UInt | (outputParameter, version) == (PSA, 1) | |||||
| ├── totalNumFrames | 8 | UInt | frameNumber == 0 | |||||
| ├── temperature | 12 | Int | Cel | frameNumber == 0 | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 2047) | ||
| ├── numEventsCounted | 6 | UInt | count | frameNumber == 0 | ||||
| ├── numActiveWindows | 14 | UInt | count | frameNumber == 0 | EntryError(DATA_OUT_OF_RANGE, 16383) | |||
| ├── samplingRate | 2 | Enum | frameNumber == 0 | F62_5HZ (0), F125HZ (1), F250HZ (2), F500HZ (3) | ||||
| ├── acquisitionMode | 1 | Enum | frameNumber == 0 | ALWAYS_ON (0), PERIODIC (1) | ||||
| ├── timestampEvent | 17 | UInt | frameNumber == 0 | RelativeTimestampMutator | EntryError(DATA_OUT_OF_RANGE, 131071) | |||
| ├── xAxis | — | Struct | frameNumber == 0 | |||||
| │ ├── PGA | 15 | PGA | mg_acc | frameNumber == 0 | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 2000.0] | |
| │ ├── RMS | 14 | RMS | mg_acc | frameNumber == 0 | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 16383) | RangeValidator[0, 1000.0] | |
| │ └── Frequencies [5] | — | Seq | frameNumber == 0 | |||||
| │ └── | 11 | UInt | Hz | — | RawFrequencyToFrequencyMutator | |||
| ├── yAxis | — | Struct | frameNumber == 0 | |||||
| │ ├── PGA | 15 | PGA | mg_acc | frameNumber == 0 | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 2000.0] | |
| │ ├── RMS | 14 | RMS | mg_acc | frameNumber == 0 | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 16383) | RangeValidator[0, 1000.0] | |
| │ └── Frequencies [5] | — | Seq | frameNumber == 0 | |||||
| │ └── | 11 | UInt | Hz | — | RawFrequencyToFrequencyMutator | |||
| ├── zAxis | — | Struct | frameNumber == 0 | |||||
| │ ├── PGA | 15 | PGA | mg_acc | frameNumber == 0 | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 32767) | RangeValidator[0, 2000.0] | |
| │ ├── RMS | 14 | RMS | mg_acc | frameNumber == 0 | ScalingMutator(×10) | EntryError(DATA_OUT_OF_RANGE, 16383) | RangeValidator[0, 1000.0] | |
| │ └── Frequencies [5] | — | Seq | frameNumber == 0 | |||||
| │ └── | 11 | UInt | Hz | — | RawFrequencyToFrequencyMutator | |||
| ├── rawPadding | 7 | Reserved | frameNumber == 0 | |||||
| ├── data | — | Struct | frameNumber == 0 | |||||
| │ ├── Data Buffer X [16] | — | Seq | frameNumber == 0 | |||||
| │ │ └── | 32 | Float | — | |||||
| │ ├── Data Buffer Y [16] | — | Seq | frameNumber == 0 | |||||
| │ │ └── | 32 | Float | — | |||||
| │ └── Data Buffer Z [16] | — | Seq | frameNumber == 0 | |||||
| │ └── | 32 | Float | — | |||||
| ├── nSamples | 5 | UInt | not (frameNumber == 0) | RangeValidator[0, 20] | ||||
| ├── rawPadding | 2 | Reserved | not (frameNumber == 0) | |||||
| ├── data | — | Struct | not (frameNumber == 0) | |||||
| │ ├── Data Buffer X [nSamples] | — | Seq | not (frameNumber == 0) | |||||
| │ │ └── | 32 | Float | — | |||||
| │ ├── Data Buffer Y [nSamples] | — | Seq | not (frameNumber == 0) | |||||
| │ │ └── | 32 | Float | — | |||||
| │ └── Data Buffer Z [nSamples] | — | Seq | not (frameNumber == 0) | |||||
| │ └── | 32 | Float | — | |||||
| └── | 0 | — | (outputParameter, version) == default |
common
AggregatedReportingPeriodAndSlotTime
Aggregated Reporting Period And Slot Time
AM Type: 192
Source Code
| Field | Bits | Type | Unit | Condition | Description |
|---|---|---|---|---|---|
| ls_header | — | Struct | Always | ||
| ├── uplink_version | 4 | UInt | Always | ||
| ├── node_id_high | 4 | Fragment | Always | ||
| ├── product_code | 8 | UInt | Always | ||
| ├── node_id | 16 | UInt | Always | ||
| ├── sequence_number | 8 | UInt | Always | ||
| └── am_type | 8 | UInt | Always | ||
| reporting_period | 24 | UInt | s | Always | |
| slot_time | 16 | UInt | s | Always |
CommPeriodCfgStructMsg
Comm Period Cfg Struct Msg
AM Type: 172
Source Code
| Field | Bits | Type | Condition | Validator | Description |
|---|---|---|---|---|---|
| ls_header | — | Struct | Always | ||
| ├── uplink_version | 4 | UInt | Always | ||
| ├── node_id_high | 4 | Fragment | Always | ||
| ├── product_code | 8 | UInt | Always | ||
| ├── node_id | 16 | UInt | Always | ||
| ├── sequence_number | 8 | UInt | Always | ||
| └── am_type | 8 | UInt | Always | ||
| version | 2 | UInt | Always | ValueValidator(0) | |
| reserved | 6 | Reserved | Always | ||
| cfg | — | Struct | Always | ||
| └── commPeriod | 24 | UInt | Always | RangeValidator[0, 86400] |
HealthV3DataStructMsg
Health V3 Data Struct Msg
AM Type: 79
Source Code
| Field | Bits | Type | Unit | Condition | Mutator | Validator | Description |
|---|---|---|---|---|---|---|---|
| ls_header | — | Struct | Always | ||||
| ├── uplink_version | 4 | UInt | Always | ||||
| ├── node_id_high | 4 | Fragment | Always | ||||
| ├── product_code | 8 | UInt | Always | ||||
| ├── node_id | 16 | UInt | Always | ||||
| ├── sequence_number | 8 | UInt | Always | ||||
| └── am_type | 8 | UInt | Always | ||||
| readTimestamp | 32 | TimestampField | Always | TimestampMutator | |||
| version | 2 | UInt | Always | RangeValidator[0, 1] | |||
| uptime | 30 | UInt | s | Always | |||
| inputPower | 12 | UInt | V | Always | ScalingMutator(×100) | ||
| temperature | 8 | Int | Cel | Always | |||
| percentage | 10 | UInt | %RH | version == 1 | ScalingMutator(×10) | ||
| std | 9 | UInt | %RH | version == 1 | ScalingMutator(×10) | ||
| delta | 10 | UInt | %RH | version == 1 | ScalingMutator(×10) | ||
| reserved | 3 | Reserved | version == 1 | ||||
| serialNumber | 20 | UInt | Always | ||||
| firmwareVersion | — | Struct | Always | ||||
| ├── msb | 8 | UInt | Always | ||||
| └── lsb | 8 | UInt | Always | ||||
| time | — | Struct | Always | ||||
| ├── drift | 1 | Bool | Always | ||||
| └── inSeconds | 15 | UInt | s | Always | TimeDeltaToSecondsMutator(÷60) |
LoRaAdrAckCfgStructMsg
Lo Ra Adr Ack Cfg Struct Msg
AM Type: 167
Source Code
| Field | Bits | Type | Condition | Mutator | Validator | Description |
|---|---|---|---|---|---|---|
| ls_header | — | Struct | Always | |||
| ├── uplink_version | 4 | UInt | Always | |||
| ├── node_id_high | 4 | Fragment | Always | |||
| ├── product_code | 8 | UInt | Always | |||
| ├── node_id | 16 | UInt | Always | |||
| ├── sequence_number | 8 | UInt | Always | |||
| └── am_type | 8 | UInt | Always | |||
| version | 2 | UInt | Always | ValueValidator(0) | ||
| cfg | — | Struct | Always | |||
| ├── adrAckLimit | 15 | UInt | Always | OffsetMutator(-1) | RangeValidator[1, 32768] | |
| └── adrAckDelay | 15 | UInt | Always | OffsetMutator(-1) | RangeValidator[1, 32768] |
MiscCmdsStructMsg
Misc Cmds Struct Msg
AM Type: 21
Source Code
| Field | Bits | Type | Condition | Validator | Description |
|---|---|---|---|---|---|
| ls_header | — | Struct | Always | ||
| ├── uplink_version | 4 | UInt | Always | ||
| ├── node_id_high | 4 | Fragment | Always | ||
| ├── product_code | 8 | UInt | Always | ||
| ├── node_id | 16 | UInt | Always | ||
| ├── sequence_number | 8 | UInt | Always | ||
| └── am_type | 8 | UInt | Always | ||
| version | 4 | UInt | Always | RangeValidator[0, 0] | |
| reserved | 4 | Reserved | Always | ||
| commandId | 8 | Enum | Always | LORA_CERT_MOD (0), BLE_OTA (1), LOCAL_SAMPLING (2), BLE_STATE (3) | |
| commandPayload | — | Switch | Always | ||
| ├── LORA_CERT_MOD | 8 | Enum | commandId == LORA_CERT_MOD | LORA_CERT_MOD_DISABLED (0), LORA_CERT_MOD_ENABLED (1) | |
| ├── BLE_OTA | 0 | — | commandId == BLE_OTA | ||
| ├── version | 4 | UInt | commandId == LOCAL_SAMPLING | RangeValidator[0, 0] | |
| ├── samplingPeriod | 24 | UInt | commandId == LOCAL_SAMPLING | RangeValidator[0, 86400] | |
| ├── samplingTime | 24 | UInt | commandId == LOCAL_SAMPLING | RangeValidator[0, 86400] | |
| ├── reserved | 4 | Reserved | commandId == LOCAL_SAMPLING | ||
| └── BLE_STATE | 8 | Enum | commandId == BLE_STATE | NOT_STARTED (0), SYNCING (1), IDLE (2), NOT_ADVERTISING (3), ADVERTISING (4), OFF (5), CONNECTED (6), INVALID_FW (7), ERR_SYNCING (8), ERR_STOP_ADV (9), ERR_START_ADV (10), ERR_RESET (11), UNKNOWN_ERR (12), RESET_DONE (128), RESET_DONE_SYNCING (129), RESET_DONE_IDLE (130), RESET_DONE_NOT_ADVERTISING (131), RESET_DONE_ADVERTISING (132), RESET_DONE_BT_OFF (133), RESET_DONE_CONNECTED (134), RESET_DONE_ERR_SYNCING (136), RESET_DONE_ERR_STOP_ADV (137), RESET_DONE_ERR_START_ADV (138), IFACE_OFF (255) |
ReceptionOpportunityMsg
Reception Opportunity Msg
AM Type: 22
Source Code
| Field | Bits | Type | Condition | Validator | Description |
|---|---|---|---|---|---|
| ls_header | — | Struct | Always | ||
| ├── uplink_version | 4 | UInt | Always | ||
| ├── node_id_high | 4 | Fragment | Always | ||
| ├── product_code | 8 | UInt | Always | ||
| ├── node_id | 16 | UInt | Always | ||
| ├── sequence_number | 8 | UInt | Always | ||
| └── am_type | 8 | UInt | Always | ||
| msg_version | 4 | UInt | Always | RangeValidator[0, 1] | |
| payload | — | Switch | Always | ||
| ├── reserved | 3 | UInt | msg_version == 0 | ||
| ├── samplingPeriod | 17 | UInt | msg_version == 0 | ||
| ├── reserved | 2 | UInt | msg_version == 1 | ||
| ├── reportType | 1 | Enum | msg_version == 1 | SAMPLING_PERIOD (0), COMMUNICATION_PERIOD (1) | |
| └── timePeriod | 17 | UInt | msg_version == 1 |
dig
DigGenDataStrMsg
Dig Gen Data Str Msg
AM Type: 92
Source Code
| Field | Bits | Type | Unit | Condition | Mutator | Error | Validator | Description |
|---|---|---|---|---|---|---|---|---|
| ls_header | — | Struct | Always | |||||
| ├── uplink_version | 4 | UInt | Always | |||||
| ├── node_id_high | 4 | Fragment | Always | |||||
| ├── product_code | 8 | UInt | Always | |||||
| ├── node_id | 16 | UInt | Always | |||||
| ├── sequence_number | 8 | UInt | Always | |||||
| └── am_type | 8 | UInt | Always | |||||
| readTimestamp | 32 | TimestampField | Always | TimestampMutator | ||||
| version | 3 | UInt | Always | |||||
| portNumber | 3 | UInt | Always | |||||
| totalFragments | 5 | UInt | Always | OffsetMutator(-1) | ||||
| numFragment | 5 | UInt | Always | OffsetMutator(-1) | ||||
| numRedundancyFragments | 2 | UInt | Always | |||||
| integrationIdLength | 2 | Enum | Always | SHORT_ID (0), LONG_ID (1), RFU (2), SHORT_CUSTOM_ID (3) | ||||
| internalError | 4 | Enum | Always | NO_ERROR (0), DATA_GENERATION_ERROR (1), TIMEOUT (2), PAYLOAD_TOO_LARGE (3), RUNTIME (4), VERSION_MISMATCH (5), BUSY (6), VOLTAGE_ERROR (7) | ||||
| integrationId | — | Switch | (totalFragments - numRedundancyFragments) == 1 | |||||
| ├── SHORT_ID | 8 | UInt | integrationIdLength == SHORT_ID | |||||
| └── LONG_ID | 16 | UInt | integrationIdLength == LONG_ID | |||||
| paddingLength | 8 | UInt | ((totalFragments - numRedundancyFragments) == 1) and (numRedundancyFragments > 0) | |||||
| sdkVersionMajor | 8 | UInt | ((totalFragments - numRedundancyFragments) == 1) and (internalError == VERSION_MISMATCH) | |||||
| sdkVersionMinor | 8 | UInt | ((totalFragments - numRedundancyFragments) == 1) and (internalError == VERSION_MISMATCH) | |||||
| scriptIntegrationId | 16 | UInt | ((totalFragments - numRedundancyFragments) == 1) and (internalError == VERSION_MISMATCH) | |||||
| scriptMajor | 8 | UInt | ((totalFragments - numRedundancyFragments) == 1) and (internalError == VERSION_MISMATCH) | |||||
| scriptMinor | 8 | UInt | ((totalFragments - numRedundancyFragments) == 1) and (internalError == VERSION_MISMATCH) | |||||
| scriptSupportedApiMajor | 8 | UInt | ((totalFragments - numRedundancyFragments) == 1) and (internalError == VERSION_MISMATCH) | |||||
| scriptMinSupportedApiMinor | 8 | UInt | ((totalFragments - numRedundancyFragments) == 1) and (internalError == VERSION_MISMATCH) | |||||
| scriptSupportedPortConfigMajor | 8 | UInt | ((totalFragments - numRedundancyFragments) == 1) and (internalError == VERSION_MISMATCH) | |||||
| scriptMinSupportedPortConfigMinor | 8 | UInt | ((totalFragments - numRedundancyFragments) == 1) and (internalError == VERSION_MISMATCH) | |||||
| scriptSupportedConfigFileMajor | 8 | UInt | ((totalFragments - numRedundancyFragments) == 1) and (internalError == VERSION_MISMATCH) | |||||
| scriptMinSupportedConfigFileMinor | 8 | UInt | ((totalFragments - numRedundancyFragments) == 1) and (internalError == VERSION_MISMATCH) | |||||
| portConfigIntegrationId | 16 | UInt | ((totalFragments - numRedundancyFragments) == 1) and (internalError == VERSION_MISMATCH) | |||||
| portConfigVersionMajor | 8 | UInt | ((totalFragments - numRedundancyFragments) == 1) and (internalError == VERSION_MISMATCH) | |||||
| portConfigVersionMinor | 8 | UInt | ((totalFragments - numRedundancyFragments) == 1) and (internalError == VERSION_MISMATCH) | |||||
| configFilePresent | 8 | UInt | ((totalFragments - numRedundancyFragments) == 1) and (internalError == VERSION_MISMATCH) | |||||
| configFileIntegrationId | 16 | UInt | ((totalFragments - numRedundancyFragments) == 1) and (internalError == VERSION_MISMATCH) | |||||
| configFileMajor | 8 | UInt | ((totalFragments - numRedundancyFragments) == 1) and (internalError == VERSION_MISMATCH) | |||||
| configFileMinor | 8 | UInt | ((totalFragments - numRedundancyFragments) == 1) and (internalError == VERSION_MISMATCH) | |||||
| integrationIdMsgVersion | 3 | UInt | ((totalFragments - numRedundancyFragments) == 1) and (internalError == NO_ERROR) | |||||
| readings | — | Switch | ((totalFragments - numRedundancyFragments) == 1) and (internalError == NO_ERROR) | |||||
| ├── x | 5 | UInt | (integrationId, integrationIdMsgVersion) == (65534, 0) | |||||
| ├── x | 5 | UInt | (integrationId, integrationIdMsgVersion) == (65534, 1) | |||||
| ├── addedField | 8 | UInt | (integrationId, integrationIdMsgVersion) == (65534, 1) | |||||
| ├── rfu | 5 | UInt | (integrationId, integrationIdMsgVersion) == (65534, 2) | |||||
| ├── error | 8 | UInt | (integrationId, integrationIdMsgVersion) == (65534, 2) | |||||
| ├── numSensors | 8 | UInt | (integrationId, integrationIdMsgVersion) == (65534, 2) | |||||
| ├── Sensors [numSensors] | — | Seq | (integrationId, integrationIdMsgVersion) == (65534, 2) | |||||
| │ ├── x | 32 | Int | deg | — | ||||
| │ ├── y | 32 | Int | deg | — | ||||
| │ ├── z | 32 | Int | deg | — | ||||
| │ └── tmp | 32 | Int | Cel | — | ||||
| ├── numSensors | 8 | UInt | (integrationId, integrationIdMsgVersion) == (5, 0) | |||||
| ├── portError | 1 | Bool | (integrationId, integrationIdMsgVersion) == (5, 0) | |||||
| ├── errorData | 3 | UInt | portError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(CONFIG_ERROR, 1), EntryError(HARDWARE_ERROR, 2), EntryError(GENERAL_ERROR, 3), EntryError(GENERAL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| ├── hasZAxis | 1 | Bool | portError == 0 | |||||
| ├── Sensors [numSensors] | — | Seq | portError == 0 | |||||
| │ ├── temperatureError | 1 | Bool | — | |||||
| │ ├── temperature | 3 | UInt | temperatureError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ ├── temperature | 11 | Int | Cel | temperatureError == 0 | ScalingMutator(×10) | |||
| │ ├── xAxisError | 1 | Bool | — | |||||
| │ ├── xAxis | 3 | UInt | xAxisError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ ├── xAxis | 18 | Int | deg | xAxisError == 0 | ScalingMutator(×1000) | |||
| │ ├── yAxisError | 1 | Bool | — | |||||
| │ ├── yAxis | 3 | UInt | yAxisError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ ├── yAxis | 18 | Int | deg | yAxisError == 0 | ScalingMutator(×1000) | |||
| │ ├── zAxisError | 1 | Bool | hasZAxis == 1 | |||||
| │ ├── zAxis | 3 | UInt | zAxisError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ └── zAxis | 18 | Int | deg | zAxisError == 0 | ScalingMutator(×1000) | |||
| ├── numSensors | 9 | UInt | (integrationId, integrationIdMsgVersion) == (1, 0) | |||||
| ├── portError | 1 | Bool | (integrationId, integrationIdMsgVersion) == (1, 0) | |||||
| ├── errorData | 3 | UInt | portError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(GENERAL_ERROR, 1), EntryError(GENERAL_ERROR, 2), EntryError(GENERAL_ERROR, 3), EntryError(GENERAL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| ├── Y Axis [numSensors] | — | Seq | portError == 0 | |||||
| │ ├── hasYAxis | 1 | Bool | — | |||||
| │ ├── temperatureError | 1 | Bool | — | |||||
| │ ├── temperature | 3 | UInt | temperatureError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(CANNOT_BE_INTERPRETED, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ ├── temperature | 11 | Int | Cel | temperatureError == 0 | ScalingMutator(×10) | |||
| │ ├── xAxisError | 1 | Bool | — | |||||
| │ ├── xAxis | 3 | UInt | xAxisError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(CANNOT_BE_INTERPRETED, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ ├── xAxis | 19 | Int | deg | xAxisError == 0 | ScalingMutator(×10000) | |||
| │ ├── yAxisError | 1 | Bool | hasYAxis == 1 | |||||
| │ ├── yAxis | 3 | UInt | yAxisError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(CANNOT_BE_INTERPRETED, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ └── yAxis | 19 | Int | deg | yAxisError == 0 | ScalingMutator(×10000) | |||
| ├── numSensors | 9 | UInt | (integrationId, integrationIdMsgVersion) == (4, 0) | |||||
| ├── portError | 1 | Bool | (integrationId, integrationIdMsgVersion) == (4, 0) | |||||
| ├── errorData | 3 | UInt | portError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(CONFIG_ERROR, 1), EntryError(HARDWARE_ERROR, 2), EntryError(GENERAL_ERROR, 3), EntryError(GENERAL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| ├── Y Axis [numSensors] | — | Seq | portError == 0 | |||||
| │ ├── temperatureError | 1 | Bool | — | |||||
| │ ├── temperature | 3 | UInt | temperatureError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ ├── temperature | 15 | Int | Cel | temperatureError == 0 | ScalingMutator(×100) | |||
| │ ├── xAxisError | 1 | Bool | — | |||||
| │ ├── xAxis | 3 | UInt | xAxisError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ ├── xAxis | 21 | Int | sin | xAxisError == 0 | ScalingMutator(×1000000) | |||
| │ ├── yAxisError | 1 | Bool | — | |||||
| │ ├── yAxis | 3 | UInt | yAxisError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ └── yAxis | 21 | Int | sin | yAxisError == 0 | ScalingMutator(×1000000) | |||
| ├── numSensors | 8 | UInt | (integrationId, integrationIdMsgVersion) == (10, 0) | Number of sensors in the portData array. | ||||
| ├── portError | 1 | Bool | (integrationId, integrationIdMsgVersion) == (10, 0) | Port-level failure flag. When True, errorData holds the port error code and portData is absent. | ||||
| ├── errorData | 3 | UInt | portError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(CONFIG_ERROR, 1), EntryError(HARDWARE_ERROR, 2), EntryError(GENERAL_ERROR, 3), EntryError(GENERAL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| ├── Sensor Status [numSensors] | — | Seq | portError == 0 | |||||
| │ ├── xAxisError | 1 | Bool | — | Error flag for the X-axis. When True, xAxis holds a 3-bit error subcode; when False, it holds the value. | ||||
| │ ├── xAxis | 3 | UInt | xAxisError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ ├── xAxis | 18 | Int | deg | xAxisError == 0 | ScalingMutator(×1000) | |||
| │ ├── yAxisError | 1 | Bool | — | Error flag for the Y-axis. When True, yAxis holds a 3-bit error subcode; when False, it holds the value. | ||||
| │ ├── yAxis | 3 | UInt | yAxisError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ ├── yAxis | 18 | Int | deg | yAxisError == 0 | ScalingMutator(×1000) | |||
| │ ├── zAxisError | 1 | Bool | — | Error flag for the Z-axis. When True, zAxis holds a 3-bit error subcode; when False, it holds the value. | ||||
| │ ├── zAxis | 3 | UInt | zAxisError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ ├── zAxis | 18 | Int | deg | zAxisError == 0 | ScalingMutator(×1000) | |||
| │ ├── temperatureError | 1 | Bool | — | Error flag for the temperature. When True, temperature holds a 3-bit error subcode; when False, it holds the value. | ||||
| │ ├── temperature | 3 | UInt | temperatureError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ ├── temperature | 11 | Int | Cel | temperatureError == 0 | ScalingMutator(×10) | |||
| │ ├── sensorStatusError | 1 | Bool | — | Error flag for the sensor status. When True, sensorStatus holds a 3-bit error subcode; when False, it holds the value. | ||||
| │ ├── sensorStatus | 3 | UInt | sensorStatusError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ └── sensorStatus | 2 | UInt | sensorStatusError == 0 | |||||
| ├── numSensors | 8 | UInt | (integrationId, integrationIdMsgVersion) == (8, 0) | |||||
| ├── portError | 1 | Bool | (integrationId, integrationIdMsgVersion) == (8, 0) | |||||
| ├── portErrorCode | 3 | UInt | portError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(CONFIG_ERROR, 1), EntryError(HARDWARE_ERROR, 2), EntryError(GENERAL_ERROR, 3), EntryError(GENERAL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| ├── Voltage [numSensors] | — | Seq | portError == 0 | |||||
| │ ├── distanceError | 1 | Bool | — | |||||
| │ ├── distance | 3 | UInt | distanceError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ ├── distance | 21 | Int | mm | distanceError == 0 | ScalingMutator(×100) | |||
| │ ├── temperatureError | 1 | Bool | — | |||||
| │ ├── temperature | 3 | UInt | temperatureError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ ├── temperature | 11 | Int | Cel | temperatureError == 0 | ScalingMutator(×10) | |||
| │ ├── voltageError | 1 | Bool | — | |||||
| │ ├── voltage | 3 | UInt | voltageError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ └── voltage | 8 | UInt | V | voltageError == 0 | ScalingMutator(×10) | |||
| ├── numSensors | 8 | UInt | (integrationId, integrationIdMsgVersion) == (9, 0) | |||||
| ├── portError | 1 | Bool | (integrationId, integrationIdMsgVersion) == (9, 0) | |||||
| ├── portErrorCode | 3 | UInt | portError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(CONFIG_ERROR, 1), EntryError(HARDWARE_ERROR, 2), EntryError(GENERAL_ERROR, 3), EntryError(GENERAL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| ├── Voltage [numSensors] | — | Seq | portError == 0 | |||||
| │ ├── distanceError | 1 | Bool | — | |||||
| │ ├── distance | 3 | UInt | distanceError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ ├── distance | 19 | Int | mm | distanceError == 0 | ScalingMutator(×100) | |||
| │ ├── temperatureError | 1 | Bool | — | |||||
| │ ├── temperature | 3 | UInt | temperatureError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ ├── temperature | 11 | Int | Cel | temperatureError == 0 | ScalingMutator(×10) | |||
| │ ├── voltageError | 1 | Bool | — | |||||
| │ ├── voltage | 3 | UInt | voltageError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ └── voltage | 12 | UInt | V | voltageError == 0 | ScalingMutator(×100) | |||
| ├── numSensors | 8 | UInt | (integrationId, integrationIdMsgVersion) == (6, 0) | |||||
| ├── portError | 1 | Bool | (integrationId, integrationIdMsgVersion) == (6, 0) | |||||
| ├── portErrorCode | 3 | UInt | portError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(CONFIG_ERROR, 1), EntryError(HARDWARE_ERROR, 2), EntryError(GENERAL_ERROR, 3), EntryError(GENERAL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| ├── Voltage [numSensors] | — | Seq | portError == 0 | |||||
| │ ├── rollError | 1 | Bool | — | |||||
| │ ├── roll | 3 | UInt | rollError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ ├── roll | 23 | UInt | rad | rollError == 0 | ScalingMutator(×1000000) | |||
| │ ├── pitchError | 1 | Bool | — | |||||
| │ ├── pitch | 3 | UInt | pitchError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ ├── pitch | 23 | UInt | rad | pitchError == 0 | ScalingMutator(×1000000) | |||
| │ ├── yawError | 1 | Bool | — | |||||
| │ ├── yaw | 3 | UInt | yawError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ ├── yaw | 23 | UInt | rad | yawError == 0 | ScalingMutator(×1000000) | |||
| │ ├── temperatureError | 1 | Bool | — | |||||
| │ ├── temperature | 3 | UInt | temperatureError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ ├── temperature | 14 | Int | Cel | temperatureError == 0 | ScalingMutator(×100) | |||
| │ ├── voltageError | 1 | Bool | — | |||||
| │ ├── voltage | 3 | UInt | voltageError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ └── voltage | 12 | UInt | V | voltageError == 0 | ScalingMutator(×100) | |||
| ├── numSensors | 8 | UInt | (integrationId, integrationIdMsgVersion) == (7, 0) | |||||
| ├── portError | 1 | Bool | (integrationId, integrationIdMsgVersion) == (7, 0) | |||||
| ├── portErrorCode | 3 | UInt | portError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(CONFIG_ERROR, 1), EntryError(HARDWARE_ERROR, 2), EntryError(GENERAL_ERROR, 3), EntryError(GENERAL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| ├── Voltage [numSensors] | — | Seq | portError == 0 | |||||
| │ ├── xError | 1 | Bool | — | |||||
| │ ├── x | 3 | UInt | xError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ ├── x | 27 | UInt | g_acc | xError == 0 | ScalingMutator(×10000000) | |||
| │ ├── yError | 1 | Bool | — | |||||
| │ ├── y | 3 | UInt | yError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ ├── y | 27 | UInt | g_acc | yError == 0 | ScalingMutator(×10000000) | |||
| │ ├── zError | 1 | Bool | — | |||||
| │ ├── z | 3 | UInt | zError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ ├── z | 27 | UInt | g_acc | zError == 0 | ScalingMutator(×10000000) | |||
| │ ├── temperatureError | 1 | Bool | — | |||||
| │ ├── temperature | 3 | UInt | temperatureError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ ├── temperature | 14 | Int | Cel | temperatureError == 0 | ScalingMutator(×100) | |||
| │ ├── voltageError | 1 | Bool | — | |||||
| │ ├── voltage | 3 | UInt | voltageError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ └── voltage | 12 | UInt | V | voltageError == 0 | ScalingMutator(×100) | |||
| ├── numSensors | 9 | UInt | (integrationId, integrationIdMsgVersion) == (2, 0) | |||||
| ├── portError | 1 | Bool | (integrationId, integrationIdMsgVersion) == (2, 0) | |||||
| ├── errorData | 3 | UInt | portError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(GENERAL_ERROR, 1), EntryError(GENERAL_ERROR, 2), EntryError(GENERAL_ERROR, 3), EntryError(GENERAL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| ├── Y Axis [numSensors] | — | Seq | portError == 0 | |||||
| │ ├── hasYAxis | 1 | Bool | — | |||||
| │ ├── temperatureError | 1 | Bool | — | |||||
| │ ├── temperature | 3 | UInt | temperatureError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(CANNOT_BE_INTERPRETED, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ ├── temperature | 11 | Int | Cel | temperatureError == 0 | ScalingMutator(×10) | |||
| │ ├── xAxisError | 1 | Bool | — | |||||
| │ ├── xAxis | 3 | UInt | xAxisError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(CANNOT_BE_INTERPRETED, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ ├── xAxis | 19 | Int | deg | xAxisError == 0 | ScalingMutator(×10000) | |||
| │ ├── yAxisError | 1 | Bool | hasYAxis == 1 | |||||
| │ ├── yAxis | 3 | UInt | yAxisError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(CANNOT_BE_INTERPRETED, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ └── yAxis | 19 | Int | deg | yAxisError == 0 | ScalingMutator(×10000) | |||
| ├── numSensors | 9 | UInt | (integrationId, integrationIdMsgVersion) == (3, 0) | |||||
| ├── portError | 1 | Bool | (integrationId, integrationIdMsgVersion) == (3, 0) | |||||
| ├── errorData | 3 | UInt | portError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(CONFIG_ERROR, 1), EntryError(HARDWARE_ERROR, 2), EntryError(GENERAL_ERROR, 3), EntryError(GENERAL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| ├── Y Axis [numSensors] | — | Seq | portError == 0 | |||||
| │ ├── temperatureError | 1 | Bool | — | |||||
| │ ├── temperature | 3 | UInt | temperatureError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ ├── temperature | 14 | Int | Cel | temperatureError == 0 | ScalingMutator(×100) | |||
| │ ├── xAxisError | 1 | Bool | — | |||||
| │ ├── xAxis | 3 | UInt | xAxisError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ ├── xAxis | 20 | Int | sin | xAxisError == 0 | ScalingMutator(×1000000) | |||
| │ ├── yAxisError | 1 | Bool | — | |||||
| │ ├── yAxis | 3 | UInt | yAxisError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | ||||
| │ └── yAxis | 20 | Int | sin | yAxisError == 0 | ScalingMutator(×1000000) | |||
| ├── numSensors | 6 | UInt | count | (integrationId, integrationIdMsgVersion) == (0, 0) | RangeValidator[0, 62] | Number of sensors read from the SDI-12 port. Limit 62 by protocol. | ||
| ├── numChannels | 6 | UInt | count | (integrationId, integrationIdMsgVersion) == (0, 0) | RangeValidator[0, 31] | Number of channels read from each sensor. It is assumed that all sensors have the same number of channels. If numSensors is 0, numChannels is also 0. In current implementation the limit should be 9. If we add a list of reading commands, it can be 9 per command. Limit 31 to be aligned with the 5bits of errorParameter. | ||
| ├── portError | 1 | Bool | boolean | (integrationId, integrationIdMsgVersion) == (0, 0) | Whether there was an error reading the SDI-12 port. If true, no sensor or channel data is included in the message. | |||
| ├── errorCode | 3 | Enum | portError == 1 | Type of error encountered on the SDI-12 port GENERIC (0), NUM_CH_MISMATCH (1) | ||||
| ├── errorParameter | 5 | UInt | count | portError == 1 | Number of channels read if errorCode is NUM_CH_MISMATCH, otherwise 0. It is useful to the user to understand how many channels is really reading. | |||
| └── Sensor Data [numSensors] | — | Seq | portError == 0 | Data for each sensor read from the SDI-12 port | ||||
| ├── sensorError | 1 | Bool | boolean | — | Whether there was an error reading the sensor. If true, no channel data is included for this sensor. | |||
| ├── errorCode | 3 | Enum | sensorError == 1 | Type of error encountered on the sensor GENERIC (0), NO_RESPONSE (1), PROTOCOL_ERR (2) | ||||
| └── Channel Data [numChannels] | — | Seq | sensorError == 0 | Data for each channel read from the sensor | ||||
| ├── channelError | 1 | Bool | boolean | — | Whether there was an error reading the channel. If true, no channel data is included for this channel. | |||
| ├── errorCode | 3 | Enum | channelError == 1 | Type of error encountered on the channel GENERIC (0), NAN (1), NEG_INF (2), POS_INF (3) | ||||
| ├── decimalPlace | 3 | UInt | count | channelError == 0 | Number of decimal places for the channel value | |||
| └── scaledInteger | 25 | Int | channelError == 0 | DynamicScalingMutator(decimalPlace) | Scaled integer value for the channel. The actual value is obtained by applying the scaling factor based on the decimalPlace field. | |||
| Payload [totalFragments] | — | Seq | (totalFragments - numRedundancyFragments) > 1 | |||||
| ├── True | None | Bytes | 1 | |||||
| └── | 0 | — | default |
DigGenDummyIntegrationForTestsDataStrMsgV0
Dig Gen Dummy Integration For Tests Data Str Msg V0
Integration ID: 65534 | Message Version: 0
Source Code
| Field | Bits | Type | Condition | Description |
|---|---|---|---|---|
| x | 5 | UInt | Always |
DigGenDummyIntegrationForTestsDataStrMsgV1
Dig Gen Dummy Integration For Tests Data Str Msg V1
Integration ID: 65534 | Message Version: 1
Source Code
| Field | Bits | Type | Condition | Description |
|---|---|---|---|---|
| x | 5 | UInt | Always | |
| addedField | 8 | UInt | Always |
DigGenDummyIntegrationForTestsDataStrMsgV2
Dig Gen Dummy Integration For Tests Data Str Msg V2
Integration ID: 65534 | Message Version: 2
Source Code
| Field | Bits | Type | Unit | Condition | Description |
|---|---|---|---|---|---|
| rfu | 5 | UInt | Always | ||
| error | 8 | UInt | Always | ||
| numSensors | 8 | UInt | Always | ||
| Sensors [numSensors] | — | Seq | Always | ||
| ├── x | 32 | Int | deg | — | |
| ├── y | 32 | Int | deg | — | |
| ├── z | 32 | Int | deg | — | |
| └── tmp | 32 | Int | Cel | — |
DigGenGeokonIPIDataStrMsg
Dig Gen Geokon IPI Data Str Msg
Message containing the data read from Geokon IPI inclinometer sensors connected to the DIG Gen.
Top-level portError / portData handles port-level failures. When portError is False, portData
contains hasZAxis (global flag for all sensors) and the sensor array.
Each measurement has a paired boolean error flag (temperatureError, xAxisError, yAxisError,
zAxisError). When the flag is True, the measurement field holds a 3-bit error subcode
(MeasurementError). When the flag is False, the measurement field holds the actual value.
Temperature: 11-bit two's complement, scale factor 1 (raw / 10). Unit: degrees Celsius.
xAxis/yAxis/zAxis: 18-bit two's complement, scale factor 3 (raw / 1000). Unit: degrees.
Integration ID: 5 | Message Version: 0
Source Code
| Field | Bits | Type | Unit | Condition | Mutator | Error | Description |
|---|---|---|---|---|---|---|---|
| numSensors | 8 | UInt | Always | ||||
| portError | 1 | Bool | Always | ||||
| errorData | 3 | UInt | portError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(CONFIG_ERROR, 1), EntryError(HARDWARE_ERROR, 2), EntryError(GENERAL_ERROR, 3), EntryError(GENERAL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| hasZAxis | 1 | Bool | portError == 0 | ||||
| Sensors [numSensors] | — | Seq | portError == 0 | ||||
| ├── temperatureError | 1 | Bool | — | ||||
| ├── temperature | 3 | UInt | temperatureError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| ├── temperature | 11 | Int | Cel | temperatureError == 0 | ScalingMutator(×10) | ||
| ├── xAxisError | 1 | Bool | — | ||||
| ├── xAxis | 3 | UInt | xAxisError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| ├── xAxis | 18 | Int | deg | xAxisError == 0 | ScalingMutator(×1000) | ||
| ├── yAxisError | 1 | Bool | — | ||||
| ├── yAxis | 3 | UInt | yAxisError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| ├── yAxis | 18 | Int | deg | yAxisError == 0 | ScalingMutator(×1000) | ||
| ├── zAxisError | 1 | Bool | hasZAxis == 1 | ||||
| ├── zAxis | 3 | UInt | zAxisError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| └── zAxis | 18 | Int | deg | zAxisError == 0 | ScalingMutator(×1000) |
DigGenGeosenseInclinometerAsciiDataStrMsg
Dig Gen Geosense Inclinometer Ascii Data Str Msg
Message containing the data read from Geosense inclinometer sensors connected to the DIG Gen.
Top-level portError / portData handles port-level failures. When portError is False, each
sensor reports temperature, xAxis (tilt), and optionally yAxis (tilt on second axis), gated
by a per-sensor hasYAxis flag.
Each measurement has a paired boolean error flag (temperatureError, xAxisError, yAxisError).
When the flag is True, the measurement field holds a 3-bit error subcode (MeasurementError).
When the flag is False, the measurement field holds the actual value.
Temperature: 11-bit two's complement, multiplied by 10 on wire. Unit: degrees Celsius.
xAxis/yAxis: 19-bit two's complement, multiplied by 10000 on wire. Unit: degrees.
Integration ID: 1 | Message Version: 0
Source Code
| Field | Bits | Type | Unit | Condition | Mutator | Error | Description |
|---|---|---|---|---|---|---|---|
| numSensors | 9 | UInt | Always | ||||
| portError | 1 | Bool | Always | ||||
| errorData | 3 | UInt | portError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(GENERAL_ERROR, 1), EntryError(GENERAL_ERROR, 2), EntryError(GENERAL_ERROR, 3), EntryError(GENERAL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| Y Axis [numSensors] | — | Seq | portError == 0 | ||||
| ├── hasYAxis | 1 | Bool | — | ||||
| ├── temperatureError | 1 | Bool | — | ||||
| ├── temperature | 3 | UInt | temperatureError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(CANNOT_BE_INTERPRETED, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| ├── temperature | 11 | Int | Cel | temperatureError == 0 | ScalingMutator(×10) | ||
| ├── xAxisError | 1 | Bool | — | ||||
| ├── xAxis | 3 | UInt | xAxisError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(CANNOT_BE_INTERPRETED, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| ├── xAxis | 19 | Int | deg | xAxisError == 0 | ScalingMutator(×10000) | ||
| ├── yAxisError | 1 | Bool | hasYAxis == 1 | ||||
| ├── yAxis | 3 | UInt | yAxisError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(CANNOT_BE_INTERPRETED, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| └── yAxis | 19 | Int | deg | yAxisError == 0 | ScalingMutator(×10000) |
DigGenGeosenseInclinometerModbusDataStrMsg
Dig Gen Geosense Inclinometer Modbus Data Str Msg
Message containing the data read from Geosense Modbus biaxial inclinometer sensors connected to the DIG Gen.
Top-level portError / portData handles port-level failures. When portError is False,
each sensor always reports temperature, xAxis, and yAxis.
Each measurement has a paired boolean error flag (temperatureError, xAxisError, yAxisError).
When the flag is True, the measurement field holds a 3-bit error subcode (MeasurementError).
When the flag is False, the measurement field holds the actual value.
Temperature: 15-bit two's complement, multiplied by 100 on wire. Unit: degrees Celsius.
xAxis/yAxis: 21-bit two's complement, multiplied by 1000000 on wire. Unit: sinus.
Integration ID: 4 | Message Version: 0
Source Code
| Field | Bits | Type | Unit | Condition | Mutator | Error | Description |
|---|---|---|---|---|---|---|---|
| numSensors | 9 | UInt | Always | ||||
| portError | 1 | Bool | Always | ||||
| errorData | 3 | UInt | portError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(CONFIG_ERROR, 1), EntryError(HARDWARE_ERROR, 2), EntryError(GENERAL_ERROR, 3), EntryError(GENERAL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| Y Axis [numSensors] | — | Seq | portError == 0 | ||||
| ├── temperatureError | 1 | Bool | — | ||||
| ├── temperature | 3 | UInt | temperatureError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| ├── temperature | 15 | Int | Cel | temperatureError == 0 | ScalingMutator(×100) | ||
| ├── xAxisError | 1 | Bool | — | ||||
| ├── xAxis | 3 | UInt | xAxisError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| ├── xAxis | 21 | Int | sin | xAxisError == 0 | ScalingMutator(×1000000) | ||
| ├── yAxisError | 1 | Bool | — | ||||
| ├── yAxis | 3 | UInt | yAxisError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| └── yAxis | 21 | Int | sin | yAxisError == 0 | ScalingMutator(×1000000) |
DigGenGintecAficDataStrMsg
Dig Gen Gintec Afic Data Str Msg
Message containing the data read from Gintec AFIC sensors connected to the DIG Gen.
Top-level portError / portData handles port-level failures. When portError is False, portData
contains the sensor array. Each measurement has a paired boolean error flag: when the flag is
True the measurement field holds a 3-bit error subcode, otherwise it holds the value.
Integration ID: 10 | Message Version: 0
Source Code
| Field | Bits | Type | Unit | Condition | Mutator | Error | Description |
|---|---|---|---|---|---|---|---|
| numSensors | 8 | UInt | Always | Number of sensors in the portData array. | |||
| portError | 1 | Bool | Always | Port-level failure flag. When True, errorData holds the port error code and portData is absent. | |||
| errorData | 3 | UInt | portError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(CONFIG_ERROR, 1), EntryError(HARDWARE_ERROR, 2), EntryError(GENERAL_ERROR, 3), EntryError(GENERAL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| Sensor Status [numSensors] | — | Seq | portError == 0 | ||||
| ├── xAxisError | 1 | Bool | — | Error flag for the X-axis. When True, xAxis holds a 3-bit error subcode; when False, it holds the value. | |||
| ├── xAxis | 3 | UInt | xAxisError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| ├── xAxis | 18 | Int | deg | xAxisError == 0 | ScalingMutator(×1000) | ||
| ├── yAxisError | 1 | Bool | — | Error flag for the Y-axis. When True, yAxis holds a 3-bit error subcode; when False, it holds the value. | |||
| ├── yAxis | 3 | UInt | yAxisError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| ├── yAxis | 18 | Int | deg | yAxisError == 0 | ScalingMutator(×1000) | ||
| ├── zAxisError | 1 | Bool | — | Error flag for the Z-axis. When True, zAxis holds a 3-bit error subcode; when False, it holds the value. | |||
| ├── zAxis | 3 | UInt | zAxisError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| ├── zAxis | 18 | Int | deg | zAxisError == 0 | ScalingMutator(×1000) | ||
| ├── temperatureError | 1 | Bool | — | Error flag for the temperature. When True, temperature holds a 3-bit error subcode; when False, it holds the value. | |||
| ├── temperature | 3 | UInt | temperatureError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| ├── temperature | 11 | Int | Cel | temperatureError == 0 | ScalingMutator(×10) | ||
| ├── sensorStatusError | 1 | Bool | — | Error flag for the sensor status. When True, sensorStatus holds a 3-bit error subcode; when False, it holds the value. | |||
| ├── sensorStatus | 3 | UInt | sensorStatusError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| └── sensorStatus | 2 | UInt | sensorStatusError == 0 |
DigGenOspreyAspDataStrMsg
Dig Gen Osprey Asp Data Str Msg
Message containing data read from Osprey Automatic Settlement Profiler Modbus sensors.
Top-level portError / portData handles port-level failures. When portError is False,
each sensor always reports distance, temperature and voltage.
Each channel/measurement has a paired boolean error flag (distanceError, temperatureError and
voltageError)
When the flag is True, the measurement field holds a 3-bit error subcode (MeasurementError)
When the flag is False, the measurement field holds the actual value.
Distance: 21-bit two's complement, encoded as mm * 100. Unit: millimetres.
Temperature: 11-bit two's complement, encoded as deg C * 10. Unit: degrees Celsius.
Voltage: 8-bit unsigned, encoded as V * 10. Unit: volts.
Integration ID: 8 | Message Version: 0
Source Code
| Field | Bits | Type | Unit | Condition | Mutator | Error | Description |
|---|---|---|---|---|---|---|---|
| numSensors | 8 | UInt | Always | ||||
| portError | 1 | Bool | Always | ||||
| portErrorCode | 3 | UInt | portError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(CONFIG_ERROR, 1), EntryError(HARDWARE_ERROR, 2), EntryError(GENERAL_ERROR, 3), EntryError(GENERAL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| Voltage [numSensors] | — | Seq | portError == 0 | ||||
| ├── distanceError | 1 | Bool | — | ||||
| ├── distance | 3 | UInt | distanceError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| ├── distance | 21 | Int | mm | distanceError == 0 | ScalingMutator(×100) | ||
| ├── temperatureError | 1 | Bool | — | ||||
| ├── temperature | 3 | UInt | temperatureError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| ├── temperature | 11 | Int | Cel | temperatureError == 0 | ScalingMutator(×10) | ||
| ├── voltageError | 1 | Bool | — | ||||
| ├── voltage | 3 | UInt | voltageError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| └── voltage | 8 | UInt | V | voltageError == 0 | ScalingMutator(×10) |
DigGenOspreyIpxDataStrMsg
Dig Gen Osprey Ipx Data Str Msg
Message containing data read from Osprey IPX Modbus sensors connected to the DIG Gen.
Top-level portError / portData handles port-level failures. When portError is False,
each sensor always reports distance, temperature and voltage.
Each channel/measurement has a paired boolean error flag (distanceError,
temperatureError and voltageError).
When the flag is True, the measurement field holds a 3-bit error subcode
(MeasurementError).
When the flag is False, the measurement field holds the actual value.
Distance: 19-bit two's complement, encoded as mm * 100. Unit: millimetres.
Range: 0..1500 mm (raw 0..150000).
Temperature: 11-bit two's complement, encoded as deg C * 10. Unit: degrees Celsius.
Range: -20..80 deg C (raw -200..800).
Voltage: 12-bit unsigned, encoded as V * 100. Unit: volts.
Range: 4..26 V (raw 400..2600).
Integration ID: 9 | Message Version: 0
Source Code
| Field | Bits | Type | Unit | Condition | Mutator | Error | Description |
|---|---|---|---|---|---|---|---|
| numSensors | 8 | UInt | Always | ||||
| portError | 1 | Bool | Always | ||||
| portErrorCode | 3 | UInt | portError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(CONFIG_ERROR, 1), EntryError(HARDWARE_ERROR, 2), EntryError(GENERAL_ERROR, 3), EntryError(GENERAL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| Voltage [numSensors] | — | Seq | portError == 0 | ||||
| ├── distanceError | 1 | Bool | — | ||||
| ├── distance | 3 | UInt | distanceError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| ├── distance | 19 | Int | mm | distanceError == 0 | ScalingMutator(×100) | ||
| ├── temperatureError | 1 | Bool | — | ||||
| ├── temperature | 3 | UInt | temperatureError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| ├── temperature | 11 | Int | Cel | temperatureError == 0 | ScalingMutator(×10) | ||
| ├── voltageError | 1 | Bool | — | ||||
| ├── voltage | 3 | UInt | voltageError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| └── voltage | 12 | UInt | V | voltageError == 0 | ScalingMutator(×100) |
DigGenOspreyOtsInclinationDataStrMsg
Dig Gen Osprey Ots Inclination Data Str Msg
Message containing Osprey OTS Inclination Modbus data from a DIG Gen integration.
Top-level portError / portData handles port-level failures. When portError is False,
each sensor always reports roll, pitch, yaw, temperature and voltage.
Each channel/measurement has a paired boolean error flag (rollError, pitchError, yawError,
temperatureError and voltageError).
When the flag is True, the measurement field holds a 3-bit error subcode (MeasurementError).
When the flag is False, the measurement field holds the actual value.
Roll/Pitch/Yaw: 23-bit unsigned, multiplied by 1000000 on wire. Unit: radians.
Temperature: 14-bit two's complement, multiplied by 100 on wire. Unit: degrees Celsius.
Voltage: 12-bit unsigned, multiplied by 100 on wire. Unit: volts.
Integration ID: 6 | Message Version: 0
Source Code
| Field | Bits | Type | Unit | Condition | Mutator | Error | Description |
|---|---|---|---|---|---|---|---|
| numSensors | 8 | UInt | Always | ||||
| portError | 1 | Bool | Always | ||||
| portErrorCode | 3 | UInt | portError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(CONFIG_ERROR, 1), EntryError(HARDWARE_ERROR, 2), EntryError(GENERAL_ERROR, 3), EntryError(GENERAL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| Voltage [numSensors] | — | Seq | portError == 0 | ||||
| ├── rollError | 1 | Bool | — | ||||
| ├── roll | 3 | UInt | rollError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| ├── roll | 23 | UInt | rad | rollError == 0 | ScalingMutator(×1000000) | ||
| ├── pitchError | 1 | Bool | — | ||||
| ├── pitch | 3 | UInt | pitchError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| ├── pitch | 23 | UInt | rad | pitchError == 0 | ScalingMutator(×1000000) | ||
| ├── yawError | 1 | Bool | — | ||||
| ├── yaw | 3 | UInt | yawError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| ├── yaw | 23 | UInt | rad | yawError == 0 | ScalingMutator(×1000000) | ||
| ├── temperatureError | 1 | Bool | — | ||||
| ├── temperature | 3 | UInt | temperatureError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| ├── temperature | 14 | Int | Cel | temperatureError == 0 | ScalingMutator(×100) | ||
| ├── voltageError | 1 | Bool | — | ||||
| ├── voltage | 3 | UInt | voltageError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| └── voltage | 12 | UInt | V | voltageError == 0 | ScalingMutator(×100) |
DigGenOspreyOtsVectorDataStrMsg
Dig Gen Osprey Ots Vector Data Str Msg
Message containing Osprey OTS Vector Modbus data from a DIG Gen integration.
Top-level portError / portData handles port-level failures. When portError is False,
each sensor always reports x, y, z, temperature and voltage.
Each channel/measurement has a paired boolean error flag (xError, yError, zError,
temperatureError and
voltageError)
When the flag is True, the measurement field holds a 3-bit error subcode (MeasurementError)
When the flag is False, the measurement field holds the actual value.
X/Y/Z: 27-bit unsigned, multiplied by 10000000 on wire. Unit: G acceleration.
Temperature: 14-bit two's complement, multiplied by 100 on wire. Unit: degrees Celsius.
Voltage: 12-bit unsigned, multiplied by 100 on wire. Unit: volts.
Integration ID: 7 | Message Version: 0
Source Code
| Field | Bits | Type | Unit | Condition | Mutator | Error | Description |
|---|---|---|---|---|---|---|---|
| numSensors | 8 | UInt | Always | ||||
| portError | 1 | Bool | Always | ||||
| portErrorCode | 3 | UInt | portError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(CONFIG_ERROR, 1), EntryError(HARDWARE_ERROR, 2), EntryError(GENERAL_ERROR, 3), EntryError(GENERAL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| Voltage [numSensors] | — | Seq | portError == 0 | ||||
| ├── xError | 1 | Bool | — | ||||
| ├── x | 3 | UInt | xError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| ├── x | 27 | UInt | g_acc | xError == 0 | ScalingMutator(×10000000) | ||
| ├── yError | 1 | Bool | — | ||||
| ├── y | 3 | UInt | yError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| ├── y | 27 | UInt | g_acc | yError == 0 | ScalingMutator(×10000000) | ||
| ├── zError | 1 | Bool | — | ||||
| ├── z | 3 | UInt | zError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| ├── z | 27 | UInt | g_acc | zError == 0 | ScalingMutator(×10000000) | ||
| ├── temperatureError | 1 | Bool | — | ||||
| ├── temperature | 3 | UInt | temperatureError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| ├── temperature | 14 | Int | Cel | temperatureError == 0 | ScalingMutator(×100) | ||
| ├── voltageError | 1 | Bool | — | ||||
| ├── voltage | 3 | UInt | voltageError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| └── voltage | 12 | UInt | V | voltageError == 0 | ScalingMutator(×100) |
DigGenRstInclinometerAsciiDataStrMsg
Dig Gen Rst Inclinometer Ascii Data Str Msg
Message containing the data read from Rst inclinometer sensors connected to the DIG Gen.
Top-level portError / portData handles port-level failures. When portError is False, each
sensor reports temperature, xAxis (tilt), and optionally yAxis (tilt on second axis), gated
by a per-sensor hasYAxis flag.
Each measurement has a paired boolean error flag (temperatureError, xAxisError, yAxisError).
When the flag is True, the measurement field holds a 3-bit error subcode (MeasurementError).
When the flag is False, the measurement field holds the actual value.
Temperature: 11-bit two's complement, multiplied by 10 on wire. Unit: degrees Celsius.
xAxis/yAxis: 19-bit two's complement, multiplied by 10000 on wire. Unit: degrees.
Integration ID: 2 | Message Version: 0
Source Code
| Field | Bits | Type | Unit | Condition | Mutator | Error | Description |
|---|---|---|---|---|---|---|---|
| numSensors | 9 | UInt | Always | ||||
| portError | 1 | Bool | Always | ||||
| errorData | 3 | UInt | portError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(GENERAL_ERROR, 1), EntryError(GENERAL_ERROR, 2), EntryError(GENERAL_ERROR, 3), EntryError(GENERAL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| Y Axis [numSensors] | — | Seq | portError == 0 | ||||
| ├── hasYAxis | 1 | Bool | — | ||||
| ├── temperatureError | 1 | Bool | — | ||||
| ├── temperature | 3 | UInt | temperatureError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(CANNOT_BE_INTERPRETED, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| ├── temperature | 11 | Int | Cel | temperatureError == 0 | ScalingMutator(×10) | ||
| ├── xAxisError | 1 | Bool | — | ||||
| ├── xAxis | 3 | UInt | xAxisError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(CANNOT_BE_INTERPRETED, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| ├── xAxis | 19 | Int | deg | xAxisError == 0 | ScalingMutator(×10000) | ||
| ├── yAxisError | 1 | Bool | hasYAxis == 1 | ||||
| ├── yAxis | 3 | UInt | yAxisError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(CANNOT_BE_INTERPRETED, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| └── yAxis | 19 | Int | deg | yAxisError == 0 | ScalingMutator(×10000) |
DigGenRstInclinometerModbusDataStrMsg
Dig Gen Rst Inclinometer Modbus Data Str Msg
Message containing the data read from RST inclinometer sensors connected to the DIG Gen.
Top-level portError / portData handles port-level failures. When portError is False, each
sensor reports temperature, xAxis (tilt), and yAxis (tilt on second axis).
Each measurement has a paired boolean error flag (temperatureError, xAxisError, yAxisError).
When the flag is True, the measurement field holds a 3-bit error subcode (MeasurementError).
When the flag is False, the measurement field holds the actual value.
Temperature: 14-bit two's complement, multiplied by 100 on wire. Unit: degrees Celsius.
xAxis/yAxis: 20-bit two's complement, multiplied by 1000000 on wire. Unit: sinus.
Integration ID: 3 | Message Version: 0
Source Code
| Field | Bits | Type | Unit | Condition | Mutator | Error | Description |
|---|---|---|---|---|---|---|---|
| numSensors | 9 | UInt | Always | ||||
| portError | 1 | Bool | Always | ||||
| errorData | 3 | UInt | portError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(CONFIG_ERROR, 1), EntryError(HARDWARE_ERROR, 2), EntryError(GENERAL_ERROR, 3), EntryError(GENERAL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| Y Axis [numSensors] | — | Seq | portError == 0 | ||||
| ├── temperatureError | 1 | Bool | — | ||||
| ├── temperature | 3 | UInt | temperatureError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| ├── temperature | 14 | Int | Cel | temperatureError == 0 | ScalingMutator(×100) | ||
| ├── xAxisError | 1 | Bool | — | ||||
| ├── xAxis | 3 | UInt | xAxisError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| ├── xAxis | 20 | Int | sin | xAxisError == 0 | ScalingMutator(×1000000) | ||
| ├── yAxisError | 1 | Bool | — | ||||
| ├── yAxis | 3 | UInt | yAxisError == 1 | EntryError(GENERAL_ERROR, 0), EntryError(NOT_RESPONDING, 1), EntryError(DATA_OUT_OF_RANGE, 2), EntryError(NOT_VALID, 3), EntryError(PROTOCOL_ERROR, 4), EntryError(GENERAL_ERROR, 5), EntryError(GENERAL_ERROR, 6), EntryError(GENERAL_ERROR, 7) | |||
| └── yAxis | 20 | Int | sin | yAxisError == 0 | ScalingMutator(×1000000) |
DigGenSDI12GenericDataStrMsg
Dig Gen SDI12 Generic Data Str Msg
Message containing the data read from a SDI-12 sensor connected to the DIG Gen. The message contains information about the port, sensor and channels errors, as well as the read values for each channel, if no errors are present.
Integration ID: 0 | Message Version: 0
Source Code
| Field | Bits | Type | Unit | Condition | Mutator | Validator | Description |
|---|---|---|---|---|---|---|---|
| numSensors | 6 | UInt | count | Always | RangeValidator[0, 62] | Number of sensors read from the SDI-12 port. Limit 62 by protocol. | |
| numChannels | 6 | UInt | count | Always | RangeValidator[0, 31] | Number of channels read from each sensor. It is assumed that all sensors have the same number of channels. If numSensors is 0, numChannels is also 0. In current implementation the limit should be 9. If we add a list of reading commands, it can be 9 per command. Limit 31 to be aligned with the 5bits of errorParameter. | |
| portError | 1 | Bool | boolean | Always | Whether there was an error reading the SDI-12 port. If true, no sensor or channel data is included in the message. | ||
| errorCode | 3 | Enum | portError == 1 | Type of error encountered on the SDI-12 port GENERIC (0), NUM_CH_MISMATCH (1) | |||
| errorParameter | 5 | UInt | count | portError == 1 | Number of channels read if errorCode is NUM_CH_MISMATCH, otherwise 0. It is useful to the user to understand how many channels is really reading. | ||
| Sensor Data [numSensors] | — | Seq | portError == 0 | Data for each sensor read from the SDI-12 port | |||
| ├── sensorError | 1 | Bool | boolean | — | Whether there was an error reading the sensor. If true, no channel data is included for this sensor. | ||
| ├── errorCode | 3 | Enum | sensorError == 1 | Type of error encountered on the sensor GENERIC (0), NO_RESPONSE (1), PROTOCOL_ERR (2) | |||
| └── Channel Data [numChannels] | — | Seq | sensorError == 0 | Data for each channel read from the sensor | |||
| ├── channelError | 1 | Bool | boolean | — | Whether there was an error reading the channel. If true, no channel data is included for this channel. | ||
| ├── errorCode | 3 | Enum | channelError == 1 | Type of error encountered on the channel GENERIC (0), NAN (1), NEG_INF (2), POS_INF (3) | |||
| ├── decimalPlace | 3 | UInt | count | channelError == 0 | Number of decimal places for the channel value | ||
| └── scaledInteger | 25 | Int | channelError == 0 | DynamicScalingMutator(decimalPlace) | Scaled integer value for the channel. The actual value is obtained by applying the scaling factor based on the decimalPlace field. |
DigGmmInstructionsPort0CfgStrMsg
Dig Gmm Instructions Port 0 Cfg Str Msg
AM Type: 151
Source Code
| Field | Bits | Type | Unit | Condition | Validator | Description |
|---|---|---|---|---|---|---|
| ls_header | — | Struct | Always | |||
| ├── uplink_version | 4 | UInt | Always | |||
| ├── node_id_high | 4 | Fragment | Always | |||
| ├── product_code | 8 | UInt | Always | |||
| ├── node_id | 16 | UInt | Always | |||
| ├── sequence_number | 8 | UInt | Always | |||
| └── am_type | 8 | UInt | Always | |||
| configVersion | 8 | UInt | Always | ValueValidator(0) | ||
| rfu | 4 | Reserved | Always | |||
| configId | 12 | UInt | Always | RangeValidator[0, 68] | Supported configs can be seen in the generic_modbus_configs.json file |
|
| swapModbusWordSensorEndianness | 8 | UInt | Always | Word swap control for sensor Modbus values: 0 = no word swap; any non-zero value = perform word swap. | ||
| sensorReadingTimeout | 24 | UInt | ms | Always | RangeValidator[1, 1677721] | |
| globalNumberOfInstructions | 8 | UInt | Always | |||
| globalInstructionBuffer | 120 | Bytes | Always | See Annex G instruction format. | ||
| sensorNumberOfInstructions | 8 | UInt | Always | |||
| sensorInstructionsBuffer | 3200 | Bytes | Always | See Annex G instruction format. |
DigGmmInstructionsPort1CfgStrMsg
Dig Gmm Instructions Port 1 Cfg Str Msg
AM Type: 174
Source Code
| Field | Bits | Type | Unit | Condition | Validator | Description |
|---|---|---|---|---|---|---|
| ls_header | — | Struct | Always | |||
| ├── uplink_version | 4 | UInt | Always | |||
| ├── node_id_high | 4 | Fragment | Always | |||
| ├── product_code | 8 | UInt | Always | |||
| ├── node_id | 16 | UInt | Always | |||
| ├── sequence_number | 8 | UInt | Always | |||
| └── am_type | 8 | UInt | Always | |||
| configVersion | 8 | UInt | Always | ValueValidator(0) | ||
| rfu | 4 | Reserved | Always | |||
| configId | 12 | UInt | Always | RangeValidator[0, 68] | Supported configs can be seen in the generic_modbus_configs.json file |
|
| swapModbusWordSensorEndianness | 8 | UInt | Always | Word swap control for sensor Modbus values: 0 = no word swap; any non-zero value = perform word swap. | ||
| sensorReadingTimeout | 24 | UInt | ms | Always | RangeValidator[1, 1677721] | |
| globalNumberOfInstructions | 8 | UInt | Always | |||
| globalInstructionBuffer | 120 | Bytes | Always | See Annex G instruction format. | ||
| sensorNumberOfInstructions | 8 | UInt | Always | |||
| sensorInstructionsBuffer | 3200 | Bytes | Always | See Annex G instruction format. |
DigGmmInstructionsPort2CfgStrMsg
Dig Gmm Instructions Port 2 Cfg Str Msg
AM Type: 175
Source Code
| Field | Bits | Type | Unit | Condition | Validator | Description |
|---|---|---|---|---|---|---|
| ls_header | — | Struct | Always | |||
| ├── uplink_version | 4 | UInt | Always | |||
| ├── node_id_high | 4 | Fragment | Always | |||
| ├── product_code | 8 | UInt | Always | |||
| ├── node_id | 16 | UInt | Always | |||
| ├── sequence_number | 8 | UInt | Always | |||
| └── am_type | 8 | UInt | Always | |||
| configVersion | 8 | UInt | Always | ValueValidator(0) | ||
| rfu | 4 | Reserved | Always | |||
| configId | 12 | UInt | Always | RangeValidator[0, 68] | Supported configs can be seen in the generic_modbus_configs.json file |
|
| swapModbusWordSensorEndianness | 8 | UInt | Always | Word swap control for sensor Modbus values: 0 = no word swap; any non-zero value = perform word swap. | ||
| sensorReadingTimeout | 24 | UInt | ms | Always | RangeValidator[1, 1677721] | |
| globalNumberOfInstructions | 8 | UInt | Always | |||
| globalInstructionBuffer | 120 | Bytes | Always | See Annex G instruction format. | ||
| sensorNumberOfInstructions | 8 | UInt | Always | |||
| sensorInstructionsBuffer | 3200 | Bytes | Always | See Annex G instruction format. |
DigLuaFileCmdStrMsg
Dig Lua File Cmd Str Msg
AM Type: 24
Source Code
| Field | Bits | Type | Condition | Mutator | Description |
|---|---|---|---|---|---|
| ls_header | — | Struct | Always | ||
| ├── uplink_version | 4 | UInt | Always | ||
| ├── node_id_high | 4 | Fragment | Always | ||
| ├── product_code | 8 | UInt | Always | ||
| ├── node_id | 16 | UInt | Always | ||
| ├── sequence_number | 8 | UInt | Always | ||
| └── am_type | 8 | UInt | Always | ||
| version | 3 | UInt | Always | ||
| opcode | 1 | Enum | Always | DATA (0), STATUS (1) | |
| rfu | 4 | Reserved | Always | ||
| payload | — | Switch | Always | ||
| ├── data | None | Bytes | opcode == DATA | BytesSizeMutator | Raw YMODEM Packet. Contains the YMODEM data coming from the Node (e.g., 'C', 'ACK', 'NAK', or SOH/STX packets when the App is reading a file). |
| ├── status | 3 | Enum | opcode == STATUS | OK (0), ERROR_VERIF (1), ERROR_FLASH (2), ERROR_PROTOCOL (3), ERROR_BUSY (4), ERROR_SIZE (5) | |
| └── rfu | 5 | Reserved | opcode == STATUS |
DigPcCfgStrMsg
Dig Pc Cfg Str Msg
AM Type: 171
Source Code
| Field | Bits | Type | Unit | Condition | Description |
|---|---|---|---|---|---|
| ls_header | — | Struct | Always | ||
| ├── uplink_version | 4 | UInt | Always | ||
| ├── node_id_high | 4 | Fragment | Always | ||
| ├── product_code | 8 | UInt | Always | ||
| ├── node_id | 16 | UInt | Always | ||
| ├── sequence_number | 8 | UInt | Always | ||
| └── am_type | 8 | UInt | Always | ||
| version | 4 | UInt | Always | ||
| pcEnabled | 1 | Bool | Always | ||
| pcSamplingPeriod | 17 | UInt | s | Always | |
| tempPressRatio | 15 | UInt | Always | ||
| rfu | 3 | Reserved | Always |
DigPcDataStrMsg
Dig Pc Data Str Msg
AM Type: 93
Source Code
| Field | Bits | Type | Unit | Condition | Mutator | Description |
|---|---|---|---|---|---|---|
| ls_header | — | Struct | Always | |||
| ├── uplink_version | 4 | UInt | Always | |||
| ├── node_id_high | 4 | Fragment | Always | |||
| ├── product_code | 8 | UInt | Always | |||
| ├── node_id | 16 | UInt | Always | |||
| ├── sequence_number | 8 | UInt | Always | |||
| └── am_type | 8 | UInt | Always | |||
| readTimestamp | 32 | TimestampField | Always | TimestampMutator | ||
| version | 4 | UInt | Always | |||
| pcCurrentValue | 32 | UInt | count | Always | ||
| temperatureCurrentValue | 16 | Int | Cel | Always | ScalingMutator(×100) | |
| pressureCurrentValue | 21 | UInt | hPa | Always | ScalingMutator(×1000) | |
| pcLastValue | 32 | UInt | count | Always | ||
| pcAvg | 28 | UInt | count | Always | ScalingMutator(×10) | |
| pcMin | 25 | UInt | count | Always | ||
| pcMax | 25 | UInt | count | Always | ||
| tempAvg | 16 | Int | Cel | Always | ScalingMutator(×100) | |
| tempMin | 16 | Int | Cel | Always | ScalingMutator(×100) | |
| tempMax | 16 | Int | Cel | Always | ScalingMutator(×100) | |
| presAvg | 21 | UInt | hPa | Always | ScalingMutator(×1000) | |
| presMin | 21 | UInt | hPa | Always | ScalingMutator(×1000) | |
| presMax | 21 | UInt | hPa | Always | ScalingMutator(×1000) | |
| numSamplesPC | 16 | UInt | count | Always | ||
| numSamplesTempAndPres | 16 | UInt | count | Always | ||
| pcSamplingPeriod | 17 | UInt | s | Always | ||
| tempPressRatio | 15 | UInt | count | Always | ||
| padding | 2 | Reserved | Always |
DigPort0CfgStrMsg
Dig Port 0 Cfg Str Msg
AM Type: 168
Source Code
| Field | Bits | Type | Condition | Description |
|---|---|---|---|---|
| ls_header | — | Struct | Always | |
| ├── uplink_version | 4 | UInt | Always | |
| ├── node_id_high | 4 | Fragment | Always | |
| ├── product_code | 8 | UInt | Always | |
| ├── node_id | 16 | UInt | Always | |
| ├── sequence_number | 8 | UInt | Always | |
| └── am_type | 8 | UInt | Always | |
| version | 4 | UInt | Always | |
| runtimeMode | 8 | Enum | Always | MODBUS (0), LUA (1) |
| portEnabled | 1 | Bool | Always | |
| powerVoltage | 1 | Enum | Always | V_5 (0), V_12 (1) |
| powerAlwaysOn | 1 | Bool | Always | |
| powerThreshold | 16 | UInt | Always | |
| resetOnFailure | 1 | Bool | Always | |
| terminationResistor | 1 | Bool | Always | |
| usbPowerRailOff | 1 | Bool | Always | |
| sensorInitOnStartup | 1 | Bool | Always | |
| rfu | 1 | Reserved | Always | |
| runtimeModeMsgVersion | 4 | UInt | Always | |
| payload | — | Switch | Always | |
| ├── modbusBaudrate | 24 | UInt | runtimeMode == MODBUS | |
| ├── uartDatabits | 8 | UInt | runtimeMode == MODBUS | |
| ├── parity | 8 | Enum | runtimeMode == MODBUS | NONE (0), EVEN (1), ODD (2) |
| ├── stopBits | 8 | Enum | runtimeMode == MODBUS | HALF (0), ONE (1), ONE_AND_HALF (2), TWO (3) |
| ├── Sensor Addresses [ ] | — | Seq | runtimeMode == MODBUS | |
| │ └── | 8 | UInt | — | |
| ├── luaTimeOut | 16 | UInt | runtimeMode == LUA | |
| ├── luaRedundancyFrames | 2 | UInt | runtimeMode == LUA | |
| ├── maxDataSize | 14 | UInt | runtimeMode == LUA | |
| ├── maxRadioMsgSize | 8 | UInt | runtimeMode == LUA | |
| ├── integration | — | Struct | runtimeMode == LUA | |
| │ ├── id | 16 | UInt | runtimeMode == LUA | |
| │ └── version | — | Struct | runtimeMode == LUA | |
| │ ├── major | 5 | UInt | runtimeMode == LUA | |
| │ └── minor | 5 | UInt | runtimeMode == LUA | |
| └── rfu | 6 | Reserved | runtimeMode == LUA |
DigPort1CfgStrMsg
Dig Port 1 Cfg Str Msg
AM Type: 169
Source Code
| Field | Bits | Type | Condition | Description |
|---|---|---|---|---|
| ls_header | — | Struct | Always | |
| ├── uplink_version | 4 | UInt | Always | |
| ├── node_id_high | 4 | Fragment | Always | |
| ├── product_code | 8 | UInt | Always | |
| ├── node_id | 16 | UInt | Always | |
| ├── sequence_number | 8 | UInt | Always | |
| └── am_type | 8 | UInt | Always | |
| version | 4 | UInt | Always | |
| runtimeMode | 8 | Enum | Always | MODBUS (0), LUA (1) |
| portEnabled | 1 | Bool | Always | |
| powerVoltage | 1 | Enum | Always | V_5 (0), V_12 (1) |
| powerAlwaysOn | 1 | Bool | Always | |
| powerThreshold | 16 | UInt | Always | |
| resetOnFailure | 1 | Bool | Always | |
| terminationResistor | 1 | Bool | Always | |
| usbPowerRailOff | 1 | Bool | Always | |
| sensorInitOnStartup | 1 | Bool | Always | |
| rfu | 1 | Reserved | Always | |
| runtimeModeMsgVersion | 4 | UInt | Always | |
| payload | — | Switch | Always | |
| ├── modbusBaudrate | 24 | UInt | runtimeMode == MODBUS | |
| ├── uartDatabits | 8 | UInt | runtimeMode == MODBUS | |
| ├── parity | 8 | Enum | runtimeMode == MODBUS | NONE (0), EVEN (1), ODD (2) |
| ├── stopBits | 8 | Enum | runtimeMode == MODBUS | HALF (0), ONE (1), ONE_AND_HALF (2), TWO (3) |
| ├── Sensor Addresses [ ] | — | Seq | runtimeMode == MODBUS | |
| │ └── | 8 | UInt | — | |
| ├── luaTimeOut | 16 | UInt | runtimeMode == LUA | |
| ├── luaRedundancyFrames | 2 | UInt | runtimeMode == LUA | |
| ├── maxDataSize | 14 | UInt | runtimeMode == LUA | |
| ├── maxRadioMsgSize | 8 | UInt | runtimeMode == LUA | |
| ├── integration | — | Struct | runtimeMode == LUA | |
| │ ├── id | 16 | UInt | runtimeMode == LUA | |
| │ └── version | — | Struct | runtimeMode == LUA | |
| │ ├── major | 5 | UInt | runtimeMode == LUA | |
| │ └── minor | 5 | UInt | runtimeMode == LUA | |
| └── rfu | 6 | Reserved | runtimeMode == LUA |
DigPort2CfgStrMsg
Dig Port 2 Cfg Str Msg
AM Type: 170
Source Code
| Field | Bits | Type | Condition | Description |
|---|---|---|---|---|
| ls_header | — | Struct | Always | |
| ├── uplink_version | 4 | UInt | Always | |
| ├── node_id_high | 4 | Fragment | Always | |
| ├── product_code | 8 | UInt | Always | |
| ├── node_id | 16 | UInt | Always | |
| ├── sequence_number | 8 | UInt | Always | |
| └── am_type | 8 | UInt | Always | |
| version | 4 | UInt | Always | |
| runtimeMode | 8 | Enum | Always | MODBUS (0), LUA (1) |
| portEnabled | 1 | Bool | Always | |
| powerVoltage | 1 | Enum | Always | V_5 (0), V_12 (1) |
| powerAlwaysOn | 1 | Bool | Always | |
| powerThreshold | 16 | UInt | Always | |
| resetOnFailure | 1 | Bool | Always | |
| terminationResistor | 1 | Bool | Always | |
| usbPowerRailOff | 1 | Bool | Always | |
| sensorInitOnStartup | 1 | Bool | Always | |
| rfu | 1 | Reserved | Always | |
| runtimeModeMsgVersion | 4 | UInt | Always | |
| payload | — | Switch | Always | |
| ├── modbusBaudrate | 24 | UInt | runtimeMode == MODBUS | |
| ├── uartDatabits | 8 | UInt | runtimeMode == MODBUS | |
| ├── parity | 8 | Enum | runtimeMode == MODBUS | NONE (0), EVEN (1), ODD (2) |
| ├── stopBits | 8 | Enum | runtimeMode == MODBUS | HALF (0), ONE (1), ONE_AND_HALF (2), TWO (3) |
| ├── Sensor Addresses [ ] | — | Seq | runtimeMode == MODBUS | |
| │ └── | 8 | UInt | — | |
| ├── luaTimeOut | 16 | UInt | runtimeMode == LUA | |
| ├── luaRedundancyFrames | 2 | UInt | runtimeMode == LUA | |
| ├── maxDataSize | 14 | UInt | runtimeMode == LUA | |
| ├── maxRadioMsgSize | 8 | UInt | runtimeMode == LUA | |
| ├── integration | — | Struct | runtimeMode == LUA | |
| │ ├── id | 16 | UInt | runtimeMode == LUA | |
| │ └── version | — | Struct | runtimeMode == LUA | |
| │ ├── major | 5 | UInt | runtimeMode == LUA | |
| │ └── minor | 5 | UInt | runtimeMode == LUA | |
| └── rfu | 6 | Reserved | runtimeMode == LUA |
DigTDRCfgStrMsg
Dig TDR Cfg Str Msg
AM Type: 173
Source Code
| Field | Bits | Type | Unit | Condition | Mutator | Validator | Description |
|---|---|---|---|---|---|---|---|
| ls_header | — | Struct | Always | ||||
| ├── uplink_version | 4 | UInt | Always | ||||
| ├── node_id_high | 4 | Fragment | Always | ||||
| ├── product_code | 8 | UInt | Always | ||||
| ├── node_id | 16 | UInt | Always | ||||
| ├── sequence_number | 8 | UInt | Always | ||||
| └── am_type | 8 | UInt | Always | ||||
| version | 4 | UInt | Always | ||||
| isEnabled | 1 | Bool | Always | ||||
| mode | 2 | Enum | Always | SHORT (0), LONG (1), AUTO (2) | |||
| longPulseLength | 10 | UInt | ns | Always | |||
| aggregationCycles | 3 | UInt | Always | LogarithmicMutator | PowerOfTwoValidator | ||
| cableVelocityFactor | 10 | UInt | % | Always | DividerMutator(÷100), MultiplierMutator(×1023) | ||
| internalTimeOffset | 15 | UInt | ps | Always | |||
| externalDistanceOffset | 13 | UInt | cm | Always | |||
| rfu | 6 | Reserved | Always |
DigTDRDataStrMsg
Dig TDR Data Str Msg
AM Type: 94
Source Code
| Field | Bits | Type | Unit | Condition | Mutator | Error | Description |
|---|---|---|---|---|---|---|---|
| ls_header | — | Struct | Always | ||||
| ├── uplink_version | 4 | UInt | Always | ||||
| ├── node_id_high | 4 | Fragment | Always | ||||
| ├── product_code | 8 | UInt | Always | ||||
| ├── node_id | 16 | UInt | Always | ||||
| ├── sequence_number | 8 | UInt | Always | ||||
| └── am_type | 8 | UInt | Always | ||||
| readTimestamp | 32 | TimestampField | Always | TimestampMutator | |||
| version | 4 | UInt | Always | ||||
| cableStatus | 2 | Enum | Always | OK (0), TIMEOUT (1), HW_ERROR (2) | |||
| avgMeasuredTime | 24 | UInt | ps | Always | DividerMutator(÷10) | ReferenceEntryError(NOT_RESPONDING, CableStatus.TIMEOUT), ReferenceEntryError(GENERAL_ERROR, CableStatus.HW_ERROR) | |
| avgMeasuredDistance | 24 | UInt | m | Always | ScalingMutator(×100) | ReferenceEntryError(NOT_RESPONDING, CableStatus.TIMEOUT), ReferenceEntryError(GENERAL_ERROR, CableStatus.HW_ERROR) | |
| rfu | 2 | UInt | Always |
gnss
GnssDataStrMsg
Gnss Data Str Msg
AM Type: 85
Source Code
| Field | Bits | Type | Unit | Condition | Mutator | Error | Description |
|---|---|---|---|---|---|---|---|
| ls_header | — | Struct | Always | ||||
| ├── uplink_version | 4 | UInt | Always | ||||
| ├── node_id_high | 4 | Fragment | Always | ||||
| ├── product_code | 8 | UInt | Always | ||||
| ├── node_id | 16 | UInt | Always | ||||
| ├── sequence_number | 8 | UInt | Always | ||||
| └── am_type | 8 | UInt | Always | ||||
| readTimestamp | 32 | TimestampField | Always | TimestampMutator | |||
| version | 3 | UInt | Always | ||||
| oneSample | — | Struct | Always | ||||
| ├── numSamples | 6 | UInt | count | Always | |||
| ├── avgLat | 38 | Int | DD | Always | ScalingMutator(×1000000000) | ReferenceEntryError(NOT_VALID, 0) | |
| ├── avgLon | 39 | Int | DD | Always | ScalingMutator(×1000000000) | ReferenceEntryError(NOT_VALID, 0) | |
| └── avgAlt | 26 | UInt | m | Always | OffsetMutator(+1000), ScalingMutator(×10000) | ReferenceEntryError(NOT_VALID, 0) | |
| shortTermAgg | — | Struct | Always | ||||
| ├── numSamples | 3 | UInt | count | Always | |||
| ├── avgLat | 38 | Int | DD | Always | ScalingMutator(×1000000000) | ReferenceEntryError(NOT_VALID, 0) | |
| ├── avgLon | 39 | Int | DD | Always | ScalingMutator(×1000000000) | ReferenceEntryError(NOT_VALID, 0) | |
| └── avgAlt | 26 | UInt | m | Always | OffsetMutator(+1000), ScalingMutator(×10000) | ReferenceEntryError(NOT_VALID, 0) | |
| longTermAgg | — | Struct | Always | ||||
| ├── numSamples | 5 | UInt | count | Always | |||
| ├── avgLat | 38 | Int | DD | Always | ScalingMutator(×1000000000) | ReferenceEntryError(NOT_VALID, 0) | |
| ├── avgLon | 39 | Int | DD | Always | ScalingMutator(×1000000000) | ReferenceEntryError(NOT_VALID, 0) | |
| └── avgAlt | 26 | UInt | m | Always | OffsetMutator(+1000), ScalingMutator(×10000) | ReferenceEntryError(NOT_VALID, 0) |
GnssStatisticsStrMsg
Gnss Statistics Str Msg
AM Type: 84
Source Code
| Field | Bits | Type | Unit | Condition | Mutator | Description |
|---|---|---|---|---|---|---|
| ls_header | — | Struct | Always | |||
| ├── uplink_version | 4 | UInt | Always | |||
| ├── node_id_high | 4 | Fragment | Always | |||
| ├── product_code | 8 | UInt | Always | |||
| ├── node_id | 16 | UInt | Always | |||
| ├── sequence_number | 8 | UInt | Always | |||
| └── am_type | 8 | UInt | Always | |||
| readTimestamp | 32 | TimestampField | Always | TimestampMutator | ||
| version | 4 | UInt | Always | |||
| mode | 1 | Enum | Always | BASE (1), ROVER (0) | ||
| satellites | — | Struct | Always | |||
| ├── inUse | 6 | UInt | count | Always | ||
| └── inView | 6 | UInt | count | Always | ||
| avgCorrectionsLength | 10 | UInt | count | Always | ||
| gpsFix | — | Struct | Always | |||
| ├── timeToFix | 8 | UInt | s | Always | ||
| ├── hasFixBeforeCorrections | 1 | Bool | boolean | Always | NegateMutator | |
| ├── hasFix | 1 | Bool | boolean | Always | NegateMutator | |
| └── numSamplesNoFixDuringCorrections | 4 | UInt | count | Always | ||
| time | — | Struct | Always | |||
| ├── dateUpdated | 1 | Bool | boolean | Always | NegateMutator | |
| └── deviation | 12 | Int | s | Always | ScalingMutator(×1000) | |
| corrections | — | Struct | Always | |||
| ├── numPerSample | 8 | UInt | count | Always | ||
| └── timeToFirst | 8 | UInt | s | Always | ||
| carrierToNoise | — | Struct | Always | |||
| ├── gps | — | Struct | Always | |||
| │ ├── L1 | 6 | UInt | dBHz | Always | ||
| │ └── L2 | 6 | UInt | dBHz | Always | ||
| ├── galileo | — | Struct | Always | |||
| │ ├── E1 | 6 | UInt | dBHz | Always | ||
| │ └── E5b | 6 | UInt | dBHz | Always | ||
| ├── glonas | — | Struct | Always | |||
| │ ├── G1 | 6 | UInt | dBHz | Always | ||
| │ └── G2 | 6 | UInt | dBHz | Always | ||
| └── beidou | — | Struct | Always | |||
| ├── B1 | 6 | UInt | dBHz | Always | ||
| └── B2 | 6 | UInt | dBHz | Always | ||
| corrections | — | Struct | mode == ROVER | |||
| ├── numCorrectionsApplied | 6 | UInt | count | mode == ROVER | ||
| ├── unexpectedPackets | 6 | UInt | count | mode == ROVER | ||
| ├── snr | — | Struct | mode == ROVER | |||
| │ ├── avg | 9 | Int | dB | mode == ROVER | ScalingMutator(×10) | |
| │ └── stdDev | 8 | UInt | dB | mode == ROVER | ScalingMutator(×10) | |
| └── rssi | — | Struct | mode == ROVER | |||
| ├── avg | 8 | UInt | dBm | mode == ROVER | MultiplierMutator(×-1) | |
| └── stdDev | 8 | UInt | dBm | mode == ROVER | ||
| timeToRTKFix | 8 | UInt | s | mode == ROVER | ||
| dilutionOfPrecision | — | Struct | mode == ROVER | |||
| ├── horizontal | 8 | UInt | count | mode == ROVER | ScalingMutator(×10) | |
| └── vertical | 8 | UInt | count | mode == ROVER | ScalingMutator(×10) | |
| positionMAD | — | Struct | mode == ROVER | |||
| ├── oneSample | — | Struct | mode == ROVER | |||
| │ ├── latLon | 8 | UInt | mm | mode == ROVER | ||
| │ └── altitude | 8 | UInt | mm | mode == ROVER | ||
| ├── shortTermAgg | — | Struct | mode == ROVER | |||
| │ ├── latLon | 8 | UInt | mm | mode == ROVER | ||
| │ └── altitude | 8 | UInt | mm | mode == ROVER | ||
| └── longTermAgg | — | Struct | mode == ROVER | |||
| ├── latLon | 8 | UInt | mm | mode == ROVER | ||
| └── altitude | 8 | UInt | mm | mode == ROVER |
til90
Til90DataStrMsg
Til 90 Data Str Msg
AM Type: 76
Source Code
| Field | Bits | Type | Unit | Condition | Mutator | Error | Description |
|---|---|---|---|---|---|---|---|
| ls_header | — | Struct | Always | ||||
| ├── uplink_version | 4 | UInt | Always | ||||
| ├── node_id_high | 4 | Fragment | Always | ||||
| ├── product_code | 8 | UInt | Always | ||||
| ├── node_id | 16 | UInt | Always | ||||
| ├── sequence_number | 8 | UInt | Always | ||||
| └── am_type | 8 | UInt | Always | ||||
| readTimestamp | 32 | TimestampField | Always | TimestampMutator | |||
| version | 2 | UInt | Always | ||||
| channels | 3 | Bitmap | Always | ||||
| errorCode | 4 | Enum | Always | OK (0), NOT_RESPONDING (1), SELF_TEST_ERROR (2), INVALID_TEMP (3) | |||
| isHighPrecision | 1 | Bool | Always | ||||
| temperature | 12 | Int | Cel | Always | ScalingMutator(×10) | ReferenceEntryError(GENERAL_ERROR, Tilt90Error.INVALID_TEMP), ReferenceEntryError(NOT_RESPONDING, Tilt90Error.NOT_RESPONDING) | |
| → channels (bitmap) | — | Ref | Always | ||||
| Readings [bitmap] | — | Seq | Always | ||||
| ├── tilt | 21 | Int | deg | — | ScalingMutator(×10000) | ReferenceEntryError(SELF_TEST_ERROR, Tilt90Error.SELF_TEST_ERROR), ReferenceEntryError(NOT_RESPONDING, Tilt90Error.NOT_RESPONDING) | |
| ├── std | 20 | UInt | deg | isHighPrecision == 1 | MultiplierMutator(×256000) | ReferenceEntryError(SELF_TEST_ERROR, Tilt90Error.SELF_TEST_ERROR), ReferenceEntryError(NOT_RESPONDING, Tilt90Error.NOT_RESPONDING) | |
| └── std | 20 | UInt | deg | isHighPrecision == 0 | MultiplierMutator(×51200) | ReferenceEntryError(SELF_TEST_ERROR, Tilt90Error.SELF_TEST_ERROR), ReferenceEntryError(NOT_RESPONDING, Tilt90Error.NOT_RESPONDING) | |
| azimuth | 9 | UInt | version > 0 |
til90e
Til90EDataStrMsg
Til 90 E Data Str Msg
AM Type: 80
Source Code
| Field | Bits | Type | Unit | Condition | Mutator | Error | Description |
|---|---|---|---|---|---|---|---|
| ls_header | — | Struct | Always | ||||
| ├── uplink_version | 4 | UInt | Always | ||||
| ├── node_id_high | 4 | Fragment | Always | ||||
| ├── product_code | 8 | UInt | Always | ||||
| ├── node_id | 16 | UInt | Always | ||||
| ├── sequence_number | 8 | UInt | Always | ||||
| └── am_type | 8 | UInt | Always | ||||
| readTimestamp | 32 | TimestampField | Always | TimestampMutator | |||
| version | 2 | UInt | Always | ||||
| channels | 3 | Bitmap | Always | ||||
| errorCode | 4 | Enum | Always | OK (0), NOT_RESPONDING (1), SELF_TEST_ERROR (2), INVALID_TEMP (3) | |||
| isHighPrecision | 1 | Bool | Always | ||||
| temperature | 12 | Int | Cel | Always | ScalingMutator(×10) | ReferenceEntryError(GENERAL_ERROR, Tilt90Error.INVALID_TEMP), ReferenceEntryError(NOT_RESPONDING, Tilt90Error.NOT_RESPONDING) | |
| → channels (bitmap) | — | Ref | Always | ||||
| Readings [bitmap] | — | Seq | Always | ||||
| ├── tilt | 21 | Int | deg | — | ScalingMutator(×10000) | ReferenceEntryError(SELF_TEST_ERROR, Tilt90Error.SELF_TEST_ERROR), ReferenceEntryError(NOT_RESPONDING, Tilt90Error.NOT_RESPONDING) | |
| ├── std | 20 | UInt | deg | isHighPrecision == 1 | MultiplierMutator(×256000) | ReferenceEntryError(SELF_TEST_ERROR, Tilt90Error.SELF_TEST_ERROR), ReferenceEntryError(NOT_RESPONDING, Tilt90Error.NOT_RESPONDING) | |
| └── std | 20 | UInt | deg | isHighPrecision == 0 | MultiplierMutator(×51200) | ReferenceEntryError(SELF_TEST_ERROR, Tilt90Error.SELF_TEST_ERROR), ReferenceEntryError(NOT_RESPONDING, Tilt90Error.NOT_RESPONDING) | |
| azimuth | 9 | UInt | version > 0 | ||||
| alerts | — | Struct | Always | ||||
| ├── configured | 1 | Bool | Always | ||||
| ├── triggeredDataMessage | 1 | Enum | Always | MEASUREMENT (0), ALERT (1) | |||
| ├── active | 1 | Bool | Always | ||||
| ├── channels | 3 | Bitmap | active == 1 | ||||
| ├── eventActiveAlerts | 3 | UInt | active == 1 | ||||
| ├── → channels (bitmap) | — | Ref | active == 1 | ||||
| └── Readings [bitmap] | — | Seq | active == 1 | ||||
| ├── condition | 1 | Enum | — | LOWER_THAN (0), GREATER_THAN (1) | |||
| └── configuredThreshold | 15 | Int | deg | — | ScalingMutator(×100) |
til90eAlert
Til90EDataStrMsg
Til 90 E Data Str Msg
AM Type: 10
Source Code
| Field | Bits | Type | Condition | Mutator | Validator | Description |
|---|---|---|---|---|---|---|
| ls_header | — | Struct | Always | |||
| ├── uplink_version | 4 | UInt | Always | |||
| ├── node_id_high | 4 | Fragment | Always | |||
| ├── product_code | 8 | UInt | Always | |||
| ├── node_id | 16 | UInt | Always | |||
| ├── sequence_number | 8 | UInt | Always | |||
| └── am_type | 8 | UInt | Always | |||
| version | 2 | UInt | Always | |||
| alerts | — | Struct | Always | |||
| ├── status | — | Struct | Always | |||
| │ ├── x | 2 | Enum | Always | INACTIVE (0), ACTIVE_PREVIOUS (1), ACTIVE_NOW_LOW (2), ACTIVE_NOW_HIGH (3) | ||
| │ ├── y | 2 | Enum | Always | INACTIVE (0), ACTIVE_PREVIOUS (1), ACTIVE_NOW_LOW (2), ACTIVE_NOW_HIGH (3) | ||
| │ └── z | 2 | Enum | Always | INACTIVE (0), ACTIVE_PREVIOUS (1), ACTIVE_NOW_LOW (2), ACTIVE_NOW_HIGH (3) | ||
| ├── reserved | 6 | Reserved | Always | |||
| └── excess | — | Struct | Always | |||
| ├── x | 7 | UInt | (x == ACTIVE_NOW_LOW) or (x == ACTIVE_NOW_HIGH) | ExcessMutator | RangeValidator[0, 167] | |
| ├── y | 7 | UInt | (y == ACTIVE_NOW_LOW) or (y == ACTIVE_NOW_HIGH) | ExcessMutator | RangeValidator[0, 167] | |
| └── z | 7 | UInt | (z == ACTIVE_NOW_LOW) or (z == ACTIVE_NOW_HIGH) | ExcessMutator | RangeValidator[0, 167] |
vw
VwDataStrMsg
Vw Data Str Msg
AM Type: 88
Source Code
| Field | Bits | Type | Unit | Condition | Mutator | Error | Description |
|---|---|---|---|---|---|---|---|
| ls_header | — | Struct | Always | ||||
| ├── uplink_version | 4 | UInt | Always | ||||
| ├── node_id_high | 4 | Fragment | Always | ||||
| ├── product_code | 8 | UInt | Always | ||||
| ├── node_id | 16 | UInt | Always | ||||
| ├── sequence_number | 8 | UInt | Always | ||||
| └── am_type | 8 | UInt | Always | ||||
| readTimestamp | 32 | TimestampField | Always | TimestampMutator | |||
| version | 3 | UInt | Always | ||||
| pressure | 21 | UInt | hPa | Always | ScalingMutator(×1000) | ||
| temperature | 8 | Int | Cel | Always | |||
| readings (bitmap) | 8 | Bitmap | Always | ||||
| Readings [bitmap] | — | Seq | Always | ||||
| ├── frequency | 24 | UInt | Hz | — | ScalingMutator(×1000) | EntryError(NOT_DETECTED, 16777215) | |
| └── thermistor | 24 | UInt | Ohm | — | DividerMutator(÷240), ScalingMutator(×1000) | EntryError(NOT_DETECTED, 16777215) |
Input Messages
Output messages
Downlink messages sent from the gateway to the node.
Format
The input message format is a simple message type field followed by the payload of the message:
0 1 2 3 4 5 6 7 ... n bytes
+--+--+--+--+--+--+--+--+- ... -+--+
| | PAYLOAD |
+--+--+--+--+--+--+--+--+- ... -+--+
^
AM_TYPE
AM Types
| AM Type | Message |
|---|---|
| 23 | DigLuaFileCmdStrMsg |
| 151 | SetDigGmmInstructionsPort0CfgStrMsg |
| 167 | SetLoRaAdrAckCfgMsg |
| 168 | SetDigPort0CfgStructMsg |
| 169 | SetDigPort1CfgStructMsg |
| 170 | SetDigPort2CfgStructMsg |
| 171 | SetDigPcCfgStructMsg |
| 172 | SetCommPeriodAckCfgMsg |
| 173 | SetDigTDRCfgStructMsg |
| 174 | SetDigGmmInstructionsPort1CfgStrMsg |
| 175 | SetDigGmmInstructionsPort2CfgStrMsg |
dig
DigLuaFileCmdStrMsg
Dig Lua File Cmd Str Msg
AM Type: 23
Source Code
| Field | Bits | Type | Condition | Description |
|---|---|---|---|---|
| ls_header_down | — | Struct | Always | |
| └── am_type | 8 | UInt | Always | |
| version | 3 | UInt | Always | |
| opcode | 1 | Enum | Always | TRANS_REQ (0), DATA (1) |
| rfu | 4 | Reserved | Always | |
| payload | — | Switch | Always | |
| ├── type | 1 | Enum | opcode == TRANS_REQ | WRITE (0), READ (1) |
| ├── targetId | 3 | Enum | opcode == TRANS_REQ | SCRIPT_1 (0), CONFIG_1 (1), SCRIPT_2 (2), CONFIG_2 (3), SCRIPT_3 (4), CONFIG_3 (5) |
| └── data | None | Bytes | opcode == DATA | Raw YMODEM Packet. Contains the actual packet (SOH/STX + data + CRC) or control bytes (EOT, ACK, etc) being sent to the Node. |
SetDigGmmInstructionsPort0CfgStrMsg
Set Dig Gmm Instructions Port 0 Cfg Str Msg
AM Type: 151
Source Code
| Field | Bits | Type | Unit | Condition | Validator | Description |
|---|---|---|---|---|---|---|
| ls_header_down | — | Struct | Always | |||
| └── am_type | 8 | UInt | Always | |||
| configVersion | 8 | UInt | Always | ValueValidator(0) | ||
| rfu | 4 | Reserved | Always | |||
| configId | 12 | UInt | Always | RangeValidator[0, 68] | Supported configs can be seen in the generic_modbus_configs.json file |
|
| swapModbusWordSensorEndianness | 8 | UInt | Always | Word swap control for sensor Modbus values: 0 = no word swap; any non-zero value = perform word swap. | ||
| sensorReadingTimeout | 24 | UInt | ms | Always | RangeValidator[1, 1677721] | |
| globalNumberOfInstructions | 8 | UInt | Always | |||
| globalInstructionBuffer | 120 | Bytes | Always | See Annex G instruction format. | ||
| sensorNumberOfInstructions | 8 | UInt | Always | |||
| sensorInstructionsBuffer | 3200 | Bytes | Always | See Annex G instruction format. |
SetDigPort0CfgStructMsg
Set Dig Port 0 Cfg Struct Msg
AM Type: 168
Source Code
| Field | Bits | Type | Condition | Description |
|---|---|---|---|---|
| ls_header_down | — | Struct | Always | |
| └── am_type | 8 | UInt | Always | |
| version | 4 | UInt | Always | |
| runtimeMode | 8 | Enum | Always | MODBUS (0), LUA (1) |
| portEnabled | 1 | Bool | Always | |
| powerVoltage | 1 | Enum | Always | V_5 (0), V_12 (1) |
| powerAlwaysOn | 1 | Bool | Always | |
| powerThreshold | 16 | UInt | Always | |
| resetOnFailure | 1 | Bool | Always | |
| terminationResistor | 1 | Bool | Always | |
| usbPowerRailOff | 1 | Bool | Always | |
| sensorInitOnStartup | 1 | Bool | Always | |
| rfu | 1 | Reserved | Always | |
| runtimeModeMsgVersion | 4 | UInt | Always | |
| payload | — | Switch | Always | |
| ├── modbusBaudrate | 24 | UInt | runtimeMode == MODBUS | |
| ├── uartDatabits | 8 | UInt | runtimeMode == MODBUS | |
| ├── parity | 8 | Enum | runtimeMode == MODBUS | NONE (0), EVEN (1), ODD (2) |
| ├── stopBits | 8 | Enum | runtimeMode == MODBUS | HALF (0), ONE (1), ONE_AND_HALF (2), TWO (3) |
| ├── Sensor Addresses [ ] | — | Seq | runtimeMode == MODBUS | |
| │ └── | 8 | UInt | — | |
| ├── luaTimeOut | 16 | UInt | runtimeMode == LUA | |
| ├── luaRedundancyFrames | 2 | UInt | runtimeMode == LUA | |
| ├── maxDataSize | 14 | UInt | runtimeMode == LUA | |
| ├── maxRadioMsgSize | 8 | UInt | runtimeMode == LUA | |
| ├── integration | — | Struct | runtimeMode == LUA | |
| │ ├── id | 16 | UInt | runtimeMode == LUA | |
| │ └── version | — | Struct | runtimeMode == LUA | |
| │ ├── major | 5 | UInt | runtimeMode == LUA | |
| │ └── minor | 5 | UInt | runtimeMode == LUA | |
| └── rfu | 6 | Reserved | runtimeMode == LUA |
SetDigPort1CfgStructMsg
Set Dig Port 1 Cfg Struct Msg
AM Type: 169
Source Code
| Field | Bits | Type | Condition | Description |
|---|---|---|---|---|
| ls_header_down | — | Struct | Always | |
| └── am_type | 8 | UInt | Always | |
| version | 4 | UInt | Always | |
| runtimeMode | 8 | Enum | Always | MODBUS (0), LUA (1) |
| portEnabled | 1 | Bool | Always | |
| powerVoltage | 1 | Enum | Always | V_5 (0), V_12 (1) |
| powerAlwaysOn | 1 | Bool | Always | |
| powerThreshold | 16 | UInt | Always | |
| resetOnFailure | 1 | Bool | Always | |
| terminationResistor | 1 | Bool | Always | |
| usbPowerRailOff | 1 | Bool | Always | |
| sensorInitOnStartup | 1 | Bool | Always | |
| rfu | 1 | Reserved | Always | |
| runtimeModeMsgVersion | 4 | UInt | Always | |
| payload | — | Switch | Always | |
| ├── modbusBaudrate | 24 | UInt | runtimeMode == MODBUS | |
| ├── uartDatabits | 8 | UInt | runtimeMode == MODBUS | |
| ├── parity | 8 | Enum | runtimeMode == MODBUS | NONE (0), EVEN (1), ODD (2) |
| ├── stopBits | 8 | Enum | runtimeMode == MODBUS | HALF (0), ONE (1), ONE_AND_HALF (2), TWO (3) |
| ├── Sensor Addresses [ ] | — | Seq | runtimeMode == MODBUS | |
| │ └── | 8 | UInt | — | |
| ├── luaTimeOut | 16 | UInt | runtimeMode == LUA | |
| ├── luaRedundancyFrames | 2 | UInt | runtimeMode == LUA | |
| ├── maxDataSize | 14 | UInt | runtimeMode == LUA | |
| ├── maxRadioMsgSize | 8 | UInt | runtimeMode == LUA | |
| ├── integration | — | Struct | runtimeMode == LUA | |
| │ ├── id | 16 | UInt | runtimeMode == LUA | |
| │ └── version | — | Struct | runtimeMode == LUA | |
| │ ├── major | 5 | UInt | runtimeMode == LUA | |
| │ └── minor | 5 | UInt | runtimeMode == LUA | |
| └── rfu | 6 | Reserved | runtimeMode == LUA |
SetDigPort2CfgStructMsg
Set Dig Port 2 Cfg Struct Msg
AM Type: 170
Source Code
| Field | Bits | Type | Condition | Description |
|---|---|---|---|---|
| ls_header_down | — | Struct | Always | |
| └── am_type | 8 | UInt | Always | |
| version | 4 | UInt | Always | |
| runtimeMode | 8 | Enum | Always | MODBUS (0), LUA (1) |
| portEnabled | 1 | Bool | Always | |
| powerVoltage | 1 | Enum | Always | V_5 (0), V_12 (1) |
| powerAlwaysOn | 1 | Bool | Always | |
| powerThreshold | 16 | UInt | Always | |
| resetOnFailure | 1 | Bool | Always | |
| terminationResistor | 1 | Bool | Always | |
| usbPowerRailOff | 1 | Bool | Always | |
| sensorInitOnStartup | 1 | Bool | Always | |
| rfu | 1 | Reserved | Always | |
| runtimeModeMsgVersion | 4 | UInt | Always | |
| payload | — | Switch | Always | |
| ├── modbusBaudrate | 24 | UInt | runtimeMode == MODBUS | |
| ├── uartDatabits | 8 | UInt | runtimeMode == MODBUS | |
| ├── parity | 8 | Enum | runtimeMode == MODBUS | NONE (0), EVEN (1), ODD (2) |
| ├── stopBits | 8 | Enum | runtimeMode == MODBUS | HALF (0), ONE (1), ONE_AND_HALF (2), TWO (3) |
| ├── Sensor Addresses [ ] | — | Seq | runtimeMode == MODBUS | |
| │ └── | 8 | UInt | — | |
| ├── luaTimeOut | 16 | UInt | runtimeMode == LUA | |
| ├── luaRedundancyFrames | 2 | UInt | runtimeMode == LUA | |
| ├── maxDataSize | 14 | UInt | runtimeMode == LUA | |
| ├── maxRadioMsgSize | 8 | UInt | runtimeMode == LUA | |
| ├── integration | — | Struct | runtimeMode == LUA | |
| │ ├── id | 16 | UInt | runtimeMode == LUA | |
| │ └── version | — | Struct | runtimeMode == LUA | |
| │ ├── major | 5 | UInt | runtimeMode == LUA | |
| │ └── minor | 5 | UInt | runtimeMode == LUA | |
| └── rfu | 6 | Reserved | runtimeMode == LUA |
SetDigPcCfgStructMsg
Set Dig Pc Cfg Struct Msg
AM Type: 171
Source Code
| Field | Bits | Type | Unit | Condition | Description |
|---|---|---|---|---|---|
| ls_header_down | — | Struct | Always | ||
| └── am_type | 8 | UInt | Always | ||
| version | 4 | UInt | Always | ||
| pcEnabled | 1 | Bool | Always | ||
| pcSamplingPeriod | 17 | UInt | s | Always | |
| tempPressRatio | 15 | UInt | Always | ||
| rfu | 3 | Reserved | Always |
SetDigTDRCfgStructMsg
Set Dig TDR Cfg Struct Msg
AM Type: 173
Source Code
| Field | Bits | Type | Unit | Condition | Mutator | Validator | Description |
|---|---|---|---|---|---|---|---|
| ls_header_down | — | Struct | Always | ||||
| └── am_type | 8 | UInt | Always | ||||
| version | 4 | UInt | Always | ||||
| isEnabled | 1 | Bool | Always | ||||
| mode | 2 | Enum | Always | SHORT (0), LONG (1), AUTO (2) | |||
| longPulseLength | 10 | UInt | ns | Always | |||
| aggregationCycles | 3 | UInt | Always | LogarithmicMutator | PowerOfTwoValidator | ||
| cableVelocityFactor | 10 | UInt | % | Always | DividerMutator(÷100), MultiplierMutator(×1023) | ||
| internalTimeOffset | 15 | UInt | ps | Always | |||
| externalDistanceOffset | 13 | UInt | cm | Always | |||
| rfu | 6 | Reserved | Always |
SetDigGmmInstructionsPort1CfgStrMsg
Set Dig Gmm Instructions Port 1 Cfg Str Msg
AM Type: 174
Source Code
| Field | Bits | Type | Unit | Condition | Validator | Description |
|---|---|---|---|---|---|---|
| ls_header_down | — | Struct | Always | |||
| └── am_type | 8 | UInt | Always | |||
| configVersion | 8 | UInt | Always | ValueValidator(0) | ||
| rfu | 4 | Reserved | Always | |||
| configId | 12 | UInt | Always | RangeValidator[0, 68] | Supported configs can be seen in the generic_modbus_configs.json file |
|
| swapModbusWordSensorEndianness | 8 | UInt | Always | Word swap control for sensor Modbus values: 0 = no word swap; any non-zero value = perform word swap. | ||
| sensorReadingTimeout | 24 | UInt | ms | Always | RangeValidator[1, 1677721] | |
| globalNumberOfInstructions | 8 | UInt | Always | |||
| globalInstructionBuffer | 120 | Bytes | Always | See Annex G instruction format. | ||
| sensorNumberOfInstructions | 8 | UInt | Always | |||
| sensorInstructionsBuffer | 3200 | Bytes | Always | See Annex G instruction format. |
SetDigGmmInstructionsPort2CfgStrMsg
Set Dig Gmm Instructions Port 2 Cfg Str Msg
AM Type: 175
Source Code
| Field | Bits | Type | Unit | Condition | Validator | Description |
|---|---|---|---|---|---|---|
| ls_header_down | — | Struct | Always | |||
| └── am_type | 8 | UInt | Always | |||
| configVersion | 8 | UInt | Always | ValueValidator(0) | ||
| rfu | 4 | Reserved | Always | |||
| configId | 12 | UInt | Always | RangeValidator[0, 68] | Supported configs can be seen in the generic_modbus_configs.json file |
|
| swapModbusWordSensorEndianness | 8 | UInt | Always | Word swap control for sensor Modbus values: 0 = no word swap; any non-zero value = perform word swap. | ||
| sensorReadingTimeout | 24 | UInt | ms | Always | RangeValidator[1, 1677721] | |
| globalNumberOfInstructions | 8 | UInt | Always | |||
| globalInstructionBuffer | 120 | Bytes | Always | See Annex G instruction format. | ||
| sensorNumberOfInstructions | 8 | UInt | Always | |||
| sensorInstructionsBuffer | 3200 | Bytes | Always | See Annex G instruction format. |
common
SetLoRaAdrAckCfgMsg
Set Lo Ra Adr Ack Cfg Msg
AM Type: 167
Source Code
| Field | Bits | Type | Condition | Mutator | Validator | Description |
|---|---|---|---|---|---|---|
| ls_header_down | — | Struct | Always | |||
| └── am_type | 8 | UInt | Always | |||
| version | 2 | UInt | Always | ValueValidator(0) | ||
| cfg | — | Struct | Always | |||
| ├── adrAckLimit | 15 | UInt | Always | OffsetMutator(-1) | RangeValidator[1, 32768] | |
| └── adrAckDelay | 15 | UInt | Always | OffsetMutator(-1) | RangeValidator[1, 32768] |
SetCommPeriodAckCfgMsg
Set Comm Period Ack Cfg Msg
AM Type: 172
Source Code
| Field | Bits | Type | Condition | Validator | Description |
|---|---|---|---|---|---|
| ls_header_down | — | Struct | Always | ||
| └── am_type | 8 | UInt | Always | ||
| version | 2 | UInt | Always | ValueValidator(0) | |
| reserved | 6 | Reserved | Always | ||
| cfg | — | Struct | Always | ||
| └── commPeriod | 24 | UInt | Always | RangeValidator[0, 86400] |
Tags
Browse all messages by tag.
tags.md:37-59/name
Technical Annexes
Note
Things to keep in mind:
- Commands can be concatenated, First In, First Out. The message queue is not that big, and some of them might be lost without notice.
- Message queue is reset on reboot.
- Mote can send SampleData and Health messages without being asked for when connecting to mote, before or while any cmd is sent (only if it is time do so). Don't be confused: you can receive not-asked data anytime.
- Even if you disconnect from the mote, it might be working on processing and sending data (eg.: sending RecoverData reports might take up to 8 minutes, asking for 50 nonexistent GSI sensors takes up to 3 min). Data might have been asked for in a previous session. The only TCP is the Seq number of the mote output messages.
Useful User Commands
Some useful commands to get the node working
| User Command | what to send | Expected Response | Comments |
|---|---|---|---|
| Get health info | LSAMTYPE_IN_GET_HEALTH | Rx:LSAMTYPE_OUT_HEALTH_DATA | Request the health information to the node. This may be used to ensure that the node is connected, and prevent the serial timeout. |
| Configure the reporting period | LSAMTYPE_IN_SP_CFG | Rx:Rx:LSAMTYPE_OUT_RESPONSE (OK) | Configure the node's reporting period, how often the node will transmit a data message. |
| Set current time | LSAMTYPE_IN_SET_TIME | Rx:Rx:LSAMTYPE_OUT_RESPONSE (OK) | Set the current date and time. |
| Set PR code | LSAMTYPE_IN_SET_PRCODE_SN_V2 | Rx:Rx:LSAMTYPE_OUT_RESPONSE (OK) | If the node has the wrong PR code, some configs will not be accepted. |
| Set node ID | LSAMTYPE_IN_SET_NODE_ID_V2 | Rx:Rx:LSAMTYPE_OUT_RESPONSE (OK) | Node ID to identify the messages. |
| Factory reset | LSAMTYPE_IN_FACTORY_RESET | Rx:Rx:LSAMTYPE_OUT_RESPONSE (OK) | Deletes all the configs leaving the node in a predictable state. |
| Get sample now | LSAMTYPE_IN_GET_SAMPLE_NOW | Rx: product specific data message | Request a new data message from the node. Note that most products will not be configured to send data by default. Thus, a product specific config should be set before. |
Note: To enable the radio configuration is best to just use the mobile App. Since it requires multiple different configs.
LoRaWAN/LoRaMAC interface
All messages going through the lora interface follow either the LoRaMAC or LoRaWAN protocol. These protocols define a set of ports (1 to 223) for data frames that can be used by the user to differentiate between different types of data frames. Event detection alert messages use a specific port, and not the standard, as specified in the following table:
| FPort (*) | AM_TYPE | Message |
|---|---|---|
| 2 | 0x0A |
LSAMTYPE_OUT_T360A_ALERT |
| 1 (Standard) | All others | LSAMTYPE_OUT_* (AM_TYPE ≠ 0x0A) |
(*) More detailed information about LoRaWAN ports can be found here (section 4.3.2 Port field).
Annex A: Field Types
| Type | Description |
|---|---|
| UInt | Unsigned integer |
| Int | Signed integer |
| Bool | Boolean (1 bit) |
| Enum | Enumerated value — possible values listed in Description |
| Struct | Container grouping sub-fields |
| Switch | Conditional container — only one branch is active |
| Seq | Variable-length sequence of repeated elements |
| Bytes | Raw byte payload |
| TimestampField | Unix timestamp |
| Fragment | Part of a larger field reassembled from fragments |
| Reserved | Reserved for future use |
| Bitmap | Bit-level flags |
Annex B: DIG Gen Payloads
DIG Generic messages (DigGenDataStrMsg) carry integration-specific payloads
identified by a combination of integration_id and message_version. Each
payload type is documented as a separate message page.
Annex C: Error Messages
When some parameter is wrong (out of range, invalid size) or something unexpected occurs, the mote sends the message LSAMTYPE_OUT_RESPONSE, with additional information. Be aware that this message is also sent to indicate Ok responses.
Annex D: Serial interface
The messages sent through the serial interface are packetized using the BSC protocol:
- A DLE STX (\x10\x02) sequence marks the beginning of the message.
- A DLE ETX (\x10\x03) sequence marks the end of the message.
- Any DLE (\x10) in the data is doubled.
Annex E: CRC calculation
All the CRCs in the memory are of the type CCITT of 16 bits as given by the following code:
#define CRC16CCITT_INIT 0x0000
#define CRC16CCITT_POLY 0x1021
uint16_t crc16_ccitt( const void *data, uint16_t number_of_bytes_in_data )
{
uint8_t i;
uint16_t crc = CRC16CCITT_INIT;
while( number_of_bytes_in_data-- ) {
crc ^= *(uint8_t *)data++ << 8;
for( i = 0; i < 8; ++i ) {
if( crc & 0x8000 )
crc = (crc << 1) ^ CRC16CCITT_POLY;
else
crc = crc << 1;
}
}
return crc;
}
Annex F: Configuration of LoRa radio per country
See LoRa - Radio Configs spreadsheet.
Annex G: Generic Modbus Instructions Cfg Message
The Generic Modbus Instruction Message configures the instruction program used by the DIG Generic Modbus integration.
It exists in three channel variants (port 0/1/2), but all of them share the same payload format:
- LSAMTYPE_IN_DIG_GMM_INSTRUCTIONS_PORT0_CFG: 151
- LSAMTYPE_IN_DIG_GMM_INSTRUCTIONS_PORT1_CFG: 174
- LSAMTYPE_IN_DIG_GMM_INSTRUCTIONS_PORT2_CFG: 175
What Is Different In This Message
Unlike fixed-range messages, this one is data-driven by generic_modbus_configs.json:
- configId accepted range is not hardcoded.
- Min and max configId are loaded from JSON cfg_id values at runtime.
- Adding/removing JSON entries automatically updates accepted configId bounds without changing message code.
Important: the message payload still carries raw instruction bytes (globalInstructionBuffer and sensorInstructionsBuffer). The parser validates the schema and ranges; it does not auto-generate instruction bytes from configId.
Instruction Base Format
Each instruction is encoded as:
| Code | Arg 1 | Arg 2 | Arg 3 | Arg 4 |
|---|---|---|---|---|
| 1B | Optional (up to 2B) | Optional (up to 2B) | Optional (up to 2B) | Optional (up to 2B) |
Rules:
- Minimum valid instruction is the single-byte opcode.
- Arguments are opcode-dependent.
- Last instruction in each buffer must be followed by zero padding up to full buffer size.
Supported Instruction Opcodes
| Opcode | Mnemonic | Description | Arg 1 | Arg 2 | Arg 3 | Arg 4 |
|---|---|---|---|---|---|---|
| 0x00 | Push_16 | Push typed 16-bit value to stack | Type (2 bits: 00 float32, 01 uint32, 10 int32) | Value (16 bits) | - | - |
| 0x01 | Push_32 | Push typed 32-bit value to stack | Type (2 bits: 00 float32, 01 uint32, 10 int32) | Value High (16 bits) | Value Low (16 bits) | - |
| 0x02 | Pop | Pop top stack element | - | - | - | - |
| 0x03 | Read Modbus | Read 1 or 2 Modbus registers and push typed result | Type of value (2 bits) 00:float32_t, 01:uint32_t, 10:int32_t | Modbus reg type (1 bit: 0 holding, 1 input) | Reg count (1 bit: 0->1, 1->2) | Addr (16 bits) |
| 0x04 | Write Multiple Modbus | Write top stack value to Modbus address | Reg count (1 bit: 0->1, 1->2) | Addr (16 bits) | - | - |
| 0x05 | Jump | Unconditional branch | Instruction idx (8 bits) | - | - | - |
| 0x06 | Branch eq | Branch when N-1 == N | Call (3 bits) | Call Param (8 bits) | - | - |
| 0x07 | Branch nq | Branch when N-1 != N | Call (3 bits) | Call Param (8 bits) | - | - |
| 0x08 | Branch gt | Branch when N-1 > N | Call (3 bits) | Call Param (8 bits) | - | - |
| 0x09 | Branch ge | Branch when N-1 >= N | Call (3 bits) | Call Param (8 bits) | - | - |
| 0x0A | Branch lt | Branch when N-1 < N | Call (3 bits) | Call Param (8 bits) | - | - |
| 0x0B | Branch le | Branch when N-1 <= N | Call (3 bits) | Call Param (8 bits) | - | - |
| 0x0C | ADD | Add top two stack elements | - | - | - | - |
| 0x0D | SUB | Subtract top element from previous (N-1 - N) | - | - | - | - |
| 0x0E | MULT | Multiply top two stack elements | - | - | - | - |
| 0x0F | DIV | Divide previous by top (N-1 / N) | - | - | - | - |
| 0x10 | OR | Bitwise OR of top two stack elements (no float) | - | - | - | - |
| 0x11 | AND | Bitwise AND of top two stack elements (no float) | - | - | - | - |
| 0x12 | XOR | Bitwise XOR of top two stack elements (no float) | - | - | - | - |
| 0x13 | Shift R | Right shift top element | N bits (5 bits) | - | - | - |
| 0x14 | Shift L | Left shift top element | N bits (5 bits) | - | - | - |
| 0x15 | Cast | Change top element type | Type (2 bits: 00 float->int, 01 float->uint) | - | - | - |
| 0x16 | Sleep ms | Sleep top element milliseconds | - | - | - | - |
| 0x17 | Push to data Out | Append N bits from top element to output data | Number of bits (6 bits) | - | - | - |
| 0x18 | Check voltage supply | Compare top uint32 stack value with configured supply threshold | - | - | - | - |
| 0x19 | Duplicate | Duplicate top stack element if stack is not full | - | - | - | - |
| 0x1A | Bury | Move top element to target stack position | Stack position (4 bits, top not allowed) | - | - | - |
| 0x1B | Dig | Move target stack position element to top | Stack position (4 bits, top not allowed) | - | - | - |
| 0x1C | Branch float NaN | Branch if top float is NaN | Call (3 bits) | Call Param (8 bits) | Push-out error type (2 bits, only when call is error) | - |
| 0x1D | Branch float Inf | Branch if top float is Inf | Call (3 bits) | Call Param (8 bits) | Push-out error type (2 bits, only when call is error) | - |
| 0x1E | Branch float NotFinite | Branch if top float is not finite | Call (3 bits) | Call Param (8 bits) | Push-out error type (2 bits, only when call is error) | - |
| 0x1F | Branch float NotNormal | Branch if top float is not normal | Call (3 bits) | Call Param (8 bits) | Push-out error type (2 bits, only when call is error) | - |
| 0x20 | Write Single Modbus | Write top stack value to Modbus address (16-bit value only) | Addr (16 bits) | - | - | - |
Branch Call Table
Branch instructions use a 3-bit Call selector plus an 8-bit call parameter.
| Call | Meaning | Param |
|---|---|---|
| 0 | ERROR CALL | Error action code |
| 1 | GOTO CALL | Instruction index |
| 2..7 | Reserved | Not accepted (config error) |
ERROR CALL parameter values:
- 0: Not allowed.
- 1: Sensor did not respond; stop current sensor execution; set sensor error bit.
- 2: Measurement out of range; skip until next push data out; clamp value to max according to output signedness/bit-width.
- 3: Voltage error; stop all sensor execution and send error message.
- 0x04..0xFF: Not used yet (config error).
GOTO CALL parameter:
- Instruction index starts at 0.
- Valid range is 0..SNI.
- If index >= SNI, configuration is invalid.