Webcam Server.

Dependencies:   uvchost FatFileSystem mbed HTTPServer NetServicesMin

Committer:
va009039
Date:
Wed Jun 06 11:47:06 2012 +0000
Revision:
0:2b4ea8a138e5

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
va009039 0:2b4ea8a138e5 1 #include "mbed.h"
va009039 0:2b4ea8a138e5 2 #include "usb_itd.h"
va009039 0:2b4ea8a138e5 3 #define __DEBUG
va009039 0:2b4ea8a138e5 4 #include "mydbg.h"
va009039 0:2b4ea8a138e5 5
va009039 0:2b4ea8a138e5 6 usb_itd::usb_itd(HCITD* itd)
va009039 0:2b4ea8a138e5 7 {
va009039 0:2b4ea8a138e5 8 DBG_ASSERT(itd);
va009039 0:2b4ea8a138e5 9 m_itd = itd;
va009039 0:2b4ea8a138e5 10 }
va009039 0:2b4ea8a138e5 11
va009039 0:2b4ea8a138e5 12 bool usb_itd::Done()
va009039 0:2b4ea8a138e5 13 {
va009039 0:2b4ea8a138e5 14 int cc = (m_itd->Control >> 28);
va009039 0:2b4ea8a138e5 15 if (cc == 0xe || cc == 0xf) { // not accessed?
va009039 0:2b4ea8a138e5 16 return false;
va009039 0:2b4ea8a138e5 17 }
va009039 0:2b4ea8a138e5 18 if (m_itd->Next) {
va009039 0:2b4ea8a138e5 19 return false;
va009039 0:2b4ea8a138e5 20 }
va009039 0:2b4ea8a138e5 21 return true;
va009039 0:2b4ea8a138e5 22 }
va009039 0:2b4ea8a138e5 23
va009039 0:2b4ea8a138e5 24 int usb_itd::ConditionCode()
va009039 0:2b4ea8a138e5 25 {
va009039 0:2b4ea8a138e5 26 int cc = (m_itd->Control >> 28);
va009039 0:2b4ea8a138e5 27 return cc;
va009039 0:2b4ea8a138e5 28 }
va009039 0:2b4ea8a138e5 29
va009039 0:2b4ea8a138e5 30 uint16_t usb_itd::get_psw(int n)
va009039 0:2b4ea8a138e5 31 {
va009039 0:2b4ea8a138e5 32 DBG_ASSERT(n >= 0 && n <= 7);
va009039 0:2b4ea8a138e5 33 DBG_ASSERT(m_itd);
va009039 0:2b4ea8a138e5 34 uint16_t psw = 0;
va009039 0:2b4ea8a138e5 35 switch(n) {
va009039 0:2b4ea8a138e5 36 case 0: psw = m_itd->OffsetPSW10; break;
va009039 0:2b4ea8a138e5 37 case 1: psw = m_itd->OffsetPSW10 >> 16; break;
va009039 0:2b4ea8a138e5 38 case 2: psw = m_itd->OffsetPSW32; break;
va009039 0:2b4ea8a138e5 39 case 3: psw = m_itd->OffsetPSW32 >> 16; break;
va009039 0:2b4ea8a138e5 40 case 4: psw = m_itd->OffsetPSW54; break;
va009039 0:2b4ea8a138e5 41 case 5: psw = m_itd->OffsetPSW54 >> 16; break;
va009039 0:2b4ea8a138e5 42 case 6: psw = m_itd->OffsetPSW76; break;
va009039 0:2b4ea8a138e5 43 case 7: psw = m_itd->OffsetPSW76 >> 16; break;
va009039 0:2b4ea8a138e5 44 }
va009039 0:2b4ea8a138e5 45 return psw;
va009039 0:2b4ea8a138e5 46 }
va009039 0:2b4ea8a138e5 47
va009039 0:2b4ea8a138e5 48 uint16_t usb_itd::StartingFrame()
va009039 0:2b4ea8a138e5 49 {
va009039 0:2b4ea8a138e5 50 return (m_itd->Control & ITD_SF);
va009039 0:2b4ea8a138e5 51 }
va009039 0:2b4ea8a138e5 52
va009039 0:2b4ea8a138e5 53 int usb_itd::FrameCount()
va009039 0:2b4ea8a138e5 54 {
va009039 0:2b4ea8a138e5 55 DBG_ASSERT(m_itd);
va009039 0:2b4ea8a138e5 56 int fc = ((m_itd->Control & ITD_FC) >> 24) + 1;
va009039 0:2b4ea8a138e5 57 DBG_ASSERT(fc >= 1 && fc <= 8);
va009039 0:2b4ea8a138e5 58 return fc;
va009039 0:2b4ea8a138e5 59 }
va009039 0:2b4ea8a138e5 60
va009039 0:2b4ea8a138e5 61 int usb_itd::PacketStatus(int n)
va009039 0:2b4ea8a138e5 62 {
va009039 0:2b4ea8a138e5 63 DBG_ASSERT(n >=0 && n <= 7);
va009039 0:2b4ea8a138e5 64 uint16_t psw = get_psw(n);
va009039 0:2b4ea8a138e5 65 int cc = (psw >> 12) & 0xf;
va009039 0:2b4ea8a138e5 66 return cc;
va009039 0:2b4ea8a138e5 67 }
va009039 0:2b4ea8a138e5 68
va009039 0:2b4ea8a138e5 69 int usb_itd::Length(int n)
va009039 0:2b4ea8a138e5 70 {
va009039 0:2b4ea8a138e5 71 DBG_ASSERT(n >=0 && n <= 7);
va009039 0:2b4ea8a138e5 72 uint16_t psw = get_psw(n);
va009039 0:2b4ea8a138e5 73 int size = psw & 0x7ff;
va009039 0:2b4ea8a138e5 74 int cc = (psw >> 12) & 0xf;
va009039 0:2b4ea8a138e5 75 if (cc == 0xe || cc == 0xf) {
va009039 0:2b4ea8a138e5 76 return -1;
va009039 0:2b4ea8a138e5 77 }
va009039 0:2b4ea8a138e5 78 if (cc == 0 || cc == 9) {
va009039 0:2b4ea8a138e5 79 return size;
va009039 0:2b4ea8a138e5 80 }
va009039 0:2b4ea8a138e5 81 debug();
va009039 0:2b4ea8a138e5 82 return -1;
va009039 0:2b4ea8a138e5 83 }
va009039 0:2b4ea8a138e5 84
va009039 0:2b4ea8a138e5 85 uint8_t* usb_itd::BufferPage(int n, int size)
va009039 0:2b4ea8a138e5 86 {
va009039 0:2b4ea8a138e5 87 DBG_ASSERT(n >=0 && n <= 7);
va009039 0:2b4ea8a138e5 88 DBG_ASSERT(size >= 128 && size <= 956);
va009039 0:2b4ea8a138e5 89 uint8_t* buf = (uint8_t*)m_itd->BufferPage0 + n * size;
va009039 0:2b4ea8a138e5 90 DBG_ASSERT((uint32_t)(buf+size-1) <= m_itd->BufferEnd);
va009039 0:2b4ea8a138e5 91 return buf;
va009039 0:2b4ea8a138e5 92 }
va009039 0:2b4ea8a138e5 93
va009039 0:2b4ea8a138e5 94 void usb_itd::free()
va009039 0:2b4ea8a138e5 95 {
va009039 0:2b4ea8a138e5 96 DBG_ASSERT(m_itd);
va009039 0:2b4ea8a138e5 97 if (m_itd) {
va009039 0:2b4ea8a138e5 98 uint8_t* buf = (uint8_t*)m_itd->BufferPage0;
va009039 0:2b4ea8a138e5 99 DBG_ASSERT(buf);
va009039 0:2b4ea8a138e5 100 usb_free_bp(buf);
va009039 0:2b4ea8a138e5 101 usb_free_itd((byte*)m_itd);
va009039 0:2b4ea8a138e5 102 m_itd = NULL;
va009039 0:2b4ea8a138e5 103 }
va009039 0:2b4ea8a138e5 104 }
va009039 0:2b4ea8a138e5 105
va009039 0:2b4ea8a138e5 106 void usb_itd::debug()
va009039 0:2b4ea8a138e5 107 {
va009039 0:2b4ea8a138e5 108 DBG("itd =%08X\n", m_itd);
va009039 0:2b4ea8a138e5 109 DBG("itd->Control =%08X\n", m_itd->Control);
va009039 0:2b4ea8a138e5 110 DBG("itd->BufferPage0=%08X\n", m_itd->BufferPage0);
va009039 0:2b4ea8a138e5 111 DBG("itd->Next =%08X\n", m_itd->Next);
va009039 0:2b4ea8a138e5 112 DBG("itd->BufferEnd =%08X\n", m_itd->BufferEnd);
va009039 0:2b4ea8a138e5 113 DBG("itd->OffsetPSW10=%08X\n", m_itd->OffsetPSW10);
va009039 0:2b4ea8a138e5 114 DBG("itd->OffsetPSW32=%08X\n", m_itd->OffsetPSW32);
va009039 0:2b4ea8a138e5 115 DBG("itd->OffsetPSW54=%08X\n", m_itd->OffsetPSW54);
va009039 0:2b4ea8a138e5 116 DBG("itd->OffsetPSW76=%08X\n", m_itd->OffsetPSW76);
va009039 0:2b4ea8a138e5 117 }