watch using the RSSI of Bluetooth

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

UsbBt2/UsbBt2.h

Committer:
va009039
Date:
2013-01-20
Revision:
0:600fe65e7c88

File content as of revision 0:600fe65e7c88:

// 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