Пример #1
0
int main(void)
{
    printf("USB Device Demo\n");
    printf("Setting up CDC device\n");
	init_usb_device(&acm);
    setup_usb();
    return 0;
}
Пример #2
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;
}