⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 packet.c

📁 5509 usb boot 的一个列子程序
💻 C
字号:

#include <stdio.h>
#include <string.h>
#include <usb.h>

#define VENDORID    0x0c55
#define PRODUCTID   0x1234

unsigned char scsi_read_buffer[ 1024 ];
unsigned char scsi_write_buffer[ 1024];

/* 
 *  Search of our USB device on the BUS
 */
struct usb_device *device_init( unsigned int vendorid, unsigned int productid )
{
    struct usb_bus *usb_bus;
    struct usb_device *dev;

    /* Generic USB library bus structure traversal */
    usb_find_busses( );
    usb_find_devices( );

    /* Scan device tree for vendor ID/product ID match */
    for ( usb_bus = usb_get_busses( ); usb_bus; usb_bus = usb_bus -> next )
    {
        for ( dev = usb_bus -> devices; dev; dev = dev -> next )
        {
            if (( dev->descriptor.idVendor == vendorid ) &&
                ( dev->descriptor.idProduct == productid ) )
                    return dev;
        }
    }

    return NULL;
}

/*
 *  Open the USB device & write/verify a block of memory
 */ 
int mass_storage_test( struct usb_device *usb_dev )
{
    struct usb_dev_handle *usb_handle;
    int ret, i, error = 0;

    usb_handle = usb_open( usb_dev );
    if ( usb_handle == NULL )
    {
        fprintf( stderr, "CANNOT OPEN USB DEVICE.\n\n" );
        return -1;
    }
    else
    {
        fprintf( stderr, "USB DEVICE OPENED\n\n" );

        /* Set configuration */
        printf( "SETTING CFG    : " );
        if ( ( ret = usb_set_configuration( usb_handle, 1 ) ) < 0 )
			printf( "FAIL\n" );
        else
			printf( "OK\n" );


        /* Claim interface */
        printf( "CLAIM INTF     : " );
        if ( ( ret = usb_claim_interface( usb_handle, 0 ) ) < 0 )
			printf( "FAIL\n" );
        else
			printf( "OK\n" );


        printf( "\n" );


        /* Set pattern */
        for ( i = 0 ; i < 1024 ; i++ )
            scsi_write_buffer[i] = i;

        for ( i = 1 ; i <= 1024 ; i+=5 )
        {
            /* Write pattern, then read pattern back */
            ret = usb_bulk_write( usb_handle, 0x02, scsi_write_buffer, i, 1000 );
            printf( "POST Data      : Sending %d bytes, ret code [%d]\n", i, ret );
            if ( ret < 0 ) return -1;
        }


        printf( "\n" );


        for ( i = 64 ; i <= 1024 ; i+=64 )
        {
            /* Read in multiples of 64 bytes */
            ret = usb_bulk_read( usb_handle, 0x82, scsi_read_buffer, i, 3000 );
            printf( "Read Data      : Recving %d bytes, ret code [%d]\n", i, ret );
            if ( ret < 0 ) return -1;
        }


        printf( "\n" );

		/* Release interface */ 
        printf( "RELEASE INTF   : " );
        if ( ( ret = usb_release_interface( usb_handle, 0 ) ) < 0 )
			printf( "FAIL\n" );
        else
			printf( "OK\n" );


		/* Close USB handle */ 
        printf( "USB CLOSE      : " );
        if ( ( ret = usb_close( usb_handle ) ) < 0 )
			printf( "FAIL\n" );
        else
			printf( "OK\n" );
    }
    return 0;
}

/*
 *  Find the C55x device.
 */
void main( int argc, int argv )
{
    struct usb_device *usb_dev;

    /* Config USB trace debug, 0: None, 1-255: Trace depth */ 
    usb_set_debug( 0 );

    /* Initialize USB library */
    usb_init( );

    /* Make initial connection */
    usb_dev = device_init( VENDORID, PRODUCTID );
    fprintf( stderr, "Initial connect --> " );
    if ( usb_dev == NULL )
    {
        fprintf( stderr, "Device not found\n" );
        printf( "\nPress any key to continue\n" );
        getch( );
        exit( -1 );
    }
	else
    {
        fprintf( stderr, "Device found, VENDORID = %04x, PRODUCTID = %04x\n\n",
			VENDORID, PRODUCTID );
    }

    /* Download target side code */
    mass_storage_test( usb_dev );

    printf( "\nPress any key to continue\n" );
    getch( );
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -