protobin 0.0.34__tar.gz → 0.0.36__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: protobin
3
- Version: 0.0.34
3
+ Version: 0.0.36
4
4
  Summary: Python library for encode and decode data in protobin format
5
5
  Project-URL: Homepage, https://github.com/drmelectronic/protobin-python
6
6
  Project-URL: Bug Tracker, https://github.com/drmelectronic/protobin-python/issues
@@ -67,6 +67,7 @@ class Protocol:
67
67
  crc16 = None
68
68
  crc_byteorder = None
69
69
  crc_size = 2
70
+ fake_prefix = None
70
71
 
71
72
  def __init__(self, server: bool = None, file=None, js=None):
72
73
  self.server = server
@@ -87,6 +88,7 @@ class Protocol:
87
88
  if 'crc' in js:
88
89
  self.config_crc(js['crc'])
89
90
  self.length = js['length']
91
+ self.fake_prefix = js.get('fake_prefix')
90
92
  formats = js['formats']
91
93
  self.formats = {}
92
94
  for name in formats.keys():
@@ -112,22 +114,33 @@ class Protocol:
112
114
  raise InputError(f'{format_key} is not available format, these are the all availables formats {self.formats.keys()}')
113
115
  format = self.formats[format_key]
114
116
  binary = format.encode(data)
115
- if format.crc and self.crc16:
117
+ if self.fake_prefix and format.header:
118
+ binary = bytes(self.fake_prefix) + binary + self.get_crc(binary)
119
+ elif format.crc and self.crc16:
116
120
  binary = len(binary).to_bytes(self.length, 'big', signed=False) + binary + self.get_crc(binary)
121
+
117
122
  return binary
118
123
 
119
124
  def get_header(self, binary):
120
125
  n = binary.find(b'=')
121
126
  if n == -1:
127
+ # posiciones sin =, calcular la longitud de la trama con sus primero bytes
122
128
  binary = self.check_crc(binary)
123
129
  h = binary[:1]
124
130
  binary = binary[1:]
125
131
  format = self.get_codec(h)
126
132
  else:
127
133
  if n > 4:
128
- binary = self.check_crc(binary)
134
+ # comandos de pantalla con = o que tengan un igual más adelante por casualidad
135
+ if self.fake_prefix and binary[:4] == bytes(self.fake_prefix):
136
+ # comandos
137
+ binary = binary[4:]
138
+ else:
139
+ # codec8
140
+ binary = self.check_crc(binary)
129
141
  n = binary.find(b'=')
130
142
  if n > 4 or n == -1:
143
+ # si el igual está adelante no es parte del comando
131
144
  h = binary[:1]
132
145
  binary = binary[1:]
133
146
  format = self.get_codec(h)
@@ -141,6 +154,7 @@ class Protocol:
141
154
  if codec is None:
142
155
  format, binary = self.get_header(binary)
143
156
  else:
157
+ # codec 8 u otro ya se sabe el codec
144
158
  format = self.formats[codec]
145
159
  if format.crc and self.crc16:
146
160
  binary = self.check_crc(binary)
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "protobin"
7
- version = "0.0.34"
7
+ version = "0.0.36"
8
8
  authors = [
9
9
  { name="Daniel Robles", email="drm.electronic@gmail.com" },
10
10
  ]
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "length": 8,
3
+ "fake_prefix": [0, 0, 0, 1],
3
4
  "crc": {"poly": "0x18005", "init": "0x0000", "reverse": true, "byte_order": "big", "size": 4},
4
5
  "formats": {
5
6
  "login": {
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "length": 8,
3
3
  "crc": {"poly": "0x18005", "init": "0x0000", "reverse": true, "byte_order": "big", "size": 4},
4
+ "fake_prefix": [0, 0, 0, 1],
4
5
  "formats": {
5
6
  "login": {
6
7
  "crc": false,
@@ -569,6 +569,7 @@ report:
569
569
  self.assertEqual(recv, {'serial': '356307042441013'})
570
570
  binary2 = client.encode(recv, 'login')
571
571
  self.assertEqual(binary, binary2)
572
+ print(binary2)
572
573
 
573
574
  def test_position_binary(self):
574
575
  data = {'positions':
@@ -644,7 +645,7 @@ report:
644
645
  data = {'status': 'E', 'direction': 'A', 'next_next_control': '', 'next_next_time': ' ', 'next_control': '', 'next_time': ' ', 'previous_control': '', 'delay': 0, 'front_control': '', 'back_control': '', 'back_back_control': '', 'datero_bus_-1': 0, 'datero_dif_-1': 0, 'datero_bus_0': 0, 'datero_dif_0': 0, 'datero_bus_1': 0, 'datero_dif_1': 0, 'datero_bus_2': 0, 'datero_dif_2': 0, 'datero_bus_3': 256, 'datero_dif_3': 0, 'datero_bus_4': 0, 'datero_dif_4': 0, 'datero_bus_5': 0, 'datero_dif_5': 0}
645
646
  client = Protocol(file='codec8.json')
646
647
  binary = client.encode(data, 'status3')
647
- self.assertEqual(b'\x00\x00\x00\x00\x00\x00\x00*s=EA\x00 \x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\xd6', binary)
648
+ self.assertEqual(b'\x00\x00\x00\x01s=EA\x00 \x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\xd6', binary)
648
649
  header, recv = client.decode(binary)
649
650
  self.assertEqual(data, recv)
650
651
 
@@ -711,3 +712,11 @@ report:
711
712
  header, recv = client.decode(binary)
712
713
  print(recv)
713
714
 
715
+ def test_status_teltonika(self):
716
+ pesquero = b'\x00\x00\x00\x01S=RA\x07IQUITOS14:05\x06LOBATO\x04\x07IGLESIA\x00f\x08\x00n\x05\x00\x96\x03\x01m\x08\x00\xb5\r\x01w\t\x00\x00o\xb4'
717
+ client = Protocol(file='teltonika.json', server=None)
718
+ header, recv = client.decode(pesquero)
719
+ print(recv)
720
+ binary = client.encode(recv, header)
721
+ print(binary)
722
+ self.assertEqual(pesquero, binary)
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes