藍牙 bluez 的編程 C C++
簡介
bluez目錄有一個libbluetooth.a文件
有一個目錄 lib目錄里面存儲這網絡連接的部分代碼
基於庫的代碼編程.
在linux下如果自帶了藍牙,可以通過gcc **.c -lbluetooth 直接編出一個可執行文件.
參考文獻
下面的連接提供了一個測試代碼.
博客鏈接
另外,關於 ble 使用庫的方式一直出現失敗的情況,是因為,沒有設置ble的相關參數,具體可以參考
博客鏈接
中的enable_advertising函數
int device_id = hci_get_route(NULL);
int device_handle = 0;
if ((device_handle = hci_open_dev(device_id)) < 0) {
perror("Could not open device");
exit(1);
}
le_set_advertising_parameters_cp adv_params_cp = { 0 };
adv_params_cp.min_interval = htobs(advertising_interval);
adv_params_cp.max_interval = htobs(advertising_interval);
adv_params_cp.chan_map = 7;
uint8_t status;
struct hci_request rq = { 0 };
rq.ogf = OGF_LE_CTL;
rq.ocf = OCF_LE_SET_ADVERTISING_PARAMETERS;
rq.cparam = &adv_params_cp;
rq.clen = LE_SET_ADVERTISING_PARAMETERS_CP_SIZE;
rq.rparam = &status;
rq.rlen = 1;
int ret = hci_send_req(device_handle, &rq, 1000);
if (ret < 0) {
hci_close_dev(device_handle);
fprintf(stderr, "Can't send request %s (%d)\n", strerror(errno), errno);
return (1);
}
le_set_advertise_enable_cp advertise_cp = { 0 };
advertise_cp.enable = 0x01;
memset(&rq, 0, sizeof(rq));
rq.ogf = OGF_LE_CTL;
rq.ocf = OCF_LE_SET_ADVERTISE_ENABLE;
rq.cparam = &advertise_cp;
rq.clen = LE_SET_ADVERTISE_ENABLE_CP_SIZE;
rq.rparam = &status;
rq.rlen = 1;
ret = hci_send_req(device_handle, &rq, 1000);
if (ret < 0) {
hci_close_dev(device_handle);
fprintf(stderr, "Can't send request %s (%d)\n", strerror(errno), errno);
return (1);
}