Message ID | 20220203141234.710019-1-michal.lowas-rzechonek@silvair.com |
---|---|
State | New |
Headers | show |
Series | [BlueZ] mesh: Allow mesh-io to use dbus when initializing | expand |
This is automated email and please do not reply to this email! Dear submitter, Thank you for submitting the patches to the linux bluetooth mailing list. This is a CI test results with your patch series: PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=611014 ---Test result--- Test Summary: CheckPatch PASS 0.57 seconds GitLint PASS 0.37 seconds Prep - Setup ELL PASS 41.12 seconds Build - Prep PASS 0.42 seconds Build - Configure PASS 8.06 seconds Build - Make PASS 1205.09 seconds Make Check PASS 11.08 seconds Make Check w/Valgrind PASS 405.96 seconds Make Distcheck PASS 212.16 seconds Build w/ext ELL - Configure PASS 7.76 seconds Build w/ext ELL - Make PASS 1143.43 seconds Incremental Build with patchesPASS 0.00 seconds --- Regards, Linux Bluetooth
Hi Michal, On Thu, 2022-02-03 at 15:12 +0100, Michał Lowas-Rzechonek wrote: > Some io implementations might want to either make calls to other D- > Bus > services, or provide additional objects/interfaces that allow > applications to fine-tune their operation. > --- > mesh/main.c | 9 ++++----- > mesh/mesh-io-api.h | 3 ++- > mesh/mesh-io-generic.c | 4 +++- > mesh/mesh-io-unit.c | 2 +- > mesh/mesh-io.c | 5 +++-- > mesh/mesh-io.h | 3 ++- > mesh/mesh.c | 12 +++++++----- > mesh/mesh.h | 9 +++++---- > 8 files changed, 27 insertions(+), 20 deletions(-) > > diff --git a/mesh/main.c b/mesh/main.c > index dd99c3085..74b0f884e 100644 > --- a/mesh/main.c > +++ b/mesh/main.c > @@ -76,10 +76,9 @@ static void do_debug(const char *str, void > *user_data) > l_info("%s%s", prefix, str); > } > > -static void mesh_ready_callback(void *user_data, bool success) > +static void mesh_ready_callback(bool success, struct l_dbus *dbus, > + void > *user_data) > { > - struct l_dbus *dbus = user_data; > - > l_info("mesh_ready_callback"); > if (!success) { > l_error("Failed to start mesh"); > @@ -102,8 +101,8 @@ static void request_name_callback(struct l_dbus > *dbus, bool success, > return; > } > > - if (!mesh_init(storage_dir, mesh_conf_fname, io_type, > io_opts, > - mesh_ready_callback, dbus)) { > + if (!mesh_init(dbus, storage_dir, mesh_conf_fname, io_type, > io_opts, > + mesh_ready_callback, NULL)) { > l_error("Failed to initialize mesh"); > l_main_quit(); > } > diff --git a/mesh/mesh-io-api.h b/mesh/mesh-io-api.h > index 61f79f224..7a50937da 100644 > --- a/mesh/mesh-io-api.h > +++ b/mesh/mesh-io-api.h > @@ -11,7 +11,8 @@ > struct mesh_io_private; > > typedef bool (*mesh_io_init_t)(struct mesh_io *io, void *opts, > - mesh_io_ready_func_t cb, void > *user_data); > + struct l_dbus *dbus, > mesh_io_ready_func_t cb, > + void *user_data); > typedef bool (*mesh_io_destroy_t)(struct mesh_io *io); > typedef bool (*mesh_io_caps_t)(struct mesh_io *io, struct > mesh_io_caps *caps); > typedef bool (*mesh_io_send_t)(struct mesh_io *io, > diff --git a/mesh/mesh-io-generic.c b/mesh/mesh-io-generic.c > index 6c0b8f0fd..27cb4cf5f 100644 > --- a/mesh/mesh-io-generic.c > +++ b/mesh/mesh-io-generic.c > @@ -27,6 +27,7 @@ > #include "mesh/mesh-io.h" > #include "mesh/mesh-io-api.h" > #include "mesh/mesh-io-generic.h" > +#include "mesh/dbus.h" > > struct mesh_io_private { > struct bt_hci *hci; > @@ -40,6 +41,7 @@ struct mesh_io_private { > uint16_t interval; > bool sending; > bool active; > + struct l_dbus *dbus; > }; > > struct pvt_rx_reg { > @@ -429,7 +431,7 @@ static void read_info(int index, void *user_data) > hci_init(io); > } > > -static bool dev_init(struct mesh_io *io, void *opts, > +static bool dev_init(struct mesh_io *io, void *opts, struct l_dbus > *dbus, > mesh_io_ready_func_t cb, void > *user_data) > { > if (!io || io->pvt) > diff --git a/mesh/mesh-io-unit.c b/mesh/mesh-io-unit.c > index f4b615ac8..a3cba747e 100644 > --- a/mesh/mesh-io-unit.c > +++ b/mesh/mesh-io-unit.c > @@ -209,7 +209,7 @@ static void unit_up(void *user_data) > l_timeout_create_ms(1, get_name, pvt, NULL); > } > > -static bool unit_init(struct mesh_io *io, void *opt, > +static bool unit_init(struct mesh_io *io, void *opt, struct l_dbus > *dbus, > mesh_io_ready_func_t cb, void > *user_data) > { > struct mesh_io_private *pvt; > diff --git a/mesh/mesh-io.c b/mesh/mesh-io.c > index 96891313a..dfd9e43d9 100644 > --- a/mesh/mesh-io.c > +++ b/mesh/mesh-io.c > @@ -46,7 +46,8 @@ static bool match_by_type(const void *a, const void > *b) > } > > struct mesh_io *mesh_io_new(enum mesh_io_type type, void *opts, > - mesh_io_ready_func_t cb, void > *user_data) > + struct l_dbus *dbus, > mesh_io_ready_func_t cb, > + void *user_data) > { > const struct mesh_io_api *api = NULL; > struct mesh_io *io; > @@ -69,7 +70,7 @@ struct mesh_io *mesh_io_new(enum mesh_io_type type, > void *opts, > io->type = type; > io->api = api; > > - if (!api->init(io, opts, cb, user_data)) > + if (!api->init(io, opts, dbus, cb, user_data)) > goto fail; > > if (!io_list) > diff --git a/mesh/mesh-io.h b/mesh/mesh-io.h > index 80ef3fa3e..8a4b2e8ee 100644 > --- a/mesh/mesh-io.h > +++ b/mesh/mesh-io.h > @@ -74,7 +74,8 @@ typedef void (*mesh_io_recv_ext_func_t)(void > *user_data, > typedef void (*mesh_io_ready_func_t)(void *user_data, bool result); > > struct mesh_io *mesh_io_new(enum mesh_io_type type, void *opts, > - mesh_io_ready_func_t cb, void > *user_data); > + struct l_dbus *dbus, > mesh_io_ready_func_t cb, > + void *user_data); > void mesh_io_destroy(struct mesh_io *io); > > bool mesh_io_get_caps(struct mesh_io *io, struct mesh_io_caps > *caps); > diff --git a/mesh/mesh.c b/mesh/mesh.c > index 62d650328..1d3451cf4 100644 > --- a/mesh/mesh.c > +++ b/mesh/mesh.c > @@ -71,6 +71,7 @@ struct join_data{ > > struct mesh_init_request { > mesh_ready_func_t cb; > + struct l_dbus *dbus; > void *user_data; > }; > > @@ -173,7 +174,7 @@ static void io_ready_callback(void *user_data, > bool result) > if (result) > node_attach_io_all(mesh.io); > > - req->cb(req->user_data, result); > + req->cb(result, req->dbus, req->user_data); > > l_free(req); > } > @@ -249,9 +250,9 @@ done: > l_settings_free(settings); > } > > -bool mesh_init(const char *config_dir, const char *mesh_conf_fname, > - enum mesh_io_type type, void > *opts, > - mesh_ready_func_t cb, void > *user_data) > +bool mesh_init(struct l_dbus *dbus, const char *config_dir, > + const char *mesh_conf_fname, enum mesh_io_type type, > void *opts, > + mesh_ready_func_t cb, void *user_data) > { > struct mesh_io_caps caps; > struct mesh_init_request *req; > @@ -280,9 +281,10 @@ bool mesh_init(const char *config_dir, const > char *mesh_conf_fname, > > req = l_new(struct mesh_init_request, 1); > req->cb = cb; > + req->dbus = dbus; > req->user_data = user_data; > > - mesh.io = mesh_io_new(type, opts, io_ready_callback, req); > + mesh.io = mesh_io_new(type, opts, dbus, io_ready_callback, > req); > if (!mesh.io) { > l_free(req); > return false; > diff --git a/mesh/mesh.h b/mesh/mesh.h > index 0f77ebc58..6050cfa06 100644 > --- a/mesh/mesh.h > +++ b/mesh/mesh.h > @@ -21,13 +21,14 @@ > > enum mesh_io_type; > > -typedef void (*mesh_ready_func_t)(void *user_data, bool success); > +typedef void (*mesh_ready_func_t)(bool success, struct l_dbus *dbus, > + void > *user_data); > typedef void (*prov_rx_cb_t)(void *user_data, const uint8_t *data, > uint1 > 6_t len); > > -bool mesh_init(const char *config_dir, const char *mesh_conf_fname, > - enum mesh_io_type type, void > *opts, > - mesh_ready_func_t cb, void > *user_data); > +bool mesh_init(struct l_dbus *dus, const char *config_dir, > + const char *mesh_conf_fname, enum mesh_io_type type, > void *opts, > + mesh_ready_func_t cb, void *user_data); > void mesh_cleanup(void); > bool mesh_dbus_init(struct l_dbus *dbus); > I wonder if setting the global dbus value prior to initializing mesh would be a bettter solution. That is, introducing a function like void dbus_set_bus(struct l_dbus *bus) (in dbus.c) and call it right after l_dbus_new_default()in main.c Would that provide the required functionality? Best regards, Inga
diff --git a/mesh/main.c b/mesh/main.c index dd99c3085..74b0f884e 100644 --- a/mesh/main.c +++ b/mesh/main.c @@ -76,10 +76,9 @@ static void do_debug(const char *str, void *user_data) l_info("%s%s", prefix, str); } -static void mesh_ready_callback(void *user_data, bool success) +static void mesh_ready_callback(bool success, struct l_dbus *dbus, + void *user_data) { - struct l_dbus *dbus = user_data; - l_info("mesh_ready_callback"); if (!success) { l_error("Failed to start mesh"); @@ -102,8 +101,8 @@ static void request_name_callback(struct l_dbus *dbus, bool success, return; } - if (!mesh_init(storage_dir, mesh_conf_fname, io_type, io_opts, - mesh_ready_callback, dbus)) { + if (!mesh_init(dbus, storage_dir, mesh_conf_fname, io_type, io_opts, + mesh_ready_callback, NULL)) { l_error("Failed to initialize mesh"); l_main_quit(); } diff --git a/mesh/mesh-io-api.h b/mesh/mesh-io-api.h index 61f79f224..7a50937da 100644 --- a/mesh/mesh-io-api.h +++ b/mesh/mesh-io-api.h @@ -11,7 +11,8 @@ struct mesh_io_private; typedef bool (*mesh_io_init_t)(struct mesh_io *io, void *opts, - mesh_io_ready_func_t cb, void *user_data); + struct l_dbus *dbus, mesh_io_ready_func_t cb, + void *user_data); typedef bool (*mesh_io_destroy_t)(struct mesh_io *io); typedef bool (*mesh_io_caps_t)(struct mesh_io *io, struct mesh_io_caps *caps); typedef bool (*mesh_io_send_t)(struct mesh_io *io, diff --git a/mesh/mesh-io-generic.c b/mesh/mesh-io-generic.c index 6c0b8f0fd..27cb4cf5f 100644 --- a/mesh/mesh-io-generic.c +++ b/mesh/mesh-io-generic.c @@ -27,6 +27,7 @@ #include "mesh/mesh-io.h" #include "mesh/mesh-io-api.h" #include "mesh/mesh-io-generic.h" +#include "mesh/dbus.h" struct mesh_io_private { struct bt_hci *hci; @@ -40,6 +41,7 @@ struct mesh_io_private { uint16_t interval; bool sending; bool active; + struct l_dbus *dbus; }; struct pvt_rx_reg { @@ -429,7 +431,7 @@ static void read_info(int index, void *user_data) hci_init(io); } -static bool dev_init(struct mesh_io *io, void *opts, +static bool dev_init(struct mesh_io *io, void *opts, struct l_dbus *dbus, mesh_io_ready_func_t cb, void *user_data) { if (!io || io->pvt) diff --git a/mesh/mesh-io-unit.c b/mesh/mesh-io-unit.c index f4b615ac8..a3cba747e 100644 --- a/mesh/mesh-io-unit.c +++ b/mesh/mesh-io-unit.c @@ -209,7 +209,7 @@ static void unit_up(void *user_data) l_timeout_create_ms(1, get_name, pvt, NULL); } -static bool unit_init(struct mesh_io *io, void *opt, +static bool unit_init(struct mesh_io *io, void *opt, struct l_dbus *dbus, mesh_io_ready_func_t cb, void *user_data) { struct mesh_io_private *pvt; diff --git a/mesh/mesh-io.c b/mesh/mesh-io.c index 96891313a..dfd9e43d9 100644 --- a/mesh/mesh-io.c +++ b/mesh/mesh-io.c @@ -46,7 +46,8 @@ static bool match_by_type(const void *a, const void *b) } struct mesh_io *mesh_io_new(enum mesh_io_type type, void *opts, - mesh_io_ready_func_t cb, void *user_data) + struct l_dbus *dbus, mesh_io_ready_func_t cb, + void *user_data) { const struct mesh_io_api *api = NULL; struct mesh_io *io; @@ -69,7 +70,7 @@ struct mesh_io *mesh_io_new(enum mesh_io_type type, void *opts, io->type = type; io->api = api; - if (!api->init(io, opts, cb, user_data)) + if (!api->init(io, opts, dbus, cb, user_data)) goto fail; if (!io_list) diff --git a/mesh/mesh-io.h b/mesh/mesh-io.h index 80ef3fa3e..8a4b2e8ee 100644 --- a/mesh/mesh-io.h +++ b/mesh/mesh-io.h @@ -74,7 +74,8 @@ typedef void (*mesh_io_recv_ext_func_t)(void *user_data, typedef void (*mesh_io_ready_func_t)(void *user_data, bool result); struct mesh_io *mesh_io_new(enum mesh_io_type type, void *opts, - mesh_io_ready_func_t cb, void *user_data); + struct l_dbus *dbus, mesh_io_ready_func_t cb, + void *user_data); void mesh_io_destroy(struct mesh_io *io); bool mesh_io_get_caps(struct mesh_io *io, struct mesh_io_caps *caps); diff --git a/mesh/mesh.c b/mesh/mesh.c index 62d650328..1d3451cf4 100644 --- a/mesh/mesh.c +++ b/mesh/mesh.c @@ -71,6 +71,7 @@ struct join_data{ struct mesh_init_request { mesh_ready_func_t cb; + struct l_dbus *dbus; void *user_data; }; @@ -173,7 +174,7 @@ static void io_ready_callback(void *user_data, bool result) if (result) node_attach_io_all(mesh.io); - req->cb(req->user_data, result); + req->cb(result, req->dbus, req->user_data); l_free(req); } @@ -249,9 +250,9 @@ done: l_settings_free(settings); } -bool mesh_init(const char *config_dir, const char *mesh_conf_fname, - enum mesh_io_type type, void *opts, - mesh_ready_func_t cb, void *user_data) +bool mesh_init(struct l_dbus *dbus, const char *config_dir, + const char *mesh_conf_fname, enum mesh_io_type type, void *opts, + mesh_ready_func_t cb, void *user_data) { struct mesh_io_caps caps; struct mesh_init_request *req; @@ -280,9 +281,10 @@ bool mesh_init(const char *config_dir, const char *mesh_conf_fname, req = l_new(struct mesh_init_request, 1); req->cb = cb; + req->dbus = dbus; req->user_data = user_data; - mesh.io = mesh_io_new(type, opts, io_ready_callback, req); + mesh.io = mesh_io_new(type, opts, dbus, io_ready_callback, req); if (!mesh.io) { l_free(req); return false; diff --git a/mesh/mesh.h b/mesh/mesh.h index 0f77ebc58..6050cfa06 100644 --- a/mesh/mesh.h +++ b/mesh/mesh.h @@ -21,13 +21,14 @@ enum mesh_io_type; -typedef void (*mesh_ready_func_t)(void *user_data, bool success); +typedef void (*mesh_ready_func_t)(bool success, struct l_dbus *dbus, + void *user_data); typedef void (*prov_rx_cb_t)(void *user_data, const uint8_t *data, uint16_t len); -bool mesh_init(const char *config_dir, const char *mesh_conf_fname, - enum mesh_io_type type, void *opts, - mesh_ready_func_t cb, void *user_data); +bool mesh_init(struct l_dbus *dus, const char *config_dir, + const char *mesh_conf_fname, enum mesh_io_type type, void *opts, + mesh_ready_func_t cb, void *user_data); void mesh_cleanup(void); bool mesh_dbus_init(struct l_dbus *dbus);