Add from_raw_payload, pad frames to min length in from_payload

This commit is contained in:
Alex Forencich
2020-12-05 01:32:41 -08:00
parent 4e0a11c84b
commit 9e5863684d
2 changed files with 18 additions and 6 deletions

View File

@@ -50,11 +50,17 @@ class GmiiFrame(object):
self.error = error self.error = error
@classmethod @classmethod
def from_payload(cls, payload, add_fcs=True): def from_payload(cls, payload, min_len=60):
payload = bytearray(payload)
if len(payload) < min_len:
payload.extend(bytearray(min_len-len(payload)))
payload.extend(struct.pack('<L', zlib.crc32(payload)))
return cls.from_raw_payload(payload)
@classmethod
def from_raw_payload(cls, payload):
data = bytearray(ETH_PREAMBLE) data = bytearray(ETH_PREAMBLE)
data.extend(payload) data.extend(payload)
if add_fcs:
data.extend(struct.pack('<L', zlib.crc32(payload)))
return cls(data) return cls(data)
def get_preamble_len(self): def get_preamble_len(self):

View File

@@ -52,11 +52,17 @@ class XgmiiFrame(object):
self.ctrl = ctrl self.ctrl = ctrl
@classmethod @classmethod
def from_payload(cls, payload, add_fcs=True): def from_payload(cls, payload, min_len=60):
payload = bytearray(payload)
if len(payload) < min_len:
payload.extend(bytearray(min_len-len(payload)))
payload.extend(struct.pack('<L', zlib.crc32(payload)))
return cls.from_raw_payload(payload)
@classmethod
def from_raw_payload(cls, payload):
data = bytearray(ETH_PREAMBLE) data = bytearray(ETH_PREAMBLE)
data.extend(payload) data.extend(payload)
if add_fcs:
data.extend(struct.pack('<L', zlib.crc32(payload)))
return cls(data) return cls(data)
def get_preamble_len(self): def get_preamble_len(self):