void
SocketMessageWatcher::ReadBdAddress(unsigned long aOffset,
                                    BluetoothAddress& aBdAddress) const
{
  aBdAddress = BluetoothAddress(mBuf[aOffset + 0],
                                mBuf[aOffset + 1],
                                mBuf[aOffset + 2],
                                mBuf[aOffset + 3],
                                mBuf[aOffset + 4],
                                mBuf[aOffset + 5]);
}
Exemple #2
0
void bluetooth::queryDevices(std::vector<BluetoothAddress> &devices, int max_rsp)
{
	inquiry_info *ii = NULL;
	int num_rsp;
	int dev_id, sock, len, flags;
	int i;
	char addr[19] = {0};
	char name[1024] = {0};
	dev_id = hci_get_route(NULL);
	if (dev_id == -1) {
		throw std::runtime_error("cannot hci_get_route");
	}
	sock = hci_open_dev(dev_id);
	if (sock == -1) {
		throw std::runtime_error("cannot hci_open_dev");
	}
	len = 8;
	flags = IREQ_CACHE_FLUSH;
	ii = new inquiry_info[max_rsp];
	num_rsp = hci_inquiry(dev_id, len, max_rsp, NULL, &ii, flags);
	if (num_rsp == -1) {
		delete []ii;
		close(sock);
		throw std::runtime_error("cannot call hci_inquiry");
	}
	for (int i = 0; i < num_rsp; i++) {
		const unsigned char * addr = (const unsigned char *) &(ii + i)->bdaddr.b;
		const unsigned char * devClass = (const unsigned char *) &(ii + i)->dev_class;
		std::string strName = "";
		memset(name, 0, sizeof(name));
		if (hci_read_remote_name(sock, &(ii + i)->bdaddr, sizeof(name), name, 0) == 0) {
			strName = name;
		} else strName = "[unknown]";
		devices.push_back(BluetoothAddress(addr, devClass, strName));
	}
}