Christina Quast | 789a401 | 2015-05-04 15:29:07 +0200 | [diff] [blame] | 1 | #!/usr/bin/env python |
| 2 | |
| 3 | from enum import Enum |
| 4 | |
| 5 | # FIXME: response! |
| 6 | class pts_states(Enum): |
| 7 | PTSS = 0 |
| 8 | PTS0 = 1 |
| 9 | PTS1 = 2 |
| 10 | PTS2 = 3 |
| 11 | PTS3 = 4 |
| 12 | PCK = 5 |
| 13 | |
| 14 | class Pts_splitter: |
| 15 | |
| 16 | def __init__(self): |
| 17 | self.state = pts_states.PTSS |
| 18 | self.buf = [] |
| 19 | |
| 20 | def func_PTS_PTSS(self, ptss): |
| 21 | self.state = pts_states.PTS0 |
| 22 | |
| 23 | def func_PTS_PTS0(self, pts0): |
| 24 | self.pts0 = pts0 |
| 25 | self.state = pts_states.PTS1 |
| 26 | |
| 27 | def func_PTS_PTS1(self, fidi): |
| 28 | print("pts0: ", self.pts0) |
| 29 | if (self.pts0 & 1<<4) != 0: |
| 30 | self.fidi = fidi |
| 31 | print("FiDi: ", fidi) |
| 32 | self.state = pts_states.PTS2 |
| 33 | else: |
| 34 | self.PTS_S[pts_states.PTS2](self, c) |
| 35 | |
| 36 | def func_PTS_PTS2(self, c): |
| 37 | if (self.pts0 & 1<<5) != 0: |
| 38 | print("ETU: ", c) |
| 39 | self.state = pts_states.PTS3 |
| 40 | else: |
| 41 | self.PTS_S[pts_states.PTS3](self, c) |
| 42 | |
| 43 | def func_PTS_PTS3(self, c): |
| 44 | if (self.pts0 & 1<<6) != 0: |
| 45 | print("RFU: ", c) |
| 46 | self.state = pts_states.PCK |
| 47 | else: |
| 48 | self.PTS_S[pts_states.PCK](self, c) |
| 49 | |
| 50 | def func_PTS_PCK(self, c): |
| 51 | print("PCK: ", c) |
| 52 | self.state = pts_states.PCK |
| 53 | |
| 54 | PTS_S = { |
| 55 | pts_states.PTSS : func_PTS_PTSS, |
| 56 | pts_states.PTS0 : func_PTS_PTS0, |
| 57 | pts_states.PTS1 : func_PTS_PTS1, |
| 58 | pts_states.PTS2 : func_PTS_PTS2, |
| 59 | pts_states.PTS3 : func_PTS_PTS3, |
| 60 | pts_states.PCK : func_PTS_PCK |
| 61 | } |
| 62 | |
| 63 | def split(self, c): |
| 64 | self.PTS_S[self.state](self, c) |
| 65 | |
| 66 | if __name__ == '__main__': |
| 67 | pts_msg1 = [0xff, 0x00, 0xff] |
| 68 | pts_msg_fidi = [0xff, (1<<4), 0x18, 0xff] |
| 69 | pts_msg_fidi_etu = [0xff, ((1<<4) | (1<<5)), 0x18, 0x01, 0xff] |
| 70 | pts = Pts_splitter() |
| 71 | for c in pts_msg1 + pts_msg_fidi + pts_msg_fidi_etu: |
| 72 | pts.split(c) |
| 73 | if (pts.state == pts_states.PCK): |
| 74 | pts = Pts_splitter() |