Ejemplo n.º 1
0
int main(int argc, char *argv[]) {
	if (2 != argc) {
		usage();
		return 1;
	}

	struct usb_dev_handle *hdev = open_port();
	if (!hdev) {
		return 1;
	}

	unsigned int len = 0;
	unsigned char* write_buf = prepare_write_buf(argv[1], &len);
	if (NULL == write_buf)
		return 1;

	unsigned int remain = len;
	unsigned int towrite;
	printf("Writing data ...\n");
	while (remain) {
		towrite = remain > 512 ? 512 : remain;
		if (towrite != usb_bulk_write(hdev, 0x03, write_buf + (len - remain),
				towrite, 3000)) {
			perror("usb_bulk_write failed");
			break;
		}
		remain -= towrite;
		printf("\r%d%\t %d bytes     ", (len - remain) * 100 / len, len
				- remain);
		fflush(stdout);
	}
	if (0 == remain)
		printf("Done!\n");
	return 0;
}
Ejemplo n.º 2
0
int main(int argc, char *argv[])
{
    unsigned load_addr = RAM_BASE;
    char* path = NULL;
    int	c;

    //处理命令行参数
    while ((c = getopt (argc, argv, "a:h")) != EOF)
        switch (c)
        {
        case 'a':
            load_addr = strtol(optarg, NULL, 16);
            continue;
        case '?':
        case 'h':
        default:
usage:
            printf("Usage: dwn2 [-a load_addr] <filename>\n");
            printf("Default load address: 0x40008000\n");
            return 1;
        }
    if (optind < argc)
        path = argv[optind];
    else
        goto usage;
    printf("load address: 0x%08X\n", load_addr);

    //打开设备文件
    struct usb_dev_handle *hdev = open_port();
    if (!hdev)
    {
        return 1;
    }

    //准备写入空间
    unsigned int len = 0;
    unsigned char* write_buf = prepare_write_buf(path, &len, load_addr);
    if (NULL == write_buf)
        return 1;
    //写入数据
    unsigned int remain = len;
    unsigned int towrite;
    printf("Writing data ...\n");
    while (remain)
    {
        towrite = remain > 512 ? 512 : remain;
        if (towrite != usb_bulk_write(hdev, 0x02, write_buf+(len-remain), towrite, 3000))
        {
            perror("usb_bulk_write failed");
            break;
        }
        remain -= towrite;
        printf("\r%d%%\t %d bytes     ", (len-remain)*100/len, len-remain);
        fflush(stdout);
    }
    if (0 == remain)
        printf("Done!\n");
    return 0;
}