From 97b63d0329774b558800adc48b35fe335b2724d2 Mon Sep 17 00:00:00 2001 From: Martin Meloun Date: Fri, 9 Aug 2013 17:41:33 +0200 Subject: [PATCH] A simple host application to talk to ROCON through USB Currently not integrated with OCERA framework, link with libusb. --- host/rocon-send_cmd/rocon-send_cmd.c | 99 ++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 host/rocon-send_cmd/rocon-send_cmd.c diff --git a/host/rocon-send_cmd/rocon-send_cmd.c b/host/rocon-send_cmd/rocon-send_cmd.c new file mode 100644 index 0000000..6504c8d --- /dev/null +++ b/host/rocon-send_cmd/rocon-send_cmd.c @@ -0,0 +1,99 @@ +#include +#include +#include + +/* ROCON setup */ +#define ROCON_VID 0x1669 +#define ROCON_PID 0x1023 +#define ROCON_CONFIGURATION 1 +#define ROCON_INTFERFACE 0 + +/* Endpoints */ +#define EP_IN 0x81 +#define EP_OUT 0x01 + +#define BUFFER_SIZE 1024 + +int opening_rocon = 0; + +usb_dev_handle *open_dev(void) +{ + struct usb_bus *bus; + struct usb_device *dev; + + for (bus = usb_get_busses(); bus; bus = bus->next) + { + for (dev = bus->devices; dev; dev = dev->next) + { + if (dev->descriptor.idVendor == ROCON_VID && dev->descriptor.idProduct == ROCON_PID) + { + opening_rocon = 1; + return usb_open(dev); + } + } + } + return NULL; +} + +int main(int argc, char** argv) +{ + usb_dev_handle *dev = NULL; + char buffer[BUFFER_SIZE]; + int ret; + + /* Init */ + usb_init(); + usb_find_busses(); + usb_find_devices(); + + /* Open device */ + if (!(dev = open_dev())) + { + if (opening_rocon) + printf("Error opening ROCON:\n%s\n", usb_strerror()); + else + printf("ROCON not connected!\n"); + + return 1; + } + + /* Set configuration */ + if (usb_set_configuration(dev, ROCON_CONFIGURATION) < 0) + { + printf("Error setting configuration #%d:\n%s\n", ROCON_CONFIGURATION, usb_strerror()); + usb_close(dev); + return 1; + } + + /* Set interface */ + if (usb_claim_interface(dev, ROCON_INTFERFACE) < 0) + { + printf("Error claiming interface #%d:\n%s\n", ROCON_INTFERFACE, usb_strerror()); + usb_close(dev); + return 1; + } + + /* Write command */ + snprintf(buffer, sizeof(buffer), "%s\n", argv[1]); + ret = usb_bulk_write(dev, EP_OUT, buffer, strlen(buffer), 5000); + if (ret < 0) + { + printf("Error sending command %s:\n%s\n", argv[1], usb_strerror()); + usb_release_interface(dev, 0); + usb_close(dev); + return 1; + } + + /* Read response */ + ret = usb_bulk_read(dev, EP_IN, buffer, sizeof(buffer), 5000); + if (ret < 0) + printf("Error reading response:\n%s\n", usb_strerror()); + + buffer[ret] = '\0'; + printf(buffer); + + usb_release_interface(dev, 0); + usb_close(dev); + return 0; +} + -- 2.39.2