]> git.zerfleddert.de Git - hmcfgusb/blobdiff - flash-ota.c
update year in license, fix debian/copyright
[hmcfgusb] / flash-ota.c
index 5e24aa6ddb74216e943b4318d94ad932c882b5b1..22f98ce7ac89ec1fb29c51dd6b810f37ee14343c 100644 (file)
@@ -177,6 +177,16 @@ static int parse_culfw(uint8_t *buf, int buf_len, void *data)
                                *e = '\0';
                                v = atoi(s);
                                rdata->version |= v;
+
+                               s = e + 1;
+                               e = strchr(s, ' ');
+                               if (!e) {
+                                       break;
+                               }
+                               *e = '\0';
+                               if (!strcmp(s, "a-culfw")) {
+                                       rdata->version = 0xffff;
+                               }
                        }
                        break;
                case 'E':
@@ -396,6 +406,7 @@ void flash_ota_syntax(char *prog)
        fprintf(stderr, "\t-c device\tenable CUL-mode with CUL at path \"device\"\n");
        fprintf(stderr, "\t-b bps\t\tuse CUL with speed \"bps\" (default: %u)\n", DEFAULT_CUL_BPS);
        fprintf(stderr, "\t-l\t\tlower payloadlen (required for devices with little RAM, e.g. CUL v2 and CUL v4)\n");
+       fprintf(stderr, "\t-S serial\tuse HM-CFG-USB with given serial\n");
        fprintf(stderr, "\t-h\t\tthis help\n");
        fprintf(stderr, "\nOptional parameters for automatically sending device to bootloader\n");
        fprintf(stderr, "\t-C\t\tHMID of central (3 hex-bytes, no prefix, e.g. ABCDEF)\n");
@@ -419,6 +430,7 @@ int main(int argc, char **argv)
        uint8_t msgid = 0x1;
        uint16_t len;
        struct firmware *fw;
+       char *hmcfgusb_serial = NULL;
        int block;
        int pfd;
        int debug = 0;
@@ -430,7 +442,7 @@ int main(int argc, char **argv)
 
        printf("HomeMatic OTA flasher version " VERSION "\n\n");
 
-       while((opt = getopt(argc, argv, "b:c:f:hls:C:D:K:")) != -1) {
+       while((opt = getopt(argc, argv, "b:c:f:hls:C:D:K:S:")) != -1) {
                switch (opt) {
                        case 'b':
                                bps = atoi(optarg);
@@ -484,6 +496,9 @@ int main(int argc, char **argv)
                                        endptr += 2;
                                }
                                break;
+                       case 'S':
+                               hmcfgusb_serial = optarg;
+                               break;
                        case 'h':
                        case ':':
                        case '?':
@@ -535,9 +550,14 @@ int main(int argc, char **argv)
                                break;
                }
 
-               printf("culfw-device firmware version: %u.%02u\n", 
-                       (rdata.version >> 8) & 0xff,
-                       rdata.version & 0xff);
+               printf("culfw-device firmware version: ");
+               if (rdata.version != 0xffff) {
+                       printf("%u.%02u\n",
+                               (rdata.version >> 8) & 0xff,
+                               rdata.version & 0xff);
+               } else {
+                       printf("a-culfw\n");
+               }
 
                if (rdata.version < 0x013a) {
                        fprintf(stderr, "\nThis version does _not_ support firmware upgrade mode, you need at least 1.58!\n");
@@ -548,7 +568,7 @@ int main(int argc, char **argv)
 
                hmcfgusb_set_debug(debug);
 
-               dev.hmcfgusb = hmcfgusb_init(parse_hmcfgusb, &rdata);
+               dev.hmcfgusb = hmcfgusb_init(parse_hmcfgusb, &rdata, hmcfgusb_serial);
                if (!dev.hmcfgusb) {
                        fprintf(stderr, "Can't initialize HM-CFG-USB\n");
                        exit(EXIT_FAILURE);
@@ -593,7 +613,7 @@ int main(int argc, char **argv)
                                                hmcfgusb_close(dev.hmcfgusb);
                                        }
                                        sleep(1);
-                               } while (((dev.hmcfgusb = hmcfgusb_init(parse_hmcfgusb, &rdata)) == NULL) || (!dev.hmcfgusb->bootloader));
+                               } while (((dev.hmcfgusb = hmcfgusb_init(parse_hmcfgusb, &rdata, hmcfgusb_serial)) == NULL) || (!dev.hmcfgusb->bootloader));
                        }
 
                        if (dev.hmcfgusb->bootloader) {
@@ -606,7 +626,7 @@ int main(int argc, char **argv)
                                                hmcfgusb_close(dev.hmcfgusb);
                                        }
                                        sleep(1);
-                               } while (((dev.hmcfgusb = hmcfgusb_init(parse_hmcfgusb, &rdata)) == NULL) || (dev.hmcfgusb->bootloader));
+                               } while (((dev.hmcfgusb = hmcfgusb_init(parse_hmcfgusb, &rdata, hmcfgusb_serial)) == NULL) || (dev.hmcfgusb->bootloader));
                        }
                }
 
Impressum, Datenschutz