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.
Fork of F401RE-USBHost by
USBHostRSSI.h
00001 // Simple USBHost Bluetooth RSSI for FRDM-KL46Z 00002 #pragma once 00003 #include "USBHost.h" 00004 #include <stdarg.h> 00005 00006 #define HCI_OP_INQUIRY 0x0401 00007 #define HCI_OP_INQUIRY_CANCEL 0x0402 00008 #define HCI_OP_PERIODIC_INQUIRY 0x0403 00009 #define HCI_OP_EXIT_PERIODIC_INQUIRY 0x0404 00010 #define HCI_OP_REMOTE_NAME_REQ 0x0419 00011 #define HCI_OP_RESET 0x0c03 00012 #define HCI_OP_WRITE_LOCAL_NAME 0x0c13 00013 #define HCI_OP_WRITE_SCAN_ENABLE 0x0c1a 00014 #define HCI_OP_WRITE_CLASS_OF_DEV 0x0c24 00015 #define HCI_OP_WRITE_INQUIRY_MODE 0x0c45 00016 #define HCI_OP_READ_EXTENDED_INQUIRY_RESPONSE 0x0c51 00017 #define HCI_OP_WRITE_EXTENDED_INQUIRY_RESPONSE 0x0c52 00018 #define HCI_OP_READ_BD_ADDR 0x1009 00019 00020 #define HCI_EV_INQUIRY_COMPLETE 0x01 00021 #define HCI_EV_INQUIRY_RESULT 0x02 00022 #define HCI_EV_REMOTE_NAME 0x07 00023 #define HCI_EV_CMD_COMPLETE 0x0e 00024 #define HCI_EV_CMD_STATUS 0x0f 00025 #define HCI_EV_INQUIRY_RESULT_WITH_RSSI 0x22 00026 #define HCI_EV_EXTENDED_INQUIRY_RESULT 0x2f 00027 00028 #pragma pack(push,1) 00029 struct BD_ADDR { 00030 uint8_t addr[6]; 00031 void set(char* s) { 00032 char* p = s; 00033 for(int i = 5; i >= 0; i--) { 00034 addr[i] = strtol(p, &p, 16); 00035 if (*p == ':') { 00036 p++; 00037 } 00038 } 00039 } 00040 void str(char* buf, size_t size) { 00041 snprintf(buf, size, "%02X:%02X:%02X:%02X:%02X:%02X", addr[5], addr[4], addr[3], addr[2], addr[1], addr[0]); 00042 } 00043 void str_mask(char* buf, size_t size) { 00044 snprintf(buf, size, "%02X:%02X:%02X:xx:xx:xx", addr[5], addr[4], addr[3]); 00045 } 00046 bool eq(BD_ADDR* a) { 00047 return memcmp(addr, a->addr, 6) == 0; 00048 } 00049 bool eq_vendor(BD_ADDR* a) { 00050 return memcmp(addr+3, a->addr+3, 3) == 0; 00051 } 00052 }; 00053 00054 struct inquiry_info { 00055 BD_ADDR bdaddr; 00056 uint8_t page_scan_repetition_mode; 00057 uint8_t reserved[2]; 00058 uint8_t dev_class[3]; 00059 uint16_t clock_offset; 00060 }; 00061 00062 struct inquiry_with_rssi_info { // offset 00063 BD_ADDR bdaddr; // +0 00064 uint8_t page_scan_repetition_mode;// +6 00065 uint8_t reserved[1]; // +7 00066 uint8_t class_of_device[3]; // +8 00067 uint16_t clock_offset; // +11 00068 int8_t rssi; // +13 00069 }; // +14 00070 00071 struct extended_inquiry_info { 00072 BD_ADDR bdaddr; 00073 uint8_t page_scan_repetition_mode; 00074 uint8_t reserved[1]; 00075 uint8_t class_of_device[3]; 00076 uint16_t clock_offset; 00077 int8_t rssi; 00078 uint8_t extended_inquiry_response[240]; 00079 }; 00080 00081 struct hci_event { 00082 uint8_t evt; 00083 uint8_t len; 00084 uint8_t status; 00085 union { 00086 uint16_t op; 00087 uint8_t data[]; 00088 } c; 00089 }; 00090 #pragma pack(pop) 00091 00092 class USBHostRSSI : public IUSBEnumerator { 00093 public: 00094 00095 /** 00096 * Constructor 00097 */ 00098 USBHostRSSI(); 00099 00100 /** 00101 * Try to connect a BT device 00102 * 00103 * @return true if connection was successful 00104 */ 00105 bool connect(); 00106 00107 /** 00108 * Check if a mouse is connected 00109 * 00110 * @returns true if a BT is connected 00111 */ 00112 bool connected(); 00113 00114 void attachEvent(void (*ptr)(inquiry_with_rssi_info* info)) { 00115 if (ptr != NULL) { 00116 onUpdate = ptr; 00117 } 00118 } 00119 //Report* report; 00120 00121 protected: 00122 //From IUSBEnumerator 00123 virtual void setVidPid(uint16_t vid, uint16_t pid); 00124 virtual bool parseInterface(uint8_t intf_nb, uint8_t intf_class, uint8_t intf_subclass, uint8_t intf_protocol); //Must return true if the interface should be parsed 00125 virtual bool useEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir); //Must return true if the endpoint will be used 00126 00127 private: 00128 USBHost * host; 00129 USBDeviceConnected * dev; 00130 USBEndpoint * int_in; 00131 bool dev_connected; 00132 bool bluetooth_device_found; 00133 int bluetooth_intf; 00134 00135 void rxHandler(); 00136 void (*onUpdate)(inquiry_with_rssi_info* info); 00137 uint8_t int_buf[64]; 00138 int seq; 00139 void event(uint8_t* data, int size); 00140 USB_TYPE cmdSend(uint16_t op); 00141 USB_TYPE cmdSend(uint16_t op, const char* fmt, ...); 00142 USB_TYPE cmdSendSub(uint16_t op, const uint8_t* data, int size); 00143 void init(); 00144 }; 00145
Generated on Tue Jul 12 2022 21:43:28 by
1.7.2
