@@ -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