#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 {
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;
{
int ret;
int transferred;
- uint8_t response[64] = { 0 };
+ uint8_t response[VISOMAT_PACKET_SIZE] = { 0 };
unsigned int i;
i = 0;
} 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;
#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);
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;