USB host library, support isochronous,bulk,interrupt and control.

Dependents:   BaseUsbHost_example BaseJpegDecode_example SimpleJpegDecode_example

Import programBaseUsbHost_example

BaseUsbHost example program

Committer:
va009039
Date:
Mon Feb 11 12:00:47 2013 +0000
Revision:
5:8a2d056e9b38
Parent:
4:d931d24c2f81
add GetStringDescriptor()

Who changed what in which revision?

UserRevisionLine numberNew contents of line
va009039 4:d931d24c2f81 1 // BaseUseHostDebug.cpp 2013/1/11
va009039 0:b7d6879637a8 2 #include "mbed.h"
va009039 0:b7d6879637a8 3 #include "rtos.h"
va009039 0:b7d6879637a8 4 #include "BaseUsbHost.h"
va009039 0:b7d6879637a8 5 #include "BaseUsbHostDebug.h"
va009039 0:b7d6879637a8 6
va009039 0:b7d6879637a8 7 void print_td(FILE* stream, HCTD* td)
va009039 0:b7d6879637a8 8 {
va009039 0:b7d6879637a8 9 if (td == NULL) {
va009039 0:b7d6879637a8 10 fprintf(stream, "TD %p:\n", td);
va009039 0:b7d6879637a8 11 return;
va009039 0:b7d6879637a8 12 }
va009039 0:b7d6879637a8 13 uint32_t* p = reinterpret_cast<uint32_t*>(td);
va009039 0:b7d6879637a8 14 fprintf(stream, "TD %p: %08X %08X %08X %08X", p, p[0], p[1], p[2], p[3]);
va009039 4:d931d24c2f81 15 fprintf(stream, " ep=%p\n", td->ep);
va009039 0:b7d6879637a8 16 uint8_t* bp = reinterpret_cast<uint8_t*>(p[1]);
va009039 0:b7d6879637a8 17 uint8_t* be = reinterpret_cast<uint8_t*>(p[3]);
va009039 0:b7d6879637a8 18 if (bp) {
va009039 0:b7d6879637a8 19 fprintf(stream, "BF %p:", bp);
va009039 0:b7d6879637a8 20 while(bp <= be) {
va009039 0:b7d6879637a8 21 fprintf(stream, " %02X", *bp);
va009039 0:b7d6879637a8 22 bp++;
va009039 0:b7d6879637a8 23 }
va009039 0:b7d6879637a8 24 fprintf(stream, "\n");
va009039 0:b7d6879637a8 25 }
va009039 0:b7d6879637a8 26 }
va009039 0:b7d6879637a8 27
va009039 0:b7d6879637a8 28 void print_ed(FILE* stream, HCED* ed)
va009039 0:b7d6879637a8 29 {
va009039 0:b7d6879637a8 30 uint32_t* p = reinterpret_cast<uint32_t*>(ed);
va009039 0:b7d6879637a8 31 while(p) {
va009039 0:b7d6879637a8 32 fprintf(stream, "ED %p: %08X %08X %08X %08X\n", p, p[0], p[1], p[2], p[3]);
va009039 0:b7d6879637a8 33 HCTD* td = reinterpret_cast<HCTD*>(p[2] & ~3);
va009039 0:b7d6879637a8 34 HCTD* tdtail = reinterpret_cast<HCTD*>(p[1]);
va009039 0:b7d6879637a8 35 while(td != NULL && td != tdtail) {
va009039 0:b7d6879637a8 36 print_td(stream, td);
va009039 4:d931d24c2f81 37 td = td->Next;
va009039 0:b7d6879637a8 38 }
va009039 0:b7d6879637a8 39 p = reinterpret_cast<uint32_t*>(p[3]);
va009039 0:b7d6879637a8 40 }
va009039 0:b7d6879637a8 41 }
va009039 0:b7d6879637a8 42
va009039 0:b7d6879637a8 43 void print_itd(FILE* stream, HCITD* itd)
va009039 0:b7d6879637a8 44 {
va009039 0:b7d6879637a8 45 if (itd == NULL) {
va009039 0:b7d6879637a8 46 fprintf(stream, "ITD %p:\n", itd);
va009039 0:b7d6879637a8 47 return;
va009039 0:b7d6879637a8 48 }
va009039 0:b7d6879637a8 49 uint32_t* p = reinterpret_cast<uint32_t*>(itd);
va009039 0:b7d6879637a8 50 fprintf(stream, "ITD %p: %08X %08X %08X %08X", p, p[0], p[1], p[2], p[3]);
va009039 0:b7d6879637a8 51 fprintf(stream, " ep=%p\n", itd->ep);
va009039 0:b7d6879637a8 52 uint16_t* offset = reinterpret_cast<uint16_t*>(p+4);
va009039 0:b7d6879637a8 53 fprintf(stream, "ITD %p: %04X %04X %04X %04X %04X %04X %04X %04X\n", offset,
va009039 0:b7d6879637a8 54 offset[0], offset[1], offset[2], offset[3], offset[4], offset[5], offset[6], offset[7]);
va009039 0:b7d6879637a8 55 }
va009039 0:b7d6879637a8 56
va009039 0:b7d6879637a8 57 void print_ied(FILE* stream, HCED* ed)
va009039 0:b7d6879637a8 58 {
va009039 0:b7d6879637a8 59 uint32_t* p = reinterpret_cast<uint32_t*>(ed);
va009039 0:b7d6879637a8 60 while(p) {
va009039 0:b7d6879637a8 61 fprintf(stream, "ED %p: %08X %08X %08X %08X\n", p, p[0], p[1], p[2], p[3]);
va009039 0:b7d6879637a8 62 HCITD* itd = reinterpret_cast<HCITD*>(p[2] & ~3);
va009039 0:b7d6879637a8 63 HCITD* itdtail = reinterpret_cast<HCITD*>(p[1]);
va009039 0:b7d6879637a8 64 while(itd != NULL && itd != itdtail) {
va009039 0:b7d6879637a8 65 print_itd(stream, itd);
va009039 4:d931d24c2f81 66 itd = itd->Next;
va009039 0:b7d6879637a8 67 }
va009039 0:b7d6879637a8 68 p = reinterpret_cast<uint32_t*>(p[3]);
va009039 0:b7d6879637a8 69 }
va009039 0:b7d6879637a8 70 }
va009039 0:b7d6879637a8 71
va009039 0:b7d6879637a8 72 void print_bytes(FILE* stream, char* s, uint8_t* buf, int len)
va009039 0:b7d6879637a8 73 {
va009039 0:b7d6879637a8 74 fprintf(stream, "%s %d:", s, len);
va009039 0:b7d6879637a8 75 for(int i = 0; i < len; i++) {
va009039 0:b7d6879637a8 76 fprintf(stream, " %02X", buf[i]);
va009039 0:b7d6879637a8 77 }
va009039 0:b7d6879637a8 78 fprintf(stream, "\n");
va009039 0:b7d6879637a8 79 }
va009039 0:b7d6879637a8 80
va009039 0:b7d6879637a8 81 void print_hex(FILE* stream, uint8_t* p, int len)
va009039 0:b7d6879637a8 82 {
va009039 0:b7d6879637a8 83 for(int i = 0; i < len; i++) {
va009039 0:b7d6879637a8 84 if (i%16 == 0) {
va009039 0:b7d6879637a8 85 fprintf(stream, "%p:", p);
va009039 0:b7d6879637a8 86 }
va009039 0:b7d6879637a8 87 fprintf(stream, " %02X", *p);
va009039 0:b7d6879637a8 88 p++;
va009039 0:b7d6879637a8 89 if (i%16 == 15) {
va009039 0:b7d6879637a8 90 fprintf(stream, "\n");
va009039 0:b7d6879637a8 91 }
va009039 0:b7d6879637a8 92 }
va009039 0:b7d6879637a8 93 fprintf(stream, "\n");
va009039 0:b7d6879637a8 94 }
va009039 0:b7d6879637a8 95