예제 #1
0
    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)
예제 #2
0
 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
예제 #3
0
    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)
예제 #4
0
    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)
예제 #5
0
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)
예제 #6
0
            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])
예제 #7
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)