From b23ad9a1fd672dc4dd113915b2b930edc08427bd Mon Sep 17 00:00:00 2001 From: maze Date: Fri, 27 Feb 2026 16:26:25 +0100 Subject: [PATCH] Use int --- protocol/meshcore/node_companion.go | 2 +- protocol/meshcore/node_repeater.go | 15 +++++++++------ protocol/meshcore/packet.go | 10 +++++++--- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/protocol/meshcore/node_companion.go b/protocol/meshcore/node_companion.go index 3d16e50..e6ff69f 100644 --- a/protocol/meshcore/node_companion.go +++ b/protocol/meshcore/node_companion.go @@ -322,7 +322,7 @@ func (drv *companionDriver) handleRXData(b []byte) { var ( now = time.Now().UTC() snr = float64(b[0]) / 4 - rssi = int8(b[1]) + rssi = int(b[1]) ) // Decode raw diff --git a/protocol/meshcore/node_repeater.go b/protocol/meshcore/node_repeater.go index 164f1b1..02430e4 100644 --- a/protocol/meshcore/node_repeater.go +++ b/protocol/meshcore/node_repeater.go @@ -267,19 +267,22 @@ func (drv *repeaterDriver) handleRXData(line string) { return // nothing to do! } + /* companion/repeater time isn't reliable, as they often don't have an RTC: when, err := time.Parse("15:04:05 - 02/3/2006", strings.TrimSpace(line[:21])) if err != nil { Logger.Warnf("meshcore: corrupt raw packet: %v", err) } + */ var ( + when = time.Now() snr float64 - rssi int8 + rssi int data []byte ) if drv.hasSNR { snr = float64(b[0]) / 4 - rssi = int8(b[1]) + rssi = int(b[1]) data = b[2:] if drv.rawPackets != nil { select { @@ -325,9 +328,9 @@ func (drv *repeaterDriver) handleRX(line string) { for _, part := range strings.Split(line, " ") { switch { case strings.HasPrefix(part, "SNR="): - snr, _ = strconv.Atoi(part[3:]) + snr, _ = strconv.Atoi(part[4:]) case strings.HasPrefix(part, "RSSI="): - rssi, _ = strconv.Atoi(part[4:]) + rssi, _ = strconv.Atoi(part[5:]) } } @@ -337,7 +340,7 @@ func (drv *repeaterDriver) handleRX(line string) { Time: drv.lastFrameAt, Protocol: protocol.MeshCore, SNR: float64(snr), - RSSI: int8(rssi), + RSSI: rssi, Raw: drv.lastFrame, }: default: @@ -350,7 +353,7 @@ func (drv *repeaterDriver) handleRX(line string) { packet := new(Packet) if err := packet.UnmarshalBytes(drv.lastFrame); err == nil { packet.SNR = float64(snr) - packet.RSSI = int8(rssi) + packet.RSSI = rssi select { case drv.packets <- packet: default: diff --git a/protocol/meshcore/packet.go b/protocol/meshcore/packet.go index cc38d54..d767446 100644 --- a/protocol/meshcore/packet.go +++ b/protocol/meshcore/packet.go @@ -21,11 +21,14 @@ type Packet struct { SNR float64 `json:"snr"` // RSSI is the received signal strength indicator (in dBm). - RSSI int8 `json:"rssi"` + RSSI int `json:"rssi"` // Raw bytes (optional). Raw []byte `json:"raw,omitempty"` + // Version for this packet. + Version int `json:"version"` + // RouteType is the type of route for this packet. RouteType RouteType `json:"route_type"` @@ -111,7 +114,7 @@ func (packet *Packet) MarshalBytes() []byte { data [1 + 4 + 1 + maxPathSize + maxPayloadSize]byte offset int ) - data[offset] = byte(packet.RouteType&0x03) | byte((packet.PayloadType&0x0f)<<2) + data[offset] = byte(packet.RouteType&0x03) | byte((packet.PayloadType&0x0f)<<2) | byte((packet.Version&0x03)<<6) offset += 1 if packet.RouteType.HasTransportCodes() { @@ -138,6 +141,7 @@ func (packet *Packet) UnmarshalBytes(data []byte) error { packet.RouteType = RouteType(data[0] & 0x03) packet.PayloadType = PayloadType((data[0] >> 2) & 0x0f) + packet.Version = int((data[0] >> 6) & 0x03) offset := 1 if packet.RouteType.HasTransportCodes() { @@ -187,7 +191,7 @@ func (packet *Packet) Hash() []byte { func (packet *Packet) MarshalJSON() ([]byte, error) { return json.Marshal(struct { SNR float64 `json:"snr"` - RSSI int8 `json:"rssi"` + RSSI int `json:"rssi"` RouteType RouteType `json:"route_type"` PayloadType PayloadType `json:"payload_type"` TransportCodes []uint16 `json:"transport_codes,omitempty"`