watch using the RSSI of Bluetooth
Dependencies: BaseUsbHost ConfigFile EthernetInterface HTTPClient-long mbed-rtos mbed
Diff: UsbBt2/UsbBt2.h
- Revision:
- 0:600fe65e7c88
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/UsbBt2/UsbBt2.h Sun Jan 20 09:22:31 2013 +0000 @@ -0,0 +1,106 @@ +// UsbBt2.cpp 2013/1/19 +#ifndef USB_BT2_H +#define USB_BT2_H +#include <stdarg.h> + +#define HCI_OP_INQUIRY 0x0401 +#define HCI_OP_INQUIRY_CANCEL 0x0402 +#define HCI_OP_PERIODIC_INQUIRY 0x0403 +#define HCI_OP_EXIT_PERIODIC_INQUIRY 0x0404 +#define HCI_OP_REMOTE_NAME_REQ 0x0419 +#define HCI_OP_RESET 0x0c03 +#define HCI_OP_WRITE_LOCAL_NAME 0x0c13 +#define HCI_OP_WRITE_SCAN_ENABLE 0x0c1a +#define HCI_OP_WRITE_CLASS_OF_DEV 0x0c24 +#define HCI_OP_WRITE_INQUIRY_MODE 0x0c45 +#define HCI_OP_READ_EXTENDED_INQUIRY_RESPONSE 0x0c51 +#define HCI_OP_WRITE_EXTENDED_INQUIRY_RESPONSE 0x0c52 +#define HCI_OP_READ_BD_ADDR 0x1009 + +#define HCI_EV_INQUIRY_COMPLETE 0x01 +#define HCI_EV_INQUIRY_RESULT 0x02 +#define HCI_EV_REMOTE_NAME 0x07 +#define HCI_EV_CMD_COMPLETE 0x0e +#define HCI_EV_CMD_STATUS 0x0f +#define HCI_EV_INQUIRY_RESULT_WITH_RSSI 0x22 +#define HCI_EV_EXTENDED_INQUIRY_RESULT 0x2f + + +#define VERBOSE(...) do{printf(__VA_ARGS__);} while(0); + +#pragma push +#pragma pack(1) +struct BD_ADDR { + uint8_t addr[6]; + void set(char* s) { + char* p = s; + for(int i = 5; i >= 0; i--) { + addr[i] = strtol(p, &p, 16); + if (*p == ':') { + p++; + } + } + } + void str(char* buf, size_t size) { + snprintf(buf, size, "%02X:%02X:%02X:%02X:%02X:%02X", addr[5], addr[4], addr[3], addr[2], addr[1], addr[0]); + } +}; + +typedef struct { + BD_ADDR bdaddr; + uint8_t page_scan_repetition_mode; + uint8_t reserved[2]; + uint8_t dev_class[3]; + uint16_t clock_offset; +} inquiry_info; + +typedef struct { + BD_ADDR bdaddr; + uint8_t page_scan_repetition_mode; + uint8_t reserved[1]; + uint8_t class_of_device[3]; + uint16_t clock_offset; + int8_t rssi; +} inquiry_with_rssi_info; + +typedef struct { + BD_ADDR bdaddr; + uint8_t page_scan_repetition_mode; + uint8_t reserved[1]; + uint8_t class_of_device[3]; + uint16_t clock_offset; + int8_t rssi; + uint8_t extended_inquiry_response[240]; +} extended_inquiry_info; + +typedef struct { + uint8_t evt; + uint8_t len; + uint8_t status; + union { + uint16_t op; + uint8_t data[]; + } c; +} hci_event; +#pragma pop + +class bthci { +public: + bthci(ControlEp* ctlEp = NULL); + static bool check(ControlEp* ctlEp); + int cmdSend(uint16_t op); + int cmdSend(uint16_t op, const char* fmt, ...); + int cmdSend(uint16_t op, const uint8_t* data, int size); + int eventReceive(uint8_t* buf, int size, int millisec=osWaitForever); + int AclSend(uint8_t* buf, int size, int millisec=osWaitForever); + int AclReceive(uint8_t* buf, int size, int millisec=osWaitForever); +private: + int ParseConfiguration(ControlEp* ctlEp); + ControlEp* m_ctlEp; + InterruptEp* m_pEpIntIn; + BulkEp* m_pEpBulkIn; + BulkEp* m_pEpBulkOut; + uint8_t m_buf[255]; +}; + +#endif //USB_BT2_H