BLE demo for mbed Ported RunningElectronics's SBDBT firmware for BLE. It can communicate with iOS

Dependencies:   FatFileSystem mbed

Fork of BTstack by Norimasa Okamoto

Committer:
todotani
Date:
Wed Feb 20 14:18:38 2013 +0000
Revision:
6:cf06ba884429
Parent:
0:1ed23ab1345f
Change tick timer to 1ms. Change attribute 0xFFF1 as read of DigitalIn p5

Who changed what in which revision?

UserRevisionLine numberNew 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 }