protocol/meshcore: refactor decoding logic

This commit is contained in:
2026-02-18 13:25:29 +01:00
parent a2f5d00c6d
commit f9881d2346

View File

@@ -279,34 +279,45 @@ func (drv *companionDriver) handlePushFrame(b []byte) {
} }
func (drv *companionDriver) handleRXData(b []byte) { func (drv *companionDriver) handleRXData(b []byte) {
if len(b) < 2+minPacketSize { if drv.packets == nil && drv.rawPackets == nil {
return
}
if drv.packets == nil {
return // not listening for packets, discard return // not listening for packets, discard
} }
now := time.Now().UTC() if len(b) < 2+minPacketSize {
packet := new(Packet) return // too short
if err := packet.UnmarshalBytes(b[2:]); err == nil { }
packet.SNR = float64(b[0]) / 4
packet.RSSI = int8(b[1]) var (
now = time.Now().UTC()
snr = float64(b[0]) / 4
rssi = int8(b[1])
)
// Decode raw
if drv.rawPackets != nil {
select { select {
case drv.packets <- packet: case drv.rawPackets <- &protocol.Packet{
Time: now,
Protocol: protocol.MeshCore,
SNR: snr,
RSSI: rssi,
Raw: b[2:],
}:
default: default:
log.Printf("meshcore: packet channel full, dropping packet") log.Printf("meshcore: raw packet channel full, dropping packet")
} }
if drv.rawPackets != nil { }
// Decode payload
if drv.packets != nil {
packet := new(Packet)
if err := packet.UnmarshalBytes(b[2:]); err == nil {
packet.SNR = snr
packet.RSSI = rssi
select { select {
case drv.rawPackets <- &protocol.Packet{ case drv.packets <- packet:
Time: now,
Protocol: "meshcore",
SNR: packet.SNR,
RSSI: packet.RSSI,
Raw: packet.Raw,
}:
default: default:
log.Printf("meshcore: raw packet channel full, dropping packet") log.Printf("meshcore: packet channel full, dropping packet")
} }
} }
} }