int8_t hci_LE_add_white_list(hci_socket_t *hci_socket, hci_controller_t *hci_controller, const bt_device_t bt_device) { CHECK_HCI_CONTROLLER_PTR(hci_controller, "hci_LE_add_white_list"); CHECK_HCI_CONTROLLER_INTERRUPTED(hci_controller, hci_socket); CHECK_HCI_CONTROLLER_OPEN(hci_controller, "hci_LE_add_white_list"); char new_socket = 0; uint8_t add_type = bt_device.add_type; char socket_err = 0; check_hci_socket_ptr(&hci_socket, hci_controller, &new_socket, &socket_err); if (socket_err) { return -1; } if (add_type == UNKNOWN_ADDRESS_TYPE) { add_type = PUBLIC_DEVICE_ADDRESS; } hci_change_state(hci_controller, HCI_STATE_WRITING); if (hci_le_add_white_list(hci_socket->sock, &(bt_device.mac), add_type, HCI_CONTROLLER_DEFAULT_TIMEOUT) < 0) { perror("hci_LE_add_white_list"); hci_change_state(hci_controller, HCI_STATE_OPEN); if (new_socket) { close_hci_socket(hci_socket); free(hci_socket); } return -1; } hci_change_state(hci_controller, HCI_STATE_OPEN); if (!bt_already_registered_device(bt_device.mac)) { bt_register_device(bt_device); } if (new_socket) { close_hci_socket(hci_socket); free(hci_socket); } return 0; }
void add_to_white_list(int dev_id) { if (dev_id < 0) dev_id = hci_get_route(NULL); if ((typ.dd = hci_open_dev(dev_id)) < 0) die("Could not open device\n"); if (BDADDR) str2ba(BDADDR, &bdaddr); typ.err = hci_le_add_white_list(typ.dd, &bdaddr, bdaddr_type, 1000); hci_close_dev(typ.dd); if (typ.err < 0) { typ.err = -errno; die("Can't add to white list!\n"); } }