visomat-data-downloader: use uint8_t for bytes
[visomat-utils.git] / src / visomat-data-downloader.c
index 2bdd5ea..1b4cde9 100644 (file)
@@ -71,7 +71,7 @@ struct pressure  {
        unsigned int pulses;
 };
 
-static inline int extract_datetime(unsigned char *buffer, struct datetime *d)
+static inline int extract_datetime(uint8_t *buffer, struct datetime *d)
 {
        int ret;
 
@@ -119,8 +119,8 @@ static void print_record_csv_compat(struct datetime *d, struct pressure *p)
        printf("\n");
 }
 
-/* TODO separate better decoding data from printing it */
-static int decode_eeprom(unsigned char *buffer,
+/* TODO: it would be better to separate decoding data from printing it */
+static int decode_eeprom(uint8_t *buffer,
                         unsigned int len,
                         unsigned int user_mask)
 {
@@ -156,6 +156,13 @@ static int decode_eeprom(unsigned char *buffer,
                        /* user_id and num_records take 3 bytes */
                        i += 3;
 
+                       /*
+                        * when there are no records, there is a dummy byte
+                        * which has to be consumed
+                        */
+                       if (num_records == 0)
+                               i += 1;
+
                        for (j = 0; j < num_records; j++) {
                                ret = extract_datetime(buffer + i, &d);
                                if (ret < 0)
@@ -189,12 +196,12 @@ static int decode_eeprom(unsigned char *buffer,
        return 0;
 }
 
-static int decode_datetime(unsigned char *buffer, unsigned int len)
+static int decode_datetime(uint8_t *buffer, unsigned int len)
 {
        int ret;
-       unsigned char code[4] = { 0 };
+       uint8_t code[4] = { 0 };
        struct datetime d;
-       unsigned char *pbuffer = buffer;
+       uint8_t *pbuffer = buffer;
 
        if (len != 15)
                return -EINVAL;
@@ -217,7 +224,7 @@ static int send_command(libusb_device_handle *dev, visomat_command cmd)
 {
        int ret;
        int transferred;
-       unsigned char request[5];
+       uint8_t request[5];
 
        request[0] = STX;
        request[1] = command_codes[cmd][0];
@@ -236,12 +243,12 @@ static int send_command(libusb_device_handle *dev, visomat_command cmd)
 }
 
 static int get_response(libusb_device_handle *dev,
-                       unsigned char *buffer,
+                       uint8_t *buffer,
                        unsigned int len)
 {
        int ret;
        int transferred;
-       unsigned char response[64] = { 0 };
+       uint8_t response[64] = { 0 };
        unsigned int i;
 
        i = 0;
@@ -275,7 +282,7 @@ static int get_response(libusb_device_handle *dev,
 static int visomat_dump_eeprom(visomat_device *dev, unsigned int user_mask)
 {
        /* Assuming an EEPROM of 1 KiB  */
-       unsigned char buffer[1024] = { 0 };
+       uint8_t buffer[1024] = { 0 };
        int ret;
 
        ret = send_command(dev, VISOMAT_CMD_DUMP_EEPROM);
@@ -295,7 +302,7 @@ static int visomat_dump_eeprom(visomat_device *dev, unsigned int user_mask)
 
 static int visomat_get_datetime(visomat_device *dev)
 {
-       unsigned char buffer[255] = { 0 };
+       uint8_t buffer[255] = { 0 };
        int ret;
 
        ret = send_command(dev, VISOMAT_CMD_GET_DATETIME);
@@ -350,7 +357,7 @@ int main(void)
                if (ret < 0) {
                        fprintf(stderr, "libusb_set_configuration failed: %s\n",
                                libusb_error_name(ret));
-                       fprintf(stderr, "Cannot set configuration %hhu\n",
+                       fprintf(stderr, "Cannot set configuration %d\n",
                                VISOMAT_CONFIGURATION);
                        goto out_libusb_close;
                }
@@ -362,7 +369,7 @@ int main(void)
        if (ret < 0) {
                fprintf(stderr, "libusb_claim_interface failed: %s\n",
                        libusb_error_name(ret));
-               fprintf(stderr, "Cannot claim interface %hhu\n",
+               fprintf(stderr, "Cannot claim interface %d\n",
                        VISOMAT_INTERFACE);
                goto out_libusb_close;
        }
@@ -379,7 +386,7 @@ int main(void)
        }
 
        if (current_configuration != VISOMAT_CONFIGURATION) {
-               fprintf(stderr, "libusb configuration changed (expected: %hhu, current: %hhu\n",
+               fprintf(stderr, "libusb configuration changed (expected: %d, current: %d)\n",
                        VISOMAT_CONFIGURATION, current_configuration);
                ret = -EINVAL;
                goto out_libusb_release_interface;