Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: FatFileSystem TB6612FNG2 mbed
usbbt/usbbt.cpp@0:de03cbbcd0ff, 2015-11-30 (annotated)
- Committer:
- mbed_Cookbook_SE
- Date:
- Mon Nov 30 09:32:15 2015 +0000
- Revision:
- 0:de03cbbcd0ff
??
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 1 | #include "usbbt.h" |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 2 | //#define __DEBUG |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 3 | #include "mydbg.h" |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 4 | #include "Utils.h" |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 5 | |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 6 | usbbt::usbbt(int dongle) |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 7 | : m_dongle(dongle),m_pEpIntIn(NULL),m_pEpBulkIn(NULL),m_pEpBulkOut(NULL), |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 8 | m_int_seq(0),m_bulk_seq(0) |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 9 | { |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 10 | |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 11 | } |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 12 | |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 13 | int usbbt::setup(int timeout) |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 14 | { |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 15 | for(int i = 0; i < 2; i++) { |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 16 | m_pDev = m_pHost->getDeviceByClass(0xe0, m_dongle); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 17 | if (m_pDev || i > 0) { |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 18 | break; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 19 | } |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 20 | UsbErr rc = Usb_poll(); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 21 | if (rc == USBERR_PROCESSING) { |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 22 | VERBOSE("%p USBERR_PROCESSING\n", this); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 23 | return -1; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 24 | } |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 25 | } |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 26 | DBG("m_pDev=%p\n", m_pDev); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 27 | if (m_pDev == NULL) { |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 28 | VERBOSE("%p Bluetooth dongle(%d) NOT FOUND\n", this, m_dongle); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 29 | return -1; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 30 | } |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 31 | DBG_ASSERT(m_pDev); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 32 | |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 33 | ParseConfiguration(); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 34 | return 0; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 35 | } |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 36 | |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 37 | int usbbt::ParseConfiguration() |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 38 | { |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 39 | UsbErr rc; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 40 | uint8_t ConfigDesc[9]; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 41 | int index = 0; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 42 | DBG_ASSERT(m_pDev); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 43 | rc = m_pDev->GetDescriptor(USB_DESCRIPTOR_TYPE_CONFIGURATION, index, ConfigDesc, sizeof(ConfigDesc)); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 44 | DBG_ASSERT(rc == USBERR_OK); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 45 | DBG_BYTES("ConfigDescriptor 9bytes", ConfigDesc, sizeof(ConfigDesc)); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 46 | DBG_ASSERT(ConfigDesc[0] == 9); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 47 | DBG_ASSERT(ConfigDesc[1] == 0x02); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 48 | int wTotalLength = *((uint16_t*)&ConfigDesc[2]); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 49 | DBG("TotalLength: %d\n", wTotalLength); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 50 | int bConfigValue = ConfigDesc[5]; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 51 | DBG_ASSERT(bConfigValue == 1); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 52 | DBG("ConfigValue: %d\n", bConfigValue); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 53 | VERBOSE("MaxPower: %d mA\n", ConfigDesc[8]*2); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 54 | |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 55 | uint8_t* buf = new uint8_t[wTotalLength]; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 56 | DBG_ASSERT(buf); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 57 | rc = m_pDev->GetDescriptor(USB_DESCRIPTOR_TYPE_CONFIGURATION, index, buf, wTotalLength); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 58 | DBG_ASSERT(rc == USBERR_OK); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 59 | DBG_ASSERT(ConfigDesc[1] == 0x02); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 60 | for (int pos = 0; pos < wTotalLength; pos += buf[pos]) { |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 61 | DBG_BYTES("CFG", buf+pos, buf[pos]); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 62 | int type = buf[pos+1]; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 63 | if (USB_DESCRIPTOR_TYPE_INTERFACE == type) { // 0x04 |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 64 | DBG("InterfaceNumber: %d\n", buf[pos+2]); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 65 | DBG("AlternateSetting: %d\n", buf[pos+3]); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 66 | DBG("NumEndpoint: %d\n", buf[pos+4]); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 67 | VERBOSE("InterfaceClass: %02X\n", buf[pos+5]); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 68 | VERBOSE("InterfaceSubClass: %02X\n", buf[pos+6]); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 69 | VERBOSE("InterfaceProtocol: %02X\n", buf[pos+7]); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 70 | DBG_ASSERT(buf[pos+6] == 0x01); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 71 | DBG_ASSERT(buf[pos+7] == 0x01); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 72 | } |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 73 | if (USB_DESCRIPTOR_TYPE_ENDPOINT == type) { |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 74 | DBG_ASSERT(buf[pos] == 7); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 75 | uint8_t att = buf[pos+3]; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 76 | uint8_t ep = buf[pos+2]; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 77 | bool dir = ep & 0x80; // true=IN |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 78 | uint16_t size = LE16(buf+pos+4); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 79 | DBG("EndpointAddress: %02X\n", ep); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 80 | DBG("Attribute: %02X\n", att); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 81 | DBG("MaxPacketSize: %d\n", size); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 82 | UsbEndpoint* pEp = new UsbEndpoint(m_pDev, ep, dir, att == 3 ? USB_INT : USB_BULK, size); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 83 | DBG_ASSERT(pEp); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 84 | if (att == 3) { // interrupt |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 85 | if (m_pEpIntIn == NULL) { |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 86 | m_pEpIntIn = pEp; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 87 | } |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 88 | } else if (att == 2) { // bulk |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 89 | if (dir) { |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 90 | if (m_pEpBulkIn == NULL) { |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 91 | m_pEpBulkIn = pEp; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 92 | } |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 93 | } else { |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 94 | if (m_pEpBulkOut == NULL) { |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 95 | m_pEpBulkOut = pEp; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 96 | } |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 97 | } |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 98 | } |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 99 | } |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 100 | if (m_pEpIntIn && m_pEpBulkIn && m_pEpBulkOut) { // cut off |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 101 | break; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 102 | } |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 103 | } |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 104 | delete[] buf; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 105 | DBG_ASSERT(m_pEpIntIn); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 106 | DBG_ASSERT(m_pEpBulkIn); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 107 | DBG_ASSERT(m_pEpBulkOut); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 108 | return 0; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 109 | } |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 110 | |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 111 | int usbbt::send_packet(uint8_t packet_type, uint8_t* packet, int size) |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 112 | { |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 113 | //DBG("\npacket_type=%d\n", packet_type); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 114 | //DBG_HEX(packet, size); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 115 | |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 116 | int rc; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 117 | switch(packet_type){ |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 118 | case HCI_COMMAND_DATA_PACKET: |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 119 | DBG_ASSERT(m_pDev); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 120 | DBG_BYTES("\nCMD", packet, size); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 121 | rc = m_pDev->controlSend( |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 122 | USB_HOST_TO_DEVICE | USB_REQUEST_TYPE_CLASS | USB_RECIPIENT_DEVICE, |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 123 | 0, 0, 0, packet, size); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 124 | DBG_ASSERT(rc == USBERR_OK); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 125 | return 0; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 126 | case HCI_ACL_DATA_PACKET: |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 127 | DBG_ASSERT(m_pEpBulkOut); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 128 | DBG_BYTES("\nACL", packet, size); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 129 | rc = m_pEpBulkOut->transfer(packet, size); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 130 | DBG_ASSERT(rc == USBERR_PROCESSING); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 131 | while(m_pEpBulkOut->status() == USBERR_PROCESSING){ |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 132 | wait_us(1); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 133 | } |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 134 | return 0; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 135 | default: |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 136 | DBG_ASSERT(0); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 137 | return -1; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 138 | } |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 139 | } |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 140 | |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 141 | |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 142 | void usbbt::poll() |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 143 | { |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 144 | //DBG("m_int_seq=%d\n", m_int_seq); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 145 | int rc, len; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 146 | switch(m_int_seq) { |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 147 | case 0: |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 148 | m_int_seq++; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 149 | break; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 150 | case 1: |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 151 | rc = m_pEpIntIn->transfer(m_int_buf, sizeof(m_int_buf)); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 152 | DBG_ASSERT(rc == USBERR_PROCESSING); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 153 | m_int_seq++; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 154 | break; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 155 | case 2: |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 156 | len = m_pEpIntIn->status(); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 157 | if (len == USBERR_PROCESSING) { |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 158 | break; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 159 | } |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 160 | if (len >= 0) { |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 161 | //DBG("len=%d\n", len); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 162 | //DBG_HEX(m_int_buf, len); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 163 | onPacket(HCI_EVENT_PACKET, m_int_buf, len); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 164 | m_int_seq = 0; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 165 | break; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 166 | } |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 167 | DBG_ASSERT(0); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 168 | break; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 169 | } |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 170 | |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 171 | switch(m_bulk_seq) { |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 172 | case 0: |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 173 | m_bulk_seq++; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 174 | break; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 175 | case 1: |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 176 | rc = m_pEpBulkIn->transfer(m_bulk_buf, sizeof(m_bulk_buf)); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 177 | DBG_ASSERT(rc == USBERR_PROCESSING); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 178 | m_bulk_seq++; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 179 | break; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 180 | case 2: |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 181 | len = m_pEpBulkIn->status(); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 182 | if (len == USBERR_PROCESSING) { |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 183 | break; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 184 | } |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 185 | if (len >= 0) { |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 186 | //DBG("len=%d\n", len); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 187 | //DBG_HEX(m_bulk_buf, len); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 188 | onPacket(HCI_ACL_DATA_PACKET, m_bulk_buf, len); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 189 | m_bulk_seq = 0; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 190 | break; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 191 | } |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 192 | DBG_ASSERT(0); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 193 | break; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 194 | } |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 195 | } |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 196 | |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 197 | void usbbt::onPacket(uint8_t packet_type, uint8_t* packet, uint16_t size) |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 198 | { |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 199 | DBG("\npacket_type=%d packet=%p size=%d\n", packet_type, packet, size); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 200 | DBG_HEX(packet, size); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 201 | |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 202 | if(m_pCbItem && m_pCbMeth) |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 203 | (m_pCbItem->*m_pCbMeth)(packet_type, packet, size); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 204 | else if(m_pCb) |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 205 | m_pCb(packet_type, packet, size); |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 206 | } |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 207 | |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 208 | void usbbt::setOnPacket( void (*pMethod)(uint8_t, uint8_t*, uint16_t) ) |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 209 | { |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 210 | m_pCb = pMethod; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 211 | m_pCbItem = NULL; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 212 | m_pCbMeth = NULL; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 213 | } |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 214 | |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 215 | void usbbt::clearOnPacket() |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 216 | { |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 217 | m_pCb = NULL; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 218 | m_pCbItem = NULL; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 219 | m_pCbMeth = NULL; |
| mbed_Cookbook_SE | 0:de03cbbcd0ff | 220 | } |