static int set_remote_device_property(bt_bdaddr_t *remote_addr, const bt_property_t *property) { struct hal_cmd_set_remote_device_prop *cmd; uint8_t buf[sizeof(*cmd) + property->len]; DBG("bdaddr: %s prop: %s", bdaddr2str(remote_addr), bt_property_type_t2str(property->type)); if (!interface_ready()) return BT_STATUS_NOT_READY; cmd = (void *) buf; memcpy(cmd->bdaddr, remote_addr, sizeof(cmd->bdaddr)); /* type match IPC type */ cmd->type = property->type; cmd->len = property->len; memcpy(cmd->val, property->val, property->len); return hal_ipc_cmd(HAL_SERVICE_ID_BLUETOOTH, HAL_OP_SET_REMOTE_DEVICE_PROP, sizeof(buf), cmd, 0, NULL, NULL); }
static int get_adapter_property(bt_property_type_t type) { struct hal_cmd_get_adapter_prop cmd; DBG("prop: %s (%d)", bt_property_type_t2str(type), type); if (!interface_ready()) return BT_STATUS_NOT_READY; /* type match IPC type */ cmd.type = type; return hal_ipc_cmd(HAL_SERVICE_ID_BLUETOOTH, HAL_OP_GET_ADAPTER_PROP, sizeof(cmd), &cmd, 0, NULL, NULL); }
static int get_remote_device_property(bt_bdaddr_t *remote_addr, bt_property_type_t type) { struct hal_cmd_get_remote_device_prop cmd; DBG("bdaddr: %s prop: %s", bdaddr2str(remote_addr), bt_property_type_t2str(type)); if (!interface_ready()) return BT_STATUS_NOT_READY; memcpy(cmd.bdaddr, remote_addr, sizeof(cmd.bdaddr)); /* type match IPC type */ cmd.type = type; return hal_ipc_cmd(HAL_SERVICE_ID_BLUETOOTH, HAL_OP_GET_REMOTE_DEVICE_PROP, sizeof(cmd), &cmd, 0, NULL, NULL); }
const char *btproperty2str(const bt_property_t *property) { static char buf[4096]; char *p; p = buf + sprintf(buf, "type=%s len=%d val=", bt_property_type_t2str(property->type), property->len); switch (property->type) { case BT_PROPERTY_BDNAME: case BT_PROPERTY_REMOTE_FRIENDLY_NAME: snprintf(p, property->len + 1, "%s", ((bt_bdname_t *) property->val)->name); break; case BT_PROPERTY_BDADDR: sprintf(p, "%s", bdaddr2str((bt_bdaddr_t *) property->val)); break; case BT_PROPERTY_CLASS_OF_DEVICE: sprintf(p, "%06x", *((int *) property->val)); break; case BT_PROPERTY_TYPE_OF_DEVICE: sprintf(p, "%s", bt_device_type_t2str( *((bt_device_type_t *) property->val))); break; case BT_PROPERTY_REMOTE_RSSI: sprintf(p, "%d", *((char *) property->val)); break; case BT_PROPERTY_ADAPTER_SCAN_MODE: sprintf(p, "%s", bt_scan_mode_t2str(*((bt_scan_mode_t *) property->val))); break; case BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT: sprintf(p, "%d", *((int *) property->val)); break; case BT_PROPERTY_ADAPTER_BONDED_DEVICES: { int count = property->len / sizeof(bt_bdaddr_t); char *ptr = property->val; strcat(p, "{"); while (count--) { strcat(p, bdaddr2str((bt_bdaddr_t *) ptr)); if (count) strcat(p, ", "); ptr += sizeof(bt_bdaddr_t); } strcat(p, "}"); } break; case BT_PROPERTY_UUIDS: { int count = property->len / sizeof(bt_uuid_t); uint8_t *ptr = property->val; strcat(p, "{"); while (count--) { strcat(p, btuuid2str(ptr)); if (count) strcat(p, ", "); ptr += sizeof(bt_uuid_t); } strcat(p, "}"); } break; case BT_PROPERTY_SERVICE_RECORD: { bt_service_record_t *rec = property->val; sprintf(p, "{%s, %d, %s}", btuuid2str(rec->uuid.uu), rec->channel, rec->name); } break; default: sprintf(p, "%p", property->val); } return buf; }