예제 #1
0
파일: mgmtops.c 프로젝트: heinervdm/bluez
static int mgmt_set_powered(int index, gboolean powered)
{
	DBG("index %d powered %d", index, powered);
	return mgmt_set_mode(index, MGMT_OP_SET_POWERED, powered);
}
예제 #2
0
파일: mgmtops.c 프로젝트: heinervdm/bluez
static void read_info_complete(int sk, void *buf, size_t len)
{
	struct mgmt_rp_read_info *rp = buf;
	struct controller_info *info;
	struct btd_adapter *adapter;
	uint8_t mode;
	uint16_t index;
	char addr[18];

	if (len < sizeof(*rp)) {
		error("Too small read info complete event");
		return;
	}

	index = btohs(bt_get_unaligned(&rp->index));
	if (index > max_index) {
		error("Unexpected index %u in read info complete", index);
		return;
	}

	mgmt_set_mode(index, MGMT_OP_SET_SERVICE_CACHE, 1);

	info = &controllers[index];
	info->type = rp->type;
	info->enabled = rp->powered;
	info->connectable = rp->connectable;
	info->discoverable = rp->discoverable;
	info->pairable = rp->pairable;
	info->sec_mode = rp->sec_mode;
	bacpy(&info->bdaddr, &rp->bdaddr);
	memcpy(info->dev_class, rp->dev_class, 3);
	memcpy(info->features, rp->features, 8);
	info->manufacturer = btohs(bt_get_unaligned(&rp->manufacturer));
	info->hci_ver = rp->hci_ver;
	info->hci_rev = btohs(bt_get_unaligned(&rp->hci_rev));

	ba2str(&info->bdaddr, addr);
	DBG("hci%u type %u addr %s", index, info->type, addr);
	DBG("hci%u class 0x%02x%02x%02x", index,
		info->dev_class[2], info->dev_class[1], info->dev_class[0]);
	DBG("hci%u manufacturer %d HCI ver %d:%d", index, info->manufacturer,
						info->hci_ver, info->hci_rev);
	DBG("hci%u enabled %u discoverable %u pairable %u sec_mode %u", index,
					info->enabled, info->discoverable,
					info->pairable, info->sec_mode);

	adapter = btd_manager_register_adapter(index);
	if (adapter == NULL) {
		error("mgmtops: unable to register adapter");
		return;
	}

	btd_adapter_get_mode(adapter, &mode, NULL, NULL);
	if (mode == MODE_OFF) {
		mgmt_set_powered(index, FALSE);
		return;
	}

	if (info->enabled)
		mgmt_update_powered(index, TRUE);
	else
		mgmt_set_powered(index, TRUE);

	btd_adapter_unref(adapter);
}
예제 #3
0
파일: mgmtops.c 프로젝트: heinervdm/bluez
static int mgmt_set_pairable(int index, gboolean pairable)
{
	DBG("index %d pairable %d", index, pairable);
	return mgmt_set_mode(index, MGMT_OP_SET_PAIRABLE, pairable);
}
예제 #4
0
파일: mgmtops.c 프로젝트: heinervdm/bluez
static int mgmt_set_discoverable(int index, gboolean discoverable)
{
	DBG("index %d discoverable %d", index, discoverable);
	return mgmt_set_mode(index, MGMT_OP_SET_DISCOVERABLE, discoverable);
}
예제 #5
0
파일: mgmtops.c 프로젝트: heinervdm/bluez
static int mgmt_set_connectable(int index, gboolean connectable)
{
	DBG("index %d connectable %d", index, connectable);
	return mgmt_set_mode(index, MGMT_OP_SET_CONNECTABLE, connectable);
}
예제 #6
0
파일: mgmtops.c 프로젝트: heinervdm/bluez
static int mgmt_disable_cod_cache(int index)
{
	DBG("index %d", index);
	return mgmt_set_mode(index, MGMT_OP_SET_SERVICE_CACHE, 0);
}
예제 #7
0
파일: bt_mgmt.c 프로젝트: alama/GIMX
int bt_mgmt_adapter_init(uint16_t index)
{
  int sk;

  if((sk = mgmt_create()) < 0)
  {
    fprintf(stderr, "can't open a management socket\n");
    return -1;
  }

  step = E_SET_POWERED;

  if(mgmt_set_mode(sk, index, MGMT_OP_SET_POWERED, TRUE) < 0)
  {
    fprintf(stderr, "set_powered failed\n");
    close(sk);
    return -1;
  }

  if(mgmt_read_evt(sk, index) < 0)
  {
    close(sk);
    return -1;
  }

  step = E_SET_LOCAL_NAME;

  if(mgmt_set_local_name(sk, index) < 0)
  {
    fprintf(stderr, "set_local_name failed\n");
    close(sk);
    return -1;
  }

  if(mgmt_read_evt(sk, index) < 0)
  {
    close(sk);
    return -1;
  }

  step = E_SET_CONNECTABLE;

  if(mgmt_set_mode(sk, index, MGMT_OP_SET_CONNECTABLE, TRUE) < 0)
  {
    fprintf(stderr, "set_connectable failed\n");
    close(sk);
    return -1;
  }

  if(mgmt_read_evt(sk, index) < 0)
  {
    close(sk);
    return -1;
  }

  step = E_LOAD_LINK_KEYS;

  bdaddr_t bdaddrs[2];
  unsigned char keys[2][16];

  if(read_link_keys(index, 2, bdaddrs, keys) < 0)
  {
    fprintf(stderr, "read_link_keys failed\n");
    close(sk);
    return -1;
  }

  if(mgmt_load_link_keys(sk, index, 2, bdaddrs, keys) < 0)
  {
    fprintf(stderr, "load_link_keys failed\n");
    close(sk);
    return -1;
  }

  if(mgmt_read_evt(sk, index) < 0)
  {
    close(sk);
    return -1;
  }

  close(sk);

  return 0;
}