[pulseaudio-discuss] [PATCH 1/4] bluetooth: Use enum to represent form factors
David Henningsson
david.henningsson at canonical.com
Thu Feb 21 00:07:42 PST 2013
On 02/19/2013 10:33 AM, Mikel Astiz wrote:
> From: Mikel Astiz <mikel.astiz at bmw-carit.de>
>
> Avoid using strings only to represent form factors in the bluetooth-util
> API and instead use a new dedicated enum type: pa_bt_form_factor_t.
Everything looks good on this one IMO.
> ---
> src/modules/bluetooth/bluetooth-util.c | 53 ++++++++++++++++++-------
> src/modules/bluetooth/bluetooth-util.h | 15 ++++++-
> src/modules/bluetooth/module-bluetooth-device.c | 8 ++--
> 3 files changed, 58 insertions(+), 18 deletions(-)
>
> diff --git a/src/modules/bluetooth/bluetooth-util.c b/src/modules/bluetooth/bluetooth-util.c
> index 688fee0..faf1c41 100644
> --- a/src/modules/bluetooth/bluetooth-util.c
> +++ b/src/modules/bluetooth/bluetooth-util.c
> @@ -1798,26 +1798,26 @@ pa_hook* pa_bluetooth_discovery_hook(pa_bluetooth_discovery *y, pa_bluetooth_hoo
> return &y->hooks[hook];
> }
>
> -const char*pa_bluetooth_get_form_factor(uint32_t class) {
> +pa_bt_form_factor_t pa_bluetooth_get_form_factor(uint32_t class) {
> unsigned i;
> - const char *r;
> -
> - static const char * const table[] = {
> - [1] = "headset",
> - [2] = "hands-free",
> - [4] = "microphone",
> - [5] = "speaker",
> - [6] = "headphone",
> - [7] = "portable",
> - [8] = "car",
> - [10] = "hifi"
> + pa_bt_form_factor_t r;
> +
> + static const pa_bt_form_factor_t table[] = {
> + [1] = PA_BT_FORM_FACTOR_HEADSET,
> + [2] = PA_BT_FORM_FACTOR_HANDSFREE,
> + [4] = PA_BT_FORM_FACTOR_MICROPHONE,
> + [5] = PA_BT_FORM_FACTOR_SPEAKER,
> + [6] = PA_BT_FORM_FACTOR_HEADPHONE,
> + [7] = PA_BT_FORM_FACTOR_PORTABLE,
> + [8] = PA_BT_FORM_FACTOR_CAR,
> + [10] = PA_BT_FORM_FACTOR_HIFI
> };
>
> if (((class >> 8) & 31) != 4)
> - return NULL;
> + return PA_BT_FORM_FACTOR_UNKNOWN;
>
> if ((i = (class >> 2) & 63) >= PA_ELEMENTSOF(table))
> - r = NULL;
> + r = PA_BT_FORM_FACTOR_UNKNOWN;
> else
> r = table[i];
>
> @@ -1827,6 +1827,31 @@ const char*pa_bluetooth_get_form_factor(uint32_t class) {
> return r;
> }
>
> +const char *pa_bt_form_factor_to_string(pa_bt_form_factor_t ff) {
> + switch (ff) {
> + case PA_BT_FORM_FACTOR_UNKNOWN:
> + return "unknown";
> + case PA_BT_FORM_FACTOR_HEADSET:
> + return "headset";
> + case PA_BT_FORM_FACTOR_HANDSFREE:
> + return "hands-free";
> + case PA_BT_FORM_FACTOR_MICROPHONE:
> + return "microphone";
> + case PA_BT_FORM_FACTOR_SPEAKER:
> + return "speaker";
> + case PA_BT_FORM_FACTOR_HEADPHONE:
> + return "headphone";
> + case PA_BT_FORM_FACTOR_PORTABLE:
> + return "portable";
> + case PA_BT_FORM_FACTOR_CAR:
> + return "car";
> + case PA_BT_FORM_FACTOR_HIFI:
> + return "hifi";
> + }
> +
> + pa_assert_not_reached();
> +}
> +
> char *pa_bluetooth_cleanup_name(const char *name) {
> char *t, *s, *d;
> bool space = false;
> diff --git a/src/modules/bluetooth/bluetooth-util.h b/src/modules/bluetooth/bluetooth-util.h
> index 6423f88..b59255e 100644
> --- a/src/modules/bluetooth/bluetooth-util.h
> +++ b/src/modules/bluetooth/bluetooth-util.h
> @@ -154,7 +154,20 @@ void pa_bluetooth_transport_set_speaker_gain(pa_bluetooth_transport *t, uint16_t
>
> pa_hook* pa_bluetooth_discovery_hook(pa_bluetooth_discovery *y, pa_bluetooth_hook_t hook);
>
> -const char* pa_bluetooth_get_form_factor(uint32_t class);
> +typedef enum pa_bt_form_factor {
> + PA_BT_FORM_FACTOR_UNKNOWN,
> + PA_BT_FORM_FACTOR_HEADSET,
> + PA_BT_FORM_FACTOR_HANDSFREE,
> + PA_BT_FORM_FACTOR_MICROPHONE,
> + PA_BT_FORM_FACTOR_SPEAKER,
> + PA_BT_FORM_FACTOR_HEADPHONE,
> + PA_BT_FORM_FACTOR_PORTABLE,
> + PA_BT_FORM_FACTOR_CAR,
> + PA_BT_FORM_FACTOR_HIFI,
> +} pa_bt_form_factor_t;
> +
> +pa_bt_form_factor_t pa_bluetooth_get_form_factor(uint32_t class);
> +const char *pa_bt_form_factor_to_string(pa_bt_form_factor_t ff);
>
> char *pa_bluetooth_cleanup_name(const char *name);
>
> diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
> index e04780b..9dc0cb3 100644
> --- a/src/modules/bluetooth/module-bluetooth-device.c
> +++ b/src/modules/bluetooth/module-bluetooth-device.c
> @@ -2147,7 +2147,7 @@ static int add_card(struct userdata *u) {
> bool b;
> pa_card_profile *p;
> enum profile *d;
> - const char *ff;
> + pa_bt_form_factor_t ff;
> char *n;
> const char *default_profile;
> const pa_bluetooth_device *device = u->device;
> @@ -2167,8 +2167,10 @@ static int add_card(struct userdata *u) {
> pa_proplist_sets(data.proplist, PA_PROP_DEVICE_API, "bluez");
> pa_proplist_sets(data.proplist, PA_PROP_DEVICE_CLASS, "sound");
> pa_proplist_sets(data.proplist, PA_PROP_DEVICE_BUS, "bluetooth");
> - if ((ff = pa_bluetooth_get_form_factor(device->class)))
> - pa_proplist_sets(data.proplist, PA_PROP_DEVICE_FORM_FACTOR, ff);
> +
> + if ((ff = pa_bluetooth_get_form_factor(device->class)) != PA_BT_FORM_FACTOR_UNKNOWN)
> + pa_proplist_sets(data.proplist, PA_PROP_DEVICE_FORM_FACTOR, pa_bt_form_factor_to_string(ff));
> +
> pa_proplist_sets(data.proplist, "bluez.path", device->path);
> pa_proplist_setf(data.proplist, "bluez.class", "0x%06x", (unsigned) device->class);
> pa_proplist_sets(data.proplist, "bluez.name", device->name);
>
--
David Henningsson, Canonical Ltd.
https://launchpad.net/~diwic
More information about the pulseaudio-discuss
mailing list