// // #include #include #include "SiUSBXp.h" #include "chimaera.h" devicePacket_t cmdPacket; devicePacket_t lastStatus; devicePacket_t lastData; bool verbose = false; bool CBUSB = false; cbusb *usb; int main( int argc, char **argv ) { SI_STATUS rc; unsigned deviceIndex = 0; HANDLE deviceHandle; // First pass over command-line arguments to find device type and index for ( unsigned arg=1;argshowErrorTrace(); exit(0); } // Second pass over command-line arguments for ( unsigned arg=1;argdispatchPIOWriteRequest( PIO ); arg++; } else if ( !strcmp( argv[arg], "--clockBurst" ) ) { unsigned burstLength = (strtoul(argv[arg+1],0,0) & 0xffff); unsigned period = (strtoul(argv[arg+2],0,0) & 0xffff); usb->dispatchClockBurstRequest( burstLength, period ); arg+=2; } else if ( !strcmp( argv[arg], "--dumpBuffer" ) ) { usb->flushBuffer( 2, true ); } else if ( !strcmp( argv[arg], "--status" ) ) { cmdPacket.cmd = deviceHeader_t::StatusRequest; usb->dispatch( cmdPacket, 8 ); usb->receive( lastStatus, 68 ); usb->showLastStatus(lastStatus); } else if ( !strcmp( argv[arg], "--packet" ) ) { cmdPacket.cmd = deviceHeader_t::PacketRequest; cmdPacket.uc[0] = 1; // Number of packets usb->dispatch( cmdPacket, 8 ); usb->receive( lastData, 68 ); usb->showLastData( lastData ); } else if ( !strcmp( argv[arg], "--lhcbEvent" ) || !strcmp( argv[arg], "--event" ) ) { cmdPacket.cmd = deviceHeader_t::GenerateLHCbEvent; usb->dispatch( cmdPacket, 8 ); } else if ( !strcmp( argv[arg], "--aliceEvent" ) ) { cmdPacket.cmd = deviceHeader_t::GenerateALICEEvent; usb->dispatch( cmdPacket, 8 ); } else if ( !strcmp( argv[arg], "--reset" ) ) { cmdPacket.cmd = deviceHeader_t::ResetRequest; usb->dispatch( cmdPacket, 8 ); } else if ( !strcmp( argv[arg], "--int0Enable" ) ) { cmdPacket.cmd = deviceHeader_t::Int0Enable; usb->dispatch( cmdPacket, 8 ); } else if ( !strcmp( argv[arg], "--int0Disable" ) ) { cmdPacket.cmd = deviceHeader_t::Int0Disable; usb->dispatch( cmdPacket, 8 ); } else if ( !strcmp( argv[arg], "--int0Monitor" ) ) { cmdPacket.cmd = deviceHeader_t::Int0Enable; usb->dispatch( cmdPacket, 8 ); printf( "Int0Monitor: waiting for interrupt\n" ); usb->receive( lastStatus, 68 ); if ( !(*usb) ) { usb->showErrorTrace(); } } else if ( !strcmp( argv[arg], "--verbose" ) ) { verbose = true; } else if ( !strcmp( argv[arg], "--configure" ) ) { devicePacket_t msg; msg.config[0] = strtoul(argv[arg+1],0,0) & 0xffff; msg.config[1] = strtoul(argv[arg+2],0,0) & 0xffff; printf( "Configuration data = %#x/%#x\n", msg.config[0], msg.config[1] ); usb->dispatch( msg, 8 ); arg+=2; } else if ( !strcmp( argv[arg], "--setReadStartAddress" ) ) { devicePacket_t msg; msg.cmd = deviceHeader_t::ReadAddress; msg.data[0] = strtoul(argv[arg+1],0,0); usb->dispatch( msg, 8 ); arg++; } } // Close the device if ( usb ) delete usb; }