📄 packet.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 + -