Пример #1
0
def main():

    channel = None
    interface = None
    source = 0x7e0
    destination = 0x7df
    bitrate = None
    timeout = 0.1
    supported = False
    unsupported = False
    verbose = False

    options = getopt.getopt(
        sys.argv[1:],
        'i:c:s:d:b:t:hruv',
        ['interface=', 'channel=', 'source=', 'destination=', 'bitrate=',
         'help', 'timeout=', 'supported', 'unsupported', 'verbose'])

    try:
        for opt, arg in options[0]:
            if opt in ('-i', '--interface'):
                interface = arg
            elif opt in ('-c', '--channel'):
                channel = arg
            elif opt in ('-s', '--source'):
                source = int(arg, 16)
            elif opt in ('-d', '--destination'):
                destination = int(arg, 16)
            elif opt in ('-b', '--bitrate'):
                bitrate = int(arg)
            elif opt in ('-h', '--help'):
                usage()
                sys.exit(-1)
            elif opt in ('-r', '--supported'):
                supported = True
            elif opt in ('-u', '--unsupported'):
                unsupported = True
            elif opt in ('-v', '--verbose'):
                verbose = True
    except getopt.GetoptError as msg:
        usage()
        print("ERROR:", msg, file=sys.stderr)
        raise SystemExit

    if channel is None or \
            (PYTHON_CAN and (bitrate is None or interface is None)):
        usage()
        print("\nPlease provide all required arguments.\n",
              file=sys.stderr)
        sys.exit(-1)

    if 0 > source >= 0x800 or 0 > destination >= 0x800\
            or source == destination:
        print("The ids must be >= 0 and < 0x800 and not equal.",
              file=sys.stderr)
        sys.exit(-1)

    if 0 > timeout:
        print("The timeout must be a positive value")
        sys.exit(-1)

    csock = None
    try:
        if PYTHON_CAN:
            csock = CANSocket(bustype='socketcan', channel=channel,
                              bitrate=bitrate,)
        else:
            csock = CANSocket(channel)

        with ISOTPSocket(csock, source, destination, basecls=OBD,
                         padding=True) as isock:
            signal.signal(signal.SIGINT, signal_handler)
            obd_scan(isock, timeout, supported, unsupported, verbose)

    except Exception as e:
        usage()
        print("\nSocket couldn't be created. Check your arguments.\n",
              file=sys.stderr)
        print(e, file=sys.stderr)
        sys.exit(-1)

    finally:
        if csock is not None:
            csock.close()
Пример #2
0
def main():

    channel = None
    interface = None
    source = 0x7e0
    destination = 0x7df
    timeout = 0.1
    supported = False
    unsupported = False
    verbose = False
    python_can_args = None

    options = getopt.getopt(sys.argv[1:], 'i:c:s:d:a:t:hruv', [
        'interface=', 'channel=', 'source=', 'destination=', 'help',
        'timeout=', 'python-can_args=', 'supported', 'unsupported', 'verbose'
    ])

    try:
        for opt, arg in options[0]:
            if opt in ('-i', '--interface'):
                interface = arg
            elif opt in ('-c', '--channel'):
                channel = arg
            elif opt in ('-a', '--python-can_args'):
                python_can_args = arg
            elif opt in ('-s', '--source'):
                source = int(arg, 16)
            elif opt in ('-d', '--destination'):
                destination = int(arg, 16)
            elif opt in ('-h', '--help'):
                usage(False)
                sys.exit(0)
            elif opt in ('-t', '--timeout'):
                timeout = float(arg)
            elif opt in ('-r', '--supported'):
                supported = True
            elif opt in ('-u', '--unsupported'):
                unsupported = True
            elif opt in ('-v', '--verbose'):
                verbose = True
    except getopt.GetoptError as msg:
        usage(True)
        print("ERROR:", msg, file=sys.stderr)
        raise SystemExit

    if channel is None or \
            (PYTHON_CAN and interface is None):
        usage(True)
        print("\nPlease provide all required arguments.\n", file=sys.stderr)
        sys.exit(1)

    if 0 > source >= 0x800 or 0 > destination >= 0x800\
            or source == destination:
        print("The ids must be >= 0 and < 0x800 and not equal.",
              file=sys.stderr)
        sys.exit(1)

    if 0 > timeout:
        print("The timeout must be a positive value")
        sys.exit(1)

    csock = None
    try:
        if PYTHON_CAN:
            if python_can_args:
                arg_dict = dict((k, literal_eval(v)) for k, v in (
                    pair.split('=')
                    for pair in re.split(', | |,', python_can_args)))
                csock = CANSocket(bustype=interface,
                                  channel=channel,
                                  **arg_dict)
            else:
                csock = CANSocket(bustype=interface, channel=channel)
        else:
            csock = CANSocket(channel=channel)

        with ISOTPSocket(csock, source, destination, basecls=OBD,
                         padding=True) as isock:
            signal.signal(signal.SIGINT, signal_handler)
            obd_scan(isock, timeout, supported, unsupported, verbose)

    except Exception as e:
        usage(True)
        print("\nSocket couldn't be created. Check your arguments.\n",
              file=sys.stderr)
        print(e, file=sys.stderr)
        sys.exit(1)

    finally:
        if csock is not None:
            csock.close()