USB low speed packet capture

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }