@@ -284,6 +284,7 @@ struct btd_adapter {
bool is_default; /* true if adapter is default one */
bool le_simult_roles_supported;
+ bool quality_report_supported;
};
typedef enum {
@@ -9234,6 +9235,12 @@ static const uint8_t le_simult_central_peripheral_uuid[16] = {
0x96, 0x46, 0xc0, 0x42, 0xb5, 0x10, 0x1b, 0x67,
};
+/* 330859bc-7506-492d-9370-9a6f0614037f */
+static const uint8_t quality_report_uuid[16] = {
+ 0x7f, 0x03, 0x14, 0x06, 0x6f, 0x9a, 0x70, 0x93,
+ 0x2d, 0x49, 0x06, 0x75, 0xbc, 0x59, 0x08, 0x33,
+};
+
/* 15c0a148-c273-11ea-b3de-0242ac130004 */
static const uint8_t rpa_resolution_uuid[16] = {
0x04, 0x00, 0x13, 0xac, 0x42, 0x02, 0xde, 0xb3,
@@ -9276,6 +9283,14 @@ static void le_simult_central_peripheral_func(struct btd_adapter *adapter,
adapter->le_simult_roles_supported = flags & 0x01;
}
+static void quality_report_func(struct btd_adapter *adapter, uint32_t flags)
+{
+ adapter->quality_report_supported = le32_to_cpu(flags) & 0x01;
+
+ btd_info(adapter->dev_id, "quality_report_supported %d",
+ adapter->quality_report_supported);
+}
+
static void set_rpa_resolution_complete(uint8_t status, uint16_t len,
const void *param, void *user_data)
{
@@ -9313,6 +9328,7 @@ static const struct exp_feat {
EXP_FEAT(debug_uuid, exp_debug_func),
EXP_FEAT(le_simult_central_peripheral_uuid,
le_simult_central_peripheral_func),
+ EXP_FEAT(quality_report_uuid, quality_report_func),
EXP_FEAT(rpa_resolution_uuid, rpa_resolution_func),
};