This commit is contained in:
2026-02-27 16:26:25 +01:00
parent a8f49f629e
commit b23ad9a1fd
3 changed files with 17 additions and 10 deletions

View File

@@ -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

View File

@@ -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:

View File

@@ -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"`