X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=tools%2Fcarlu%2Fsrc%2Fcmd.c;h=d83c107bdae9353f8395ef975d0e1bcfbea91dfb;hb=13859edfa20c4b84b575f8e872636fd8cdd81d7f;hp=a6c9020d3a2b587862e00b6932745e59953b2a73;hpb=e72388a0aa23da8bc8e24a0cbe9d523c5a9ce294;p=carl9170fw.git diff --git a/tools/carlu/src/cmd.c b/tools/carlu/src/cmd.c index a6c9020..d83c107 100644 --- a/tools/carlu/src/cmd.c +++ b/tools/carlu/src/cmd.c @@ -40,6 +40,7 @@ #include "debug.h" #include "fwcmd.h" #include "eeprom.h" +#include "cmd.h" int carlu_cmd_echo(struct carlu *ar, const uint32_t message) { @@ -56,17 +57,34 @@ int carlu_cmd_echo(struct carlu *ar, const uint32_t message) return ret; } +struct carl9170_cmd *carlu_cmd_buf(struct carlu *ar, + const enum carl9170_cmd_oids cmd, const unsigned int len) +{ + struct carl9170_cmd *tmp; + + if (len % 4 || (sizeof(struct carl9170_cmd_head) + len > 64)) + return ERR_PTR(-EINVAL); + + tmp = malloc(sizeof(struct carl9170_cmd_head) + len); + if (tmp) { + tmp->hdr.cmd = cmd; + tmp->hdr.len = len; + } + return tmp; +} + int carlu_cmd_reboot(struct carlu *ar) { + struct carl9170_cmd *reboot; int err; - err = carlusb_cmd(ar, CARL9170_CMD_REBOOT, - NULL, 0, NULL, 0); + /* sure, we could put the struct on the stack too. */ + reboot = carlu_cmd_buf(ar, CARL9170_CMD_REBOOT_ASYNC, 0); + if (IS_ERR_OR_NULL(reboot)) + return reboot ? PTR_ERR(reboot) : -ENOMEM; - if (err == -ETIMEDOUT) - return 0; - - return err ? err : -1; + err = carlusb_cmd_async(ar, reboot, true); + return err; } int carlu_cmd_mem_dump(struct carlu *ar, const uint32_t start,