protobin 0.0.34__tar.gz → 0.0.35__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.
- {protobin-0.0.34 → protobin-0.0.35}/PKG-INFO +1 -1
- {protobin-0.0.34 → protobin-0.0.35}/protobin/protocol.py +16 -2
- {protobin-0.0.34 → protobin-0.0.35}/pyproject.toml +1 -1
- {protobin-0.0.34 → protobin-0.0.35}/tests/teltonika.json +1 -0
- {protobin-0.0.34 → protobin-0.0.35}/tests/tests.py +8 -0
- {protobin-0.0.34 → protobin-0.0.35}/.gitignore +0 -0
- {protobin-0.0.34 → protobin-0.0.35}/LICENSE.txt +0 -0
- {protobin-0.0.34 → protobin-0.0.35}/README.md +0 -0
- {protobin-0.0.34 → protobin-0.0.35}/protobin/__init__.py +0 -0
- {protobin-0.0.34 → protobin-0.0.35}/protobin/errors.py +0 -0
- {protobin-0.0.34 → protobin-0.0.35}/protobin/fields.py +0 -0
- {protobin-0.0.34 → protobin-0.0.35}/protobin/interfaces.py +0 -0
- {protobin-0.0.34 → protobin-0.0.35}/protobin/singleton.py +0 -0
- {protobin-0.0.34 → protobin-0.0.35}/tests/codec8.json +0 -0
- {protobin-0.0.34 → protobin-0.0.35}/tests/demo.json +0 -0
- {protobin-0.0.34 → protobin-0.0.35}/tests/demo.yaml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: protobin
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.35
|
|
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
|
|
117
|
+
if self.fake_prefix:
|
|
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
|
-
|
|
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)
|
|
@@ -711,3 +711,11 @@ report:
|
|
|
711
711
|
header, recv = client.decode(binary)
|
|
712
712
|
print(recv)
|
|
713
713
|
|
|
714
|
+
def test_status_teltonika(self):
|
|
715
|
+
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'
|
|
716
|
+
client = Protocol(file='teltonika.json', server=None)
|
|
717
|
+
header, recv = client.decode(pesquero)
|
|
718
|
+
print(recv)
|
|
719
|
+
binary = client.encode(recv, header)
|
|
720
|
+
print(binary)
|
|
721
|
+
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|