Norimasa Okamoto
/
USBLowsCap
USB low speed packet capture
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 // main.cpp 2013/4/29 00002 #include "mbed.h" 00003 #include "mbed_debug.h" 00004 #include "usbpkt.h" 00005 00006 DigitalIn usb_data_p(p21); // USB DATA+ 00007 DigitalIn usb_data_m(p22); // USB DATA- 00008 DigitalOut led_usb(LED1); 00009 00010 #define DISP_RAW 0 00011 #define BUFFER_SIZE (1024*16) 00012 #define MAX_PACKET_COUNT 35 00013 00014 #define USB_MASK (3<<4) 00015 #define USB_DATA (2<<4) 00016 00017 DigitalOut led_run(LED4); 00018 Serial pc(USBTX, USBRX); 00019 00020 extern "C" { 00021 uint8_t* capraw(uint8_t* buf, int size, int count); // lowspeed.s 00022 } 00023 00024 uint8_t buf[BUFFER_SIZE]; 00025 00026 int main() { 00027 pc.baud(921600); 00028 debug("%s\n", __FILE__); 00029 00030 usb_data_p.mode(PullNone); 00031 usb_data_m.mode(PullNone); 00032 00033 while(1) { 00034 uint8_t* ret = capraw(buf, sizeof(buf)-16, MAX_PACKET_COUNT); 00035 usbpkt pkt; 00036 pkt.reset(); 00037 uint8_t* p = buf; 00038 while(p < ret) { 00039 uint8_t d = *p++; 00040 if ((d&USB_MASK) == 0) { // EOP ? 00041 debug_if(DISP_RAW, "\n"); 00042 //pkt.printHEX(stdout); 00043 pkt.printUSB(stdout); 00044 pkt.reset(); 00045 } else { 00046 pkt.inputRaw((d&USB_DATA) ? 1 : 0); 00047 debug_if(DISP_RAW, "%c", (d&USB_DATA) ? '*' : '.'); 00048 } 00049 } 00050 debug("\n"); 00051 wait_ms(200); 00052 led_run = !led_run; 00053 } 00054 }
Generated on Thu Aug 18 2022 15:17:24 by 1.7.2