diff options
author | Peter Wu <peter@lekensteyn.nl> | 2014-12-14 23:27:45 +0100 |
---|---|---|
committer | Peter Wu <peter@lekensteyn.nl> | 2014-12-14 23:27:45 +0100 |
commit | ce1186d480c0ea870837884796b7dbe56396a836 (patch) | |
tree | 0281b71133e21d901268cd128df1612bc8840c28 /fw-update.c | |
parent | c97ff4308ace592d1a9ced27b4598d09fc969e38 (diff) | |
download | t650-dfu-ce1186d480c0ea870837884796b7dbe56396a836.tar.gz |
Do not return on failure, clean up properly
Properly meaning executing recovery routine and eXITing DFU mode on
receiver.
Diffstat (limited to 'fw-update.c')
-rw-r--r-- | fw-update.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/fw-update.c b/fw-update.c index 70f5e10..72695b0 100644 --- a/fw-update.c +++ b/fw-update.c @@ -201,7 +201,7 @@ bool fw_update(int fd, uint8_t device_index, uint8_t *fw, size_t fw_len) { #define DFU_WRITE(_msg) \ do { \ r = hidpp10_request(fd, &_msg, NULL, NULL); \ - RETURN_IF_FAIL(r == 0, "Write E2 failed, r=%#04x", r); \ + PRWARN_IF_FAIL(r == 0, "Write E2 failed, r=%#04x", r); \ } while (0) HidppMessage dfu_req; @@ -239,7 +239,13 @@ bool fw_update(int fd, uint8_t device_index, uint8_t *fw, size_t fw_len) { // [ix 82 E2] send firmware (+check toggle) dfu_req = DFU_INIT(action); memcpy(&dfu_req.params_l[1], fw + fw_pos, 15); - DFU_WRITE(dfu_req); + r = hidpp10_request(fd, &dfu_req, NULL, NULL); + if (r != 0) { + /* the official updater does 4 attempts (3 retries), this is + * simpler. */ + warnx("Device does not respond! Aborting"); + break; + } /* verify response */ int code = dfu_req.params[0]; |