package meshtastic import ( "encoding/binary" "errors" ) const ( minPacketSize = 4 + 4 + 4 + 1 + 1 + 1 + 1 maxPayloadSize = 237 ) var ( // ErrInvalidPacket signals the source buffer does not contain a valid packet. ErrInvalidPacket = errors.New("meshtastic: invalid packet") ) type Packet struct { Destination NodeID Source NodeID ID uint32 Flags uint8 ChannelHash uint8 NextHop uint8 RelayNode uint8 PayloadLength int Payload [maxPayloadSize]byte } func (packet *Packet) Decode(data []byte) error { if len(data) < minPacketSize { return ErrInvalidPacket } packet.Destination = parseNodeID(data[0:]) packet.Source = parseNodeID(data[4:]) packet.ID = binary.LittleEndian.Uint32(data[8:]) packet.Flags = data[12] packet.ChannelHash = data[13] packet.NextHop = data[14] packet.RelayNode = data[15] packet.PayloadLength = len(data[16:]) copy(packet.Payload[:], data[16:]) return nil } func (packet *Packet) HopLimit() int { return } func parseNodeID(data []byte) NodeID { return NodeID(binary.LittleEndian.Uint32(data)) }