mbed base bard check program for BlueTooth USB dongle module (3 switches, 6 leds, I2C LCD, A/D)
Fork of BTstack by
BTstack/hci_transport_usb.cpp
- Committer:
- tamaki
- Date:
- 2016-10-17
- Revision:
- 3:7b7d1273e2d5
- Parent:
- 2:871b41f4789e
File content as of revision 3:7b7d1273e2d5:
/* * Copyright (C) 2009-2012 by Matthias Ringwald * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the copyright holders nor the names of * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * 4. Any redistribution, use, or modification is done solely for * personal benefit and not for any commercial purpose or for * monetary gain. * * THIS SOFTWARE IS PROVIDED BY MATTHIAS RINGWALD AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS * RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * Please inquire about commercial licensing options at btstack@ringwald.ch * */ /* * hci_transport_usb.cpp * * HCI Transport API implementation for USB * * Created by Matthias Ringwald on 7/5/09. */ // delock bt class 2 - csr // 0a12:0001 (bus 27, device 2) // Interface Number - Alternate Setting - suggested Endpoint Address - Endpoint Type - Suggested Max Packet Size // HCI Commands 0 0 0x00 Control 8/16/32/64 // HCI Events 0 0 0x81 Interrupt (IN) 16 // ACL Data 0 0 0x82 Bulk (IN) 32/64 // ACL Data 0 0 0x02 Bulk (OUT) 32/64 #include <stdio.h> #include <string.h> #include "config.h" #include "debug.h" #include "hci.h" #include "hci_transport.h" #include "hci_dump.h" #include "USBHostBTstack.h" enum { LIB_USB_CLOSED = 0, LIB_USB_OPENED, LIB_USB_DEVICE_OPENDED, LIB_USB_KERNEL_DETACHED, LIB_USB_INTERFACE_CLAIMED, LIB_USB_TRANSFERS_ALLOCATED } libusb_state = LIB_USB_CLOSED; // single instance static hci_transport_t * hci_transport_usb = NULL; static USBHostBTstack* bt = NULL; static int usb_process_ds(struct data_source *ds) { if (bt) { bt->poll(); } return 0; } static int usb_open(void *transport_config){ log_info("usb_open\n"); data_source_t *ds = (data_source_t*)malloc(sizeof(data_source_t)); ds->process = usb_process_ds; run_loop_add_data_source(ds); if (bt) { return bt->open(); } return 0; } static int usb_close(void *transport_config){ return 0; } static int usb_send_packet(uint8_t packet_type, uint8_t * packet, int size){ //log_info("usb_send_packet\n"); if (bt) { bt->send_packet(packet_type, packet, size); } return 0; } static void usb_register_packet_handler(void (*handler)(uint8_t packet_type, uint8_t *packet, uint16_t size)){ log_info("registering packet handler\n"); if (bt) { bt->register_packet_handler(handler); } } static const char * usb_get_transport_name(void){ return "USB"; } // get usb singleton hci_transport_t * hci_transport_usb_instance() { if (!bt) { bt = new USBHostBTstack; } if (!hci_transport_usb) { hci_transport_usb = (hci_transport_t*)malloc( sizeof(hci_transport_t)); hci_transport_usb->open = usb_open; hci_transport_usb->close = usb_close; hci_transport_usb->send_packet = usb_send_packet; hci_transport_usb->register_packet_handler = usb_register_packet_handler; hci_transport_usb->get_transport_name = usb_get_transport_name; hci_transport_usb->set_baudrate = NULL; hci_transport_usb->can_send_packet_now = NULL; } return hci_transport_usb; }