Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions src/ubx_message.toit
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,9 @@ class Message:
CFG: "CFG", UPD: "UPD", MON: "MON", AID: "AID", TIM: "TIM", ESF: "ESF", \
MGA: "MGA", LOG: "LOG", SEC: "SEC", HNR: "HNR"}

static INVALID_UBX_HEADER_ ::= "INVALID UBX HEADER"
static INVALID_UBX_SIZE_ ::= "INVALID UBX SIZE"
static INVALID_UBX_CHECKSUM_ ::= "INVALID UBX CHECKSUM"
static INVALID_UBX_MESSAGE_ ::= "INVALID UBX MESSAGE"
static RESERVED_ ::= 0

Expand Down Expand Up @@ -105,15 +108,15 @@ class Message:
sub-class.
*/
constructor.from_reader reader/BufferedReader:
if (reader.byte 0) != 0xb5 or (reader.byte 1) != 0x62: throw INVALID_UBX_MESSAGE_
if (reader.byte 0) != 0xb5 or (reader.byte 1) != 0x62: throw INVALID_UBX_HEADER_

// Verify the length and get full the packet.
length ::= (reader.byte 4) | (((reader.byte 5) & 0xff) << 8)
if not 0 <= length <= 512: throw INVALID_UBX_MESSAGE_
if not 0 <= length <= 512: throw INVALID_UBX_SIZE_
frame ::= reader.bytes length + 8

// Verify the checksum.
if not is_valid_frame_ frame: throw INVALID_UBX_MESSAGE_
if not is_valid_frame_ frame: throw INVALID_UBX_CHECKSUM_
Comment on lines +111 to +119
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If this doesn't help, we are going to need more information to figure out what bytes we see. Do we want to add this already?


msg_class ::= frame[2]
msg_id ::= frame[3]
Expand All @@ -123,7 +126,7 @@ class Message:

static is_valid_frame_ frame/ByteArray -> bool:
// Check the sync bytes.
if frame[0] != 0xb5 or frame[1] != 0x62: throw INVALID_UBX_MESSAGE_
if frame[0] != 0xb5 or frame[1] != 0x62: return false
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should probably behave like Message.from_reader, so Message.from_byte act the same.


// Check the payload length.
length ::= LITTLE_ENDIAN.uint16 frame 4
Expand Down