![](/media/cache/profiles/5f14615696649541a025d3d0f8e0447f.jpg.50x50_q85.jpg)
JBBoardに接続したモーター2つをRCBControllerでコントロールするテストです。
Dependencies: FatFileSystem TB6612FNG2 mbed
Fork of JBB_BTLE_Test by
uvc/usb_itd.cpp@7:3ed1e36587d4, 2014-05-12 (annotated)
- Committer:
- jksoft
- Date:
- Mon May 12 14:24:35 2014 +0000
- Revision:
- 7:3ed1e36587d4
- Parent:
- 0:1ed23ab1345f
First edition
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
va009039 | 0:1ed23ab1345f | 1 | #include "mbed.h" |
va009039 | 0:1ed23ab1345f | 2 | #include "usb_itd.h" |
va009039 | 0:1ed23ab1345f | 3 | #define __DEBUG |
va009039 | 0:1ed23ab1345f | 4 | #include "mydbg.h" |
va009039 | 0:1ed23ab1345f | 5 | |
va009039 | 0:1ed23ab1345f | 6 | usb_itd::usb_itd(HCITD* itd) |
va009039 | 0:1ed23ab1345f | 7 | { |
va009039 | 0:1ed23ab1345f | 8 | DBG_ASSERT(itd); |
va009039 | 0:1ed23ab1345f | 9 | m_itd = itd; |
va009039 | 0:1ed23ab1345f | 10 | } |
va009039 | 0:1ed23ab1345f | 11 | |
va009039 | 0:1ed23ab1345f | 12 | bool usb_itd::Done() |
va009039 | 0:1ed23ab1345f | 13 | { |
va009039 | 0:1ed23ab1345f | 14 | int cc = (m_itd->Control >> 28); |
va009039 | 0:1ed23ab1345f | 15 | if (cc == 0xe || cc == 0xf) { // not accessed? |
va009039 | 0:1ed23ab1345f | 16 | return false; |
va009039 | 0:1ed23ab1345f | 17 | } |
va009039 | 0:1ed23ab1345f | 18 | if (m_itd->Next) { |
va009039 | 0:1ed23ab1345f | 19 | return false; |
va009039 | 0:1ed23ab1345f | 20 | } |
va009039 | 0:1ed23ab1345f | 21 | return true; |
va009039 | 0:1ed23ab1345f | 22 | } |
va009039 | 0:1ed23ab1345f | 23 | |
va009039 | 0:1ed23ab1345f | 24 | int usb_itd::ConditionCode() |
va009039 | 0:1ed23ab1345f | 25 | { |
va009039 | 0:1ed23ab1345f | 26 | int cc = (m_itd->Control >> 28); |
va009039 | 0:1ed23ab1345f | 27 | return cc; |
va009039 | 0:1ed23ab1345f | 28 | } |
va009039 | 0:1ed23ab1345f | 29 | |
va009039 | 0:1ed23ab1345f | 30 | uint16_t usb_itd::get_psw(int n) |
va009039 | 0:1ed23ab1345f | 31 | { |
va009039 | 0:1ed23ab1345f | 32 | DBG_ASSERT(n >= 0 && n <= 7); |
va009039 | 0:1ed23ab1345f | 33 | DBG_ASSERT(m_itd); |
va009039 | 0:1ed23ab1345f | 34 | uint16_t psw = 0; |
va009039 | 0:1ed23ab1345f | 35 | switch(n) { |
va009039 | 0:1ed23ab1345f | 36 | case 0: psw = m_itd->OffsetPSW10; break; |
va009039 | 0:1ed23ab1345f | 37 | case 1: psw = m_itd->OffsetPSW10 >> 16; break; |
va009039 | 0:1ed23ab1345f | 38 | case 2: psw = m_itd->OffsetPSW32; break; |
va009039 | 0:1ed23ab1345f | 39 | case 3: psw = m_itd->OffsetPSW32 >> 16; break; |
va009039 | 0:1ed23ab1345f | 40 | case 4: psw = m_itd->OffsetPSW54; break; |
va009039 | 0:1ed23ab1345f | 41 | case 5: psw = m_itd->OffsetPSW54 >> 16; break; |
va009039 | 0:1ed23ab1345f | 42 | case 6: psw = m_itd->OffsetPSW76; break; |
va009039 | 0:1ed23ab1345f | 43 | case 7: psw = m_itd->OffsetPSW76 >> 16; break; |
va009039 | 0:1ed23ab1345f | 44 | } |
va009039 | 0:1ed23ab1345f | 45 | return psw; |
va009039 | 0:1ed23ab1345f | 46 | } |
va009039 | 0:1ed23ab1345f | 47 | |
va009039 | 0:1ed23ab1345f | 48 | uint16_t usb_itd::StartingFrame() |
va009039 | 0:1ed23ab1345f | 49 | { |
va009039 | 0:1ed23ab1345f | 50 | return (m_itd->Control & ITD_SF); |
va009039 | 0:1ed23ab1345f | 51 | } |
va009039 | 0:1ed23ab1345f | 52 | |
va009039 | 0:1ed23ab1345f | 53 | int usb_itd::FrameCount() |
va009039 | 0:1ed23ab1345f | 54 | { |
va009039 | 0:1ed23ab1345f | 55 | DBG_ASSERT(m_itd); |
va009039 | 0:1ed23ab1345f | 56 | int fc = ((m_itd->Control & ITD_FC) >> 24) + 1; |
va009039 | 0:1ed23ab1345f | 57 | DBG_ASSERT(fc >= 1 && fc <= 8); |
va009039 | 0:1ed23ab1345f | 58 | return fc; |
va009039 | 0:1ed23ab1345f | 59 | } |
va009039 | 0:1ed23ab1345f | 60 | |
va009039 | 0:1ed23ab1345f | 61 | int usb_itd::PacketStatus(int n) |
va009039 | 0:1ed23ab1345f | 62 | { |
va009039 | 0:1ed23ab1345f | 63 | DBG_ASSERT(n >=0 && n <= 7); |
va009039 | 0:1ed23ab1345f | 64 | uint16_t psw = get_psw(n); |
va009039 | 0:1ed23ab1345f | 65 | int cc = (psw >> 12) & 0xf; |
va009039 | 0:1ed23ab1345f | 66 | return cc; |
va009039 | 0:1ed23ab1345f | 67 | } |
va009039 | 0:1ed23ab1345f | 68 | |
va009039 | 0:1ed23ab1345f | 69 | int usb_itd::Length(int n) |
va009039 | 0:1ed23ab1345f | 70 | { |
va009039 | 0:1ed23ab1345f | 71 | DBG_ASSERT(n >=0 && n <= 7); |
va009039 | 0:1ed23ab1345f | 72 | uint16_t psw = get_psw(n); |
va009039 | 0:1ed23ab1345f | 73 | int size = psw & 0x7ff; |
va009039 | 0:1ed23ab1345f | 74 | int cc = (psw >> 12) & 0xf; |
va009039 | 0:1ed23ab1345f | 75 | if (cc == 0xe || cc == 0xf) { |
va009039 | 0:1ed23ab1345f | 76 | return -1; |
va009039 | 0:1ed23ab1345f | 77 | } |
va009039 | 0:1ed23ab1345f | 78 | if (cc == 0 || cc == 9) { |
va009039 | 0:1ed23ab1345f | 79 | return size; |
va009039 | 0:1ed23ab1345f | 80 | } |
va009039 | 0:1ed23ab1345f | 81 | debug(); |
va009039 | 0:1ed23ab1345f | 82 | return -1; |
va009039 | 0:1ed23ab1345f | 83 | } |
va009039 | 0:1ed23ab1345f | 84 | |
va009039 | 0:1ed23ab1345f | 85 | uint8_t* usb_itd::BufferPage(int n, int size) |
va009039 | 0:1ed23ab1345f | 86 | { |
va009039 | 0:1ed23ab1345f | 87 | DBG_ASSERT(n >=0 && n <= 7); |
va009039 | 0:1ed23ab1345f | 88 | DBG_ASSERT(size >= 128 && size <= 956); |
va009039 | 0:1ed23ab1345f | 89 | uint8_t* buf = (uint8_t*)m_itd->BufferPage0 + n * size; |
va009039 | 0:1ed23ab1345f | 90 | DBG_ASSERT((uint32_t)(buf+size-1) <= m_itd->BufferEnd); |
va009039 | 0:1ed23ab1345f | 91 | return buf; |
va009039 | 0:1ed23ab1345f | 92 | } |
va009039 | 0:1ed23ab1345f | 93 | |
va009039 | 0:1ed23ab1345f | 94 | void usb_itd::free() |
va009039 | 0:1ed23ab1345f | 95 | { |
va009039 | 0:1ed23ab1345f | 96 | DBG_ASSERT(m_itd); |
va009039 | 0:1ed23ab1345f | 97 | if (m_itd) { |
va009039 | 0:1ed23ab1345f | 98 | uint8_t* buf = (uint8_t*)m_itd->BufferPage0; |
va009039 | 0:1ed23ab1345f | 99 | DBG_ASSERT(buf); |
va009039 | 0:1ed23ab1345f | 100 | usb_free_bp(buf); |
va009039 | 0:1ed23ab1345f | 101 | usb_free_itd((byte*)m_itd); |
va009039 | 0:1ed23ab1345f | 102 | m_itd = NULL; |
va009039 | 0:1ed23ab1345f | 103 | } |
va009039 | 0:1ed23ab1345f | 104 | } |
va009039 | 0:1ed23ab1345f | 105 | |
va009039 | 0:1ed23ab1345f | 106 | void usb_itd::debug() |
va009039 | 0:1ed23ab1345f | 107 | { |
va009039 | 0:1ed23ab1345f | 108 | DBG("itd =%08X\n", m_itd); |
va009039 | 0:1ed23ab1345f | 109 | DBG("itd->Control =%08X\n", m_itd->Control); |
va009039 | 0:1ed23ab1345f | 110 | DBG("itd->BufferPage0=%08X\n", m_itd->BufferPage0); |
va009039 | 0:1ed23ab1345f | 111 | DBG("itd->Next =%08X\n", m_itd->Next); |
va009039 | 0:1ed23ab1345f | 112 | DBG("itd->BufferEnd =%08X\n", m_itd->BufferEnd); |
va009039 | 0:1ed23ab1345f | 113 | DBG("itd->OffsetPSW10=%08X\n", m_itd->OffsetPSW10); |
va009039 | 0:1ed23ab1345f | 114 | DBG("itd->OffsetPSW32=%08X\n", m_itd->OffsetPSW32); |
va009039 | 0:1ed23ab1345f | 115 | DBG("itd->OffsetPSW54=%08X\n", m_itd->OffsetPSW54); |
va009039 | 0:1ed23ab1345f | 116 | DBG("itd->OffsetPSW76=%08X\n", m_itd->OffsetPSW76); |
va009039 | 0:1ed23ab1345f | 117 | } |