]> git.zerfleddert.de Git - rigol/blobdiff - usbtmc.c
include stdint.h
[rigol] / usbtmc.c
index 054e49c0dc26526f288b852a04c220ac04116474..835b6c8b84b2a6449f13f4e98e16052248f5dc9d 100644 (file)
--- a/usbtmc.c
+++ b/usbtmc.c
@@ -6,6 +6,16 @@
 
 #include "usbtmc.h"
 
+#define USB_TIMEOUT 50000
+
+#if BYTE_ORDER == LITTLE_ENDIAN
+#define LE32(x) x
+#elif BYTE_ORDER == BIG_ENDIAN
+#define LE32(x) ((uint32_t)((((uint32_t)x)>>24) | ((((uint32_t)x)>>8) & 0xff00) | ((((uint32_t)x)<<8) & 0xff0000) | (((uint32_t)x)<<24)))
+#else
+#error BYTE_ORDER not defined/known!
+#endif
+
 //Helper-routine: Convert a little-endian 4-byte word to an int
 static void int2chars(unsigned char *buff,unsigned int a) {
        buff[3]=(a>>24)&0xff;
@@ -59,15 +69,15 @@ int usbtmc_sendscpi(usb_dev_handle *dev, char* cmd,
        buff[3]=0;
        int2chars(buff+4, cmdlen);
        buff[8]=1;
-       buff[9]=0x37;
-       buff[10]=0x39;
-       buff[11]=0x39;
+       buff[9]=0x00;
+       buff[10]=0x00;
+       buff[11]=0x00;
        //fprintf(stderr,"Writing header len=%d\n", cmdlen);
        //printb(buff,12);
-       r=usb_bulk_write(dev, 1, (char*)buff, 12, 1000);
+       r=usb_bulk_write(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, 1000);
+       r=usb_bulk_write(dev, 1, cmd, cmdlen, USB_TIMEOUT);
        //fprintf(stderr,"%i bytes written.\n",r);
        if (resp != NULL && resplen != 0) {
                //send read command
@@ -75,15 +85,15 @@ int usbtmc_sendscpi(usb_dev_handle *dev, char* cmd,
                seq++;
                buff[1]=seq; buff[2]=~seq; //nseq
                int2chars(buff+4,0x40);
-               buff[8]=1;
+               buff[8]=0;
                buff[9]=0xA;
                buff[10]=0;
                buff[11]=0;
                //fprintf(stderr,"Writing resp req header\n");
                //printb(buff,12);
-               r=usb_bulk_write(dev, 1, (char*)buff, 12, 1000);
+               r=usb_bulk_write(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, 1000);
+               r=usb_bulk_read(dev, 2, (char*)buff, 0x40, USB_TIMEOUT);
                //printb(buff,r);
                len=chars2int(buff+4);
                //fprintf(stderr,"%i bytes read. Resplen=%i\n",r,len);
@@ -94,7 +104,7 @@ int usbtmc_sendscpi(usb_dev_handle *dev, char* cmd,
                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),1000);
+                       r=usb_bulk_read(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);
                }
@@ -110,8 +120,6 @@ void usbtmc_claim(usb_dev_handle *sc)
 
 void usbtmc_release(usb_dev_handle *sc)
 {
-       //Disable keylock, so the user doesn't have to press the 'force'-button
-       usbtmc_sendscpi(sc, ":KEY:LOCK DISABLE",NULL,0); 
        usb_release_interface(sc, 0);
 }
 
@@ -126,15 +134,12 @@ usb_dev_handle* usbtmc_initscope(void) {
        //Locate and open the scope
        dev = usbtmc_find_scope();
        if (!dev) {
-               printf("No scope found.\n");
-               exit(1);
-       } else {
-               printf("Scope found.\n");
+               return NULL;
        }
        usbtmc_claim(dev);
        //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, 1000);
+       r=usb_control_msg(dev, 0xC8, 9, 0, 0, (char*)buff, 4, USB_TIMEOUT);
        usbtmc_release(dev);
        if (r < 0) {
                fprintf (stderr, "Error %d sending init message: %s\n", 
Impressum, Datenschutz