Exemplo n.º 1
0
def on_upload(source, target, env):
    envkey = None
    ghst = False
    firmware_path = str(source[0])
    upload_force = target[0].name == 'uploadforce' # 'in' operator doesn't work on Alias list

    upload_port = env.get('UPLOAD_PORT', None)
    if upload_port is None:
        upload_port = serials_find.get_serial_port()
    upload_speed = env.get('UPLOAD_SPEED', None)
    if upload_speed is None:
        upload_speed = BAUDRATE_DEFAULT

    upload_flags = env.get('UPLOAD_FLAGS', [])
    for line in upload_flags:
        flags = line.split()
        for flag in flags:
            if "GHST=" in flag:
                ghst = eval(flag.split("=")[1])
            elif "BL_KEY=" in flag:
                envkey = flag.split("=")[1]

    try:
        returncode = uart_upload(upload_port, firmware_path, upload_speed, ghst, upload_force, key=envkey, target=env['PIOENV'])
    except Exception as e:
        dbg_print("{0}\n".format(e))
        return ElrsUploadResult.ErrorGeneral
    return returncode
Exemplo n.º 2
0
def upload_stm32_uart(args):
    if args.port == None:
        args.port = serials_find.get_serial_port()
    return UARTupload.uart_upload(args.port,
                                  args.file.name,
                                  args.baud,
                                  target=args.target)
Exemplo n.º 3
0
def on_upload(source, target, env):
    envkey = None
    ghst = False
    firmware_path = str(source[0])

    upload_port = env.get('UPLOAD_PORT', None)
    if upload_port is None:
        upload_port = serials_find.get_serial_port()
    upload_speed = env.get('UPLOAD_SPEED', None)
    if upload_speed is None:
        upload_speed = BAUDRATE_DEFAULT

    upload_flags = env.get('UPLOAD_FLAGS', [])
    for line in upload_flags:
        flags = line.split()
        for flag in flags:
            if "GHST=" in flag:
                ghst = eval(flag.split("=")[1])
            elif "BL_KEY=" in flag:
                envkey = flag.split("=")[1]

    try:
        uart_upload(upload_port, firmware_path, upload_speed, ghst, key=envkey, target=env['PIOENV'])
    except Exception as e:
        dbg_print("{0}\n".format(e))
        return -1
    return 0
Exemplo n.º 4
0
def on_upload(source, target, env):
    target_name = env['PIOENV'].upper()
    platform = env.get('PIOPLATFORM', '')
    envkey = None
    ghst = False
    firmware_path = str(source[0])

    elrs_baudrate = bootloader.BAUDRATE_ELRS_PROTO
    flags = env.get('BUILD_FLAGS', [])
    for flag in flags:
        if 'PROTOCOL_ELRS_RX_BAUDRATE=1' in flag:
            elrs_baudrate = eval(flag.split("=")[1])
    for flag in flags:
        if 'PROTOCOL_ELRS_TO_FC=' in flag and 0 < eval(flag.split("=")[1]):
            print_log("ELRS build option detected. Change upload speed to %u" %
                      elrs_baudrate)
            env['UPLOAD_SPEED'] = elrs_baudrate

    upload_port = env.get('UPLOAD_PORT', None)
    if upload_port is None:
        upload_port = serials_find.get_serial_port()
    upload_speed = env.get('UPLOAD_SPEED', None)
    #if "_RX_" in target_name:
    #    upload_speed = env.GetProjectOption("upload_speed_passthrough", upload_speed)
    if upload_speed is None:
        upload_speed = bootloader.BAUDRATE_CRSF

    upload_flags = env.get('UPLOAD_FLAGS', [])
    for line in upload_flags:
        flags = line.split()
        for flag in flags:
            if "GHST=" in flag:
                ghst = eval(flag.split("=")[1])
            elif "BL_KEY=" in flag:
                envkey = flag.split("=")[1]

    try:
        if platform in ['ststm32']:
            uploader_xmodem.uart_upload(upload_port,
                                        firmware_path,
                                        upload_speed,
                                        ghst,
                                        key=envkey,
                                        target=target_name)
        elif platform in ['espressif8266', 'espressif32']:
            uploader_esp.uart_upload(upload_port,
                                     firmware_path,
                                     upload_speed,
                                     key=envkey,
                                     target=target_name)
    except Exception as e:
        print_error("{0}\n".format(e))
        return -1
    return 0
Exemplo n.º 5
0
def upload_esp8266_uart(args):
    if args.port == None:
        args.port = serials_find.get_serial_port()
    try:
        esptool.main([
            '--chip', 'esp8266', '--baud',
            str(args.baud), '--after', 'soft_reset', 'write_flash', '0x0000',
            args.file.name
        ])
    except:
        return ElrsUploadResult.ErrorGeneral
    return ElrsUploadResult.Success
Exemplo n.º 6
0
def upload_esp32_etx(args):
    if args.port == None:
        args.port = serials_find.get_serial_port()
    ETXinitPassthrough.etx_passthrough_init(args.port, args.baud)
    try:
        esptool.main([
            '--chip', 'esp32', '--baud',
            str(args.baud), '--before', 'no_reset', '--after', 'hard_reset',
            'write_flash', '-z', '--flash_mode', 'dio', '--flash_freq', '40m',
            '--flash_size', 'detect', '0x1000', 'bootloader_dio_40m.bin',
            '0x8000', 'partitions.bin', '0xe000', 'boot_app0.bin', '0x10000',
            args.file.name
        ])
    except:
        return ElrsUploadResult.ErrorGeneral
    return ElrsUploadResult.Success
Exemplo n.º 7
0
def on_upload(source, target, env):
    firmware_path = str(source[0])
    protocol = PROTOCOL_DEFAULT

    upload_port = env.get('UPLOAD_PORT', None)
    if upload_port is None:
        upload_port = serials_find.get_serial_port()

    upload_flags = env.get('UPLOAD_FLAGS', [])
    for line in upload_flags:
        flags = line.split()
        for flag in flags:
            if "PROTOCOL=" in flag:
                protocol = flag.split("=")[1]

    uart_upload(upload_port, firmware_path, protocol)
Exemplo n.º 8
0
def on_upload(source, target, env):
    ghst = False
    firmware_path = str(source[0])

    upload_port = env.get('UPLOAD_PORT', None)
    if upload_port is None:
        upload_port = serials_find.get_serial_port()
    upload_speed = env.get('UPLOAD_SPEED', None)
    if upload_speed is None:
        upload_speed = BAUDRATE_DEFAULT

    upload_flags = env.get('UPLOAD_FLAGS', [])
    for line in upload_flags:
        flags = line.split()
        for flag in flags:
            if "GHST=" in flag:
                ghst = eval(flag.split("=")[1])

    uart_upload(upload_port, firmware_path, upload_speed, ghst)
Exemplo n.º 9
0
def upload_esp8266_bf(args):
    if args.port == None:
        args.port = serials_find.get_serial_port()
    mode = 'upload'
    if args.force == True:
        mode = 'uploadforce'
    retval = BFinitPassthrough.main(
        ['-p', args.port, '-b',
         str(args.baud), '-r', args.target, '-a', mode])
    if retval != ElrsUploadResult.Success:
        return retval
    try:
        esptool.main([
            '--chip', 'esp8266', '--baud',
            str(args.baud), '--before', 'no_reset', '--after', 'soft_reset',
            'write_flash', '0x0000', args.file.name
        ])
    except:
        return ElrsUploadResult.ErrorGeneral
    return ElrsUploadResult.Success
Exemplo n.º 10
0
        if half_duplex == True:
            BootloaderInitSeq1 = bytes([0x89,0x04,0x32,0x62,0x6c,0x0A]) # GHST
            dbg_print("  Using GHST (half duplex)!\n")
        else:
            BootloaderInitSeq1 = bytes([0xEC,0x04,0x32,0x62,0x6c,0x0A]) # CRSF

        s.write(BootloaderInitSeq1)

    time.sleep(.2)
    s.close()


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description="Initialize BetaFlight passthrough and optionally send a reboot comamnd sequence")
    parser.add_argument("-b", "--baud", type=int, default=420000,
        help="Baud rate for passthrough communication")
    parser.add_argument("-p", "--port", type=str,
        help="Override serial port autodetection and use PORT")
    parser.add_argument("-nr", "--no-reset", action="store_false",
        dest="reset_to_bl",
        help="Do not send reset_to_bootloader command sequence")
    args = parser.parse_args()

    if (args.port == None):
        args.port = serials_find.get_serial_port()

    try:
        bf_passthrough_init(args.port, args.baud, reset_to_bl=args.reset_to_bl)
    except PassthroughEnabled as err:
        dbg_print(str(err))
Exemplo n.º 11
0
def main(custom_args=None):
    parser = argparse.ArgumentParser(
        description=
        "Initialize BetaFlight passthrough and optionally send a reboot comamnd sequence"
    )
    parser.add_argument("-b",
                        "--baud",
                        type=int,
                        default=420000,
                        help="Baud rate for passthrough communication")
    parser.add_argument("-p",
                        "--port",
                        type=str,
                        help="Override serial port autodetection and use PORT")
    parser.add_argument(
        "-r",
        "--target",
        type=str,
        help="The target firmware that is going to be uploaded")
    parser.add_argument(
        "-nr",
        "--no-reset",
        action="store_false",
        dest="reset_to_bl",
        help="Do not send reset_to_bootloader command sequence")
    parser.add_argument("-hd",
                        "--half-duplex",
                        action="store_true",
                        dest="half_duplex",
                        help="Use half duplex mode")
    parser.add_argument(
        "-t",
        "--type",
        type=str,
        default="ESP82",
        help=
        "Defines flash target type which is sent to target in reboot command")
    parser.add_argument(
        "-a",
        "--action",
        type=str,
        default="upload",
        help=
        "Upload action: upload (default), or uploadforce to flash even on target mismatch"
    )

    args = parser.parse_args(custom_args)

    if (args.port == None):
        args.port = serials_find.get_serial_port()

    returncode = ElrsUploadResult.Success
    try:
        bf_passthrough_init(args.port, args.baud)
    except PassthroughEnabled as err:
        dbg_print(str(err))

    if args.reset_to_bl:
        returncode = reset_to_bootloader(args)

    return returncode