watch using the RSSI of Bluetooth
Dependencies: BaseUsbHost ConfigFile EthernetInterface HTTPClient-long mbed-rtos mbed
UsbBt2.h
00001 // UsbBt2.cpp 2013/1/19 00002 #ifndef USB_BT2_H 00003 #define USB_BT2_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 00029 #define VERBOSE(...) do{printf(__VA_ARGS__);} while(0); 00030 00031 #pragma push 00032 #pragma pack(1) 00033 struct BD_ADDR { 00034 uint8_t addr[6]; 00035 void set(char* s) { 00036 char* p = s; 00037 for(int i = 5; i >= 0; i--) { 00038 addr[i] = strtol(p, &p, 16); 00039 if (*p == ':') { 00040 p++; 00041 } 00042 } 00043 } 00044 void str(char* buf, size_t size) { 00045 snprintf(buf, size, "%02X:%02X:%02X:%02X:%02X:%02X", addr[5], addr[4], addr[3], addr[2], addr[1], addr[0]); 00046 } 00047 }; 00048 00049 typedef struct { 00050 BD_ADDR bdaddr; 00051 uint8_t page_scan_repetition_mode; 00052 uint8_t reserved[2]; 00053 uint8_t dev_class[3]; 00054 uint16_t clock_offset; 00055 } inquiry_info; 00056 00057 typedef struct { 00058 BD_ADDR bdaddr; 00059 uint8_t page_scan_repetition_mode; 00060 uint8_t reserved[1]; 00061 uint8_t class_of_device[3]; 00062 uint16_t clock_offset; 00063 int8_t rssi; 00064 } inquiry_with_rssi_info; 00065 00066 typedef struct { 00067 BD_ADDR bdaddr; 00068 uint8_t page_scan_repetition_mode; 00069 uint8_t reserved[1]; 00070 uint8_t class_of_device[3]; 00071 uint16_t clock_offset; 00072 int8_t rssi; 00073 uint8_t extended_inquiry_response[240]; 00074 } extended_inquiry_info; 00075 00076 typedef struct { 00077 uint8_t evt; 00078 uint8_t len; 00079 uint8_t status; 00080 union { 00081 uint16_t op; 00082 uint8_t data[]; 00083 } c; 00084 } hci_event; 00085 #pragma pop 00086 00087 class bthci { 00088 public: 00089 bthci(ControlEp* ctlEp = NULL); 00090 static bool check(ControlEp* ctlEp); 00091 int cmdSend(uint16_t op); 00092 int cmdSend(uint16_t op, const char* fmt, ...); 00093 int cmdSend(uint16_t op, const uint8_t* data, int size); 00094 int eventReceive(uint8_t* buf, int size, int millisec=osWaitForever); 00095 int AclSend(uint8_t* buf, int size, int millisec=osWaitForever); 00096 int AclReceive(uint8_t* buf, int size, int millisec=osWaitForever); 00097 private: 00098 int ParseConfiguration(ControlEp* ctlEp); 00099 ControlEp* m_ctlEp; 00100 InterruptEp* m_pEpIntIn; 00101 BulkEp* m_pEpBulkIn; 00102 BulkEp* m_pEpBulkOut; 00103 uint8_t m_buf[255]; 00104 }; 00105 00106 #endif //USB_BT2_H
Generated on Thu Aug 18 2022 00:09:01 by 1.7.2