Re: [PATCH BlueZ v4 03/30] mesh: Utilities for DBus support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Brian,

> ---
> mesh/dbus.c | 181 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> mesh/dbus.h |  40 ++++++++++++++
> 2 files changed, 221 insertions(+)
> create mode 100644 mesh/dbus.c
> create mode 100644 mesh/dbus.h
> 
> diff --git a/mesh/dbus.c b/mesh/dbus.c
> new file mode 100644
> index 000000000..a8b398f9e
> --- /dev/null
> +++ b/mesh/dbus.c
> @@ -0,0 +1,181 @@
> +/*
> + *
> + *  BlueZ - Bluetooth protocol stack for Linux
> + *
> + *  Copyright (C) 2018  Intel Corporation. All rights reserved.
> + *
> + *
> + *  This library 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 library 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.
> + *
> + *
> + */
> +
> +#ifdef HAVE_CONFIG_H
> +#include <config.h>
> +#endif
> +
> +#include <time.h>
> +#include <ell/ell.h>
> +
> +#include "lib/bluetooth.h"
> +#include "lib/mgmt.h"
> +
> +#include "src/shared/mgmt.h"
> +
> +#include "mesh/mesh-defs.h"
> +#include "mesh/mesh-io.h"
> +#include "mesh/node.h"
> +#include "mesh/net.h"
> +#include "mesh/storage.h"
> +#include "mesh/cfgmod.h"
> +#include "mesh/model.h"
> +#include "mesh/mesh.h"
> +#include "mesh/error.h"
> +#include "mesh/dbus.h”

please stop these massive includes.

> +
> +struct l_dbus *dbus;

Why is this not static?

> +
> +struct error_entry {
> +	const char *dbus_err;
> +	const char *default_desc;
> +};
> +
> +/*
> + * Important: The entries in this table are ordered to enum
> + * values in mesh_error_t (error.h)
> + */
> +static struct error_entry error_table[] =

Everything that can be const should be const.

> +{
> +	{ NULL, NULL },
> +	{ ERROR_INTERFACE ".Failed", "Operation failed" },
> +	{ ERROR_INTERFACE ".NotAuthorized", "Permission denied"},
> +	{ ERROR_INTERFACE ".NotFound", "Object not found"},
> +	{ ERROR_INTERFACE ".InvalidArgs", "Invalid arguments"},
> +	{ ERROR_INTERFACE ".InProgress", "Already in progress"},
> +	{ ERROR_INTERFACE ".AlreadyExists", "Already exists"},
> +	{ ERROR_INTERFACE ".DoesNotExist", "Does not exist"},
> +	{ ERROR_INTERFACE ".Canceled", "Operation canceled"}
> +};
> +
> +struct l_dbus_message *dbus_error(struct l_dbus_message *msg, int err,
> +							const char *description)
> +{
> +	int array_len = L_ARRAY_SIZE(error_table);
> +
> +	/* Default to ".Failed" */
> +	if (!err || err >= array_len)
> +		err = MESH_ERROR_FAILED;
> +
> +	if (description)
> +		return l_dbus_message_new_error(msg,
> +				error_table[err].dbus_err,
> +				"%s", description);
> +	else
> +		return l_dbus_message_new_error(msg,
> +				error_table[err].dbus_err,
> +				"%s", error_table[err].default_desc);
> +}
> +
> +struct l_dbus *dbus_get_bus(void)
> +{
> +	return dbus;
> +}
> +
> +uint32_t dbus_get_byte_array(struct l_dbus_message_iter *array, uint8_t *buf,
> +							uint32_t max_len)
> +{
> +	uint32_t i;
> +
> +	for (i = 0; i < max_len; i++) {
> +		if (!l_dbus_message_iter_next_entry(array, buf + i))
> +			break;
> +	}
> +
> +	return i;
> +}
> +
> +uint32_t dbus_disconnect_watch_add(struct l_dbus *dbus, const char *name,
> +					l_dbus_watch_func_t callback,
> +					void *user_data)
> +{
> +	return l_dbus_add_signal_watch(dbus, "org.freedesktop.DBus",
> +				"/org/freedesktop/DBus",
> +				L_DBUS_INTERFACE_DBUS, "NameOwnerChanged",
> +				L_DBUS_MATCH_ARGUMENT(0), name,
> +				L_DBUS_MATCH_NONE,
> +				callback, user_data);
> +}

Don’t we have proper helpers for this in ELL. And if not, why are they not added?

> +
> +bool dbus_disconnect_watch_remove(struct l_dbus *dbus, uint32_t id)
> +{
> +	return l_dbus_remove_signal_watch(dbus, id);
> +}
> +
> +bool dbus_init(struct l_dbus *bus)
> +{
> +	/* Network interface */
> +	if (!mesh_dbus_init(bus))
> +		return false;
> +
> +	/* Node interface */
> +	if (!node_dbus_init(bus))
> +		return false;
> +
> +	dbus = bus;
> +
> +	return true;
> +}
> +
> +bool dbus_match_interface(struct l_dbus_message_iter *interfaces,
> +							const char *match)
> +{
> +	const char *interface;
> +	struct l_dbus_message_iter properties;
> +
> +	while (l_dbus_message_iter_next_entry(interfaces, &interface,
> +								&properties)) {
> +		if (!strcmp(match, interface))
> +			return true;
> +	}
> +
> +	return false;
> +}
> +
> +bool dbus_append_byte_array(struct l_dbus_message_builder *builder,
> +						const uint8_t *data, int len)
> +{
> +	int i;
> +
> +	if (!l_dbus_message_builder_enter_array(builder, "y"))
> +		return false;
> +
> +	for (i = 0; i < len; i++)
> +		if (!l_dbus_message_builder_append_basic(builder, 'y',
> +				data + i))
> +			return false;
> +
> +	if (!l_dbus_message_builder_leave_array(builder))
> +		return false;
> +
> +	return true;
> +}
> +
> +void dbus_append_dict_entry_basic(struct l_dbus_message_builder *builder,
> +					const char *key, const char *signature,
> +					const void *data)
> +{
> +	l_dbus_message_builder_enter_dict(builder, "sv");
> +	l_dbus_message_builder_append_basic(builder, 's', key);
> +	l_dbus_message_builder_enter_variant(builder, signature);
> +	l_dbus_message_builder_append_basic(builder, signature[0], data);
> +	l_dbus_message_builder_leave_variant(builder);
> +	l_dbus_message_builder_leave_dict(builder);
> +}
> diff --git a/mesh/dbus.h b/mesh/dbus.h
> new file mode 100644
> index 000000000..90cbe9e5c
> --- /dev/null
> +++ b/mesh/dbus.h
> @@ -0,0 +1,40 @@
> +/*
> + *
> + *  BlueZ - Bluetooth protocol stack for Linux
> + *
> + *  Copyright (C) 2018  Intel Corporation. All rights reserved.
> + *
> + *
> + *  This library 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 library 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.
> + *
> + *
> + */
> +
> +#define BLUEZ_MESH_PATH "/org/bluez/mesh"
> +#define BLUEZ_MESH_SERVICE "org.bluez.mesh"
> +
> +bool dbus_init(struct l_dbus *dbus);
> +struct l_dbus *dbus_get_bus(void);
> +uint32_t dbus_disconnect_watch_add(struct l_dbus *dbus, const char *name,
> +					l_dbus_watch_func_t callback,
> +					void *user_data);
> +bool dbus_disconnect_watch_remove(struct l_dbus *dbus, uint32_t id);
> +uint32_t dbus_get_byte_array(struct l_dbus_message_iter *array, uint8_t *buf,
> +							uint32_t max_len);
> +bool dbus_append_byte_array(struct l_dbus_message_builder *builder,
> +						const uint8_t *data, int len);
> +void dbus_append_dict_entry_basic(struct l_dbus_message_builder *builder,
> +					const char *key, const char *signature,
> +					const void *data);
> +bool dbus_match_interface(struct l_dbus_message_iter *interfaces,
> +							const char *match);
> +struct l_dbus_message *dbus_error(struct l_dbus_message *msg, int err,
> +						const char *description);

Regards

Marcel




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux