*/
#include <stdio.h>
+#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#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
#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
{
int ret;
int transferred;
- uint8_t response[64] = { 0 };
+ uint8_t response[VISOMAT_PACKET_SIZE] = { 0 };
unsigned int i;
i = 0;
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;
return 0;
}
-int main(void)
+static void usage(const char *name)
+{
+ printf("usage: %s [OPTIONS]\n\n", name);
+ printf("OPTIONS:\n");
+ printf("\t-D\t\tenable libusb debug output\n");
+ printf("\t-h\t\tthis help message\n");
+}
+
+int main(int argc, char *argv[])
{
int ret;
+ int opt;
+ bool enable_libusb_debug = false;
libusb_device_handle *dev;
int current_configuration;
+ while ((opt = getopt(argc, argv, "Dh")) != -1) {
+ switch (opt) {
+ case 'D':
+ enable_libusb_debug = true;
+ break;
+ case 'h':
+ usage(argv[0]);
+ ret = 0;
+ goto out;
+ default: /* '?' */
+ usage(argv[0]);
+ ret = -EINVAL;
+ goto out;
+ }
+ }
+
ret = libusb_init(NULL);
if (ret < 0) {
fprintf(stderr, "libusb_init failed: %s\n",
goto out;
}
- libusb_set_debug(NULL, LIBUSB_LOG_LEVEL_INFO);
+ libusb_set_debug(NULL, enable_libusb_debug ?
+ LIBUSB_LOG_LEVEL_DEBUG : LIBUSB_LOG_LEVEL_INFO);
dev = libusb_open_device_with_vid_pid(NULL,
VISOMAT_DEVICE_VID,