simtrace2/usb_application/pts_split.py

75 lines
1.9 KiB
Python
Executable File

#!/usr/bin/env python
from enum import Enum
# FIXME: response!
class pts_states(Enum):
PTSS = 0
PTS0 = 1
PTS1 = 2
PTS2 = 3
PTS3 = 4
PCK = 5
class Pts_splitter:
def __init__(self):
self.state = pts_states.PTSS
self.buf = []
def func_PTS_PTSS(self, ptss):
self.state = pts_states.PTS0
def func_PTS_PTS0(self, pts0):
self.pts0 = pts0
self.state = pts_states.PTS1
def func_PTS_PTS1(self, fidi):
print("pts0: ", self.pts0)
if (self.pts0 & 1<<4) != 0:
self.fidi = fidi
print("FiDi: ", fidi)
self.state = pts_states.PTS2
else:
self.PTS_S[pts_states.PTS2](self, c)
def func_PTS_PTS2(self, c):
if (self.pts0 & 1<<5) != 0:
print("ETU: ", c)
self.state = pts_states.PTS3
else:
self.PTS_S[pts_states.PTS3](self, c)
def func_PTS_PTS3(self, c):
if (self.pts0 & 1<<6) != 0:
print("RFU: ", c)
self.state = pts_states.PCK
else:
self.PTS_S[pts_states.PCK](self, c)
def func_PTS_PCK(self, c):
print("PCK: ", c)
self.state = pts_states.PCK
PTS_S = {
pts_states.PTSS : func_PTS_PTSS,
pts_states.PTS0 : func_PTS_PTS0,
pts_states.PTS1 : func_PTS_PTS1,
pts_states.PTS2 : func_PTS_PTS2,
pts_states.PTS3 : func_PTS_PTS3,
pts_states.PCK : func_PTS_PCK
}
def split(self, c):
self.PTS_S[self.state](self, c)
if __name__ == '__main__':
pts_msg1 = [0xff, 0x00, 0xff]
pts_msg_fidi = [0xff, (1<<4), 0x18, 0xff]
pts_msg_fidi_etu = [0xff, ((1<<4) | (1<<5)), 0x18, 0x01, 0xff]
pts = Pts_splitter()
for c in pts_msg1 + pts_msg_fidi + pts_msg_fidi_etu:
pts.split(c)
if (pts.state == pts_states.PCK):
pts = Pts_splitter()