]> git.zerfleddert.de Git - rigol/blobdiff - usbtmc.c
usbtmc now uses struct scope
[rigol] / usbtmc.c
index 835b6c8b84b2a6449f13f4e98e16052248f5dc9d..eb7737ad287efda71b1f49008d1835da374c6595 100644 (file)
--- a/usbtmc.c
+++ b/usbtmc.c
@@ -4,6 +4,7 @@
 #include <usb.h>
 #include <arpa/inet.h>
 
 #include <usb.h>
 #include <arpa/inet.h>
 
+#include "scope.h"
 #include "usbtmc.h"
 
 #define USB_TIMEOUT 50000
 #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.
 //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;
                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);
        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);
        //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
        //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);
                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);
                //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);
                //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 (resplen<len) len=resplen;
                if (len > 0x40-12) {
                        //fprintf(stderr," Reading response:\n");
                        if (resplen<len) len=resplen;
-                       r=usb_bulk_read(dev, 2, (char*)resp+(0x40-12), len-(0x40-12), USB_TIMEOUT);
+                       r=usb_bulk_read(sc->usb.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);
                }
                        //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;
 }
 
        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.
 }
 
 //Initialize the scope.
-usb_dev_handle* usbtmc_initscope(void) {
+struct scope* usbtmc_initscope(void) {
        int r;
        unsigned char buff[10];
        usb_dev_handle *dev;
        int r;
        unsigned char buff[10];
        usb_dev_handle *dev;
+       struct scope *sc;
 
        //Init libusb
        usb_init();
 
        //Init libusb
        usb_init();
@@ -136,11 +138,20 @@ usb_dev_handle* usbtmc_initscope(void) {
        if (!dev) {
                return NULL;
        }
        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.
        //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));
        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));
        }
        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
 {
        //Free up and exit
-       usb_close(sc);
+       usb_close(sc->usb.dev);
 }
 }
Impressum, Datenschutz