watch using the RSSI of Bluetooth

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

Committer:
va009039
Date:
Sun Jan 20 09:22:31 2013 +0000
Revision:
0:600fe65e7c88
first commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
va009039 0:600fe65e7c88 1 // UsbBt2.cpp 2013/1/19
va009039 0:600fe65e7c88 2 #ifndef USB_BT2_H
va009039 0:600fe65e7c88 3 #define USB_BT2_H
va009039 0:600fe65e7c88 4 #include <stdarg.h>
va009039 0:600fe65e7c88 5
va009039 0:600fe65e7c88 6 #define HCI_OP_INQUIRY 0x0401
va009039 0:600fe65e7c88 7 #define HCI_OP_INQUIRY_CANCEL 0x0402
va009039 0:600fe65e7c88 8 #define HCI_OP_PERIODIC_INQUIRY 0x0403
va009039 0:600fe65e7c88 9 #define HCI_OP_EXIT_PERIODIC_INQUIRY 0x0404
va009039 0:600fe65e7c88 10 #define HCI_OP_REMOTE_NAME_REQ 0x0419
va009039 0:600fe65e7c88 11 #define HCI_OP_RESET 0x0c03
va009039 0:600fe65e7c88 12 #define HCI_OP_WRITE_LOCAL_NAME 0x0c13
va009039 0:600fe65e7c88 13 #define HCI_OP_WRITE_SCAN_ENABLE 0x0c1a
va009039 0:600fe65e7c88 14 #define HCI_OP_WRITE_CLASS_OF_DEV 0x0c24
va009039 0:600fe65e7c88 15 #define HCI_OP_WRITE_INQUIRY_MODE 0x0c45
va009039 0:600fe65e7c88 16 #define HCI_OP_READ_EXTENDED_INQUIRY_RESPONSE 0x0c51
va009039 0:600fe65e7c88 17 #define HCI_OP_WRITE_EXTENDED_INQUIRY_RESPONSE 0x0c52
va009039 0:600fe65e7c88 18 #define HCI_OP_READ_BD_ADDR 0x1009
va009039 0:600fe65e7c88 19
va009039 0:600fe65e7c88 20 #define HCI_EV_INQUIRY_COMPLETE 0x01
va009039 0:600fe65e7c88 21 #define HCI_EV_INQUIRY_RESULT 0x02
va009039 0:600fe65e7c88 22 #define HCI_EV_REMOTE_NAME 0x07
va009039 0:600fe65e7c88 23 #define HCI_EV_CMD_COMPLETE 0x0e
va009039 0:600fe65e7c88 24 #define HCI_EV_CMD_STATUS 0x0f
va009039 0:600fe65e7c88 25 #define HCI_EV_INQUIRY_RESULT_WITH_RSSI 0x22
va009039 0:600fe65e7c88 26 #define HCI_EV_EXTENDED_INQUIRY_RESULT 0x2f
va009039 0:600fe65e7c88 27
va009039 0:600fe65e7c88 28
va009039 0:600fe65e7c88 29 #define VERBOSE(...) do{printf(__VA_ARGS__);} while(0);
va009039 0:600fe65e7c88 30
va009039 0:600fe65e7c88 31 #pragma push
va009039 0:600fe65e7c88 32 #pragma pack(1)
va009039 0:600fe65e7c88 33 struct BD_ADDR {
va009039 0:600fe65e7c88 34 uint8_t addr[6];
va009039 0:600fe65e7c88 35 void set(char* s) {
va009039 0:600fe65e7c88 36 char* p = s;
va009039 0:600fe65e7c88 37 for(int i = 5; i >= 0; i--) {
va009039 0:600fe65e7c88 38 addr[i] = strtol(p, &p, 16);
va009039 0:600fe65e7c88 39 if (*p == ':') {
va009039 0:600fe65e7c88 40 p++;
va009039 0:600fe65e7c88 41 }
va009039 0:600fe65e7c88 42 }
va009039 0:600fe65e7c88 43 }
va009039 0:600fe65e7c88 44 void str(char* buf, size_t size) {
va009039 0:600fe65e7c88 45 snprintf(buf, size, "%02X:%02X:%02X:%02X:%02X:%02X", addr[5], addr[4], addr[3], addr[2], addr[1], addr[0]);
va009039 0:600fe65e7c88 46 }
va009039 0:600fe65e7c88 47 };
va009039 0:600fe65e7c88 48
va009039 0:600fe65e7c88 49 typedef struct {
va009039 0:600fe65e7c88 50 BD_ADDR bdaddr;
va009039 0:600fe65e7c88 51 uint8_t page_scan_repetition_mode;
va009039 0:600fe65e7c88 52 uint8_t reserved[2];
va009039 0:600fe65e7c88 53 uint8_t dev_class[3];
va009039 0:600fe65e7c88 54 uint16_t clock_offset;
va009039 0:600fe65e7c88 55 } inquiry_info;
va009039 0:600fe65e7c88 56
va009039 0:600fe65e7c88 57 typedef struct {
va009039 0:600fe65e7c88 58 BD_ADDR bdaddr;
va009039 0:600fe65e7c88 59 uint8_t page_scan_repetition_mode;
va009039 0:600fe65e7c88 60 uint8_t reserved[1];
va009039 0:600fe65e7c88 61 uint8_t class_of_device[3];
va009039 0:600fe65e7c88 62 uint16_t clock_offset;
va009039 0:600fe65e7c88 63 int8_t rssi;
va009039 0:600fe65e7c88 64 } inquiry_with_rssi_info;
va009039 0:600fe65e7c88 65
va009039 0:600fe65e7c88 66 typedef struct {
va009039 0:600fe65e7c88 67 BD_ADDR bdaddr;
va009039 0:600fe65e7c88 68 uint8_t page_scan_repetition_mode;
va009039 0:600fe65e7c88 69 uint8_t reserved[1];
va009039 0:600fe65e7c88 70 uint8_t class_of_device[3];
va009039 0:600fe65e7c88 71 uint16_t clock_offset;
va009039 0:600fe65e7c88 72 int8_t rssi;
va009039 0:600fe65e7c88 73 uint8_t extended_inquiry_response[240];
va009039 0:600fe65e7c88 74 } extended_inquiry_info;
va009039 0:600fe65e7c88 75
va009039 0:600fe65e7c88 76 typedef struct {
va009039 0:600fe65e7c88 77 uint8_t evt;
va009039 0:600fe65e7c88 78 uint8_t len;
va009039 0:600fe65e7c88 79 uint8_t status;
va009039 0:600fe65e7c88 80 union {
va009039 0:600fe65e7c88 81 uint16_t op;
va009039 0:600fe65e7c88 82 uint8_t data[];
va009039 0:600fe65e7c88 83 } c;
va009039 0:600fe65e7c88 84 } hci_event;
va009039 0:600fe65e7c88 85 #pragma pop
va009039 0:600fe65e7c88 86
va009039 0:600fe65e7c88 87 class bthci {
va009039 0:600fe65e7c88 88 public:
va009039 0:600fe65e7c88 89 bthci(ControlEp* ctlEp = NULL);
va009039 0:600fe65e7c88 90 static bool check(ControlEp* ctlEp);
va009039 0:600fe65e7c88 91 int cmdSend(uint16_t op);
va009039 0:600fe65e7c88 92 int cmdSend(uint16_t op, const char* fmt, ...);
va009039 0:600fe65e7c88 93 int cmdSend(uint16_t op, const uint8_t* data, int size);
va009039 0:600fe65e7c88 94 int eventReceive(uint8_t* buf, int size, int millisec=osWaitForever);
va009039 0:600fe65e7c88 95 int AclSend(uint8_t* buf, int size, int millisec=osWaitForever);
va009039 0:600fe65e7c88 96 int AclReceive(uint8_t* buf, int size, int millisec=osWaitForever);
va009039 0:600fe65e7c88 97 private:
va009039 0:600fe65e7c88 98 int ParseConfiguration(ControlEp* ctlEp);
va009039 0:600fe65e7c88 99 ControlEp* m_ctlEp;
va009039 0:600fe65e7c88 100 InterruptEp* m_pEpIntIn;
va009039 0:600fe65e7c88 101 BulkEp* m_pEpBulkIn;
va009039 0:600fe65e7c88 102 BulkEp* m_pEpBulkOut;
va009039 0:600fe65e7c88 103 uint8_t m_buf[255];
va009039 0:600fe65e7c88 104 };
va009039 0:600fe65e7c88 105
va009039 0:600fe65e7c88 106 #endif //USB_BT2_H