protocol/meshcore: refactor decoding logic
This commit is contained in:
@@ -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")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user