Norimasa Okamoto
/
USBLowsCap
USB low speed packet capture
main.cpp@0:654d7d47e816, 2013-04-29 (annotated)
- Committer:
- va009039
- Date:
- Mon Apr 29 08:11:31 2013 +0000
- Revision:
- 0:654d7d47e816
first commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
va009039 | 0:654d7d47e816 | 1 | // main.cpp 2013/4/29 |
va009039 | 0:654d7d47e816 | 2 | #include "mbed.h" |
va009039 | 0:654d7d47e816 | 3 | #include "mbed_debug.h" |
va009039 | 0:654d7d47e816 | 4 | #include "usbpkt.h" |
va009039 | 0:654d7d47e816 | 5 | |
va009039 | 0:654d7d47e816 | 6 | DigitalIn usb_data_p(p21); // USB DATA+ |
va009039 | 0:654d7d47e816 | 7 | DigitalIn usb_data_m(p22); // USB DATA- |
va009039 | 0:654d7d47e816 | 8 | DigitalOut led_usb(LED1); |
va009039 | 0:654d7d47e816 | 9 | |
va009039 | 0:654d7d47e816 | 10 | #define DISP_RAW 0 |
va009039 | 0:654d7d47e816 | 11 | #define BUFFER_SIZE (1024*16) |
va009039 | 0:654d7d47e816 | 12 | #define MAX_PACKET_COUNT 35 |
va009039 | 0:654d7d47e816 | 13 | |
va009039 | 0:654d7d47e816 | 14 | #define USB_MASK (3<<4) |
va009039 | 0:654d7d47e816 | 15 | #define USB_DATA (2<<4) |
va009039 | 0:654d7d47e816 | 16 | |
va009039 | 0:654d7d47e816 | 17 | DigitalOut led_run(LED4); |
va009039 | 0:654d7d47e816 | 18 | Serial pc(USBTX, USBRX); |
va009039 | 0:654d7d47e816 | 19 | |
va009039 | 0:654d7d47e816 | 20 | extern "C" { |
va009039 | 0:654d7d47e816 | 21 | uint8_t* capraw(uint8_t* buf, int size, int count); // lowspeed.s |
va009039 | 0:654d7d47e816 | 22 | } |
va009039 | 0:654d7d47e816 | 23 | |
va009039 | 0:654d7d47e816 | 24 | uint8_t buf[BUFFER_SIZE]; |
va009039 | 0:654d7d47e816 | 25 | |
va009039 | 0:654d7d47e816 | 26 | int main() { |
va009039 | 0:654d7d47e816 | 27 | pc.baud(921600); |
va009039 | 0:654d7d47e816 | 28 | debug("%s\n", __FILE__); |
va009039 | 0:654d7d47e816 | 29 | |
va009039 | 0:654d7d47e816 | 30 | usb_data_p.mode(PullNone); |
va009039 | 0:654d7d47e816 | 31 | usb_data_m.mode(PullNone); |
va009039 | 0:654d7d47e816 | 32 | |
va009039 | 0:654d7d47e816 | 33 | while(1) { |
va009039 | 0:654d7d47e816 | 34 | uint8_t* ret = capraw(buf, sizeof(buf)-16, MAX_PACKET_COUNT); |
va009039 | 0:654d7d47e816 | 35 | usbpkt pkt; |
va009039 | 0:654d7d47e816 | 36 | pkt.reset(); |
va009039 | 0:654d7d47e816 | 37 | uint8_t* p = buf; |
va009039 | 0:654d7d47e816 | 38 | while(p < ret) { |
va009039 | 0:654d7d47e816 | 39 | uint8_t d = *p++; |
va009039 | 0:654d7d47e816 | 40 | if ((d&USB_MASK) == 0) { // EOP ? |
va009039 | 0:654d7d47e816 | 41 | debug_if(DISP_RAW, "\n"); |
va009039 | 0:654d7d47e816 | 42 | //pkt.printHEX(stdout); |
va009039 | 0:654d7d47e816 | 43 | pkt.printUSB(stdout); |
va009039 | 0:654d7d47e816 | 44 | pkt.reset(); |
va009039 | 0:654d7d47e816 | 45 | } else { |
va009039 | 0:654d7d47e816 | 46 | pkt.inputRaw((d&USB_DATA) ? 1 : 0); |
va009039 | 0:654d7d47e816 | 47 | debug_if(DISP_RAW, "%c", (d&USB_DATA) ? '*' : '.'); |
va009039 | 0:654d7d47e816 | 48 | } |
va009039 | 0:654d7d47e816 | 49 | } |
va009039 | 0:654d7d47e816 | 50 | debug("\n"); |
va009039 | 0:654d7d47e816 | 51 | wait_ms(200); |
va009039 | 0:654d7d47e816 | 52 | led_run = !led_run; |
va009039 | 0:654d7d47e816 | 53 | } |
va009039 | 0:654d7d47e816 | 54 | } |