def __init__(self, sock): self.sock = sock self.msg = bytearray(1024) self.size = 0 self.inputs = [self.sock.sock] self.outputs = [] self.errors = [] self.opcode = None self.iter = 0 self.dest_mac = None self.isvalid = False self.timer1 = None self.istimeout = False self.reply = "" self.mac_list = [] self.ip_list = [] self.ip_mode = [] self.mode_list = [] self.devname = [] self.version = [] self.devst = [] self.getreply = [] self.wiz752cmdObj = WIZ752CMDSET(1)
def get_log(self, mac_addr): if self.getreply is not None: print('[%s] Setting result: ' % (mac_addr)) # print('getreply: %s' % self.getreply) cmdsetObj = WIZ752CMDSET(logging.ERROR) for i in range(2, len(self.getreply)): cmd = self.getreply[i][:2].decode() param = self.getreply[i][2:].decode() cmd_desc = cmdsetObj.getcmddescription(cmd) param_desc = cmdsetObj.getparamdescription(cmd, param) conf_info = " %02d) %s: %-17s | %s: %s\r\n" % ( i - 1, cmd, param, cmd_desc, param_desc) sys.stdout.write('%s' % conf_info) else: pass
def get_log(self): if len(self.getreply) > 0: print('Configuration result: ') # print('getreply: %s' % self.getreply) cmdsetObj = WIZ752CMDSET(logging.ERROR) for i in range(2, len(self.getreply)): getcmd = self.getreply[i][:2] cmd = getcmd.decode('utf-8') getparam = self.getreply[i][2:] param = getparam.decode('utf-8') cmd_desc = cmdsetObj.getcmddescription(cmd) param_desc = cmdsetObj.getparamdescription(cmd, param) conf_info = " %02d) %s: %-17s | %s: %s\r\n" % ( i - 1, cmd, param, cmd_desc, param_desc) sys.stdout.write('%s' % conf_info)
def get_filelog(self, macaddr): filename = None # print('getreply: %s' % self.getreply) if self.getreply is None: print('No reply from device. exit program.') sys.exit(0) cmdsetObj = WIZ752CMDSET(logging.ERROR) mac_addr = macaddr.replace(":", "") filename = 'getfile_%s.log' % (mac_addr) for i in range(0, len(self.getreply)): f = open(filename, 'w') for i in range(2, len(self.getreply)): getcmd = self.getreply[i][:2] cmd = getcmd.decode('utf-8') if cmd not in cmdsetObj.cmdset: print('Invalid command. Check the command set') exit(0) getparam = self.getreply[i][2:] param = getparam.decode('utf-8') cmd_desc = cmdsetObj.getcmddescription(cmd) param_desc = cmdsetObj.getparamdescription(cmd, param) # sys.stdout.write("%s\r\n" % self.getreply[i]) info = "%02d) %s: %-17s | %s: %s\n" % (i - 1, cmd, param, cmd_desc, param_desc) # info = "%02d) %s: %s\r\n" % (i-1, cmd_desc, param_desc) f.write(info) f.close() if filename is not None: f = open(filename, 'r') readinfo = f.read() print(readinfo) print('@ Refer to \"%s\" for detail.\n' % filename)
def main(): # Logger config logger = get_formatted_logger(logging.INFO) # logger = get_formatted_logger(logging.DEBUG) logger.propagate = False wizmakecmd = WIZMakeCMD() wizarg = WIZArgParser() args = wizarg.config_arg() # logger.info(args) # wiz750cmdObj = WIZ750CMDSET(1) wiz752cmdObj = WIZ752CMDSET(1) if args.unicast is None: SOCK_TYPE = "udp" else: SOCK_TYPE = "tcp" # Socket config if args.unicast is None: conf_sock = socket_config(logger, SOCK_TYPE) else: # ip & port parameter check ipaddr, port = get_netarg(args.unicast, logger) conf_sock = socket_config(logger, SOCK_TYPE, ipaddr, port) wizmsghangler = WIZMSGHandler(conf_sock) cmd_list = [] setcmd = {} op_code = OP_SEARCHALL # Search id code init searchcode = " " if args.clear: logger.info("Mac list clear") f = open("mac_list.txt", "w") f.close() elif args.version: logger.info(f"WIZnet-S2E-Tool {VERSION}") # Configuration (single or multi) elif args.macaddr or args.all or args.search or args.multiset: if args.macaddr: mac_addr = args.macaddr # ? 00:08:DC를 생략하고 나머지만 입력해도 인식되도록 설정 # check: length / 00:08:DC 포함 여부 / if "00:08:DC" not in mac_addr and len(mac_addr) == 8: logger.info("mac_addr:", len(mac_addr), mac_addr) mac_addr = "00:08:DC:" + mac_addr if wiz752cmdObj.isvalidparameter("MC", mac_addr) == False: logger.info("Invalid Mac address!\r\n") sys.exit(0) op_code = OP_SETCOMMAND logger.info("Device configuration start...\n") setcmd = make_setcmd(args) # search id code (parameter of 'PW') if args.password: searchcode = args.password else: searchcode = " " # Check parameter setcmd_cmd = list(setcmd.keys()) for i in range(len(setcmd)): # logger.info('%r , %r' % (setcmd_cmd[i], setcmd.get(setcmd_cmd[i]))) if wiz752cmdObj.isvalidparameter(setcmd_cmd[i], setcmd.get( setcmd_cmd[i])) == False: logger.info( f"{'#' * 25}\nInvalid parameter: {setcmd.get(setcmd_cmd[i])} \nPlease refer to {sys.argv[0]} -h\r\n" ) sys.exit(0) # ALL devices config if args.all or args.multiset: if not os.path.isfile("mac_list.txt"): logger.info( "There is no mac_list.txt file. Please search devices first from '-s/--search' option." ) sys.exit(0) f = open("mac_list.txt", "r") mac_list = f.readlines() if len(mac_list) == 0: logger.info( "There is no mac address. Please search devices from '-s/--search' option." ) sys.exit(0) f.close() # Check parameter if args.multiset: host_ip = args.multiset # logger.info('Host ip: %s\n' % host_ip) if wiz752cmdObj.isvalidparameter("LI", host_ip) == False: logger.info("Invalid IP address!\r\n") sys.exit(0) for i in range(len(mac_list)): mac_addr = re.sub("[\r\n]", "", mac_list[i]) # logger.info(mac_addr) if args.fwfile: op_code = OP_FWUP logger.info( f"[Multi] Device FW upload: device {i + 1}: {mac_addr}" ) fwup_name = "th%d_fwup" % (i) fwup_name = UploadThread(conf_sock, mac_addr, searchcode, args.fwfile, logger) fwup_name.start() else: if args.multiset: th_name = "th%d_config" % (i) th_name = MultiConfigThread(mac_addr, searchcode, cmd_list, OP_SETCOMMAND, logger) th_name.set_multiip(host_ip, i) th_name.start() elif args.getfile: op_code = OP_GETFILE cmd_list = wizmakecmd.get_from_file( mac_addr, searchcode, args.getfile) wizmsghangler.makecommands(cmd_list, op_code) if SOCK_TYPE == "udp": wizmsghangler.sendcommands() else: wizmsghangler.sendcommandsTCP() wizmsghangler.parseresponse() elif args.setfile: op_code = OP_SETFILE logger.info( f"[Setfile] Device [{mac_addr}] Config from '{args.setfile}' file." ) cmd_list = wizmakecmd.set_from_file( mac_addr, searchcode, args.setfile) th_setfile = MultiConfigThread(mac_addr, searchcode, cmd_list, OP_SETFILE, logger) th_setfile.start() else: if args.reset: op_code = OP_RESET logger.info( f"[Multi] Reset devices {i + 1}: {mac_addr}") cmd_list = wizmakecmd.reset(mac_addr, searchcode) elif args.factory: op_code = OP_RESET logger.info( f"[Multi] Factory reset devices {i + 1}: {mac_addr}" ) cmd_list = wizmakecmd.factory_reset( mac_addr, searchcode) else: op_code = OP_SETCOMMAND logger.info( f"[Multi] Setting devices {i + 1}: {mac_addr}") cmd_list = wizmakecmd.setcommand( mac_addr, searchcode, list(setcmd.keys()), list(setcmd.values()), ) th_name = "th%d_config" % (i) th_name = MultiConfigThread(mac_addr, searchcode, cmd_list, op_code, logger) th_name.start() time.sleep(0.3) if args.getfile: logger.info( f"[Multi][Getfile] Get device [{mac_addr}] info from '{args.getfile}' commands\n" ) wizmsghangler.get_filelog(mac_addr) # Single device config else: if args.fwfile: op_code = OP_FWUP logger.info(f"Device [{mac_addr}] Firmware upload") t_fwup = FWUploadThread(searchcode, conf_sock, SOCK_TYPE) t_fwup.setparam(mac_addr, args.fwfile) t_fwup.jumpToApp() # socket if SOCK_TYPE == "udp": pass else: socket_close(conf_sock) time.sleep(2) # ip & port parameter check ipaddr, port = get_netarg(args.unicast, logger) conf_sock = socket_config(logger, SOCK_TYPE, ipaddr, port) t_fwup.sendCmd("FW") t_fwup.start() elif args.search: op_code = OP_SEARCHALL logger.info("Searching device...") cmd_list = wizmakecmd.search(searchcode) elif args.reset: op_code = OP_SETCOMMAND logger.info(f"Device {mac_addr} Reset") cmd_list = wizmakecmd.reset(mac_addr, searchcode) elif args.factory: op_code = OP_SETCOMMAND logger.info(f"Device {mac_addr} Factory reset") cmd_list = wizmakecmd.factory_reset(mac_addr, searchcode) elif args.setfile: op_code = OP_SETFILE logger.info( f"[Setfile] Device [{mac_addr}] Config from '{args.setfile}' file." ) cmd_list = wizmakecmd.set_from_file(mac_addr, searchcode, args.setfile) elif args.getfile: op_code = OP_GETFILE logger.info( f"[Getfile] Get device [{mac_addr}] info from '{args.getfile}' commands\n" ) cmd_list = wizmakecmd.get_from_file(mac_addr, searchcode, args.getfile) else: op_code = OP_SETCOMMAND logger.info(f"* Single device config: {mac_addr}") cmd_list = wizmakecmd.setcommand(mac_addr, searchcode, list(setcmd.keys()), list(setcmd.values())) if args.all or args.multiset: if args.fwfile or args.factory or args.reset: pass elif args.fwfile: pass else: wizmsghangler.makecommands(cmd_list, op_code) if SOCK_TYPE == "udp": wizmsghangler.sendcommands() else: wizmsghangler.sendcommandsTCP() if op_code is OP_SETCOMMAND: conf_result = wizmsghangler.checkresponse() else: conf_result = wizmsghangler.parseresponse() else: logger.info(f"\nInformation: You need to set up target device(s).\n \ You can set the multi device in 'mac_list.txt' with the '-a' option or set single device with the '-d' option.\n \ Please refer to {sys.argv[0]} -h\n") sys.exit(0) if args.search: # logger.info(wizmsghangler.mac_list) dev_name = wizmsghangler.devname mac_list = wizmsghangler.mac_list dev_version = wizmsghangler.version dev_status = wizmsghangler.devst ip_list = wizmsghangler.ip_list profiles = make_profile(mac_list, dev_name, dev_version, dev_status, ip_list, args.search, logger) make_maclist(profiles, logger) logger.info( "\nCheck 'mac_list.txt' file for a list of searched devices.\n@ The file will be used when multi-device configuration." ) elif not args.all: if op_code is OP_GETFILE: wizmsghangler.get_filelog(mac_addr) elif op_code is OP_SETFILE: logger.info( f"\nDevice configuration from {args.setfile} complete!") wizmsghangler.get_log(mac_addr) elif args.multiset or args.factory or args.reset: pass elif op_code is OP_SETCOMMAND: if conf_result < 0: logger.info( f"\nWarning: No response from the device [{mac_addr}]. Please check the device's status." ) else: logger.info(f"\nDevice[{mac_addr}] configuration complete!") wizmsghangler.get_log(mac_addr)
else: print('New Device: %s' % mac_list[i].decode()) f.write(info) f.close() def isvalid(self, mac_addr): pass if __name__ == '__main__': wizmakecmd = WIZMakeCMD() wizarg = WIZArgParser() args = wizarg.config_arg() # wiz750cmdObj = WIZ750CMDSET(1) wiz752cmdObj = WIZ752CMDSET(1) conf_sock = WIZUDPSock(5000, 50001) conf_sock.open() wizmsghangler = WIZMSGHandler(conf_sock) # FUObj = FWUpload(logging.DEBUG) cmd_list = [] setcmd = {} op_code = OP_SEARCHALL # print(args) if args.search or args.clear: if len(sys.argv) is not 2: print('Invalid argument. Please refer to %s -h\n' % sys.argv[0])
def __init__(self): super().__init__() self.setupUi(self) self.setWindowIcon(QIcon(resource_path('gui/main_icon.ico'))) self.conf_sock = WIZUDPSock(5000, 50001) self.conf_sock.open() self.wizmsghangler = WIZMSGHandler(self.conf_sock) self.wiz750cmdObj = WIZ750CMDSET(1) self.wiz752cmdObj = WIZ752CMDSET(1) self.wizmakecmd = WIZMakeCMD() self.mac_list = [] self.threads = [] self.curr_mac = None self.curr_dev = None # device select event self.list_device.itemClicked.connect(self.devclick) # Button event handler self.btnsearch.clicked.connect(self.Search) self.btnsetting.clicked.connect(self.Setting) self.resetbtn.clicked.connect(self.OpenResetDialog) self.factorybtn.clicked.connect(self.OpenFactoryDialog) # self.fwupbtn.clicked.connect(self.FWFileOpen) self.fwupbtn.clicked.connect(self.NetworkCheck) if sys.platform.lower() == 'win32': self.firewallbtn.setEnabled(True) self.firewallbtn.clicked.connect(self.OpenFirewall) self.devmanagerbtn.clicked.connect(self.OpenDevManager) else: self.firewallbtn.setEnabled(False) self.exitbtn.clicked.connect(self.OpenExitDialog) # state changed event self.show_idcode.stateChanged.connect(self.ShowIDcode) self.show_connectpw.stateChanged.connect(self.ShowPW) self.enable_connect_pw.stateChanged.connect(self.EnablePW) self.at_enable.stateChanged.connect(self.EnableATmode) self.ip_dhcp.clicked.connect(self.CheckOPmode) self.ip_static.clicked.connect(self.CheckOPmode) # Menu event # self.actionSave.triggered.connect(self.SaveFile) # self.actionLoad.triggered.connect(self.LoadFile) # self.about_wiz.triggered.connect(self.OpenInfoDialog) # configuration save/load button self.savebtn.clicked.connect(self.SaveFile) self.loadbtn.clicked.connect(self.LoadFile) # OP mode event self.ch1_tcpclient.clicked.connect(self.OPmodeEvent) self.ch1_tcpserver.clicked.connect(self.OPmodeEvent) self.ch1_tcpmixed.clicked.connect(self.OPmodeEvent) self.ch1_udp.clicked.connect(self.OPmodeEvent) ############################################# # Button icon set self.icon_save = QIcon() self.icon_save.addPixmap(QPixmap(resource_path('gui/save_48.ico')), QIcon.Normal, QIcon.Off) self.savebtn.setIcon(self.icon_save) self.savebtn.setIconSize(QSize(20, 20)) self.icon_load = QIcon() self.icon_load.addPixmap(QPixmap(resource_path('gui/load_48.ico')), QIcon.Normal, QIcon.Off) self.loadbtn.setIcon(self.icon_load) self.loadbtn.setIconSize(QSize(20, 20)) self.icon_ping = QIcon() self.icon_ping.addPixmap(QPixmap(resource_path('gui/ping_48.ico')), QIcon.Normal, QIcon.Off) self.devmanagerbtn.setIcon(self.icon_ping) self.devmanagerbtn.setIconSize(QSize(20, 20)) self.icon_firewall = QIcon() self.icon_firewall.addPixmap( QPixmap(resource_path('gui/firewall_48.ico')), QIcon.Normal, QIcon.Off) self.firewallbtn.setIcon(self.icon_firewall) self.firewallbtn.setIconSize(QSize(20, 20)) ############################################# self.icon_search = QIcon() self.icon_search.addPixmap(QPixmap(resource_path('gui/search_48.ico')), QIcon.Normal, QIcon.Off) self.btnsearch.setIcon(self.icon_search) self.btnsearch.setIconSize(QSize(40, 40)) self.icon_setting = QIcon() self.icon_setting.addPixmap( QPixmap(resource_path('gui/setting_48.ico')), QIcon.Normal, QIcon.Off) self.btnsetting.setIcon(self.icon_setting) self.btnsetting.setIconSize(QSize(40, 40)) self.icon_upload = QIcon() self.icon_upload.addPixmap(QPixmap(resource_path('gui/upload_48.ico')), QIcon.Normal, QIcon.Off) self.fwupbtn.setIcon(self.icon_upload) self.fwupbtn.setIconSize(QSize(40, 40)) self.icon_reset = QIcon() self.icon_reset.addPixmap(QPixmap(resource_path('gui/reset_48.ico')), QIcon.Normal, QIcon.Off) self.resetbtn.setIcon(self.icon_reset) self.resetbtn.setIconSize(QSize(40, 40)) self.icon_factory = QIcon() self.icon_factory.addPixmap( QPixmap(resource_path('gui/factory_48.ico')), QIcon.Normal, QIcon.Off) self.factorybtn.setIcon(self.icon_factory) self.factorybtn.setIconSize(QSize(40, 40)) self.icon_exit = QIcon() self.icon_exit.addPixmap(QPixmap(resource_path('gui/exit_48.ico')), QIcon.Normal, QIcon.Off) self.exitbtn.setIcon(self.icon_exit) self.exitbtn.setIconSize(QSize(40, 40)) ############################################# ## QThread 테스트 ######################################################### # self.testbtn1.clicked.connect(self.threadStart) # self.testbtn2.clicked.connect(self.threadStop) # 쓰레드 인스턴스 생성 self.th = ProgressThread(self) # 쓰레드 이벤트 연결 self.th.threadEvent.connect(self.threadEventHandler)