protocol/meshcore: refactor decoding logic
This commit is contained in:
@@ -279,36 +279,47 @@ 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])
|
|
||||||
select {
|
|
||||||
case drv.packets <- packet:
|
|
||||||
default:
|
|
||||||
log.Printf("meshcore: packet channel full, dropping packet")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
now = time.Now().UTC()
|
||||||
|
snr = float64(b[0]) / 4
|
||||||
|
rssi = int8(b[1])
|
||||||
|
)
|
||||||
|
|
||||||
|
// Decode raw
|
||||||
if drv.rawPackets != nil {
|
if drv.rawPackets != nil {
|
||||||
select {
|
select {
|
||||||
case drv.rawPackets <- &protocol.Packet{
|
case drv.rawPackets <- &protocol.Packet{
|
||||||
Time: now,
|
Time: now,
|
||||||
Protocol: "meshcore",
|
Protocol: protocol.MeshCore,
|
||||||
SNR: packet.SNR,
|
SNR: snr,
|
||||||
RSSI: packet.RSSI,
|
RSSI: rssi,
|
||||||
Raw: packet.Raw,
|
Raw: b[2:],
|
||||||
}:
|
}:
|
||||||
default:
|
default:
|
||||||
log.Printf("meshcore: raw packet channel full, dropping packet")
|
log.Printf("meshcore: raw packet channel full, dropping packet")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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.packets <- packet:
|
||||||
|
default:
|
||||||
|
log.Printf("meshcore: packet channel full, dropping packet")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user