#include #include #include "time.h" #include "libxxusb.h" // // sudo ./vm-usb-debug 0 0x9 0x11110000 0 // sudo ./vm-usb-debug 7 0x39 0x100500 0x0 // Global variables struct usb_device *dev; #define V288_BUF 0x0 #define V288_STATUS 0x2 #define V288_TX 0x4 #define V288_RST 0x8 class Caenet { private: usb_dev_handle *m_udev; short m_am; unsigned long m_addr; public: Caenet(usb_dev_handle *dev,short Address_Modifier, unsigned long Base){m_udev=dev;m_am= Address_Modifier;m_addr=Base;}; int SingleRead(unsigned int addr, long *data,int print){ long dum; int ret; ret = VME_read_16 (m_udev,m_am, m_addr+addr,data); ret = VME_read_16 (m_udev,m_am, m_addr+V288_STATUS, &dum); if (print) printf("SingleRead Addr=0x%x Data=0x%x Status=0x%x\n",addr,*data,dum); return dum; }; int SingleWrite(unsigned int addr, long data, int print){ int ret; long dum; ret = VME_write_16 (m_udev,m_am, m_addr+addr, data); ret = VME_read_16 (m_udev,m_am, m_addr+V288_STATUS, &dum); if (print) printf("SingleWrite Addr=0x%x Data=0x%x Status=0x%x\n",addr,data,dum); return dum; }; int WaitForReady(){ const int TIMEOUT=100; int ret; long dum; int ncount=0; do { ret=SingleRead(V288_BUF, &dum,0 ); //printf("WAIT 0x%x\n",ret); ncount++; } while ((ret & 0x1)&ncount3) adr=strtol(argv[3],NULL,0);; //------------------------------ int ret; usb_dev_handle *udev; xxusb_device_type devices[100]; ret=xxusb_devices_find(devices); printf("\nDevices Read %d\n",ret); int devnum=0; dev = devices[devnum].usbdev; udev = xxusb_device_open(dev); printf("\n\n%s\n\n", devices[0].SerialString); if(!udev) { printf("\n\n No VM_USB present\n\nTEST FAILED"); return 0; } else { printf("VM_USB loaded\n"); } switch (cmd){ case 0: ret = VME_read_32(udev,Address_Modifier, adr, &data_r); break; case 1: if (argc>4) data_r=strtol(argv[4],NULL,0);; ret = VME_write_32(udev,Address_Modifier, adr, data_r); break; case 2: ret = VME_read_16(udev,Address_Modifier, adr, &data_r); break; case 3: if (argc>4) data_r=strtol(argv[4],NULL,0);; ret = VME_write_16(udev,Address_Modifier, adr, data_r); break; case 4: xxusb_register_read(udev,Address_Modifier , &data_r); break; case 5: if (argc>4) data_r=strtol(argv[4],NULL,0); xxusb_register_write(udev,Address_Modifier , data_r); break; case 6: if (argc>4) data_r=strtol(argv[4],NULL,0); for (int i=0;i<10000;i++){ ret = VME_write_32(udev,Address_Modifier, adr, data_r); ret = VME_read_32 (udev,Address_Modifier, adr, &data_r); } break; case 7: int print=1; Caenet *caenet = new Caenet(udev,Address_Modifier, adr); int cmd; caenet->Reset(); if (argc>4) cmd=strtol(argv[4],NULL,0); int ndat; caenet->WriteRead(2,cmd,1000,data, print); caenet->WriteRead(3,cmd,1000,data,print); break; } printf(" %s IERR=%d ADDR_MOD=0x%x ADDR=0x%x DATA=0x%x\n",mstr[cmd],ret,Address_Modifier, adr, data_r); xxusb_device_close(udev); }