From f3b6a6ef1b1a93b96e3c4a0c27ae1bdd5fbd9aca Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Sat, 30 May 2026 07:22:54 -0500 Subject: [PATCH] add some extended fields for poll --- poll.go | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/poll.go b/poll.go index 4543992..71f8c13 100644 --- a/poll.go +++ b/poll.go @@ -14,6 +14,10 @@ type ArtPoll struct { Flags uint8 DiagPriority uint8 // TODO(jwetzell): support extended poll fields + TargetPortAddressTop uint16 + TargetPortAddressBottom uint16 + EstaMan uint16 + Oem uint16 } func (ap *ArtPoll) GetOpCode() uint16 { @@ -47,16 +51,33 @@ func (ap *ArtPoll) UnmarshalBinary(data []byte) error { offset := 12 ap.Flags = data[offset] ap.DiagPriority = data[offset+1] + + if len(data) >= 16 { + ap.TargetPortAddressTop = binary.BigEndian.Uint16(data[14:16]) + } + if len(data) >= 18 { + ap.TargetPortAddressBottom = binary.BigEndian.Uint16(data[16:18]) + } + if len(data) >= 20 { + ap.EstaMan = binary.BigEndian.Uint16(data[18:20]) + } + if len(data) >= 22 { + ap.Oem = binary.BigEndian.Uint16(data[20:22]) + } return nil } func (ap *ArtPoll) MarshalBinary() ([]byte, error) { - data := make([]byte, 8+6) + data := make([]byte, 8+14) copy(data[0:8], ap.ID[:]) binary.LittleEndian.PutUint16(data[8:10], ap.OpCode) data[10] = ap.ProtVerHi data[11] = ap.ProtVerLo data[12] = ap.Flags data[13] = ap.DiagPriority + binary.BigEndian.PutUint16(data[14:16], ap.TargetPortAddressTop) + binary.BigEndian.PutUint16(data[16:18], ap.TargetPortAddressBottom) + binary.BigEndian.PutUint16(data[18:20], ap.EstaMan) + binary.BigEndian.PutUint16(data[20:22], ap.Oem) return data, nil }