Не прошло и полгода, продолжим наши игры )
usbepx - монитор USB endpoints как-то не зашёл, хотя сам я с тех пор использую его постоянно, поэтому вот другой вариант - предельно упрощённый терминал прямого доступа в endpoint для winusb и т.п. девайсов
В отличие от usb serial терминалов он опрашивает usb девайс не постоянно, а только в течение примерно 100 мс после ввода строки и передачи в девайс, т.е. в полном соответствии с логикой usb: хост - мастер, девайс - слейв
Программка очень простая, вот она вся
#include <stdio.h> #include "libusb.h" libusb_device_handle *dh; int vid, pid, ep, n; char s[256]; int main ( int argc, char *argv[] ) { if( argc == 4 ) { sscanf( argv[1], "%x", &vid ); sscanf( argv[2], "%x", &pid ); sscanf( argv[3], "%x", &ep ); libusb_init( NULL ); if( dh = libusb_open_device_with_vid_pid( NULL, vid, pid ) ) { libusb_claim_interface( dh, 0 ); while( 1 ) { printf( "< " ); gets( s ); if( strlen( s ) == 0 ) break; if( strlen( s ) > 63 ) s[63] = 0; if( libusb_bulk_transfer( dh, ep, s, 64, &n, 100 ) == 0 ) { int c = 10; while( libusb_bulk_transfer( dh, ep+0x80, s, 64, &n, 100 ) == 0 ) { printf( "> %s\n", s ); if( --c == 0 ) break; } } else break; } libusb_release_interface( dh, 0 ); libusb_close( dh ); } else printf( "No such device\nVID:%x PID:%x EP:%x\n", vid, pid, ep ); libusb_exit( NULL ); } else printf( "Usage\n%s VID PID EP\n", argv[0] ); return 0; }
Как оно работает очевидно из картинки
Поскольку программка всего 3 Кбайт, то эта же картинка содержит в себе и архив с usbept.exe и libusb-1.0.dll, достаточно переименовать файл картинки в файл.zip и он раскроется как zip