X-Git-Url: https://git.ao2.it/visomat-utils.git/blobdiff_plain/1b45f3e735f5a8b0423640e11622233a6c03de01..HEAD:/src/visomat-data-downloader.c diff --git a/src/visomat-data-downloader.c b/src/visomat-data-downloader.c index 2ea275a..1cbe6f5 100644 --- a/src/visomat-data-downloader.c +++ b/src/visomat-data-downloader.c @@ -58,10 +58,12 @@ static void debug_dump_buffer(const char *filename, uint8_t *buffer, unsigned in #define VISOMAT_INTERFACE 1 #define VISOMAT_EP_IN 0x82 #define VISOMAT_EP_OUT 0x03 +#define VISOMAT_PACKET_SIZE 64 #define STX 0x02 #define ETX 0x03 +#define DATETIME_PACKET_SIZE 15 #define BASE_YEAR 2000 typedef enum { @@ -232,18 +234,18 @@ static int decode_eeprom(uint8_t *buffer, static int decode_datetime(uint8_t *buffer, unsigned int len) { int ret; - uint8_t code[4] = { 0 }; + uint8_t code[4] = { 0 }; /* the initial STX + 3 bytes command code */ struct datetime d; uint8_t *pbuffer = buffer; - if (len != 15) + if (len != DATETIME_PACKET_SIZE) return -EINVAL; code[0] = buffer[1]; code[1] = buffer[2]; code[2] = buffer[3]; - ret = extract_datetime(pbuffer + 4, &d); + ret = extract_datetime(pbuffer + sizeof(code), &d); if (ret < 0) return ret; @@ -281,7 +283,7 @@ static int get_response(libusb_device_handle *dev, { int ret; int transferred; - uint8_t response[64] = { 0 }; + uint8_t response[VISOMAT_PACKET_SIZE] = { 0 }; unsigned int i; i = 0; @@ -303,7 +305,7 @@ static int get_response(libusb_device_handle *dev, } while (buffer[i - 1] != ETX && i < len); - /* Check the buffer is a valid response packet */ + /* Check if the buffer contains a valid response packet */ if (buffer[0] != STX || buffer[i - 1] != ETX) return -EINVAL; @@ -314,8 +316,8 @@ static int get_response(libusb_device_handle *dev, #define visomat_device libusb_device_handle static int visomat_dump_eeprom(visomat_device *dev, unsigned int user_mask) { - /* Assuming an EEPROM of 1 KiB */ - uint8_t buffer[1024] = { 0 }; + /* Assuming an EEPROM of 4 KiB */ + uint8_t buffer[4096] = { 0 }; int ret; ret = send_command(dev, VISOMAT_CMD_DUMP_EEPROM); @@ -323,12 +325,11 @@ static int visomat_dump_eeprom(visomat_device *dev, unsigned int user_mask) return ret; ret = get_response(dev, buffer, sizeof(buffer)); + debug("buffer size: %d\n", ret); + debug_dump_buffer("eeprom.bin", buffer, sizeof(buffer)); 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;