[PATCH BlueZ 2/4] adapter/agent/device: migrate to shared enum/parser for IO capabilities
From: Christian Eggers <ceggers@arri.de>
Date: 2026-02-27 14:33:21
Subsystem:
the rest · Maintainer:
Linus Torvalds
--- src/adapter.c | 18 ++++++++++-------- src/adapter.h | 11 ++++++++--- src/agent.c | 33 ++++++++------------------------- src/agent.h | 9 ++------- src/device.c | 12 ++++++------ src/shared/mgmt.h | 2 ++ 6 files changed, 36 insertions(+), 49 deletions(-)
diff --git a/src/adapter.c b/src/adapter.c
index 9bb1950a9f7d..4e5ff219fe8b 100644
--- a/src/adapter.c
+++ b/src/adapter.c@@ -42,7 +42,6 @@ #include "log.h" #include "textfile.h" -#include "src/shared/mgmt.h" #include "src/shared/util.h" #include "src/shared/queue.h" #include "src/shared/att.h"
@@ -8548,7 +8547,8 @@ static void pair_device_complete(uint8_t status, uint16_t length, } int adapter_create_bonding(struct btd_adapter *adapter, const bdaddr_t *bdaddr, - uint8_t addr_type, uint8_t io_cap) + uint8_t addr_type, + enum mgmt_io_capability io_cap) { suspend_discovery(adapter);
@@ -8557,7 +8557,8 @@ int adapter_create_bonding(struct btd_adapter *adapter, const bdaddr_t *bdaddr, /* Starts a new bonding attempt in a fresh new bonding_req or a retried one. */ int adapter_bonding_attempt(struct btd_adapter *adapter, const bdaddr_t *bdaddr, - uint8_t addr_type, uint8_t io_cap) + uint8_t addr_type, + enum mgmt_io_capability io_cap) { struct mgmt_cp_pair_device cp; char addr[18];
@@ -9151,12 +9152,13 @@ static void new_conn_param(uint16_t index, uint16_t length, ev->latency, ev->timeout); } -int adapter_set_io_capability(struct btd_adapter *adapter, uint8_t io_cap) +int adapter_set_io_capability(struct btd_adapter *adapter, + enum mgmt_io_capability io_cap) { struct mgmt_cp_set_io_capability cp; if (!btd_opts.pairable) { - if (io_cap == IO_CAPABILITY_INVALID) { + if (io_cap == MGMT_IO_CAPABILITY_INVALID) { if (adapter->current_settings & MGMT_SETTING_BONDABLE) set_mode(adapter, MGMT_OP_SET_BONDABLE, 0x00);
@@ -9165,8 +9167,8 @@ int adapter_set_io_capability(struct btd_adapter *adapter, uint8_t io_cap) if (!(adapter->current_settings & MGMT_SETTING_BONDABLE)) set_mode(adapter, MGMT_OP_SET_BONDABLE, 0x01); - } else if (io_cap == IO_CAPABILITY_INVALID) - io_cap = IO_CAPABILITY_NOINPUTNOOUTPUT; + } else if (io_cap == MGMT_IO_CAPABILITY_INVALID) + io_cap = MGMT_IO_CAPABILITY_NOINPUTNOOUTPUT; memset(&cp, 0, sizeof(cp)); cp.io_capability = io_cap;
@@ -9399,7 +9401,7 @@ static int adapter_register(struct btd_adapter *adapter) agent = agent_get(NULL); if (agent) { - uint8_t io_cap = agent_get_io_capability(agent); + enum mgmt_io_capability io_cap = agent_get_io_capability(agent); adapter_set_io_capability(adapter, io_cap); agent_unref(agent); }
diff --git a/src/adapter.h b/src/adapter.h
index 7a7e5c8f9dfd..4e07f71ad130 100644
--- a/src/adapter.h
+++ b/src/adapter.h@@ -16,6 +16,8 @@ #include <bluetooth/bluetooth.h> #include <bluetooth/sdp.h> +#include "shared/mgmt.h" + #define ADAPTER_INTERFACE "org.bluez.Adapter1" #define MAX_NAME_LENGTH 248
@@ -207,15 +209,18 @@ int btd_adapter_passkey_reply(struct btd_adapter *adapter, uint32_t passkey); int adapter_create_bonding(struct btd_adapter *adapter, const bdaddr_t *bdaddr, - uint8_t addr_type, uint8_t io_cap); + uint8_t addr_type, + enum mgmt_io_capability io_cap); int adapter_bonding_attempt(struct btd_adapter *adapter, const bdaddr_t *bdaddr, - uint8_t addr_type, uint8_t io_cap); + uint8_t addr_type, + enum mgmt_io_capability io_cap); int adapter_cancel_bonding(struct btd_adapter *adapter, const bdaddr_t *bdaddr, uint8_t addr_type); -int adapter_set_io_capability(struct btd_adapter *adapter, uint8_t io_cap); +int adapter_set_io_capability(struct btd_adapter *adapter, + enum mgmt_io_capability io_cap); int btd_adapter_read_local_oob_data(struct btd_adapter *adapter);
diff --git a/src/agent.c b/src/agent.c
index 3696575b83e6..caa719d90e7f 100644
--- a/src/agent.c
+++ b/src/agent.c@@ -56,7 +56,7 @@ struct agent { int ref; char *owner; char *path; - uint8_t capability; + enum mgmt_io_capability capability; struct agent_request *request; guint watch; };
@@ -126,12 +126,12 @@ static void agent_request_free(struct agent_request *req, gboolean destroy) static void set_io_cap(struct btd_adapter *adapter, gpointer user_data) { struct agent *agent = user_data; - uint8_t io_cap; + enum mgmt_io_capability io_cap; if (agent) io_cap = agent->capability; else - io_cap = IO_CAPABILITY_INVALID; + io_cap = MGMT_IO_CAPABILITY_INVALID; adapter_set_io_capability(adapter, io_cap); }
@@ -261,7 +261,7 @@ struct agent *agent_get(const char *owner) } static struct agent *agent_create( const char *name, const char *path, - uint8_t capability) + enum mgmt_io_capability capability) { struct agent *agent;
@@ -922,7 +922,7 @@ failed: return err; } -uint8_t agent_get_io_capability(struct agent *agent) +enum mgmt_io_capability agent_get_io_capability(struct agent *agent) { return agent->capability; }
@@ -944,29 +944,12 @@ static void agent_destroy(gpointer data) agent_unref(agent); } -static uint8_t parse_io_capability(const char *capability) -{ - if (g_str_equal(capability, "")) - return IO_CAPABILITY_KEYBOARDDISPLAY; - if (g_str_equal(capability, "DisplayOnly")) - return IO_CAPABILITY_DISPLAYONLY; - if (g_str_equal(capability, "DisplayYesNo")) - return IO_CAPABILITY_DISPLAYYESNO; - if (g_str_equal(capability, "KeyboardOnly")) - return IO_CAPABILITY_KEYBOARDONLY; - if (g_str_equal(capability, "NoInputNoOutput")) - return IO_CAPABILITY_NOINPUTNOOUTPUT; - if (g_str_equal(capability, "KeyboardDisplay")) - return IO_CAPABILITY_KEYBOARDDISPLAY; - return IO_CAPABILITY_INVALID; -} - static DBusMessage *register_agent(DBusConnection *conn, DBusMessage *msg, void *user_data) { struct agent *agent; const char *sender, *path, *capability; - uint8_t cap; + enum mgmt_io_capability cap; sender = dbus_message_get_sender(msg);
@@ -979,8 +962,8 @@ static DBusMessage *register_agent(DBusConnection *conn, DBUS_TYPE_INVALID) == FALSE) return btd_error_invalid_args(msg); - cap = parse_io_capability(capability); - if (cap == IO_CAPABILITY_INVALID) + cap = mgmt_parse_io_capability(capability); + if (cap == MGMT_IO_CAPABILITY_INVALID) return btd_error_invalid_args(msg); agent = agent_create(sender, path, cap);
diff --git a/src/agent.h b/src/agent.h
index bd0502030fa0..63cd7e5ccc4d 100644
--- a/src/agent.h
+++ b/src/agent.h@@ -9,12 +9,7 @@ * */ -#define IO_CAPABILITY_DISPLAYONLY 0x00 -#define IO_CAPABILITY_DISPLAYYESNO 0x01 -#define IO_CAPABILITY_KEYBOARDONLY 0x02 -#define IO_CAPABILITY_NOINPUTNOOUTPUT 0x03 -#define IO_CAPABILITY_KEYBOARDDISPLAY 0x04 -#define IO_CAPABILITY_INVALID 0xFF +#include "shared/mgmt.h" struct agent;
@@ -61,7 +56,7 @@ int agent_display_pincode(struct agent *agent, struct btd_device *device, int agent_cancel(struct agent *agent); -uint8_t agent_get_io_capability(struct agent *agent); +enum mgmt_io_capability agent_get_io_capability(struct agent *agent); void btd_agent_init(void); void btd_agent_cleanup(void);
diff --git a/src/device.c b/src/device.c
index fd7dc4eb7b7c..3ea683667bd8 100644
--- a/src/device.c
+++ b/src/device.c@@ -3333,7 +3333,7 @@ static DBusMessage *pair_device(DBusConnection *conn, DBusMessage *msg, const char *sender; struct agent *agent; struct bonding_req *bonding; - uint8_t io_cap; + enum mgmt_io_capability io_cap; int err; btd_device_set_temporary(device, false);
@@ -3375,7 +3375,7 @@ static DBusMessage *pair_device(DBusConnection *conn, DBusMessage *msg, if (agent) io_cap = agent_get_io_capability(agent); else - io_cap = IO_CAPABILITY_NOINPUTNOOUTPUT; + io_cap = MGMT_IO_CAPABILITY_NOINPUTNOOUTPUT; bonding = bonding_request_new(msg, device, bdaddr_type, agent);
@@ -6504,7 +6504,7 @@ static void att_connect_cb(GIOChannel *io, GError *gerr, gpointer user_data) { struct btd_device *device = user_data; DBusMessage *reply; - uint8_t io_cap; + enum mgmt_io_capability io_cap; int err = 0; g_io_channel_unref(device->att_io);
@@ -6543,7 +6543,7 @@ static void att_connect_cb(GIOChannel *io, GError *gerr, gpointer user_data) if (device->bonding->agent) io_cap = agent_get_io_capability(device->bonding->agent); else - io_cap = IO_CAPABILITY_NOINPUTNOOUTPUT; + io_cap = MGMT_IO_CAPABILITY_NOINPUTNOOUTPUT; err = adapter_create_bonding(device->adapter, &device->bdaddr, device->bdaddr_type, io_cap);
@@ -7433,7 +7433,7 @@ static gboolean device_bonding_retry(gpointer data) struct btd_device *device = data; struct btd_adapter *adapter = device_get_adapter(device); struct bonding_req *bonding = device->bonding; - uint8_t io_cap; + enum mgmt_io_capability io_cap; int err; if (!bonding)
@@ -7451,7 +7451,7 @@ static gboolean device_bonding_retry(gpointer data) if (bonding->agent) io_cap = agent_get_io_capability(bonding->agent); else - io_cap = IO_CAPABILITY_NOINPUTNOOUTPUT; + io_cap = MGMT_IO_CAPABILITY_NOINPUTNOOUTPUT; err = adapter_bonding_attempt(adapter, &device->bdaddr, device->bdaddr_type, io_cap);
diff --git a/src/shared/mgmt.h b/src/shared/mgmt.h
index c99f2ff0620e..c1f62ebb9c9d 100644
--- a/src/shared/mgmt.h
+++ b/src/shared/mgmt.h@@ -8,6 +8,8 @@ * */ +#pragma once + #include <stdbool.h> #include <stdint.h>
--
2.51.0