BTstack for EA LPC4088 QSB example program
Dependencies: LPC4088-USBHost mbed
Fork of KL46Z-BTstack_example by
The usage is the same as KL46Z-BTstack_example.
使い方はKL46Z-BTstack_exampleと同じです。
KL46Z-USBHostBTstack/USBHostBTstack.cpp
- Committer:
- va009039
- Date:
- 2014-01-25
- Revision:
- 3:54f9b5e0d12d
- Child:
- 4:cf1b23f4dcd4
File content as of revision 3:54f9b5e0d12d:
// USBHostBTstack.cpp #include "USBHostBTstack.h" //#define BTSTACK_DEBUG #ifdef BTSTACK_DEBUG #define BT_DBG(x, ...) std::printf("[%s:%d]"x"\r\n", __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__); #define BT_DBG_BYTES(STR,BUF,LEN) _debug_bytes(__PRETTY_FUNCTION__,__LINE__,STR,BUF,LEN) #else #define BT_DBG(...) while(0); #define BT_DBG_BYTES(S,BUF,LEN) while(0); #endif #define HCI_COMMAND_DATA_PACKET 0x01 #define HCI_ACL_DATA_PACKET 0x02 #define HCI_SCO_DATA_PACKET 0x03 #define HCI_EVENT_PACKET 0x04 USBHostBTstack::USBHostBTstack() { host = USBHost::getHostInst(); m_pCb = NULL; } bool USBHostBTstack::connected() { return true; } bool USBHostBTstack::connect() { return true; } int USBHostBTstack::open() { return 0; } int USBHostBTstack::send_packet(uint8_t packet_type, uint8_t* packet, int size) { USB_TYPE res; switch(packet_type){ case HCI_COMMAND_DATA_PACKET: BT_DBG_BYTES("HCI_CMD:", packet, size); res = host->controlWrite(dev, USB_HOST_TO_DEVICE | USB_REQUEST_TYPE_CLASS | USB_RECIPIENT_DEVICE, 0, 0, 0, packet, size); TEST_ASSERT(res == USB_TYPE_OK); break; case HCI_ACL_DATA_PACKET: BT_DBG_BYTES("ACL_SND:", packet, size); res = host->bulkWrite(dev, bulk_out, packet, size); TEST_ASSERT(res == USB_TYPE_OK); break; default: TEST_ASSERT(0); } return 0; } void USBHostBTstack::register_packet_handler(void (*pMethod)(uint8_t, uint8_t*, uint16_t) ) { BT_DBG("pMethod: %p", pMethod); m_pCb = pMethod; } void USBHostBTstack::poll() { int result = host->InterruptRead(int_report, sizeof(int_report)); if (result >= 0) { BT_DBG_BYTES("HCI_EVT:", int_report, result); if (m_pCb) { m_pCb(HCI_EVENT_PACKET, int_report, result); } } result = host->BulkRead(bulk_report, sizeof(bulk_report), 0); if (result >= 0) { BT_DBG_BYTES("HCI_ACL_RECV:", bulk_report, result); if (m_pCb) { m_pCb(HCI_ACL_DATA_PACKET, bulk_report, result); } } } void _debug_bytes(const char* pretty, int line, const char* s, uint8_t* buf, int len) { printf("[%s:%d]\n%s", pretty, line, s); for(int i = 0; i < len; i++) { printf(" %02x", buf[i]); } printf("\n"); }