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