#!/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()