HMUARTLGW_ENTER_BOOTLOADER,
HMUARTLGW_ENTER_BOOTLOADER_ACK,
HMUARTLGW_BOOTLOADER,
+ HMUARTLGW_HMIP_BOOTLOADER,
HMUARTLGW_ENTER_APPLICATION,
HMUARTLGW_ENTER_APPLICATION_ACK,
HMUARTLGW_APPLICATION,
HMUARTLGW_DUAL_APPLICATION,
+ HMUARTLGW_HMIP_APPLICATION,
};
struct recv_data {
if (!strncmp(((char*)buf)+2, "DualCoPro_App", 13)) {
rdata->state = HMUARTLGW_DUAL_APPLICATION;
return 1;
+ } else if (!strncmp(((char*)buf)+2, "HMIP_TRX_App", 12)) {
+ rdata->state = HMUARTLGW_HMIP_APPLICATION;
+ return 1;
+ } else if (!strncmp(((char*)buf)+2, "HMIP_TRX_Bl", 11)) {
+ rdata->state = HMUARTLGW_HMIP_BOOTLOADER;
+ return 1;
}
}
break;
break;
}
+ /* Try to query current app in case we might be in the DUAL/HMIP-Bootloader */
+ if ((buf[0] == HMUARTLGW_OS_ACK) && (buf[1] == 0x03)) {
+ buf[0] = HMUARTLGW_DUAL_GET_APP;
+ hmuartlgw_send(rdata->dev, buf, 1, HMUARTLGW_DUAL);
+ }
+
return 1;
}
void *cb_data_old = dev->cb_data;
struct recv_data rdata = { 0 };
uint8_t buf[128] = { 0 };
+ int ret;
if (debug) {
fprintf(stderr, "Entering bootloader\n");
buf[0] = HMUARTLGW_OS_GET_APP;
hmuartlgw_send(dev, buf, 1, HMUARTLGW_OS);
do {
- hmuartlgw_poll(dev, HMUARTLGW_INIT_TIMEOUT);
+ errno = 0;
+ ret = hmuartlgw_poll(dev, HMUARTLGW_INIT_TIMEOUT);
+ if (ret == -1 && errno == ETIMEDOUT) {
+ fprintf(stderr, "Communication with the module timed out, is the serial port configured correctly?\n");
+ exit(1);
+ }
} while (rdata.state == HMUARTLGW_QUERY_APPSTATE);
- if (rdata.state != HMUARTLGW_BOOTLOADER) {
+ if ((rdata.state != HMUARTLGW_BOOTLOADER) &&
+ (rdata.state != HMUARTLGW_HMIP_BOOTLOADER)) {
rdata.dev = dev;
rdata.state = HMUARTLGW_ENTER_BOOTLOADER;
buf[0] = HMUARTLGW_OS_CHANGE_APP;
hmuartlgw_send(dev, buf, 1, HMUARTLGW_OS);
do {
- hmuartlgw_poll(dev, HMUARTLGW_INIT_TIMEOUT);
- } while (rdata.state != HMUARTLGW_BOOTLOADER);
+ errno = 0;
+ ret = hmuartlgw_poll(dev, HMUARTLGW_INIT_TIMEOUT);
+ if (ret == -1 && errno == ETIMEDOUT) {
+ fprintf(stderr, "Communication with the module timed out, is the serial port configured correctly?\n");
+ exit(1);
+ }
+ } while ((rdata.state != HMUARTLGW_BOOTLOADER) &&
+ (rdata.state != HMUARTLGW_HMIP_BOOTLOADER));
printf("Waiting for bootloader to settle...\n");
sleep(HMUARTLGW_SETTLE_TIME);
void *cb_data_old = dev->cb_data;
struct recv_data rdata = { 0 };
uint8_t buf[128] = { 0 };
+ int ret;
if (debug) {
fprintf(stderr, "Entering application\n");
buf[0] = HMUARTLGW_OS_GET_APP;
hmuartlgw_send(dev, buf, 1, HMUARTLGW_OS);
do {
- hmuartlgw_poll(dev, HMUARTLGW_INIT_TIMEOUT);
+ errno = 0;
+ ret = hmuartlgw_poll(dev, HMUARTLGW_INIT_TIMEOUT);
+ if (ret == -1 && errno == ETIMEDOUT) {
+ fprintf(stderr, "Communication with the module timed out, is the serial port configured correctly?\n");
+ exit(1);
+ }
} while (rdata.state == HMUARTLGW_QUERY_APPSTATE);
if ((rdata.state != HMUARTLGW_APPLICATION) &&
buf[0] = HMUARTLGW_OS_CHANGE_APP;
hmuartlgw_send(dev, buf, 1, HMUARTLGW_OS);
do {
- hmuartlgw_poll(dev, HMUARTLGW_INIT_TIMEOUT);
+ errno = 0;
+ ret = hmuartlgw_poll(dev, HMUARTLGW_INIT_TIMEOUT);
+ if (ret == -1 && errno == ETIMEDOUT) {
+ fprintf(stderr, "Communication with the module timed out, is the serial port configured correctly?\n");
+ exit(1);
+ }
} while ((rdata.state != HMUARTLGW_APPLICATION) &&
(rdata.state != HMUARTLGW_DUAL_APPLICATION));