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

Dependents:   BaseUsbHost_example BaseJpegDecode_example SimpleJpegDecode_example

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers BaseUsbHostDebug.cpp Source File

BaseUsbHostDebug.cpp

00001 // BaseUseHostDebug.cpp 2013/1/11
00002 #include "mbed.h"
00003 #include "rtos.h"
00004 #include "BaseUsbHost.h"
00005 #include "BaseUsbHostDebug.h"
00006 
00007 void print_td(FILE* stream, HCTD* td)
00008 {
00009     if (td == NULL) {
00010         fprintf(stream, "TD %p:\n", td);
00011         return;
00012     }
00013     uint32_t* p = reinterpret_cast<uint32_t*>(td);
00014     fprintf(stream, "TD %p: %08X %08X %08X %08X", p, p[0], p[1], p[2], p[3]);
00015     fprintf(stream, " ep=%p\n", td->ep);
00016     uint8_t* bp = reinterpret_cast<uint8_t*>(p[1]);
00017     uint8_t* be = reinterpret_cast<uint8_t*>(p[3]);
00018     if (bp) {
00019         fprintf(stream, "BF %p:", bp);
00020         while(bp <= be) {
00021             fprintf(stream, " %02X", *bp);
00022             bp++;
00023         }
00024         fprintf(stream, "\n");
00025     } 
00026 }
00027 
00028 void print_ed(FILE* stream, HCED* ed)
00029 {
00030     uint32_t* p = reinterpret_cast<uint32_t*>(ed);
00031     while(p) {
00032         fprintf(stream, "ED %p: %08X %08X %08X %08X\n", p, p[0], p[1], p[2], p[3]);
00033         HCTD* td = reinterpret_cast<HCTD*>(p[2] & ~3);
00034         HCTD* tdtail = reinterpret_cast<HCTD*>(p[1]);
00035         while(td != NULL && td != tdtail) {
00036             print_td(stream, td);
00037             td = td->Next;
00038         }
00039         p = reinterpret_cast<uint32_t*>(p[3]);
00040     }
00041 }
00042 
00043 void print_itd(FILE* stream, HCITD* itd)
00044 {
00045     if (itd == NULL) {
00046         fprintf(stream, "ITD %p:\n", itd);
00047         return;
00048     }
00049     uint32_t* p = reinterpret_cast<uint32_t*>(itd);
00050     fprintf(stream, "ITD %p: %08X %08X %08X %08X", p, p[0], p[1], p[2], p[3]);
00051     fprintf(stream, " ep=%p\n", itd->ep);
00052     uint16_t* offset = reinterpret_cast<uint16_t*>(p+4);
00053     fprintf(stream, "ITD %p: %04X %04X %04X %04X %04X %04X %04X %04X\n", offset, 
00054         offset[0], offset[1], offset[2], offset[3], offset[4], offset[5], offset[6], offset[7]);
00055 }
00056 
00057 void print_ied(FILE* stream, HCED* ed)
00058 {
00059     uint32_t* p = reinterpret_cast<uint32_t*>(ed);
00060     while(p) {
00061         fprintf(stream, "ED %p: %08X %08X %08X %08X\n", p, p[0], p[1], p[2], p[3]);
00062         HCITD* itd = reinterpret_cast<HCITD*>(p[2] & ~3);
00063         HCITD* itdtail = reinterpret_cast<HCITD*>(p[1]);
00064         while(itd != NULL && itd != itdtail) {
00065             print_itd(stream, itd);
00066             itd = itd->Next;
00067         }
00068         p = reinterpret_cast<uint32_t*>(p[3]);
00069     }
00070 }
00071 
00072 void print_bytes(FILE* stream, char* s, uint8_t* buf, int len)
00073 {
00074     fprintf(stream, "%s %d:", s, len);
00075     for(int i = 0; i < len; i++) {
00076         fprintf(stream, " %02X", buf[i]);
00077     }
00078     fprintf(stream, "\n");
00079 }
00080 
00081 void print_hex(FILE* stream, uint8_t* p, int len)
00082 {
00083     for(int i = 0; i < len; i++) {
00084         if (i%16 == 0) {
00085             fprintf(stream, "%p:", p);
00086         }
00087         fprintf(stream, " %02X", *p);
00088         p++;
00089         if (i%16 == 15) {
00090             fprintf(stream, "\n");
00091         }
00092     }
00093     fprintf(stream, "\n");
00094 }
00095