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

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

 



Hi Brian,

lets have a commit message here, but that is the last time I am mentioning this.

> ---
> mesh/dbus.c | 151 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> mesh/dbus.h |  34 ++++++++++++++
> 2 files changed, 185 insertions(+)
> create mode 100644 mesh/dbus.c
> create mode 100644 mesh/dbus.h

I really wonder if it makes sense to add all these piecemeal by piecemeal, but fine.

> 
> diff --git a/mesh/dbus.c b/mesh/dbus.c
> new file mode 100644
> index 000000000..ea6dadf3c
> --- /dev/null
> +++ b/mesh/dbus.c
> @@ -0,0 +1,151 @@
> +/*
> + *
> + *  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"
> +
> +static struct l_dbus *dbus;
> +
> +struct error_entry {
> +	const char *dbus_err;
> +	const char *default_desc;
> +};
> +
> +/*
> + * Important: The entries in this table follow the order of
> + * enumerated values in mesh_error (file error.h)
> + */
> +static struct error_entry const error_table[] =
> +{

static const struct ..

and

error_table[] = {

> +	{ 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

This else is pointless.

> +		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;
> +}
> +
> +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..af6f01525
> --- /dev/null
> +++ b/mesh/dbus.h
> @@ -0,0 +1,34 @@
> +/*
> + *
> + *  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);
> +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);

I am still curious if something in ELL is missing or why do we need these helpers.

> +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