static void set_powered_complete(int sk, uint16_t index, void *buf, size_t len) { struct mgmt_mode *rp = buf; if (len < sizeof(*rp)) { error("Too small set powered complete event"); return; } DBG("hci%d powered %u", index, rp->val); mgmt_update_powered(index, rp->val); }
static void mgmt_powered(int sk, uint16_t index, void *buf, size_t len) { struct mgmt_mode *ev = buf; if (len < sizeof(*ev)) { error("Too small powered event"); return; } DBG("Controller %u powered %u", index, ev->val); mgmt_update_powered(index, ev->val); }
static void set_powered_complete(int sk, void *buf, size_t len) { struct mgmt_mode *rp = buf; uint16_t index; if (len < sizeof(*rp)) { error("Too small set powered complete event"); return; } index = btohs(bt_get_unaligned(&rp->index)); DBG("hci%d powered %u", index, rp->val); mgmt_update_powered(index, rp->val); }
static void mgmt_powered(int sk, void *buf, size_t len) { struct mgmt_mode *ev = buf; uint16_t index; if (len < sizeof(*ev)) { error("Too small powered event"); return; } index = btohs(bt_get_unaligned(&ev->index)); DBG("Controller %u powered %u", index, ev->val); mgmt_update_powered(index, ev->val); }
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); }