X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/hmcfgusb/blobdiff_plain/920d34e08c728c4e56f80fad26bc8f81f044f674..7ba4ea19644711d8f86c2df3a244da797e23cc96:/hmsniff.c diff --git a/hmsniff.c b/hmsniff.c index 89e2e82..051c95c 100644 --- a/hmsniff.c +++ b/hmsniff.c @@ -1,6 +1,6 @@ /* HM-sniffer for HM-CFG-USB * - * Copyright (c) 2013-15 Michael Gernoth + * Copyright (c) 2013-16 Michael Gernoth * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to @@ -101,6 +101,12 @@ char *hm_message_types(uint8_t type, uint8_t subtype) case 0x70: return "Weather event"; break; + case 0xca: + return "Firmware"; + break; + case 0xcb: + return "Rf configuration"; + break; default: return "?"; break; @@ -193,6 +199,7 @@ static int parse_hmcfgusb(uint8_t *buf, int buf_len, void *data) break; case 'R': case 'I': + case 'G': break; default: hexdump(buf, buf_len, "Unknown> "); @@ -206,6 +213,8 @@ void hmsniff_syntax(char *prog) { fprintf(stderr, "Syntax: %s options\n\n", prog); fprintf(stderr, "Possible options:\n"); + fprintf(stderr, "\t-f\t\tfast (100k/firmware update) mode\n"); + fprintf(stderr, "\t-S serial\tuse HM-CFG-USB with given serial\n"); fprintf(stderr, "\t-v\t\tverbose mode\n"); fprintf(stderr, "\t-V\t\tshow version (" VERSION ")\n"); @@ -215,17 +224,26 @@ int main(int argc, char **argv) { struct hmcfgusb_dev *dev; struct recv_data rdata; + char *serial = NULL; int quit = 0; + int speed = 10; + uint8_t speed_buf[2]; int opt; - while((opt = getopt(argc, argv, "vV")) != -1) { + while((opt = getopt(argc, argv, "fS:vV")) != -1) { switch (opt) { + case 'f': + speed = 100; + break; + case 'S': + serial = optarg; + break; case 'v': verbose = 1; break; case 'V': printf("hmsniff " VERSION "\n"); - printf("Copyright (c) 2013-15 Michael Gernoth\n\n"); + printf("Copyright (c) 2013-16 Michael Gernoth\n\n"); exit(EXIT_SUCCESS); case 'h': case ':': @@ -243,7 +261,7 @@ int main(int argc, char **argv) memset(&rdata, 0, sizeof(rdata)); rdata.wrong_hmid = 0; - dev = hmcfgusb_init(parse_hmcfgusb, &rdata); + dev = hmcfgusb_init(parse_hmcfgusb, &rdata, serial); if (!dev) { fprintf(stderr, "Can't initialize HM-CFG-USB, retrying in 1s...\n"); sleep(1); @@ -254,6 +272,11 @@ int main(int argc, char **argv) hmcfgusb_send_null_frame(dev, 1); hmcfgusb_send(dev, (unsigned char*)"K", 1, 1); + hmcfgusb_send_null_frame(dev, 1); + speed_buf[0] = 'G'; + speed_buf[1] = speed; + hmcfgusb_send(dev, speed_buf, 2, 1); + while(!quit) { int fd;