37 lines
959 B
Python
37 lines
959 B
Python
|
|
import struct
|
||
|
|
|
||
|
|
class AFrame:
|
||
|
|
def __init__(self, data: bytes):
|
||
|
|
self.valid = False
|
||
|
|
self.data_id = 0
|
||
|
|
self.data_len = 0
|
||
|
|
self.payload = b""
|
||
|
|
|
||
|
|
# A帧最小长度: 4+4+4+4+4+4 + 8 + 2 = 34
|
||
|
|
if len(data) < 34:
|
||
|
|
return
|
||
|
|
|
||
|
|
try:
|
||
|
|
# 大端解包
|
||
|
|
magic, dlen, dir_, data_id, ptype, sat = struct.unpack('>IIIIII', data[:24])
|
||
|
|
payload = data[24:-2]
|
||
|
|
tail = data[-2:]
|
||
|
|
|
||
|
|
if magic != 0xEB90EB90 or tail != 0x4C3A.to_bytes(2, 'big'):
|
||
|
|
return
|
||
|
|
|
||
|
|
self.valid = True
|
||
|
|
self.data_id = data_id
|
||
|
|
self.data_len = dlen
|
||
|
|
self.payload = payload
|
||
|
|
except:
|
||
|
|
pass
|
||
|
|
|
||
|
|
def get_doubles(self):
|
||
|
|
doubles = []
|
||
|
|
buf = self.payload
|
||
|
|
while len(buf) >= 8:
|
||
|
|
d = struct.unpack('>d', buf[:8])[0]
|
||
|
|
doubles.append(d)
|
||
|
|
buf = buf[8:]
|
||
|
|
return doubles
|