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; }
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; }