Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
- Modify firmware update process: Check the boot firmware version when update app firmware
- An error message is displayed only when the reset is failed.
- Modify some code
  • Loading branch information
Rena kim committed Dec 5, 2019
1 parent ae31064 commit b898793
Show file tree
Hide file tree
Showing 5 changed files with 166 additions and 162 deletions.
147 changes: 109 additions & 38 deletions FWUploadThread.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
#!/usr/bin/python

from PyQt5.QtCore import QThread, pyqtSignal, pyqtSlot
from wizsocket.TCPClient import TCPClient
from WIZUDPSock import WIZUDPSock
from WIZMSGHandler import WIZMSGHandler
import binascii
import re
import sys
Expand All @@ -15,6 +11,12 @@
import os
import subprocess

from PyQt5.QtCore import QThread, pyqtSignal, pyqtSlot
from wizsocket.TCPClient import TCPClient
from WIZUDPSock import WIZUDPSock
from WIZMSGHandler import WIZMSGHandler
from utils import compare_version

logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger()

Expand Down Expand Up @@ -57,7 +59,8 @@ def __init__(self, conf_sock, dest_mac, idcode, set_pw, filename, filesize, ipad
self.sentbyte = 0
self.dest_mac = dest_mac
self.idcode = idcode
self.error_noresponse = 0
self.error_noresponse = False
self.error_version = False
self.retrycheck = 0

# if wiz2000
Expand Down Expand Up @@ -105,6 +108,59 @@ def jumpToApp(self):
self.uploading_size.emit(1)
self.msleep(1000)

def check_boot_version(self):
cmd_list = []
self.resp = None
# boot mode change: App boot mode
cmd_list.append(["MA", self.dest_mac])
cmd_list.append(["PW", self.idcode])
cmd_list.append(["ST", ""])
cmd_list.append(["VR", ""])

if 'TCP' in self.sock_type:
self.wizmsghangler = WIZMSGHandler(
self.conf_sock, cmd_list, 'tcp', OP_FWUP, 2)
elif 'UDP' in self.sock_type:
self.wizmsghangler = WIZMSGHandler(
self.conf_sock, cmd_list, 'udp', OP_FWUP, 2)

# if no reponse from device, retry for several times.
for i in range(4):
# self.resp = self.wizmsghangler.parseresponse()
self.resp = self.wizmsghangler.run()
self.msleep(100)
if self.resp is not '':
break

# self.uploading_size.emit(1)
self.msleep(1000)

# ! BOOT ?? ?? & boot ??? ???? ? ?? ?? ??
# ['1.3.2', 'BOOT'] / all path
if not self.check_fw_version(self.resp, self.bin_filename):
return -1
else:
return 1

def check_fw_version(self, vr_st, filename):
print('check_fw_version(1)', vr_st, filename)
# Check status & version
if 'BOOT' in vr_st[0]:
# If boot version is 1.3.x
if '1.3.' in vr_st[1]:
print('=====>> BOOT', vr_st[1])
# Check current boot F/W version with selected app F/W version
# ! ??? ?? ==> ?? binary ??? ??? ?? ??? ??
file_version = self.bin_filename[-7:-4]
print('check_fw_version(2)', file_version)
# 130 ?? ??? False
if compare_version('130', file_version) > 0:
return False
else:
return True

return True

def sendCmd(self, command):
cmd_list = []
self.resp = None
Expand Down Expand Up @@ -146,36 +202,47 @@ def run(self):
else:
self.jumpToApp()

if 'UDP' in self.sock_type:
pass
elif 'TCP' in self.sock_type:
self.sock_close()
self.SocketConfig()

self.sendCmd('FW')

if self.resp is not '' and self.resp is not None:
resp = self.resp.decode('utf-8')
# print('resp', resp)
params = resp.split(':')
sys.stdout.write('Dest IP: %s, Dest Port num: %r\r\n' %
(params[0], int(params[1])))
self.serverip = params[0]
self.serverport = int(params[1])

self.uploading_size.emit(3)
# 20191205 WIZ750SR(-1xx) version check
if 'WIZ750SR' in self.dev_name or 'WIZ750SR-1xx' in self.dev_name:
if 'TCP' in self.sock_type:
self.sock_close()
self.SocketConfig()

if self.check_boot_version() < 0:
self.error_flag.emit(-4)
self.error_version = True

if not self.error_version:
if 'TCP' in self.sock_type:
self.sock_close()
self.SocketConfig()

self.sendCmd('FW')

if self.resp is not '' and self.resp is not None:
resp = self.resp.decode('utf-8')
# print('resp', resp)
params = resp.split(':')
sys.stdout.write('Dest IP: %s, Dest Port num: %r\r\n' %
(params[0], int(params[1])))
self.serverip = params[0]
self.serverport = int(params[1])

self.uploading_size.emit(3)
else:
print('No response from device. Check the network or device status.')
self.error_flag.emit(-1)
self.error_noresponse = True
try:
self.client = TCPClient(2, params[0], int(params[1]))
except:
pass
else:
print('No response from device. Check the network or device status.')
self.error_flag.emit(-1)
self.error_noresponse = -1
try:
self.client = TCPClient(2, params[0], int(params[1]))
except:
pass
if 'TCP' in self.sock_type:
self.sock_close()

try:
if self.error_noresponse < 0:
pass
else:
if not self.error_noresponse and not self.error_version:
# sys.stdout.write("%r\r\n" % self.client.state)
while True:
if self.retrycheck > 6:
Expand Down Expand Up @@ -277,13 +344,16 @@ def run(self):
response = ""
break

print('retrycheck: %d' % self.retrycheck)
# print('FWUploadThread run() retrycheck: %d' % self.retrycheck)

if self.retrycheck > 6 or self.error_noresponse < 0:
if self.retrycheck > 6 or self.error_noresponse or self.error_version:
sys.stdout.write(
'Device [%s] firmware upload fail.\r\n' % (self.dest_mac))
self.upload_result.emit(-1)
elif self.error_noresponse >= 0:
if self.error_noresponse:
self.upload_result.emit(-1)
elif self.error_version:
self.upload_result.emit(-4)
elif not self.error_noresponse:
self.uploading_size.emit(8)
sys.stdout.write(
'Device [%s] firmware upload success!\r\n' % (self.dest_mac))
Expand All @@ -293,14 +363,15 @@ def run(self):
self.client.shutdown()
if 'TCP' in self.sock_type:
self.conf_sock.shutdown()

except Exception as e:
self.error_flag.emit(-3)
sys.stdout.write('%r\r\n' % e)
finally:
pass

def sock_close(self):
# 기존 연결 fin
#
if self.tcp_sock is not None:
if self.tcp_sock.state is not SOCK_CLOSE_STATE:
self.tcp_sock.shutdown()
Expand Down
10 changes: 10 additions & 0 deletions WIZMSGHandler.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ def __init__(self, udpsock, cmd_list, what_sock, op_code, timeout):
self.inputs = [self.sock.sock]
except Exception as e:
print('socket error:', e)
self.inputs = []
self.terminate()

self.outputs = []
Expand Down Expand Up @@ -216,6 +217,7 @@ def run(self):
print(
'[ERROR] WIZMSGHandler makecommands(): %r' % e)
elif self.opcode is OP_FWUP:
status_version = []
for i in range(0, len(replylists)):
if b'MA' in replylists[i][:2]:
dest_mac = self.dest_mac
Expand All @@ -228,6 +230,14 @@ def run(self):
# sys.stdout.write('self.isvalid is True\r\n')
param = replylists[i][2:].split(b':')
self.reply = replylists[i][2:]

if b'ST' in replylists[i][:2]:
status_version.append(replylists[i][2:].decode())
self.reply = status_version
if b'VR' in replylists[i][:2]:
status_version.append(replylists[i][2:].decode())
self.reply = status_version

elif self.opcode is OP_SETCOMMAND:
for i in range(0, len(replylists)):
if b'AP' in replylists[i][:2]:
Expand Down
23 changes: 6 additions & 17 deletions WIZMakeCMD.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
from WIZMSGHandler import WIZMSGHandler
from WIZArgParser import WIZArgParser
from FWUploadThread import FWUploadThread
from utils import compare_version

import logging

logging.basicConfig(level=logging.DEBUG)
Expand All @@ -32,17 +34,15 @@
# Supported devices
ONE_PORT_DEV = [
"WIZ750SR",
"WIZ750SR-1xx",
"WIZ750SR-100",
"WIZ750SR-105",
"WIZ750SR-110",
"WIZ107SR",
"WIZ108SR",
]
TWO_PORT_DEV = ["WIZ752SR-12x", "WIZ752SR-120", "WIZ752SR-125"]
# DEVICE_SERVER = []

# BAUDRATES = [300, 600, 1200, 1800, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200, 230400, 460800]
# not use 'UI' and 'EI' on Configuration tool (UART interface(Code))
Pre_programmed_MCU = ["W7500_S2E", "W7500P_S2E"]

# for pre-search
cmd_presearch = ["MC", "VR", "MN", "ST", "IM", "OP", "LI", "SM", "GW"]
Expand All @@ -63,17 +63,6 @@
cmd_1p_advanced = cmd_ch1 + cmd_added
cmd_2p_default = cmd_ch1 + cmd_ch2

def version_compare(version1, version2):
def normalize(v):
# return [x for x in re.sub(r'(\.0+)*$','',v).split('.')]
return [x for x in re.sub(r"(\.0+\.[dev])*$", "", v).split(".")]

obj1 = normalize(version1)
obj2 = normalize(version2)
return (obj1 > obj2) - (obj1 < obj2)
# if return value < 0: version2 upper than version1


class WIZMakeCMD:
def __init__(self):
pass
Expand Down Expand Up @@ -104,7 +93,7 @@ def search(self, mac_addr, idcode, devname, version):
cmd_list.append(["PW", idcode])

if devname in ONE_PORT_DEV or "750" in devname:
if "750" in devname and version_compare("1.2.0", version) <= 0:
if "750" in devname and compare_version("1.2.0", version) <= 0:
for cmd in cmd_1p_advanced:
cmd_list.append([cmd, ""])
else:
Expand Down Expand Up @@ -140,7 +129,7 @@ def setcommand(self, mac_addr, idcode, set_pw, command_list, param_list, devname
cmd_list.append([command_list[i], param_list[i]])

if devname in ONE_PORT_DEV or "750" in devname:
if "750" in devname and version_compare("1.2.0", version) <= 0:
if "750" in devname and compare_version("1.2.0", version) <= 0:
for cmd in cmd_1p_advanced:
cmd_list.append([cmd, ""])
else:
Expand Down
Loading

0 comments on commit b898793

Please sign in to comment.