X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/rigol/blobdiff_plain/65f37f81452610d9e278ab391583584d0ce7f990..7906b3955cc67818ef5fea5c4a92dc2ddfcf9291:/usbtmc.c diff --git a/usbtmc.c b/usbtmc.c index 835b6c8..eb7737a 100644 --- a/usbtmc.c +++ b/usbtmc.c @@ -4,6 +4,7 @@ #include #include +#include "scope.h" #include "usbtmc.h" #define USB_TIMEOUT 50000 @@ -54,7 +55,7 @@ static usb_dev_handle *usbtmc_find_scope() { //Send a scpi-command to the scope. The response goes into the buffer //called resp, with a size of resplen. If resp==NULL, no response //is requested. -int usbtmc_sendscpi(usb_dev_handle *dev, char* cmd, +int usbtmc_sendscpi(struct scope *sc, char* cmd, unsigned char *resp, int resplen) { unsigned char *buff; int len,r,i; @@ -74,10 +75,10 @@ int usbtmc_sendscpi(usb_dev_handle *dev, char* cmd, buff[11]=0x00; //fprintf(stderr,"Writing header len=%d\n", cmdlen); //printb(buff,12); - r=usb_bulk_write(dev, 1, (char*)buff, 12, USB_TIMEOUT); + r=usb_bulk_write(sc->usb.dev, 1, (char*)buff, 12, USB_TIMEOUT); //fprintf(stderr,"%i bytes written. Writing cmd\n",r); //printb(cmd, cmdlen); - r=usb_bulk_write(dev, 1, cmd, cmdlen, USB_TIMEOUT); + r=usb_bulk_write(sc->usb.dev, 1, cmd, cmdlen, USB_TIMEOUT); //fprintf(stderr,"%i bytes written.\n",r); if (resp != NULL && resplen != 0) { //send read command @@ -91,9 +92,9 @@ int usbtmc_sendscpi(usb_dev_handle *dev, char* cmd, buff[11]=0; //fprintf(stderr,"Writing resp req header\n"); //printb(buff,12); - r=usb_bulk_write(dev, 1, (char*)buff, 12, USB_TIMEOUT); + r=usb_bulk_write(sc->usb.dev, 1, (char*)buff, 12, USB_TIMEOUT); //fprintf(stderr,"%i bytes written. Reading response hdr\n",r); - r=usb_bulk_read(dev, 2, (char*)buff, 0x40, USB_TIMEOUT); + r=usb_bulk_read(sc->usb.dev, 2, (char*)buff, 0x40, USB_TIMEOUT); //printb(buff,r); len=chars2int(buff+4); //fprintf(stderr,"%i bytes read. Resplen=%i\n",r,len); @@ -104,7 +105,7 @@ int usbtmc_sendscpi(usb_dev_handle *dev, char* cmd, if (len > 0x40-12) { //fprintf(stderr," Reading response:\n"); if (resplenusb.dev, 2, (char*)resp+(0x40-12), len-(0x40-12), USB_TIMEOUT); //fprintf(stderr,"%i bytes read, wanted %i.\n", r, len-(0x40-12)); return r+(0x40-12); } @@ -113,21 +114,22 @@ int usbtmc_sendscpi(usb_dev_handle *dev, char* cmd, return 0; } -void usbtmc_claim(usb_dev_handle *sc) +void usbtmc_claim(struct scope *sc) { - usb_claim_interface(sc, 0); + usb_claim_interface(sc->usb.dev, 0); } -void usbtmc_release(usb_dev_handle *sc) +void usbtmc_release(struct scope *sc) { - usb_release_interface(sc, 0); + usb_release_interface(sc->usb.dev, 0); } //Initialize the scope. -usb_dev_handle* usbtmc_initscope(void) { +struct scope* usbtmc_initscope(void) { int r; unsigned char buff[10]; usb_dev_handle *dev; + struct scope *sc; //Init libusb usb_init(); @@ -136,11 +138,20 @@ usb_dev_handle* usbtmc_initscope(void) { if (!dev) { return NULL; } - usbtmc_claim(dev); + + sc = calloc(1, sizeof(struct scope)); + if (sc == NULL) { + perror("calloc"); + exit(EXIT_FAILURE); + } + + sc->usb.dev = dev; + + usbtmc_claim(sc); //The following code isn't really necessary, the program works //OK without it too. - r=usb_control_msg(dev, 0xC8, 9, 0, 0, (char*)buff, 4, USB_TIMEOUT); - usbtmc_release(dev); + r=usb_control_msg(sc->usb.dev, 0xC8, 9, 0, 0, (char*)buff, 4, USB_TIMEOUT); + usbtmc_release(sc); if (r < 0) { fprintf (stderr, "Error %d sending init message: %s\n", r, strerror (-r)); @@ -150,11 +161,11 @@ usb_dev_handle* usbtmc_initscope(void) { if (chars2int(buff)!=0x40005dc) { fprintf(stderr,"Init: buff[%i]=%x\n",r,chars2int(buff)); } - return dev; + return sc; } -void usbtmc_close(usb_dev_handle *sc) +void usbtmc_close(struct scope *sc) { //Free up and exit - usb_close(sc); + usb_close(sc->usb.dev); }