| // +build linux,!android |
| |
| #include <stdlib.h> |
| |
| // Maximum allowed LE payload size. See the Bluetooth 4.0 spec for more info on |
| // Bluetooth LE payload structure: |
| // https://www.bluetooth.org/en-us/specification/adopted-specifications |
| const int kMaxLEPayloadSize; |
| // The highest bluetooth channel that can be used for establishing RFCOMM |
| // connections. |
| const int kMaxChannel; |
| |
| // Maximum number of local devices to scan over when a particular device isn't |
| // explicitly specified. |
| const int kMaxDevices; |
| |
| // Opens the bluetooth device with the provided id, storing its device |
| // descriptor into '*dd', its device name into '*name', and its MAC address |
| // into '*local_address'. |
| // Returns an error string if any error is encoutered. If a non-NULL error |
| // string is returned, the caller must free it. |
| // The caller must free '*name' and '*local_address' strings whenever a NULL |
| // error string is returned. |
| // REQUIRES: dev_id >= 0 |
| char* bt_open_device(int dev_id, int* dd, char** name, char** local_address); |
| |
| // Closes the (previously opened) device with the given device descriptor. |
| // Returns error string on failure, or NULL otherwise. If a non-NULL error |
| // string is returned, the caller must free it. |
| char* bt_close_device(int dd); |
| |
| // Binds the given socket to the provided MAC address/channel. If '*local_address' |
| // is NULL, it will bind to the first available bluetooth device and overwrite |
| // '*local_address' to contain that device's MAC address. If '*channel' is zero, |
| // it will bind to the first available channel on a given device and overwrite |
| // '*channel' to contain that channel value. (If both of the above are true, we will |
| // find the first device/channel pair that works and overwrite both values.) |
| // Returns an error string if any error is encoutered. If a non-NULL error |
| // string is returned, the caller must free it. |
| // The caller must free '*local_address' string whenever a NULL value was passed |
| // in and a NULL error string is returned. |
| char* bt_bind(int sock, char** local_address, int* channel); |
| |
| // Accepts the next connection on the provided socket. Stores the file |
| // descriptor for the newly established connection into 'fd', and the MAC |
| // address of the remote party into 'remote_address". Returns an error string |
| // if any error is encountered. If a non-NULL error string is returned, the |
| // caller must free it. |
| // The caller must free '*remote_address' string whenever a NULL error string |
| // is returned. |
| char* bt_accept(int sock, int* fd, char** remote_address); |
| |
| // Connects to the remote address/channel pair, using the provided local socket. |
| // Returns an error string if any error is encountered. If a non-NULL error |
| // string is returned, the caller must free it. |
| char* bt_connect(int sock, const char* remote_address, int remote_channel); |
| |
| // Starts bluetooth LE advertising on the provided device descriptor, sending |
| // one advertising packet every 'adv_interval_ms' milliseconds. |
| // Returns error string on failure, or NULL otherwise. If a non-NULL error |
| // string is returned, the caller must free it. |
| char* bt_start_le_advertising(int dd, int adv_interval_ms); |
| |
| // Sets the advertising payload that is sent with each advertising packet. |
| // This function may be called at any time to adjust the payload that is |
| // currently being advertised. |
| // Returns error string on failure, or NULL otherwise. If a non-NULL error |
| // string is returned, the caller must free it. |
| char* bt_set_le_advertising_payload(int dd, char* adv_payload); |
| |
| // Stops bluetooth LE advertising on the provided device descriptor. |
| // Returns error string on failure, or NULL otherwise. If a non-NULL error |
| // string is returned, the caller must free it. |
| char* bt_stop_le_advertising(int dd); |
| |
| // Parses the LE meta event, extracting remote address, name, and RSSI. It also |
| // checks whether the event is "LE Connection Complete Event", which indicates |
| // that the scan has stopped, and writes the result of that check into 'done'. |
| // Returns error if data cannot be parsed. If a non-NULL error string |
| // is returned, the caller must free it. |
| char* bt_parse_le_meta_event( |
| void* data, char** remote_addr, char** remote_name, int* rssi, int* done); |