int main(void) { printf("USB Device Demo\n"); printf("Setting up CDC device\n"); init_usb_device(&acm); setup_usb(); return 0; }
/** * @brief Wraps the initial IntializeUSBDevice, and records mock * functions that will call the initial values. * */ AIOEither InitializeUSBDevice( USBDevice *usb, LIBUSBArgs *args ) { AIOEither retval = {0}; static AIOEither (*init_usb_device)(USBDevice *usb, LIBUSBArgs *args ) = NULL; void *tmpthingy; if (!init_usb_device) { #ifdef __cplusplus tmpthingy = dlsym(RTLD_NEXT,"_ZN6AIOUSB19InitializeUSBDeviceEPNS_9USBDeviceEPNS_18aiousb_libusb_argsE"); init_usb_device = (init_device)tmpthingy; if ( !init_usb_device ) { fprintf(stderr,"ERROR!!! Can't mock function \n"); retval.left = AIOUSB_ERROR_INVALID_USBDEVICE; return retval; } #else init_usb_device = dlsym(RTLD_NEXT,"InitializeUSBDevice"); #endif } /* init_usb_device = (AIOEITHER (*)(USBDevice *usb, LIBUSBArgs*args))dlsym(RTLD_NEXT,"InitializeUSBDevice"); */ /* init_usb_device = (init_device)dlsym(RTLD_NEXT,"InitializeUSBDevice"); */ printf("Wrapped the original !!\n"); retval = init_usb_device( usb, args ); char *fname = getenv("USB_DATALOG_NAME"); if ( !fname ) { fname = (char *)"usb_data_log.txt"; } outfile = fopen(fname,"a+"); if (!outfile ) { fprintf(stderr,"Can't open outputfile\n"); } if ( !AIOEitherHasError( &retval ) ) { orig_usb_control_transfer = usb->usb_control_transfer; orig_usb_bulk_transfer = usb->usb_bulk_transfer; orig_usb_request = usb->usb_request; orig_usb_reset_device = usb->usb_reset_device; /* orig_usb_put_config = usb->usb_put_config; */ /* orig_usb_get_config = usb->usb_get_config; */ usb->usb_control_transfer = mock_usb_control_transfer; usb->usb_bulk_transfer = mock_usb_bulk_transfer; /* usb->usb_put_config = mock_usb_put_config; */ /* usb->usb_get_config = mock_usb_get_config; */ usb->usb_reset_device = mock_usb_reset_device; usb->usb_request = mock_usb_request; } printf("Done calling the original !!\n"); return retval; }