watch using the RSSI of Bluetooth

Dependencies:   BaseUsbHost ConfigFile EthernetInterface HTTPClient-long mbed-rtos mbed

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