/* LE Get Vendor Capabilities Command */
skb = __hci_cmd_sync(hdev, hci_opcode_pack(0x3f, 0x153), 0, NULL,
HCI_CMD_TIMEOUT); if (IS_ERR_OR_NULL(skb)) { if (!skb)
skb = ERR_PTR(-EIO);
bt_dev_err(hdev, "AOSP get vendor capabilities (%ld)",
PTR_ERR(skb)); return;
}
/* A basic length check */ if (skb->len < VENDOR_CAPA_BASE_SIZE) goto length_error;
rp = (struct aosp_rp_le_get_vendor_capa *)skb->data;
version_supported = le16_to_cpu(rp->version_supported); /* AOSP displays the version number like v0.98, v1.00, etc. */
bt_dev_info(hdev, "AOSP extensions version v%u.%02u",
version_supported >> 8, version_supported & 0xff);
/* Do not support very old versions. */ if (version_supported < 95) {
bt_dev_warn(hdev, "AOSP capabilities version %u too old",
version_supported); goto done;
}
if (version_supported < 98) {
bt_dev_warn(hdev, "AOSP quality report is not supported"); goto done;
}
if (skb->len < VENDOR_CAPA_0_98_SIZE) goto length_error;
/* The bluetooth_quality_report_support is defined at version *v0.98.Referto *https://cs.android.com/android/platform/superproject/+/ *master:system/bt/gd/hci/controller.cc;l=477
*/ if (rp->bluetooth_quality_report_support) {
hdev->aosp_quality_report = true;
bt_dev_info(hdev, "AOSP quality report is supported");
}
goto done;
length_error:
bt_dev_err(hdev, "AOSP capabilities length %d too short", skb->len);
done:
kfree_skb(skb);
}
void aosp_do_close(struct hci_dev *hdev)
{ if (!hdev->aosp_capable) return;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.