watch using the RSSI of Bluetooth
Dependencies: BaseUsbHost ConfigFile EthernetInterface HTTPClient-long mbed-rtos mbed
UsbBt2/UsbBt2.h@0:600fe65e7c88, 2013-01-20 (annotated)
- Committer:
- va009039
- Date:
- Sun Jan 20 09:22:31 2013 +0000
- Revision:
- 0:600fe65e7c88
first commit
Who changed what in which revision?
User | Revision | Line number | New 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 |