From patchwork Tue Feb 15 13:36:29 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joseph Hwang X-Patchwork-Id: 542846 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5D443C433EF for ; Tue, 15 Feb 2022 13:36:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232774AbiBONgv (ORCPT ); Tue, 15 Feb 2022 08:36:51 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:33904 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231797AbiBONgv (ORCPT ); Tue, 15 Feb 2022 08:36:51 -0500 Received: from mail-pj1-x1036.google.com (mail-pj1-x1036.google.com [IPv6:2607:f8b0:4864:20::1036]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4CAF565179 for ; Tue, 15 Feb 2022 05:36:41 -0800 (PST) Received: by mail-pj1-x1036.google.com with SMTP id n19-20020a17090ade9300b001b9892a7bf9so2822584pjv.5 for ; Tue, 15 Feb 2022 05:36:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=NtYn16i6PJcNVrCsQ+T6vBaD/84nYyIgGCOm5X0Geo8=; b=IsluOudZIENxbcowX78dU+siIAI+y1KS7Pv9LAboZAVdAwdGtHeCMNfnynJ8b96iEG JIrhUxbZbKvXGqDnu8ahrkLO8I4gCBA94//wEpJrV0lsuAv6TDQw9xYFirm7zfdrsQNR TsiXSGLZe7ImOVfYtEXPqdPnExlTRgxQrN4Ks= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=NtYn16i6PJcNVrCsQ+T6vBaD/84nYyIgGCOm5X0Geo8=; b=wcDEfJr6TzBH4uu/TpDXOyzm5SazZXQ09+jitMXLo0k+PJAGeLc1+JVdS7U08+nnIU vevWpaOMkQHmODK6Df+MCSrquqFTmKsaSCXDwY5ydZ18ptRGOgTGsxqRQmsOz0mkTtpi OwmaP0ujxKzQFHs1gpWwM2TFAuED6+1d/0KvxMDc7WquAfUMuQOR4hQ3PpmeZw1NedhJ WCCBteAMfNR3bTubg0+28B60AoCkgiKWTZTHCTsKvJPNoU6vrzoaA+3EEhFujcGLDTTv ShBQL4/i/SxZxjzd7TsXA1Gs5OuKDsMYIu4JrFI4vqez/k2dlvA/08MffGMUFovZPaY5 jnCQ== X-Gm-Message-State: AOAM532iPusMmUhh5LUcoQ4xySwNQgDoC5k0GfdHMuYIkbIG1nWcuPG0 hZg9Sfo/JO7Gnzm83730XmKZYGKfSA3KFQ== X-Google-Smtp-Source: ABdhPJyBZAcwgosFNefMiH276nP4bJ0x2Bkw2FYhvC0bQuFAEhQMfmoDS2i+KOo5V9m6b7rqoyZbsw== X-Received: by 2002:a17:903:2443:: with SMTP id l3mr4223570pls.146.1644932200442; Tue, 15 Feb 2022 05:36:40 -0800 (PST) Received: from localhost (208.158.221.35.bc.googleusercontent.com. [35.221.158.208]) by smtp.gmail.com with UTF8SMTPSA id s29sm3035010pfg.146.2022.02.15.05.36.38 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 15 Feb 2022 05:36:39 -0800 (PST) From: Joseph Hwang To: linux-bluetooth@vger.kernel.org, marcel@holtmann.org, luiz.dentz@gmail.com, pali@kernel.org Cc: josephsih@google.com, chromeos-bluetooth-upstreaming@chromium.org, Joseph Hwang Subject: [BlueZ PATCH v4 1/8] doc: Introduce the quality report command and event Date: Tue, 15 Feb 2022 21:36:29 +0800 Message-Id: <20220215133636.2827039-1-josephsih@chromium.org> X-Mailer: git-send-email 2.35.1.265.g69c8d7142f-goog MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org Add the MGMT quality report command and event in doc/mgmt-api.txt. Signed-off-by: Joseph Hwang --- Changes in v4: - Use "Quality Report Event" without the prefix "Bluetooth" word. - Combine both MGMT quality report command and event changes in a single patch. Changes in v3: - Swap AOSP Bluetooth Quality Report Event and Intel Telemetry Event. - Add 5 new patches (5/9 - 9/9) to enable the quality report feature via MGMT_OP_SET_QUALITY_REPORT instead of through the experimental features. Changes in v2: - This is a new patch for adding the event in doc/mgmt-api.txt doc/mgmt-api.txt | 61 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/doc/mgmt-api.txt b/doc/mgmt-api.txt index ebe56afa4..a494f5d7e 100644 --- a/doc/mgmt-api.txt +++ b/doc/mgmt-api.txt @@ -332,6 +332,7 @@ Read Controller Information Command 15 Static Address 16 PHY Configuration 17 Wideband Speech + 18 Quality Report This command generates a Command Complete event on success or a Command Status event on failure. @@ -2924,6 +2925,7 @@ Read Extended Controller Information Command 15 Static Address 16 PHY Configuration 17 Wideband Speech + 18 Quality Report The EIR_Data field contains information about class of device, local name and other values. Not all of them might be present. For @@ -3858,6 +3860,46 @@ Add Advertisement Patterns Monitor With RSSI Threshold Command Invalid Parameters +Set Quality Report Command +========================== + + Command Code: 0x0057 + Controller Index: + Command Parameters: Action (1 Octet) + Return Parameters: Current_Settings (4 Octets) + + This command is used to enable and disable the controller's quality + report feature. The allowed values for the Action command parameter + are 0x00 and 0x01. All other values will return Invalid Parameters. + + The value 0x00 disables the Quality Report, and the value 0x01 + enables the Quality Report feature. + + This command is only available for the controllers that support + either AOSP Bluetooth quality report or Intel telemetry event. + For a controller supporting the AOSP specification, it should call + hci_set_aosp_capable() in its driver. The controller should also + return version_supported v0.98 or higher in its Vendor-specific + capabilities responding to the LE_Get_Vendor_Capabilities_Command. + On the other hand, for a controller supporting Intel specification, + it should set up the set_quality_report callback properly. The driver + is responsible of setting up the quality report capability as + described above; otherwise, a Not Supported status will be returned. + + This command requires to use a valid controller index. Otherwise, + an Invalid Index status will be returned. + + The command is sent to the controller to enable/disable the quality + report feature, and generates a Command Complete event on success. + If the controller failed to execute the action, a Failed status will + be returned. + + Possible errors: Failed + Invalid Index + Invalid Parameters + Not Supported + + Command Complete Event ====================== @@ -4978,3 +5020,22 @@ Advertisement Monitor Device Lost Event 2 LE Random This event will be sent to all management sockets. + + +Quality Report Event +==================== + + Event code: 0x0031 + Controller Index: + Event Parameters: Quality_Spec (1 Octet) + Report_Len (2 Octets) + Report (0-65535 Octets) + + This event carries the Bluetooth quality report sent by the + controller. + + Possible values for the Quality_Spec parameter: + 0 AOSP Bluetooth Quality Report Event + 1 Intel Telemetry Event + + This event will be sent to all management sockets. From patchwork Tue Feb 15 13:36:30 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joseph Hwang X-Patchwork-Id: 543090 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 92F09C433EF for ; Tue, 15 Feb 2022 13:36:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235296AbiBONgy (ORCPT ); Tue, 15 Feb 2022 08:36:54 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:33926 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231797AbiBONgy (ORCPT ); Tue, 15 Feb 2022 08:36:54 -0500 Received: from mail-pf1-x434.google.com (mail-pf1-x434.google.com [IPv6:2607:f8b0:4864:20::434]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5E91A65179 for ; Tue, 15 Feb 2022 05:36:44 -0800 (PST) Received: by mail-pf1-x434.google.com with SMTP id z16so13022678pfh.3 for ; Tue, 15 Feb 2022 05:36:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=b+/YuDBUcvSQNoEcHVaCYlQpUanQiQyBVuqYOJZ6w10=; b=NwNJ9xMM9ITUiux8d2if4on42CmEBLcX7oqL7YfHU3q52YQx8m0xR1ef2V1FfZLO3S TzG+bXXiqEE+xjilFbzf9qeFwZ4M9XvecMax8cxlDU+W8BQ2Mft+oTGteyiqrY1jZJhC R5YQzirdXg6M1rOMFiCrTS8WfEqNxR65oiOS0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=b+/YuDBUcvSQNoEcHVaCYlQpUanQiQyBVuqYOJZ6w10=; b=hxUysbzVFgMdBtZ/MhsvBz0PW6BEwyPa8E8Oqh4KmJf0VmYFvkJfhNHtFVW5mo5GZ8 pghS7sYE49fqTP6U3rY73QuLQBAVagU2lXJAw/Ch4LxDjuAqV7QbIyYiu/FpkkptJSxK T9PfM87EsF/Al6YepYz9DQ/z/QblM9/+VzBzfXOKmJjFbLfDbGUhj7bJhrJrnPGQH42C Y0mqvPAyVuPTWk5tlIHhk7o9hWxDN6zV9OBxsvasIbyLVob3nxZR/NRVHK2wZdCm9YZZ LfWfd8EUVSrfHp5qsDA59louDablQCl7SiYITg4LlBY3EsoFctcBnD5V3sGaFGNfnlgj s7xA== X-Gm-Message-State: AOAM5312gh79KEcvdjutLIFpQLYuPGSwafHOKVv521ydfnEjDZEXzUYx pt/nBXkbjxMrzKM3QJqeclpvm6vIkbwO1g== X-Google-Smtp-Source: ABdhPJyRnAZ3LaTpo76pqRHugCJmvk0OyYhq3l5e1ACrx0zgmpP99Xt7zY94rc5a9EaySPwu0WfgAg== X-Received: by 2002:a05:6a00:228e:: with SMTP id f14mr4476374pfe.33.1644932203660; Tue, 15 Feb 2022 05:36:43 -0800 (PST) Received: from localhost (208.158.221.35.bc.googleusercontent.com. [35.221.158.208]) by smtp.gmail.com with UTF8SMTPSA id bg9sm5932351pjb.46.2022.02.15.05.36.42 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 15 Feb 2022 05:36:43 -0800 (PST) From: Joseph Hwang To: linux-bluetooth@vger.kernel.org, marcel@holtmann.org, luiz.dentz@gmail.com, pali@kernel.org Cc: josephsih@google.com, chromeos-bluetooth-upstreaming@chromium.org, Joseph Hwang Subject: [BlueZ PATCH v4 2/8] lib: Add structures and constants for quality report command and event Date: Tue, 15 Feb 2022 21:36:30 +0800 Message-Id: <20220215133636.2827039-2-josephsih@chromium.org> X-Mailer: git-send-email 2.35.1.265.g69c8d7142f-goog In-Reply-To: <20220215133636.2827039-1-josephsih@chromium.org> References: <20220215133636.2827039-1-josephsih@chromium.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org Add the new MGMT struct and constants to lib/mgmt.h. Signed-off-by: Joseph Hwang --- Changes in v4: - Combine both MGMT command and event changes in a single patch. - Fix namings of QUALITY_SPEC_AOSP and QUALITY_SPEC_INTEL. - Use "Quality Report" without the prefix "Bluetooth". Changes in v3: - Swap AOSP Bluetooth Quality Report Event and Intel Telemetry Event. Changes in v2: - This is a new patch for adding the new struct and constants. lib/mgmt.h | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/lib/mgmt.h b/lib/mgmt.h index 922a24367..c7a2a7868 100644 --- a/lib/mgmt.h +++ b/lib/mgmt.h @@ -96,6 +96,7 @@ struct mgmt_rp_read_index_list { #define MGMT_SETTING_STATIC_ADDRESS 0x00008000 #define MGMT_SETTING_PHY_CONFIGURATION 0x00010000 #define MGMT_SETTING_WIDEBAND_SPEECH 0x00020000 +#define MGMT_SETTING_QUALITY_REPORT 0x00040000 #define MGMT_OP_READ_INFO 0x0004 struct mgmt_rp_read_info { @@ -757,6 +758,14 @@ struct mgmt_cp_add_adv_patterns_monitor_rssi { struct mgmt_adv_pattern patterns[0]; } __packed; +#define MGMT_OP_SET_QUALITY_REPORT 0x0057 +struct mgmt_cp_set_quality_report { + uint8_t action; +} __packed; +struct mgmt_rp_set_quality_report { + uint32_t current_settings; +} __packed; + #define MGMT_EV_CMD_COMPLETE 0x0001 struct mgmt_ev_cmd_complete { uint16_t opcode; @@ -1032,6 +1041,15 @@ struct mgmt_ev_adv_monitor_device_lost { struct mgmt_addr_info addr; } __packed; +#define MGMT_EV_QUALITY_REPORT 0x0031 +#define QUALITY_SPEC_AOSP 0x0 +#define QUALITY_SPEC_INTEL 0x1 +struct mgmt_ev_quality_report { + uint8_t quality_spec; + uint32_t data_len; + uint8_t data[]; +} __packed; + static const char *mgmt_op[] = { "<0x0000>", "Read Version", @@ -1172,6 +1190,7 @@ static const char *mgmt_ev[] = { "Controller Resume", "Advertisement Monitor Device Found", /* 0x002f */ "Advertisement Monitor Device Lost", + "Quality Report", /* 0x0031 */ }; static const char *mgmt_status[] = { From patchwork Tue Feb 15 13:36:31 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joseph Hwang X-Patchwork-Id: 542845 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1982CC433EF for ; Tue, 15 Feb 2022 13:36:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238311AbiBONg5 (ORCPT ); Tue, 15 Feb 2022 08:36:57 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:33966 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238283AbiBONg4 (ORCPT ); Tue, 15 Feb 2022 08:36:56 -0500 Received: from mail-pf1-x436.google.com (mail-pf1-x436.google.com [IPv6:2607:f8b0:4864:20::436]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 26F896E8F6 for ; Tue, 15 Feb 2022 05:36:47 -0800 (PST) Received: by mail-pf1-x436.google.com with SMTP id i21so33437676pfd.13 for ; Tue, 15 Feb 2022 05:36:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=21rCQRiXB46+PABuCyw+4bZoZw/a3puD6LYmvybmjdQ=; b=JR2odJ94fdopH+gQjWdTdqd8pIITZBp7KH6amMqBbyjMT6TkzjT+qBkrmnTDCIGfcU N8LjgQa+EyESx3Au80N87/AwtzKEVANE4cFyMphSXnJ3s6xgbydTTStQ1qqdC0ljPWcm 7UpFwnS+PKv8eZChJofY9ULXiuXVIR6BKIxnA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=21rCQRiXB46+PABuCyw+4bZoZw/a3puD6LYmvybmjdQ=; b=rGsMZE1d+/2NOyFY3tisojJ5yv9L5hv/NtUEWJHOgj+x7EdL9dBNZ+dw55Bfrz+x5a 7qajHZ2RhC7umed2nfFSw9c9pyxp22g9oA/9yIXJw2pXFEuaemi5QrGIVgWkxhMEglwa mk5gZd2MJowkqfBMqxue8Ta6DxbUpIEJPsVUSgTLjzN1UlgisHHnxtrORbGeEr3LatfA QZYGVtO965Up3G0q5QSe/cKEYx+klnPCmWOPf1wwKOk20LTJ0fMrhpj078GdO1CG2Y4u 8+PO5K4wmRVl6IiXTjA0ygxEp9jDsryWF40Eu/mzIV+GxwYcw/dKMyqHHuFJXQTwhsrw FleQ== X-Gm-Message-State: AOAM5312NUvrwI0RERLQNel9W45ylytk609kNC1u4G6U8fcyzSk6DAHw ElVyzXpE30X041EpuiuWofOe+J5OjHKRsw== X-Google-Smtp-Source: ABdhPJzhoY5F+IwOupsE8AUgZ+b+6bfU9Ce7qf5wX9lxeQBI1Cg5AzHgksMssnKJIWXQoT7jqEbPPQ== X-Received: by 2002:a63:b58:: with SMTP id a24mr3556904pgl.537.1644932206468; Tue, 15 Feb 2022 05:36:46 -0800 (PST) Received: from localhost (208.158.221.35.bc.googleusercontent.com. [35.221.158.208]) by smtp.gmail.com with UTF8SMTPSA id x6sm8940389pfo.152.2022.02.15.05.36.44 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 15 Feb 2022 05:36:46 -0800 (PST) From: Joseph Hwang To: linux-bluetooth@vger.kernel.org, marcel@holtmann.org, luiz.dentz@gmail.com, pali@kernel.org Cc: josephsih@google.com, chromeos-bluetooth-upstreaming@chromium.org, Joseph Hwang Subject: [BlueZ PATCH v4 3/8] adapter: enable quality report via MGMT_OP_SET_QUALITY_REPORT Date: Tue, 15 Feb 2022 21:36:31 +0800 Message-Id: <20220215133636.2827039-3-josephsih@chromium.org> X-Mailer: git-send-email 2.35.1.265.g69c8d7142f-goog In-Reply-To: <20220215133636.2827039-1-josephsih@chromium.org> References: <20220215133636.2827039-1-josephsih@chromium.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org The quality report feature is now enabled through MGMT_OP_SET_QUALITY_REPORT instead of through the experimental features. Signed-off-by: Joseph Hwang --- Changes in v4: - Move forward this patch in the patch series so that this command patch is prior to the quality report event patches. Changes in v3: - This is a new patch that enables the quality report feature via MGMT_OP_SET_QUALITY_REPORT. src/adapter.c | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/src/adapter.c b/src/adapter.c index eef50f67a..d988865f6 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -120,13 +120,6 @@ static const struct mgmt_exp_uuid le_simult_central_peripheral_uuid = { .str = "671b10b5-42c0-4696-9227-eb28d1b049d6" }; -/* 330859bc-7506-492d-9370-9a6f0614037f */ -static const struct mgmt_exp_uuid quality_report_uuid = { - .val = { 0x7f, 0x03, 0x14, 0x06, 0x6f, 0x9a, 0x70, 0x93, - 0x2d, 0x49, 0x06, 0x75, 0xbc, 0x59, 0x08, 0x33 }, - .str = "330859bc-7506-492d-9370-9a6f0614037f" -}; - /* 15c0a148-c273-11ea-b3de-0242ac130004 */ static const struct mgmt_exp_uuid rpa_resolution_uuid = { .val = { 0x04, 0x00, 0x13, 0xac, 0x42, 0x02, 0xde, 0xb3, @@ -9600,12 +9593,6 @@ static void le_simult_central_peripheral_func(struct btd_adapter *adapter, (void *)le_simult_central_peripheral_uuid.val); } -static void quality_report_func(struct btd_adapter *adapter, uint8_t action) -{ - if (action) - queue_push_tail(adapter->exps, (void *)quality_report_uuid.val); -} - static void set_rpa_resolution_complete(uint8_t status, uint16_t len, const void *param, void *user_data) { @@ -9681,7 +9668,6 @@ 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), EXP_FEAT(&codec_offload_uuid, codec_offload_func), }; @@ -9755,6 +9741,11 @@ static void read_exp_features(struct btd_adapter *adapter) btd_error(adapter->dev_id, "Failed to read exp features info"); } +bool is_quality_report_supported(struct btd_adapter *adapter) +{ + return !!(adapter->supported_settings & MGMT_SETTING_QUALITY_REPORT); +} + static void read_info_complete(uint8_t status, uint16_t length, const void *param, void *user_data) { From patchwork Tue Feb 15 13:36:32 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joseph Hwang X-Patchwork-Id: 543089 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DF5B8C433EF for ; Tue, 15 Feb 2022 13:36:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238308AbiBONhC (ORCPT ); Tue, 15 Feb 2022 08:37:02 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:34030 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238283AbiBONhB (ORCPT ); Tue, 15 Feb 2022 08:37:01 -0500 Received: from mail-pf1-x42c.google.com (mail-pf1-x42c.google.com [IPv6:2607:f8b0:4864:20::42c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A318A65179 for ; Tue, 15 Feb 2022 05:36:50 -0800 (PST) Received: by mail-pf1-x42c.google.com with SMTP id c4so13587969pfl.7 for ; Tue, 15 Feb 2022 05:36:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=5n3haFpZLnaDEFp3A7vWWmUJ5KXe2KNH2oILgjnwTvw=; b=Ba/IZNJAqf/cSmBmG3ZQZNEc3UULGfBsOhjcCD3hfyDBbJjuqwB5sR+M/zqgGa/ly1 G7rofxzJeCK4KKBzBVBbP/C1Uw0aKKMnldePmGjadibjs/gHo+IboQjAE+GGFwJLncVi bcqkIiDTGSpLqTIrgm23Sk7yepfRv7yegtU1k= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=5n3haFpZLnaDEFp3A7vWWmUJ5KXe2KNH2oILgjnwTvw=; b=ZHNFbTHCr1oIz5ffL4OWBZoPyMY6mUdjPj9x7gTtlEGqxOqqDr+xRUTMw7MLdcCafE I3qsghwy6+mcfIFqO0tpddgqaflJQQ8OeLc0T8KfMYhLhdyyMzlgm2+jtnhI7VcrtuHR LjT5p9S3JuwvTHq9YaXgMDYhD7Kr9e9iFTxhZ2IBo6d0pAQ+tatul0cH8NyuMclt3ydv JCIslyBAkCKLXwBlLic8JRO4IoSpAjeAlEytK5X9MGWb6mZoXwMst/GURYtvRdiKF5v3 4n+mPnctepy1FAgIMmXDWoTsafDUtzAMylEci6k7rZseub3PAimLiRVrPupbAT1ghWhU B41g== X-Gm-Message-State: AOAM532+WAmSbm8e9LqJEii2b3KC8+icwCNOhiTlMXWTEfHrCYgxLgi1 X3XmypdqghRHUYR/e9k7a/A1hH2NnFtbEQ== X-Google-Smtp-Source: ABdhPJz5QqkiRrG0mMxgaBLvctPzibNXbGeuhfv3R6ToCGpV0GBhS/bAV+Oo75R+7wP7xp0JwRNd/g== X-Received: by 2002:a05:6a00:1803:: with SMTP id y3mr3405969pfa.65.1644932209769; Tue, 15 Feb 2022 05:36:49 -0800 (PST) Received: from localhost (208.158.221.35.bc.googleusercontent.com. [35.221.158.208]) by smtp.gmail.com with UTF8SMTPSA id u16sm2757986pgh.54.2022.02.15.05.36.48 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 15 Feb 2022 05:36:49 -0800 (PST) From: Joseph Hwang To: linux-bluetooth@vger.kernel.org, marcel@holtmann.org, luiz.dentz@gmail.com, pali@kernel.org Cc: josephsih@google.com, chromeos-bluetooth-upstreaming@chromium.org, Joseph Hwang , Archie Pusaka Subject: [BlueZ PATCH v4 4/8] adapter: support AOSP MGMT_EV_QUALITY_REPORT Date: Tue, 15 Feb 2022 21:36:32 +0800 Message-Id: <20220215213600.BlueZ.v4.4.Ie4d1be8ced51f0aa92ee6d8eacf9666a121a1292@changeid> X-Mailer: git-send-email 2.35.1.265.g69c8d7142f-goog In-Reply-To: <20220215133636.2827039-1-josephsih@chromium.org> References: <20220215133636.2827039-1-josephsih@chromium.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org This patch supports a new MGMT event of AOSP bluetooth quality report. Reviewed-by: Archie Pusaka Signed-off-by: Joseph Hwang --- Changes in v4: - Change QUALITY_SPEC_AOSP_BQR to QUALITY_SPEC_AOSP. Changes in v2: - The new structs and constants are moved to separate patches: * doc: Add Bluetooth quality report event * lib: Add structures and constants for quality report - The btmon decoding patches, about 500 lines of code, are ready and will be submitted immediately after these patches are accepted. - Use util_debug instead of defining a new debug function. - Remove the event printing function. - The plan about the BQR events is to further expose them to other daemons, e.g., an audio daemon to make some smart control, or to an UI daemon to display alerts to users. Makefile.am | 3 +- src/adapter.c | 43 ++++++++++++++++++++++ src/adapter.h | 2 ++ src/shared/aosp.c | 90 +++++++++++++++++++++++++++++++++++++++++++++++ src/shared/aosp.h | 58 ++++++++++++++++++++++++++++++ 5 files changed, 195 insertions(+), 1 deletion(-) create mode 100644 src/shared/aosp.c create mode 100644 src/shared/aosp.h diff --git a/Makefile.am b/Makefile.am index 82125c482..600d85354 100644 --- a/Makefile.am +++ b/Makefile.am @@ -230,7 +230,8 @@ shared_sources = src/shared/io.h src/shared/timeout.h \ src/shared/gatt-db.h src/shared/gatt-db.c \ src/shared/gap.h src/shared/gap.c \ src/shared/log.h src/shared/log.c \ - src/shared/tty.h + src/shared/tty.h \ + src/shared/aosp.h src/shared/aosp.c if READLINE shared_sources += src/shared/shell.c src/shared/shell.h diff --git a/src/adapter.c b/src/adapter.c index d988865f6..c4c56e610 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -47,6 +47,7 @@ #include "src/shared/att.h" #include "src/shared/gatt-db.h" #include "src/shared/timeout.h" +#include "src/shared/aosp.h" #include "btio/btio.h" #include "btd.h" @@ -9178,6 +9179,28 @@ static void controller_resume_callback(uint16_t index, uint16_t length, controller_resume_notify(adapter); } +static void quality_report_callback(uint16_t index, uint16_t length, + const void *param, void *user_data) +{ + const struct mgmt_ev_quality_report *ev = param; + + if (!ev) + return; + + if (length < sizeof(*ev)) { + error("MGMT_EV_QUALITY_REPORT event too small"); + return; + } + + if (ev->quality_spec == QUALITY_SPEC_AOSP) { + if (!process_aosp_quality_report(ev)) + error("processing aosp quality report"); + } else { + error("quality report spec %u not supported.", + ev->quality_spec); + } +} + static void device_blocked_callback(uint16_t index, uint16_t length, const void *param, void *user_data) { @@ -9746,6 +9769,18 @@ bool is_quality_report_supported(struct btd_adapter *adapter) return !!(adapter->supported_settings & MGMT_SETTING_QUALITY_REPORT); } +static void quality_report_debug(const char *str, void *user_data) +{ + const char *prefix = user_data; + + info("%s%s", prefix, str); +} + +static void quality_set_debug(struct btd_adapter *adapter) +{ + aosp_set_debug(quality_report_debug, "quality: "); +} + static void read_info_complete(uint8_t status, uint16_t length, const void *param, void *user_data) { @@ -9974,6 +10009,11 @@ static void read_info_complete(uint8_t status, uint16_t length, controller_resume_callback, adapter, NULL); + mgmt_register(adapter->mgmt, MGMT_EV_QUALITY_REPORT, + adapter->dev_id, + quality_report_callback, + adapter, NULL); + set_dev_class(adapter); set_name(adapter, btd_adapter_get_name(adapter)); @@ -10001,6 +10041,9 @@ static void read_info_complete(uint8_t status, uint16_t length, if (btd_adapter_get_powered(adapter)) adapter_start(adapter); + if (is_quality_report_supported(adapter) && getenv("QUALITY_DEBUG")) + quality_set_debug(adapter); + return; failed: diff --git a/src/adapter.h b/src/adapter.h index 35deb1d11..c199e358a 100644 --- a/src/adapter.h +++ b/src/adapter.h @@ -266,6 +266,8 @@ enum kernel_features { bool btd_has_kernel_features(uint32_t feature); +bool is_quality_report_supported(struct btd_adapter *adapter); + bool btd_adapter_set_allowed_uuids(struct btd_adapter *adapter, struct queue *uuids); bool btd_adapter_is_uuid_allowed(struct btd_adapter *adapter, diff --git a/src/shared/aosp.c b/src/shared/aosp.c new file mode 100644 index 000000000..838babea4 --- /dev/null +++ b/src/shared/aosp.c @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: LGPL-2.1-or-later +/* + * + * BlueZ - Bluetooth protocol stack for Linux + * + * Copyright (C) 2021 Google LLC + * + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + */ + +#include +#include +#include +#include + +#include "lib/bluetooth.h" +#include "lib/mgmt.h" + +#include "src/shared/aosp.h" +#include "src/shared/util.h" + +static struct { + aosp_debug_func_t callback; + void *data; +} aosp_debug; + +void aosp_set_debug(aosp_debug_func_t callback, void *user_data) +{ + aosp_debug.callback = callback; + aosp_debug.data = user_data; +} + +bool process_aosp_quality_report(const struct mgmt_ev_quality_report *ev) +{ + const struct aosp_bqr *edata = (struct aosp_bqr *)ev->data; + struct aosp_bqr bqr; + + if (edata->subevent_code != 0x58) { + util_debug(aosp_debug.callback, aosp_debug.data, + "error: %u not AOSP Bluetooth quality report subevent", + edata->subevent_code); + return false; + } + + if (ev->data_len < sizeof(struct aosp_bqr)) { + util_debug(aosp_debug.callback, aosp_debug.data, + "error: AOSP report size %u too small (expect >= %lu).", + ev->data_len, sizeof(struct aosp_bqr)); + return false; + } + + /* Ignore the Vendor Specific Parameter (VSP) field for now + * due to the lack of standard way of reading it. + */ + bqr.quality_report_id = edata->quality_report_id; + bqr.packet_type = edata->packet_type; + bqr.conn_handle = btohs(edata->conn_handle); + bqr.conn_role = edata->conn_role; + bqr.tx_power_level = edata->tx_power_level; + bqr.rssi = edata->rssi; + bqr.snr = edata->snr; + bqr.unused_afh_channel_count = edata->unused_afh_channel_count; + bqr.afh_select_unideal_channel_count = + edata->afh_select_unideal_channel_count; + bqr.lsto = btohs(edata->lsto); + bqr.conn_piconet_clock = btohl(edata->conn_piconet_clock); + bqr.retransmission_count = btohl(edata->retransmission_count); + bqr.no_rx_count = btohl(edata->no_rx_count); + bqr.nak_count = btohl(edata->nak_count); + bqr.last_tx_ack_timestamp = btohl(edata->last_tx_ack_timestamp); + bqr.flow_off_count = btohl(edata->flow_off_count); + bqr.last_flow_on_timestamp = btohl(edata->last_flow_on_timestamp); + bqr.buffer_overflow_bytes = btohl(edata->buffer_overflow_bytes); + bqr.buffer_underflow_bytes = btohl(edata->buffer_underflow_bytes); + + util_debug(aosp_debug.callback, aosp_debug.data, + "AOSP report of connection hanle %u received", bqr.conn_handle); + + return true; +} diff --git a/src/shared/aosp.h b/src/shared/aosp.h new file mode 100644 index 000000000..b58aa5e3a --- /dev/null +++ b/src/shared/aosp.h @@ -0,0 +1,58 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * + * BlueZ - Bluetooth protocol stack for Linux + * + * Copyright (C) 2021 Google LLC + * + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + */ + +#ifndef __AOSP_H +#define __AOSP_H + +#include + +struct mgmt_ev_quality_report; + +struct aosp_bqr { + uint8_t subevent_code; + uint8_t quality_report_id; + uint8_t packet_type; + uint16_t conn_handle; + uint8_t conn_role; + int8_t tx_power_level; /* -30 to 20 dbm */ + int8_t rssi; /* -127 to 20 dbm */ + uint8_t snr; /* db */ + uint8_t unused_afh_channel_count; + uint8_t afh_select_unideal_channel_count; + uint16_t lsto; + uint32_t conn_piconet_clock; + uint32_t retransmission_count; + uint32_t no_rx_count; + uint32_t nak_count; + uint32_t last_tx_ack_timestamp; + uint32_t flow_off_count; + uint32_t last_flow_on_timestamp; + uint32_t buffer_overflow_bytes; + uint32_t buffer_underflow_bytes; + + uint8_t vsp[0]; /* Vendor Specific Parameter */ +} __packed; + +typedef void (*aosp_debug_func_t)(const char *str, void *user_data); +void aosp_set_debug(aosp_debug_func_t callback, void *user_data); + +bool process_aosp_quality_report(const struct mgmt_ev_quality_report *ev); + +#endif /* __AOSP_H */ From patchwork Tue Feb 15 13:36:33 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joseph Hwang X-Patchwork-Id: 542844 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B2527C433F5 for ; Tue, 15 Feb 2022 13:36:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238316AbiBONhF (ORCPT ); Tue, 15 Feb 2022 08:37:05 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:34048 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238283AbiBONhE (ORCPT ); Tue, 15 Feb 2022 08:37:04 -0500 Received: from mail-pf1-x432.google.com (mail-pf1-x432.google.com [IPv6:2607:f8b0:4864:20::432]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 22E2665179 for ; Tue, 15 Feb 2022 05:36:54 -0800 (PST) Received: by mail-pf1-x432.google.com with SMTP id e17so15396444pfv.5 for ; Tue, 15 Feb 2022 05:36:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=i834W3Fp3q0miQBlM4WJwH94+TRIH1Wl1OS8VNVnHb0=; b=MRIORJQFmQ1PLhLIOvGi2qi89tg/H71ZUwj3efXqkgPB8mu2PxbSrABdpCo3RcGTH0 3502SbTZxXZyh3sz7z6resisaZbNkx6n9op8Wr3GKUICxb28UFSrkZI/JaM97mSybC7R N4Yp+yv186IB3lj10cQmjyNIi6DXPbU9B2+7A= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=i834W3Fp3q0miQBlM4WJwH94+TRIH1Wl1OS8VNVnHb0=; b=yfRCTKJoW4tFYBHMAZXRPVBwEVndl5Wr+Ug+sOpYqeRBT84u7LdFMpdsblac7j7ypM XfFSwJvBSZGYkQjnMICeHX0GZxgKEMRmAfaasiVWnBJQGA1+YhzAUNydBTEK7SbsNPnR bCukCHkDyCw9nV8ULfUpdT3aUfsly6z/M3kjln4BnaFZ6bvJUJHCyru8TKXGNve5Yb5F ho4s5PLwSh5UMKXBVbjHYO075bQJu9LR2HBYBVGz+msFuZPsxiPhIlHlitjXAman48dv LRNbLSU2OmH8KL4UIUSLZq7Rf/bae1LAmQYVTySPna2JyhAsGf7JrI491OTyZzE4aaE7 tWaw== X-Gm-Message-State: AOAM533m9NfFM2n20xBPC1hE3Tjy6MA6/TGPUX6jhvZjG1yw+uIP0n19 4VC6KFcFs85TfinALEml1WoaD7icrDKuog== X-Google-Smtp-Source: ABdhPJw0teXbD4/ITGr2RqZPy35OV3JM3F9lIF5TJiEKXMmnEYsJRKVFS1wesN2HeN5rjcp32D8zmg== X-Received: by 2002:a63:4e58:: with SMTP id o24mr3524634pgl.374.1644932213145; Tue, 15 Feb 2022 05:36:53 -0800 (PST) Received: from localhost (208.158.221.35.bc.googleusercontent.com. [35.221.158.208]) by smtp.gmail.com with UTF8SMTPSA id p16sm1988637pfh.89.2022.02.15.05.36.51 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 15 Feb 2022 05:36:52 -0800 (PST) From: Joseph Hwang To: linux-bluetooth@vger.kernel.org, marcel@holtmann.org, luiz.dentz@gmail.com, pali@kernel.org Cc: josephsih@google.com, chromeos-bluetooth-upstreaming@chromium.org, Joseph Hwang , Archie Pusaka Subject: [BlueZ PATCH v4 5/8] adapter: support Intel MGMT_EV_QUALITY_REPORT Date: Tue, 15 Feb 2022 21:36:33 +0800 Message-Id: <20220215213600.BlueZ.v4.5.Ifdf5cf89a14b4f293d868910c6cb85e802f7eb9e@changeid> X-Mailer: git-send-email 2.35.1.265.g69c8d7142f-goog In-Reply-To: <20220215133636.2827039-1-josephsih@chromium.org> References: <20220215133636.2827039-1-josephsih@chromium.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org This patch supports a new MGMT event of Intel telemetry report. Reviewed-by: Archie Pusaka Signed-off-by: Joseph Hwang --- Changes in v4: - Change QUALITY_SPEC_INTEL_TELEMETRY to QUALITY_SPEC_INTEL. Changes in v2: - Remove the event printing function. The btmon decoding patches are ready and will be submitted after these are accepted. Makefile.am | 3 +- src/adapter.c | 9 +- src/shared/intel.c | 243 +++++++++++++++++++++++++++++++++++++++++++++ src/shared/intel.h | 155 +++++++++++++++++++++++++++++ 4 files changed, 408 insertions(+), 2 deletions(-) create mode 100644 src/shared/intel.c create mode 100644 src/shared/intel.h diff --git a/Makefile.am b/Makefile.am index 600d85354..6dc16f226 100644 --- a/Makefile.am +++ b/Makefile.am @@ -231,7 +231,8 @@ shared_sources = src/shared/io.h src/shared/timeout.h \ src/shared/gap.h src/shared/gap.c \ src/shared/log.h src/shared/log.c \ src/shared/tty.h \ - src/shared/aosp.h src/shared/aosp.c + src/shared/aosp.h src/shared/aosp.c \ + src/shared/intel.h src/shared/intel.c if READLINE shared_sources += src/shared/shell.c src/shared/shell.h diff --git a/src/adapter.c b/src/adapter.c index c4c56e610..0ca325247 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -48,6 +48,7 @@ #include "src/shared/gatt-db.h" #include "src/shared/timeout.h" #include "src/shared/aosp.h" +#include "src/shared/intel.h" #include "btio/btio.h" #include "btd.h" @@ -9195,6 +9196,9 @@ static void quality_report_callback(uint16_t index, uint16_t length, if (ev->quality_spec == QUALITY_SPEC_AOSP) { if (!process_aosp_quality_report(ev)) error("processing aosp quality report"); + } else if (ev->quality_spec == QUALITY_SPEC_INTEL) { + if (!process_intel_telemetry_report(ev)) + error("processing intel telemetry report"); } else { error("quality report spec %u not supported.", ev->quality_spec); @@ -9778,7 +9782,10 @@ static void quality_report_debug(const char *str, void *user_data) static void quality_set_debug(struct btd_adapter *adapter) { - aosp_set_debug(quality_report_debug, "quality: "); + if (is_manufacturer_intel(adapter->manufacturer)) + intel_set_debug(quality_report_debug, "quality: "); + else + aosp_set_debug(quality_report_debug, "quality: "); } static void read_info_complete(uint8_t status, uint16_t length, diff --git a/src/shared/intel.c b/src/shared/intel.c new file mode 100644 index 000000000..5d7c0d0ad --- /dev/null +++ b/src/shared/intel.c @@ -0,0 +1,243 @@ +// SPDX-License-Identifier: LGPL-2.1-or-later +/* + * + * BlueZ - Bluetooth protocol stack for Linux + * + * Copyright (C) 2021 Google LLC + * + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + */ + +#include +#include +#include +#include + +#include "lib/bluetooth.h" +#include "lib/mgmt.h" + +#include "src/shared/intel.h" +#include "src/shared/util.h" + +#define COMPANY_ID_INTEL 0x0002 + +struct intel_ext_telemetry_event tev; + +static struct { + intel_debug_func_t callback; + void *data; +} intel_debug; + +/* Use offsetof to access the attributes of structures. This makes + * simple traversing and assigning values to the attributes. + */ +#define TELEM_OFFSET(a) offsetof(struct intel_ext_telemetry_event, a) +#define TELEM_ATTR(a) (((uint8_t *)&tev) + TELEM_OFFSET(a)) + +#define ACL_OFFSET(a) offsetof(struct intel_acl_event, a) +#define ACL_ATTR(a) (((uint8_t *)&tev.conn.acl) + ACL_OFFSET(a)) +#define ACL_ATTR_ARRAY(a, i) (ACL_ATTR(a) + i * sizeof(tev.conn.acl.a[0])) + +#define SCO_OFFSET(a) offsetof(struct intel_sco_event, a) +#define SCO_ATTR(a) (((uint8_t *)&tev.conn.sco) + SCO_OFFSET(a)) + +static const struct intel_ext_subevent { + uint8_t id; + uint8_t size; + uint8_t elements; + uint8_t *attr; /* address of the attribute in tev */ +} intel_ext_subevent_table[] = { + { 0x01, 1, 1, TELEM_ATTR(telemetry_ev_type) }, + + /* ACL audio link quality subevents */ + { 0x4a, 2, 1, ACL_ATTR(conn_handle) }, + { 0x4b, 4, 1, ACL_ATTR(rx_hec_error) }, + { 0x4c, 4, 1, ACL_ATTR(rx_crc_error) }, + { 0x4d, 4, 1, ACL_ATTR(packets_from_host) }, + { 0x4e, 4, 1, ACL_ATTR(tx_packets) }, + { 0x4f, 4, 1, ACL_ATTR_ARRAY(tx_packets_retry, 0) }, + { 0x50, 4, 1, ACL_ATTR_ARRAY(tx_packets_retry, 1) }, + { 0x51, 4, 1, ACL_ATTR_ARRAY(tx_packets_retry, 2) }, + { 0x52, 4, 1, ACL_ATTR_ARRAY(tx_packets_retry, 3) }, + { 0x53, 4, 1, ACL_ATTR_ARRAY(tx_packets_retry, 4) }, + { 0x54, 4, 1, ACL_ATTR_ARRAY(tx_packets_by_type, 0) }, + { 0x55, 4, 1, ACL_ATTR_ARRAY(tx_packets_by_type, 1) }, + { 0x56, 4, 1, ACL_ATTR_ARRAY(tx_packets_by_type, 2) }, + { 0x57, 4, 1, ACL_ATTR_ARRAY(tx_packets_by_type, 3) }, + { 0x58, 4, 1, ACL_ATTR_ARRAY(tx_packets_by_type, 4) }, + { 0x59, 4, 1, ACL_ATTR_ARRAY(tx_packets_by_type, 5) }, + { 0x5a, 4, 1, ACL_ATTR_ARRAY(tx_packets_by_type, 6) }, + { 0x5b, 4, 1, ACL_ATTR_ARRAY(tx_packets_by_type, 7) }, + { 0x5c, 4, 1, ACL_ATTR_ARRAY(tx_packets_by_type, 8) }, + { 0x5d, 4, 1, ACL_ATTR(rx_packets) }, + { 0x5e, 4, 1, ACL_ATTR(link_throughput) }, + { 0x5f, 4, 1, ACL_ATTR(max_packet_letency) }, + { 0x60, 4, 1, ACL_ATTR(avg_packet_letency) }, + + /* SCO/eSCO audio link quality subevents */ + { 0x6a, 2, 1, SCO_ATTR(conn_handle) }, + { 0x6b, 4, 1, SCO_ATTR(packets_from_host) }, + { 0x6c, 4, 1, SCO_ATTR(tx_packets) }, + { 0x6d, 4, 1, SCO_ATTR(rx_payload_lost) }, + { 0x6e, 4, 1, SCO_ATTR(tx_payload_lost) }, + { 0x6f, 4, 5, SCO_ATTR(rx_no_sync_error) }, + { 0x70, 4, 5, SCO_ATTR(rx_hec_error) }, + { 0x71, 4, 5, SCO_ATTR(rx_crc_error) }, + { 0x72, 4, 5, SCO_ATTR(rx_nak_error) }, + { 0x73, 4, 5, SCO_ATTR(tx_failed_wifi_coex) }, + { 0x74, 4, 5, SCO_ATTR(rx_failed_wifi_coex) }, + { 0x75, 4, 1, SCO_ATTR(samples_inserted_by_CDC) }, + { 0x76, 4, 1, SCO_ATTR(samples_dropped) }, + { 0x77, 4, 1, SCO_ATTR(mute_samples) }, + { 0x78, 4, 1, SCO_ATTR(plc_injection) }, + + /* end */ + { 0x0, 0, 0 } +}; + +bool is_manufacturer_intel(uint16_t manufacturer) +{ + return manufacturer == COMPANY_ID_INTEL; +} + +void intel_set_debug(intel_debug_func_t callback, void *user_data) +{ + intel_debug.callback = callback; + intel_debug.data = user_data; +} + +static const struct intel_tlv *process_ext_subevent( + struct intel_ext_telemetry_event *tev, + const struct intel_tlv *tlv, + const struct intel_tlv *last_tlv) +{ + const struct intel_tlv *next_tlv = NEXT_TLV(tlv); + const struct intel_ext_subevent *subevent = NULL; + int i; + + for (i = 0; intel_ext_subevent_table[i].size > 0; i++) { + if (intel_ext_subevent_table[i].id == tlv->id) { + subevent = &intel_ext_subevent_table[i]; + break; + } + } + + if (!subevent) { + util_debug(intel_debug.callback, intel_debug.data, + "error: unknown Intel telemetry subevent 0x%2.2x", + tlv->id); + return NULL; + } + + if (tlv->length != subevent->size * subevent->elements) { + util_debug(intel_debug.callback, intel_debug.data, + "error: invalid length %d of subevent 0x%2.2x", + tlv->length, tlv->id); + return NULL; + } + + if (next_tlv > last_tlv) { + util_debug(intel_debug.callback, intel_debug.data, + "error: subevent 0x%2.2x exceeds the buffer size.", + tlv->id); + return NULL; + } + + /* Assign tlv value to the corresponding attribute of acl/sco struct. */ + switch (subevent->size) { + case 1: + *subevent->attr = get_u8(tlv->value); + break; + + case 2: + *((uint16_t *)subevent->attr) = get_le16(tlv->value); + break; + + case 4: + if (subevent->elements == 1) { + *((uint32_t *)subevent->attr) = get_le32(tlv->value); + break; + } + + for (i = 0; i < subevent->elements; i++) { + /* Both acl and sco structs are __packed such that + * the addresses of array elements can be calculated. + */ + *((uint32_t *)(subevent->attr + i * subevent->size)) = + get_le32((uint32_t *)tlv->value + i); + } + break; + + default: + util_debug(intel_debug.callback, intel_debug.data, + "error: subevent id %u: size %u not supported", + subevent->id, subevent->size); + break; + + } + + switch (subevent->id) { + case EXT_EVT_TYPE: + /* Only interested in the LINK_QUALITY_REPORT type for now. */ + if (*subevent->attr != LINK_QUALITY_REPORT) + return NULL; + break; + + case ACL_CONNECTION_HANDLE: + tev->link_type = TELEMETRY_ACL_LINK; + break; + + case SCO_CONNECTION_HANDLE: + tev->link_type = TELEMETRY_SCO_LINK; + break; + + default: + break; + } + + return next_tlv; +} + +struct intel_telemetry_data { + uint16_t vendor_prefix; + uint8_t code; + uint8_t data[]; /* a number of struct intel_tlv subevents */ +} __packed; + +bool process_intel_telemetry_report(const struct mgmt_ev_quality_report *ev) +{ + struct intel_telemetry_data *telemetry = + (struct intel_telemetry_data *)ev->data; + + /* The telemetry->data points to a number of consecutive tlv.*/ + const struct intel_tlv *tlv = (const struct intel_tlv *)telemetry->data; + const struct intel_tlv *last_tlv = + (const struct intel_tlv *)(ev->data + ev->data_len); + + if (telemetry->code != 0x03) { + util_debug(intel_debug.callback, intel_debug.data, + "error: %u not Intel telemetry sub-opcode", + telemetry->code); + return false; + } + + /* Read every tlv subevent into tev. + * The decoding process terminates normally when tlv == last_tlv. + */ + memset(&tev, 0, sizeof(tev)); + while (tlv && tlv < last_tlv) + tlv = process_ext_subevent(&tev, tlv, last_tlv); + + /* If the decoding completes successfully, tlv would be non-NULL */ + return !!tlv; +} diff --git a/src/shared/intel.h b/src/shared/intel.h new file mode 100644 index 000000000..2b20f803e --- /dev/null +++ b/src/shared/intel.h @@ -0,0 +1,155 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * + * BlueZ - Bluetooth protocol stack for Linux + * + * Copyright (C) 2021 Google LLC + * + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + */ + +#ifndef __INTEL_H +#define __INTEL_H + +#include + +struct mgmt_ev_quality_report; + +enum intel_telemetry_event_type { + SYSTEM_EXCEPTION, + FATAL_EXCEPTION, + DEBUG_EXCEPTION, + CONNECTION_EVENT, + DISCONNECTION_EVENT, + LINK_QUALITY_REPORT, +}; + +enum intel_telemetry_link_type { + TELEMETRY_UNKNOWN_LINK, + TELEMETRY_ACL_LINK, + TELEMETRY_SCO_LINK, +}; + +/* The subevent indices of the complete list of Intel telemetry subevents. */ +enum intel_subevt_list { + EXT_EVT_TYPE = 0x01, + + ACL_CONNECTION_HANDLE = 0x4a, + ACL_HEC_ERRORS, + ACL_CRC_ERRORS, + ACL_PACKETS_FROM_HOST, + ACL_TX_PACKETS_TO_AIR, + ACL_TX_PACKETS_0_RETRY, + ACL_TX_PACKETS_1_RETRY, + ACL_TX_PACKETS_2_RETRY, + ACL_TX_PACKETS_3_RETRY, + ACL_TX_PACKETS_MORE_RETRY, + ACL_TX_PACKETS_DH1, + ACL_TX_PACKETS_DH3, + ACL_TX_PACKETS_DH5, + ACL_TX_PACKETS_2DH1, + ACL_TX_PACKETS_2DH3, + ACL_TX_PACKETS_2DH5, + ACL_TX_PACKETS_3DH1, + ACL_TX_PACKETS_3DH3, + ACL_TX_PACKETS_3DH5, + ACL_RX_PACKETS, + ACL_LINK_THROUGHPUT, + ACL_MAX_PACKET_LATENCY, + ACL_AVG_PACKET_LATENCY, + + SCO_CONNECTION_HANDLE = 0x6a, + SCO_RX_PACKETS, + SCO_TX_PACKETS, + SCO_RX_PACKETS_LOST, + SCO_TX_PACKETS_LOST, + SCO_RX_NO_SYNC_ERROR, + SCO_RX_HEC_ERROR, + SCO_RX_CRC_ERROR, + SCO_RX_NAK_ERROR, + SCO_TX_FAILED_BY_WIFI, + SCO_RX_FAILED_BY_WIFI, + SCO_SAMPLES_INSERTED, + SCO_SAMPLES_DROPPED, + SCO_MUTE_SAMPLES, + SCO_PLC_INJECTION_DATA, +}; + +#define INTEL_NUM_SLOTS 5 +#define INTEL_NUM_RETRIES 5 +#define INTEL_NUM_PACKET_TYPES 9 + +/* An Intel telemetry subevent is of the TLV format. + * - id: takes 1 byte. This is the subevent id. + * - length: takes 1 byte. + * - value: takes |length| bytes. + */ +struct intel_tlv { + uint8_t id; + uint8_t length; + uint8_t value[0]; +}; + +#define TLV_SIZE(tlv) (*((const uint8_t *) tlv + 1) + 2 * sizeof(uint8_t)) +#define NEXT_TLV(tlv) ((const struct intel_tlv *)\ + ((const uint8_t *)tlv + TLV_SIZE(tlv))) + +struct intel_acl_event { + uint16_t conn_handle; + uint32_t rx_hec_error; + uint32_t rx_crc_error; + uint32_t packets_from_host; + uint32_t tx_packets; + uint32_t tx_packets_retry[INTEL_NUM_RETRIES]; + uint32_t tx_packets_by_type[INTEL_NUM_PACKET_TYPES]; + uint32_t rx_packets; + uint32_t link_throughput; + uint32_t max_packet_letency; + uint32_t avg_packet_letency; +} __packed; + +struct intel_sco_event { + uint16_t conn_handle; + uint32_t packets_from_host; + uint32_t tx_packets; + uint32_t rx_payload_lost; + uint32_t tx_payload_lost; + uint32_t rx_no_sync_error[INTEL_NUM_SLOTS]; + uint32_t rx_hec_error[INTEL_NUM_SLOTS]; + uint32_t rx_crc_error[INTEL_NUM_SLOTS]; + uint32_t rx_nak_error[INTEL_NUM_SLOTS]; + uint32_t tx_failed_wifi_coex[INTEL_NUM_SLOTS]; + uint32_t rx_failed_wifi_coex[INTEL_NUM_SLOTS]; + uint32_t samples_inserted_by_CDC; + uint32_t samples_dropped; + uint32_t mute_samples; + uint32_t plc_injection; +} __packed; + +struct intel_ext_telemetry_event { + uint8_t telemetry_ev_type; /* one in enum intel_telemetry_event_type */ + uint8_t link_type; + union { + struct intel_sco_event sco; + struct intel_acl_event acl; + } conn; +} __packed; + +typedef void (*intel_debug_func_t)(const char *str, void *user_data); + +bool is_manufacturer_intel(uint16_t manufacturer); +void intel_set_debug(intel_debug_func_t callback, void *user_data); + +bool process_intel_telemetry_report(const struct mgmt_ev_quality_report *ev); + +#endif /* __INTEL_H */ From patchwork Tue Feb 15 13:36:34 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joseph Hwang X-Patchwork-Id: 543088 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 95FCBC433EF for ; Tue, 15 Feb 2022 13:36:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238318AbiBONhH (ORCPT ); Tue, 15 Feb 2022 08:37:07 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:34064 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238283AbiBONhG (ORCPT ); Tue, 15 Feb 2022 08:37:06 -0500 Received: from mail-pf1-x42b.google.com (mail-pf1-x42b.google.com [IPv6:2607:f8b0:4864:20::42b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8FB9265179 for ; Tue, 15 Feb 2022 05:36:56 -0800 (PST) Received: by mail-pf1-x42b.google.com with SMTP id y5so34921419pfe.4 for ; Tue, 15 Feb 2022 05:36:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=J48r90Vm72k/4dumF504U76cCOox1c/Fx02dPurFxlQ=; b=hk3IYT1a+N+/pTexWbG5uA+YAEZ7gIi0/BTXtT3jNwBsRImUoaVPboET3D253+b6ij SgTT/A5csABOkb2I9r9yDdplvMTsawQBMOEPhk5F5He27eUjJGwhbzEkH2+os7dVPf/B V+wecdjg5EVbOWrodCINhRG5sl2Mnus+dibdw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=J48r90Vm72k/4dumF504U76cCOox1c/Fx02dPurFxlQ=; b=feEWmVTn/dthvMRlaQG4Ey8/RSQqJSQJWBU6Xt9jaJ6b5riJqzJvbb++ggby4HOIGI fkQ5zcXNifNdZuqyOtFaLDt4zGP+J6NkeBQGTGPkukA96GrQJWyNd6wIzv9bym9ZI3Sn MTjyLy4jOBC1pEt9WlO1xsBQIblRFOPu6t2I1WoxWDnyQgjsF2teft6tiIfYnnBWLpOp 1HQYl3kyhy0QOCSlBTlOOU8zt0QrYrXVo3Qq3pD3kntGK+F9398aDSWwKvL7fTotj2Gt Be3/S/JvUf02YVbCutD7YS9+V9glhKywfMEQBjUcn/c+UrOyfcyF230o3gK8PTDct4af /LsQ== X-Gm-Message-State: AOAM530rd9bzSns9LaaSPl+B+/BEBwfrgD8UnAsP1U0Czel6WpLrNLge sveHrj/FZQLYfEND1zyGZGkqcuGjoitixw== X-Google-Smtp-Source: ABdhPJx6ip/hQqjhcwJE+Y4/IOJ+inb+hTLRo21m+fmzaVccdOZJpfLvdgYcJTcnT0KOLSkzVn41LA== X-Received: by 2002:a65:42c4:: with SMTP id l4mr3473181pgp.505.1644932215899; Tue, 15 Feb 2022 05:36:55 -0800 (PST) Received: from localhost (208.158.221.35.bc.googleusercontent.com. [35.221.158.208]) by smtp.gmail.com with UTF8SMTPSA id k21sm40633811pff.33.2022.02.15.05.36.54 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 15 Feb 2022 05:36:55 -0800 (PST) From: Joseph Hwang To: linux-bluetooth@vger.kernel.org, marcel@holtmann.org, luiz.dentz@gmail.com, pali@kernel.org Cc: josephsih@google.com, chromeos-bluetooth-upstreaming@chromium.org, Joseph Hwang Subject: [BlueZ PATCH v4 6/8] tools/btmgmt: fix quality report command Date: Tue, 15 Feb 2022 21:36:34 +0800 Message-Id: <20220215133636.2827039-4-josephsih@chromium.org> X-Mailer: git-send-email 2.35.1.265.g69c8d7142f-goog In-Reply-To: <20220215133636.2827039-1-josephsih@chromium.org> References: <20220215133636.2827039-1-josephsih@chromium.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org The set quality report feature becomes a mgmt command and is not included in the experimental features any more. Signed-off-by: Joseph Hwang --- Changes in v4: - Add "quality-report" in settings_str. - Print current_settings in quality_rsp. Changes in v3: - This is a new patch that fixes the quality on/off command in btmgmt. tools/btmgmt.c | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/tools/btmgmt.c b/tools/btmgmt.c index 42ef9acef..14efe37db 100644 --- a/tools/btmgmt.c +++ b/tools/btmgmt.c @@ -353,6 +353,7 @@ static const char *settings_str[] = { "static-addr", "phy-configuration", "wide-band-speech", + "quality-report", }; static const char *settings2str(uint32_t settings) @@ -1842,26 +1843,28 @@ static void cmd_exp_privacy(int argc, char **argv) } } -static void exp_quality_rsp(uint8_t status, uint16_t len, const void *param, +static void quality_rsp(uint8_t status, uint16_t len, const void *param, void *user_data) { - if (status != 0) + const struct mgmt_rp_set_quality_report *rp = param; + uint32_t current_settings; + + if (status != 0) { error("Set Quality Report feature failed: 0x%02x (%s)", status, mgmt_errstr(status)); - else - print("Quality Report feature successfully set"); + return bt_shell_noninteractive_quit(EXIT_FAILURE); + } + + current_settings = le32_to_cpu(rp->current_settings); + print("Quality Report feature successfully set"); + print("\tcurrent settings: %s", settings2str(current_settings)); bt_shell_noninteractive_quit(EXIT_SUCCESS); } static void cmd_exp_quality(int argc, char **argv) { - /* 330859bc-7506-492d-9370-9a6f0614037f */ - static const uint8_t uuid[16] = { - 0x7f, 0x03, 0x14, 0x06, 0x6f, 0x9a, 0x70, 0x93, - 0x2d, 0x49, 0x06, 0x75, 0xbc, 0x59, 0x08, 0x33, - }; - struct mgmt_cp_set_exp_feature cp; + struct mgmt_cp_set_quality_report cp; uint8_t val; if (mgmt_index == MGMT_INDEX_NONE) { @@ -1878,11 +1881,10 @@ static void cmd_exp_quality(int argc, char **argv) } memset(&cp, 0, sizeof(cp)); - memcpy(cp.uuid, uuid, 16); cp.action = val; - if (mgmt_send(mgmt, MGMT_OP_SET_EXP_FEATURE, mgmt_index, - sizeof(cp), &cp, exp_quality_rsp, NULL, NULL) == 0) { + if (mgmt_send(mgmt, MGMT_OP_SET_QUALITY_REPORT, mgmt_index, + sizeof(cp), &cp, quality_rsp, NULL, NULL) == 0) { error("Unable to send quality report feature cmd"); return bt_shell_noninteractive_quit(EXIT_FAILURE); } @@ -5636,10 +5638,10 @@ static const struct bt_shell_menu main_menu = { cmd_exp_debug, "Set debug feature" }, { "exp-privacy", "", cmd_exp_privacy, "Set LL privacy feature" }, - { "exp-quality", "", cmd_exp_quality, - "Set bluetooth quality report feature" }, { "exp-offload", "", cmd_exp_offload_codecs, "Toggle codec support" }, + { "quality", "", + cmd_exp_quality, "Set bluetooth quality report feature" }, { "read-sysconfig", NULL, cmd_read_sysconfig, "Read System Configuration" }, { "set-sysconfig", "<-v|-h> [options...]", From patchwork Tue Feb 15 13:36:35 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joseph Hwang X-Patchwork-Id: 542843 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A8C61C433F5 for ; Tue, 15 Feb 2022 13:37:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238320AbiBONhJ (ORCPT ); Tue, 15 Feb 2022 08:37:09 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:34090 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238283AbiBONhI (ORCPT ); Tue, 15 Feb 2022 08:37:08 -0500 Received: from mail-pj1-x1029.google.com (mail-pj1-x1029.google.com [IPv6:2607:f8b0:4864:20::1029]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 43EA06E8DE for ; Tue, 15 Feb 2022 05:36:59 -0800 (PST) Received: by mail-pj1-x1029.google.com with SMTP id qe15so17406887pjb.3 for ; Tue, 15 Feb 2022 05:36:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Iah9qiR9JL2Z6N4lIow2hFh0pGExklk07rIIDc0sSuc=; b=dlatdPrwHL36yknZMfXwV1wj3YvmwXeGHNqE0vcpyTuvUCN5JLiUcoETKTpXjBYNKp hzpY3kz1nUEPYPpudL/yDke+wDRXX/tZxrRRkRbS0rQegh/fYooQ8KNWJh3b/cgt+/5w 98kVIFpRg6YsfrFkSbrQkLpzLfqXMJ3jC1FVU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Iah9qiR9JL2Z6N4lIow2hFh0pGExklk07rIIDc0sSuc=; b=EToDxwOVOy1rHl8G3cqIrG86stBC3Og4uh9gAOv5DikIeywB6Bvdd0MAKJ50hjVoEd j/DKZE2qprUlluu31sWAcUYK4MBPktbdtVgfHDgxtDvehIXBQGg9vZUMAwTdZ0W6Vbtp xj8avredWY+6npwjwlOT0ZOdK5x7HAWF8iT9lzlwnJNhlb4lN7+Ua4R1KysgfUZxLXWh ro7N6doFRwO4jJOsLTigMiNRoX1//4s95eo14ttPdDMejCTs4u8r2VEzvXBg1l914obr /ZdRY9Hf7gw4/CruZuEaRPmk+kE3rlh8ve695mBOUcU+HFLHKBrgNtqpn+tNAXcOAxum P/Kg== X-Gm-Message-State: AOAM530KVTcJ8GL18rspVurG3/7PKGW70n89deF13+LXwBN8NiUXDqbv xPiOz4BjwaldqTQcUZvJLZtOiXPVMuwWSA== X-Google-Smtp-Source: ABdhPJz1h1v2551lpTsYkbP6IrLA0Ii+ml1a6kXUhIVRLGYoxSpZqBehWpinTD+h7gb+/ETijOOiaw== X-Received: by 2002:a17:902:e888:: with SMTP id w8mr4353658plg.109.1644932218600; Tue, 15 Feb 2022 05:36:58 -0800 (PST) Received: from localhost (208.158.221.35.bc.googleusercontent.com. [35.221.158.208]) by smtp.gmail.com with UTF8SMTPSA id 84sm11267279pfx.181.2022.02.15.05.36.57 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 15 Feb 2022 05:36:58 -0800 (PST) From: Joseph Hwang To: linux-bluetooth@vger.kernel.org, marcel@holtmann.org, luiz.dentz@gmail.com, pali@kernel.org Cc: josephsih@google.com, chromeos-bluetooth-upstreaming@chromium.org, Joseph Hwang Subject: [BlueZ PATCH v4 7/8] monitor: print quality report cmd Date: Tue, 15 Feb 2022 21:36:35 +0800 Message-Id: <20220215133636.2827039-5-josephsih@chromium.org> X-Mailer: git-send-email 2.35.1.265.g69c8d7142f-goog In-Reply-To: <20220215133636.2827039-1-josephsih@chromium.org> References: <20220215133636.2827039-1-josephsih@chromium.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org This patch prints the set quality command properly. Signed-off-by: Joseph Hwang --- Changes in v4: - Use get_u8() to replace *(uint8_t *). - Use mgmt_new_settings_rsp as the rsp_func in mgmt_command_table for Set Quality Report. Changes in v3: - This is a new patch that prints the set quality command. monitor/packet.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/monitor/packet.c b/monitor/packet.c index ec779a9d5..5f2085b4e 100644 --- a/monitor/packet.c +++ b/monitor/packet.c @@ -12011,6 +12011,7 @@ static const struct bitfield_data mgmt_settings_table[] = { { 15, "Static Address" }, { 16, "PHY Configuration" }, { 17, "Wideband Speech" }, + { 18, "Quality Report" }, { } }; @@ -13607,6 +13608,13 @@ static void mgmt_remove_adv_monitor_patterns_rsp(const void *data, print_field("Handle: %d", handle); } +static void mgmt_set_quality_report_cmd(const void *data, uint16_t size) +{ + uint8_t action = get_u8(data); + + print_field("Set Quality Report %u", action); +} + struct mgmt_data { uint16_t opcode; const char *str; @@ -13864,6 +13872,9 @@ static const struct mgmt_data mgmt_command_table[] = { mgmt_add_adv_monitor_patterns_rssi_cmd, 8, false, mgmt_add_adv_monitor_patterns_rsp, 2, true}, + { 0x0057, "Set Quality Report", + mgmt_set_quality_report_cmd, 1, true, + mgmt_new_settings_rsp, 4, true }, { } }; From patchwork Tue Feb 15 13:36:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joseph Hwang X-Patchwork-Id: 543087 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 308AEC433F5 for ; Tue, 15 Feb 2022 13:37:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238328AbiBONhM (ORCPT ); Tue, 15 Feb 2022 08:37:12 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:34124 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238322AbiBONhL (ORCPT ); Tue, 15 Feb 2022 08:37:11 -0500 Received: from mail-pf1-x429.google.com (mail-pf1-x429.google.com [IPv6:2607:f8b0:4864:20::429]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0ADC277AAD for ; Tue, 15 Feb 2022 05:37:02 -0800 (PST) Received: by mail-pf1-x429.google.com with SMTP id c10so9313407pfv.8 for ; Tue, 15 Feb 2022 05:37:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=8LHYny5oShxCf5SLl5OM+fcMEb9asaSj1Cnlyvhc+Bs=; b=YR+Qeadq5XzW24WNzAcvNJSt7bwHd1c0BaJj1nds56CSoWd1u3OkKvYVIrS0CEQ09a rXD5SlD6v5QJsEHBmR/g7KWJO0r9SHNqJuRQW35n7l+fKSEkKXS+F5yrliar3mdBrnkH JTqYGO7l/jxhPSUe6wL35GFmDFNRculrFK9AI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=8LHYny5oShxCf5SLl5OM+fcMEb9asaSj1Cnlyvhc+Bs=; b=loFtIplAOMUzH190LEJX+pPZbOmfr1wxoNG6LkpLGYsaIbuO1cv1kjgj5vxMDaEmIq untP6p86l+cRdB+/iywfQ2ti5XzktgcJ86s3Fov/9gGjdn3hs1hkYYPmpKSjw2nyhaUz sagzCEG6dZBbM17Hrv9eNuObZfU+psO/n5lMwFmD0MAm67A23cUBRAsBCV41h2rtgDgP /bAKVHq68TCabBRE5GynwIPM6zhllraP8sBb+jtUuBv2/eKII6XM+QhVXx67agLq1iUk Pr/SfG0DEIpbhtBL8icctcqQuCPc2gEoq/bbi96OsAlqzc2eP+6mhS5TGsVe8BjzlauT QUzQ== X-Gm-Message-State: AOAM5321QkB0as7kDIfZkw6i77IadWzxlkDm4YYcT82Tm8OBRTJArsRa Ng9bgJgM6uTQaXNQlPIhzvGYBjr96x6ygw== X-Google-Smtp-Source: ABdhPJwwwhYpcHdiDsfVKWT6xEuQfhF0aTYje0VN5W/BBi30/0gOR4EUgtGg8/IJM/rq1BK1ihIoQw== X-Received: by 2002:a63:8449:: with SMTP id k70mr3531633pgd.188.1644932221277; Tue, 15 Feb 2022 05:37:01 -0800 (PST) Received: from localhost (208.158.221.35.bc.googleusercontent.com. [35.221.158.208]) by smtp.gmail.com with UTF8SMTPSA id g63sm7498580pfb.65.2022.02.15.05.36.59 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 15 Feb 2022 05:37:00 -0800 (PST) From: Joseph Hwang To: linux-bluetooth@vger.kernel.org, marcel@holtmann.org, luiz.dentz@gmail.com, pali@kernel.org Cc: josephsih@google.com, chromeos-bluetooth-upstreaming@chromium.org, Joseph Hwang Subject: [BlueZ PATCH v4 8/8] monitor: packet: add missing decodings of MGMT commands to todo Date: Tue, 15 Feb 2022 21:36:36 +0800 Message-Id: <20220215133636.2827039-6-josephsih@chromium.org> X-Mailer: git-send-email 2.35.1.265.g69c8d7142f-goog In-Reply-To: <20220215133636.2827039-1-josephsih@chromium.org> References: <20220215133636.2827039-1-josephsih@chromium.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org This patch adds the missing decodings of MGMT commands to btmon --todo. Signed-off-by: Joseph Hwang --- Changes in v4: - This is a new patch that adds the missing decodings of MGMT commands. monitor/packet.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/monitor/packet.c b/monitor/packet.c index 5f2085b4e..33e0cf7f6 100644 --- a/monitor/packet.c +++ b/monitor/packet.c @@ -14696,4 +14696,13 @@ void packet_todo(void) printf("\t%s\n", le_meta_event_table[i].str); } + + printf("MGMT commands with missing decodings:\n"); + + for (i = 0; mgmt_command_table[i].str; i++) { + if (mgmt_command_table[i].func) + continue; + + printf("\t%s\n", mgmt_command_table[i].str); + } }