示例#1
0
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;
}
示例#2
0
文件: ble.c 项目: dhn/ble
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");
    }
}