diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2014-08-07 13:13:58 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2014-08-07 20:34:28 +0200 |
commit | 7782c08047fc44874caf1c03c153a070f9ac557a (patch) | |
tree | 54ef13545a93221b2b4598822c3f3b830c2c82d4 /commands/dfu.c | |
parent | 038be0fbb5e983a498752b283319ba926f994a4b (diff) | |
parent | 46ff98b011c86511a8585a01fa3c4fbb774c9c54 (diff) | |
download | barebox-7782c08047fc44874caf1c03c153a070f9ac557a.tar.gz barebox-7782c08047fc44874caf1c03c153a070f9ac557a.tar.xz |
Merge branch 'for-next/usb-gadget'
Conflicts:
commands/Makefile
common/Kconfig
common/Makefile
drivers/usb/gadget/dfu.c
Diffstat (limited to 'commands/dfu.c')
-rw-r--r-- | commands/dfu.c | 136 |
1 files changed, 10 insertions, 126 deletions
diff --git a/commands/dfu.c b/commands/dfu.c index 7f78f3bbc2..3f52bbdd98 100644 --- a/commands/dfu.c +++ b/commands/dfu.c @@ -24,71 +24,7 @@ #include <fs.h> #include <xfuncs.h> #include <usb/dfu.h> - -#define PARSE_DEVICE 0 -#define PARSE_NAME 1 -#define PARSE_FLAGS 2 - -static int dfu_do_parse_one(char *partstr, char **endstr, struct usb_dfu_dev *dfu) -{ - int i = 0, state = PARSE_DEVICE; - char device[PATH_MAX]; - char name[PATH_MAX]; - - memset(device, 0, sizeof(device)); - memset(name, 0, sizeof(name)); - dfu->flags = 0; - - while (*partstr && *partstr != ',') { - switch (state) { - case PARSE_DEVICE: - if (*partstr == '(') { - state = PARSE_NAME; - i = 0; - } else { - device[i++] = *partstr; - } - break; - case PARSE_NAME: - if (*partstr == ')') { - state = PARSE_FLAGS; - i = 0; - } else { - name[i++] = *partstr; - } - break; - case PARSE_FLAGS: - switch (*partstr) { - case 's': - dfu->flags |= DFU_FLAG_SAFE; - break; - case 'r': - dfu->flags |= DFU_FLAG_READBACK; - break; - case 'c': - dfu->flags |= DFU_FLAG_CREATE; - break; - default: - return -EINVAL; - } - break; - default: - return -EINVAL; - } - partstr++; - } - - if (state != PARSE_FLAGS) - return -EINVAL; - - dfu->name = xstrdup(name); - dfu->dev = xstrdup(device); - if (*partstr == ',') - partstr++; - *endstr = partstr; - - return 0; -} +#include <linux/err.h> /* dfu /dev/self0(bootloader)sr,/dev/nand0.root.bb(root) * @@ -97,73 +33,26 @@ static int dfu_do_parse_one(char *partstr, char **endstr, struct usb_dfu_dev *df */ static int do_dfu(int argc, char *argv[]) { - int opt, n = 0; - struct usb_dfu_pdata pdata; - char *endptr, *argstr; + struct f_dfu_opts opts; + char *argstr; struct usb_dfu_dev *dfu_alts = NULL; - char *manufacturer = "barebox"; - const char *productname = barebox_get_model(); - u16 idVendor = 0, idProduct = 0; int ret; - while((opt = getopt(argc, argv, "m:p:V:P:")) > 0) { - switch(opt) { - case 'm': - manufacturer = optarg; - break; - case 'p': - productname = optarg; - break; - case 'V': - idVendor = simple_strtoul(optarg, NULL, 0); - break; - case 'P': - idProduct = simple_strtoul(optarg, NULL, 0); - break; - } - } - if (argc != optind + 1) return COMMAND_ERROR_USAGE; argstr = argv[optind]; - if (!idProduct && !idVendor) { - idVendor = 0x1d50; /* Openmoko, Inc */ - idProduct = 0x60a2; /* barebox bootloader USB DFU Mode */ - } - - if ((idProduct && !idVendor) || (!idProduct && idVendor)) { - printf("Only one of vendor id or product id given\n"); - return -EINVAL; + opts.files = file_list_parse(argstr); + if (IS_ERR(opts.files)) { + ret = PTR_ERR(opts.files); + goto out; } - for (n = 0; *argstr; n++) { - dfu_alts = xrealloc(dfu_alts, sizeof(*dfu_alts) * (n + 1)); - if (dfu_do_parse_one(argstr, &endptr, &dfu_alts[n])) { - printf("parse error\n"); - ret = -EINVAL; - goto out; - } - argstr = endptr; - } - - pdata.alts = dfu_alts; - pdata.num_alts = n; - - pdata.manufacturer = manufacturer; - pdata.productname = productname; - pdata.idVendor = idVendor; - pdata.idProduct = idProduct; - - ret = usb_dfu_register(&pdata); + ret = usb_dfu_register(&opts); + file_list_free(opts.files); out: - while (n) { - n--; - free(dfu_alts[n].name); - free(dfu_alts[n].dev); - }; free(dfu_alts); @@ -182,17 +71,12 @@ BAREBOX_CMD_HELP_TEXT("'s': safe mode (download the complete image before flashi BAREBOX_CMD_HELP_TEXT("'r': readback of the firmware is allowed; ") BAREBOX_CMD_HELP_TEXT("'c': the file will be created (for use with regular files).") BAREBOX_CMD_HELP_TEXT("") -BAREBOX_CMD_HELP_TEXT("Options:") -BAREBOX_CMD_HELP_OPT ("-m STR", "Manufacturer string (barebox)") -BAREBOX_CMD_HELP_OPT ("-p STR", "product string") -BAREBOX_CMD_HELP_OPT ("-V ID", "vendor id") -BAREBOX_CMD_HELP_OPT ("-P ID", "product id") BAREBOX_CMD_HELP_END BAREBOX_CMD_START(dfu) .cmd = do_dfu, BAREBOX_CMD_DESC("device firmware update") - BAREBOX_CMD_OPTS("[-mpVP] DESC") + BAREBOX_CMD_OPTS("DESC") BAREBOX_CMD_GROUP(CMD_GRP_MISC) BAREBOX_CMD_HELP(cmd_dfu_help) BAREBOX_CMD_END |