visomat-data-downloader: add some debug facilities
[visomat-utils.git] / src / visomat-data-downloader.c
index 1b4cde9..69f62d6 100644 (file)
 #include <unistd.h>
 #include <libusb.h>
 
+#ifdef DEBUG
+#define debug(...) fprintf(stderr, __VA_ARGS__)
+static void debug_dump_buffer(const char *filename, uint8_t *buffer, unsigned int len)
+{
+       FILE *dump_file;
+
+       dump_file = fopen(filename, "wb");
+       if (dump_file == NULL) {
+               fprintf(stderr, "Failed to open %s: %s\n", filename, strerror(errno));
+               return;
+       }
+
+       fwrite(buffer, 1, len, dump_file);
+       fclose(dump_file);
+}
+#else
+#define debug(...) do {} while(0)
+static void debug_dump_buffer(const char *filename, uint8_t *buffer, unsigned int len)
+{
+       (void)filename;
+       (void)buffer;
+       (void)len;
+}
+#endif
+
 #define VISOMAT_DEVICE_VID    0x1247
 #define VISOMAT_DEVICE_PID    0x00f8
 #define VISOMAT_CONFIGURATION 1
@@ -133,8 +158,15 @@ static int decode_eeprom(uint8_t *buffer,
        struct datetime d;
        struct pressure p;
 
-       if (buffer[0] != STX || buffer[1] != 'M' || buffer[len - 1] != ETX)
+       if (buffer[0] != STX || buffer[1] != 'M') {
+               fprintf(stderr, "Usupported data.\n");
                return -EINVAL;
+       }
+
+       if (buffer[len - 1] != ETX) {
+               fprintf(stderr, "Bad terminator in data. Buffer too small?\n");
+               return -EINVAL;
+       }
 
        /* skip the initial STX */
        i = 1;
@@ -293,6 +325,9 @@ static int visomat_dump_eeprom(visomat_device *dev, unsigned int user_mask)
        if (ret < 0)
                return ret;
 
+       debug("buffer len: %d\n", ret);
+       debug_dump_buffer("eeprom.bin", buffer, sizeof(buffer));
+
        ret = decode_eeprom(buffer, ret, user_mask);
        if (ret < 0)
                return ret;