Re: [PATCH BlueZ 1/4] doc/gatt-api: Add options dictionary to ReadValue/WriteValue

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

 



Luiz Augusto von Dentz <luiz.dentz@xxxxxxxxx> writes:

> From: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx>
>
> This adds the possibility to pass an offset to these operations, and
> also in the server case to give the device object.
> ---
>  doc/gatt-api.txt    |  20 ++++--
>  src/gatt-client.c   | 135 +++++++++++++++++++++++++++++----------
>  src/gatt-database.c | 177 +++++++++++++++++++++++++++++++++++++---------------
>  3 files changed, 245 insertions(+), 87 deletions(-)
>
> diff --git a/doc/gatt-api.txt b/doc/gatt-api.txt
> index ad2ab16..683b1b7 100644
> --- a/doc/gatt-api.txt
> +++ b/doc/gatt-api.txt
> @@ -61,23 +61,29 @@ Service		org.bluez
>  Interface	org.bluez.GattCharacteristic1 [Experimental]
>  Object path	[variable prefix]/{hci0,hci1,...}/dev_XX_XX_XX_XX_XX_XX/serviceXX/charYYYY
>
> -Methods		array{byte} ReadValue()
> +Methods		array{byte} ReadValue(dict options)
>
>  			Issues a request to read the value of the
>  			characteristic and returns the value if the
>  			operation was successful.
>
> +			Possible options: "offset": uint16 offset
> +					  "device": Object Device (Server only)
> +

[...]

>
> +static int parse_options(DBusMessage *msg, uint16_t *offset)
> +{
> +	DBusMessageIter args, flags;
> +
> +	if (!dbus_message_iter_init(msg, &args))
> +		return -EINVAL;
> +
> +	if (dbus_message_iter_get_arg_type(&args) != DBUS_TYPE_ARRAY)
> +		return -EINVAL;
> +
> +	dbus_message_iter_recurse(&args, &flags);
> +	if (dbus_message_iter_get_arg_type(&flags) != DBUS_TYPE_DICT_ENTRY)
> +		return -EINVAL;
> +

I would think that from the documentation, "Possible options", that providing
the offset would be optional. I don't think much is gained making this mandatory.

> +	while (dbus_message_iter_get_arg_type(&flags) == DBUS_TYPE_DICT_ENTRY) {
> +		const char *key;
> +		DBusMessageIter value, entry;
> +		int var;
> +
> +		dbus_message_iter_recurse(&flags, &entry);
> +		dbus_message_iter_get_basic(&entry, &key);
> +
> +		dbus_message_iter_next(&entry);
> +		dbus_message_iter_recurse(&entry, &value);
> +
> +		var = dbus_message_iter_get_arg_type(&value);
> +		if (strcasecmp(key, "offset") == 0) {
> +			if (var != DBUS_TYPE_UINT16)
> +				return -EINVAL;
> +			dbus_message_iter_get_basic(&value, offset);
> +		}
> +	}
> +
> +	return 0;
> +}
> +


Cheers,
--
Vinicius
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[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