@@ -24,6 +24,10 @@ class OTAHandler:
24
24
MSG_HEADER = b'$OTA'
25
25
MSG_TAIL = b'*'
26
26
MSG_END = b'<!EOF>'
27
+
28
+ FULL_UPDATE = b'F'
29
+ DIFF_UPDATE = b'D'
30
+ NO_UPDATE = b'N'
27
31
28
32
UPDATE_INFO_MSG = 1
29
33
UPDATE_INFO_REPLY = 2
@@ -182,7 +186,7 @@ def _send_update_info(self, dev_eui, msg):
182
186
version = self.get_latest_version()
183
187
if LooseVersion(version) > LooseVersion(dev_version):
184
188
self._init_update_params(dev_eui, dev_version, version)
185
- msg = self._create_update_info_msg(version)
189
+ msg = self._create_update_info_msg(version, dev_version )
186
190
self.send_payload(dev_eui, msg)
187
191
188
192
def get_device_version(self, msg):
@@ -241,23 +245,35 @@ def update_proc(self):
241
245
upater = updateHandler(dev_version, latest_version, self._clientApp, self._loraserver_jwt, multicast_group_id, self)
242
246
243
247
self.multicast_updaters.append(upater)
248
+
249
+ def _get_update_type(self, need_updating, device_version):
250
+ update_type = b',' + self.NO_UPDATE
251
+ print(os.path.isdir(self.firmware_dir + '/' + device_version))
252
+ if need_updating:
253
+ if os.path.isdir(self.firmware_dir + '/' + device_version):
254
+ return b',' + self.DIFF_UPDATE
255
+ else:
256
+ return b',' + self.FULL_UPDATE
257
+
258
+ return update_type
244
259
245
- def _create_update_info_msg(self, version):
260
+ def _create_update_info_msg(self, version, device_version ):
246
261
msg = bytearray()
247
262
msg.extend(self.MSG_HEADER)
248
263
msg.extend(b',' + str(self.UPDATE_INFO_REPLY).encode())
249
- msg.extend(b',' + str(int(self._next_update > 0)).encode())
250
264
msg.extend(b',' + version.encode())
251
- msg.extend(b',' + str(int(time.time())).encode())
252
- if self._next_update > 0:
265
+ need_updating = self._next_update > 0
266
+ update_type = self._get_update_type(need_updating, device_version)
267
+ msg.extend(update_type)
268
+ if need_updating:
253
269
msg.extend(b',' + str(int(self._next_update)).encode())
254
270
else:
255
271
msg.extend(b',-1')
272
+ msg.extend(b',' + str(int(time.time())).encode())
256
273
msg.extend(b',' + self.MSG_TAIL)
257
-
258
274
return msg
259
275
260
276
def send_payload(self, dev_eui, data):
261
277
b64Data = base64.b64encode(data)
262
278
payload = '{"reference": "abcd1234" ,"fPort":1,"data": "' + b64Data.decode() + '"}'
263
- self.p_client.publish(topic="application/1 /device/" + dev_eui + "/tx",payload=payload)
279
+ self.p_client.publish(topic="application/" + str(config.LORASERVER_APP_ID) + " /device/" + dev_eui + "/tx",payload=payload)
0 commit comments