Randomly SMS sent passes or fails
by Viallard Anthony
Hello,
I've a weird issue. I don't know what's going on...
I try to send SMS with a T-mobile SIM card in Germany. The SIM card
doesn't require PIN code. I can get the GSM network and I don't use GPRS.
Sometimes, I can send SMS, and another time, It fails. More precisely,
when I've got an ofono which can send SMS, I can send all the SMS I
want, it works. But if I restart ofono, either it works or not.
I added OFONO_AT_DEBUG=1 in my env, and tried to find some troubles in
the logs. I've got some errors but I don't think they are criticals and
anyway, they appeared when SMS working too :
-------------------------------
> AT+CPINR\r
< \r\nERROR\r\n
Querying remaining pin retries failed
[...]
Provisioning failed
-------------------------------
I can see some differences in time for "AT+CRSM" commands but, they are
in the same order. And, after many tests, I don't think the problem is here.
And, when the SMS send fails, the modem tells me :
-------------------------------
CMS ERROR: Unknown error\r\n
-------------------------------
Not very useful....
Also, at same time, I tested in Switzerland with SwissCom and I don't
have problem.
1 month ago, it worked well. I don't get it...
I've got a "SIMCOM_SIM5216E" modem. Using the driver g1 or the new
simcom driver I developped, with ofono 1.6 or 1.12, it's the same behavior.
Maybe have you already see this kind of things ? My brain is lost.
Regards,
avd.
--
.-------------------.-----------------------.-------------------.
| Viallard Anthony | Syscom Instruments SA | Embedded System |
| +41 024 455 24 82 | Rue de l'industrie 21 | Software Designer |
| ~~~~~~~~~~~~~~~~~ | 1450 Sainte-Croix | ~~~~~~~~~~~~~~~~~ |
'-------------------^-----------------------^-------------------^
7 years, 8 months
[PATCHv4 0/8] Nokia N9 specific quirks
by Timo Mueller
From: Timo Mueller <timo.mueller(a)bmw-carit.de>
Hi,
this is the same as v3 with the changes suggested by Denis.
v4 changes:
* Retry CLCC request on outgoing callsetup is now a N9 specific quirk
* Third patch has been split up according to HACKING rules
The idea of setting the vendor during runtime was to use the "Model"
string of the ofono_modem (analogous to what the wavecom modem
does). But as the Nokia N9 does not support the device ID profile and
the BT address has an OUI from Texas Instruments, I wasn't able to
determine that the hfpmodem is a Nokia N9. Maybe you have some
ideas on how this can be determined properly?
As currently there's no functionality to detect the vendor of a
hfpmodem on runtime the clcc quirk can be enabled for all vendors by
patching the needs_callheld_clcc_quirk method.
Regards,
Timo
Timo Mueller (8):
hfpmodem: Add modem vendor stub
hfpmodem: Add vendor header to makefile
hfpmodem: Add vendor information to voicecall data
hfp_hf_bluez4: Pass vendor on voicecall creation
hfp_hf_bluez5: Pass vendor on voicecall creation
hfpmodem: Add method to query if CLCC quirks are needed
hfpmodem: Add N9 quirk for outgoing callsetup
hfpmodem: Add N9 quirk for callheld=<2 or 3>
Makefile.am | 3 +-
drivers/hfpmodem/vendor.h | 26 +++++++++++++++
drivers/hfpmodem/voicecall.c | 77 +++++++++++++++++++++++++++++++++++++++++---
plugins/hfp_hf_bluez4.c | 4 ++-
plugins/hfp_hf_bluez5.c | 5 ++-
5 files changed, 107 insertions(+), 8 deletions(-)
create mode 100644 drivers/hfpmodem/vendor.h
--
1.7.11.7
7 years, 8 months
Re: [PATCH v2 09/12] emulator: Add HFP 1.6 AG card driver
by Paulo Borges
Hi Denis,
On Fri, Apr 26, 2013 at 9:39 AM, Denis Kenzior <denkenz(a)gmail.com> wrote:
> Hi Paulo,
>
>
> On 04/26/2013 12:53 PM, Paulo Borges wrote:
>
>> Hi Denis,
>>
>> On Thu, Apr 25, 2013 at 2:58 PM, Denis Kenzior <denkenz(a)gmail.com
>> <mailto:denkenz@gmail.com>> wrote:
>>
>> Hi Paulo,
>>
>>
>> On 04/25/2013 02:09 PM, Paulo Borges wrote:
>>
>> ---
>> src/emulator.c | 31 ++++++++++++++++++++++++++++++**__-
>>
>> 1 file changed, 30 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/emulator.c b/src/emulator.c
>> index 8ac79d5..5027b02 100644
>> --- a/src/emulator.c
>> +++ b/src/emulator.c
>> @@ -45,6 +45,8 @@
>>
>> #define RING_TIMEOUT 3
>>
>> +#define HFP_16_AG_DRIVER "hfp16-ag-driver"
>> +
>> struct ofono_emulator {
>> struct ofono_atom *atom;
>> enum ofono_emulator_type type;
>> @@ -1007,6 +1009,32 @@ struct ofono_emulator
>> *ofono_emulator_create(struct ofono_modem *modem,
>> return em;
>> }
>>
>> +static int hfp16_card_probe(struct ofono_handsfree_card *card,
>> + unsigned int vendor,
>> void *data)
>> +{
>> + DBG("HFP 1.6 AG card driver probe");
>> +
>> + return 0;
>> +}
>> +
>> +static void hfp16_card_remove(struct ofono_handsfree_card *card)
>> +{
>> + DBG("HFP 1.6 AG card driver remove");
>> +}
>> +
>> +static void hfp16_card_connect(struct ofono_handsfree_card *card,
>> + ofono_handsfree_card_connect__**_cb_t cb,
>>
>> void *data)
>> +{
>> + DBG("HFP 1.6 AG card driver connect");
>> +}
>> +
>> +static struct ofono_handsfree_card_driver hfp16_ag_driver = {
>> + .name = HFP_16_AG_DRIVER,
>> + .probe = hfp16_card_probe,
>> + .remove = hfp16_card_remove,
>> + .connect = hfp16_card_connect,
>> +};
>> +
>>
>>
>> So why do we need this exactly? There is already a default
>> implementation inside handsfree_audio_card if the driver is NULL.
>> How is this going to be different from the default implementation?
>>
>>
>> static int card_set_local_remote(struct ofono_handsfree_card
>> *card, int fd)
>> {
>> struct sockaddr_rc saddr;
>> @@ -1338,9 +1366,10 @@ void
>> __ofono_emulator_set___**indicator_forced(struct ofono_emulator
>> *em,
>>
>>
>> int __ofono_emulator_init(void)
>> {
>> - return 0;
>> + return
>> ofono_handsfree_card_driver___**register(&hfp16_ag_driver);
>> }
>>
>> void __ofono_emulator_cleanup(void)
>> {
>> + ofono_handsfree_card_driver___**
>> unregister(&hfp16_ag_driver);
>>
>> }
>>
>>
>> Regards,
>> -Denis
>>
>>
>> When both roles support codec negotiation feature AG must first send an
>> unsolicited +BCS and only call the default implementation after HF
>> respond with AT+BCS [1].
>>
>> [1] HFP 1.6 spec page 31: 4.11.3 "Codec Connection Setup".
>>
>>
> This is where the spec is a bit fuzzy. There is some room for
> interpretation on the timing of the codec negotiation exchange.
>
> Can we do the codec negotiation before hand, not as part of the .connect
> implementation? e.g. can we negotiate the codec right after SLC
> establishment and from then on simply establish the SCO link, or must we
> always perform codec negotiation right before the SCO link establishment?
>
> Regards,
> -Denis
>
Yes, we can negotiate the codec after an incoming AT+BAC command from HF.
This way, we can ensure that the chosen codec is valid and we don't need to
use a card driver.
I'll change this and send a new version.
--
Cheers,
Paulo.
7 years, 9 months
[PATCH 1/3] include: Add ofono_handsfree_audio_has_defer_setup()
by Vinicius Costa Gomes
---
include/handsfree-audio.h | 2 ++
1 file changed, 2 insertions(+)
diff --git a/include/handsfree-audio.h b/include/handsfree-audio.h
index 53e8ab1..846a032 100644
--- a/include/handsfree-audio.h
+++ b/include/handsfree-audio.h
@@ -53,6 +53,8 @@ ofono_bool_t ofono_handsfree_card_set_codec(struct ofono_handsfree_card *card,
ofono_bool_t ofono_handsfree_audio_has_wideband(void);
+ofono_bool_t ofono_handsfree_audio_has_defer_setup(void);
+
void ofono_handsfree_card_set_data(struct ofono_handsfree_card *card,
void *data);
void *ofono_handsfree_card_get_data(struct ofono_handsfree_card *card);
--
1.8.2.1
7 years, 9 months
[PATCH] hfp_hf_bluez5: Fix re-registering a modem for a device
by Vinicius Costa Gomes
Even for outgoing pairing requests we may receive the UUIDs property
changed after the device is paired and try to register it twice.
The easiest way to reproduce this is when Extended Inquiry Response is
supported.
When the device is paired, we receive the "Paired" PropertyChanged,
inside modem_register_from_proxy(), g_dbus_proxy_get_property() gets
the UUIDs extracted from the EIR data. Later, when the service
discovery is finished, the UUIDs property is re-sent and both may
contain the HFP AG UUID.
Valgrind log:
ofonod[8157]: src/modem.c:ofono_modem_create() name: hfp/org/bluez/hci0/dev_40_98_4E_32_D7_39, type: hfp
ofonod[8157]: src/modem.c:set_modem_property() modem 0x66a2db0 property Remote
ofonod[8157]: src/modem.c:set_modem_property() modem 0x66a2db0 property DevicePath
ofonod[8157]: src/modem.c:ofono_modem_register() 0x66a2db0
ofonod[8157]: plugins/hfp_hf_bluez5.c:hfp_probe() modem: 0x66a2db0
ofonod[8157]: Modem register failed on path /hfp/org/bluez/hci0/dev_40_98_4E_32_D7_39
ofonod[8157]: plugins/hfp_hf_bluez5.c:hfp_remove() modem: 0x66a2db0
ofonod[8157]: plugins/hfp_hf_bluez5.c:profile_new_connection() Profile handler NewConnection
ofonod[8157]: src/modem.c:get_modem_property() modem 0x66a2db0 property DevicePath
==8157== Invalid write of size 4
==8157== at 0x4712A5: hfp_slc_info_init (slc.c:59)
==8157== by 0x486B00: profile_new_connection (hfp_hf_bluez5.c:168)
==8157== by 0x412C70: process_message.isra.4 (object.c:258)
==8157== by 0x5381984: _dbus_object_tree_dispatch_and_unlock (in /usr/lib64/libdbus-1.so.3.7.2)
==8157== by 0x5373C4F: dbus_connection_dispatch (in /usr/lib64/libdbus-1.so.3.7.2)
==8157== by 0x4107B7: message_dispatch (mainloop.c:76)
==8157== by 0x5089BCA: g_timeout_dispatch (in /usr/lib64/libglib-2.0.so.0.3400.2)
==8157== by 0x5089044: g_main_context_dispatch (in /usr/lib64/libglib-2.0.so.0.3400.2)
==8157== by 0x5089377: g_main_context_iterate.isra.24 (in /usr/lib64/libglib-2.0.so.0.3400.2)
==8157== by 0x5089771: g_main_loop_run (in /usr/lib64/libglib-2.0.so.0.3400.2)
==8157== by 0x41042B: main (main.c:249)
==8157== Address 0x8 is not stack'd, malloc'd or (recently) free'd
==8157==
---
plugins/hfp_hf_bluez5.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/plugins/hfp_hf_bluez5.c b/plugins/hfp_hf_bluez5.c
index 2b9275b..86d8c72 100644
--- a/plugins/hfp_hf_bluez5.c
+++ b/plugins/hfp_hf_bluez5.c
@@ -713,6 +713,12 @@ static void modem_register_from_proxy(GDBusProxy *proxy, const char *path)
if (g_dbus_proxy_get_property(proxy, "Address", &iter) == FALSE)
return;
+ modem = ofono_modem_find(device_path_compare, (void *) path);
+ if (modem) {
+ DBG("Modem for device %s already registered", path);
+ return;
+ }
+
dbus_message_iter_get_basic(&iter, &remote);
modem = modem_register(path, remote, alias);
--
1.8.2.1
7 years, 9 months
[PATCH v2 00/12] Add HandsfreeAudioCard to emulator
by Paulo Borges
This patch series starts to implement HandsfreeAudioCard logic to Audio
Gateway role from HFP version 1.6 profile.
Changelog v2:
* Extract fd from emulator's GAtServer
* Add card driver for HFP 1.6 AG
* Send HFP version to card creation
Paulo Borges (12):
include: Add ofono_emulator_create_card()
emulator: Implement ofono_emulator_create_card()
hfp_ag_bluez5: Create card when connect
emulator: Register card when establish SLC
emulator: Set local and remote address of card
include: Add emulator init and cleanup functions
emulator: Implement init and cleanup functions
main: Call emulator init and cleanup functions
emulator: Add HFP 1.6 AG card driver
emulator: Set card driver
hfp_ag_bluez5: Send HFP version to card creation
hfp_ag_bluez5: Register HFP AG version 1.6
include/emulator.h | 2 +
plugins/hfp_ag_bluez5.c | 55 ++++++++++++++++++++++-
src/emulator.c | 111 +++++++++++++++++++++++++++++++++++++++++++++++
src/main.c | 4 ++
src/ofono.h | 3 ++
5 files changed, 174 insertions(+), 1 deletion(-)
--
1.7.9.5
7 years, 9 months
[PATCH v2 1/3] bluez5: Unify bt_register_profile_* into a single function
by Vinicius Costa Gomes
It was a cause of confusion for little gain to have separate
functions for registering profiles with extra information, for
example "role" and "features". We remove those helper functions
in favor of a single one with more parameters, "role" and
"feature" when NULL, will be ignored.
---
dundee/bluez5.c | 4 ++--
plugins/bluez5.c | 17 +++++++----------
plugins/bluez5.h | 7 ++-----
plugins/dun_gw_bluez5.c | 2 +-
plugins/hfp_ag_bluez5.c | 2 +-
plugins/hfp_hf_bluez5.c | 2 +-
6 files changed, 14 insertions(+), 20 deletions(-)
diff --git a/dundee/bluez5.c b/dundee/bluez5.c
index 3f9c646..79b5ade 100644
--- a/dundee/bluez5.c
+++ b/dundee/bluez5.c
@@ -379,8 +379,8 @@ static void connect_handler(DBusConnection *conn, void *user_data)
{
DBG("");
- bt_register_profile_with_role(conn, DUN_GW_UUID, DUN_VERSION_1_2,
- "dun_dt", DUN_DT_PROFILE_PATH, "client");
+ bt_register_profile(conn, DUN_GW_UUID, DUN_VERSION_1_2, "dun_dt",
+ DUN_DT_PROFILE_PATH, "client", 0);
}
int __dundee_bluetooth_init(void)
diff --git a/plugins/bluez5.c b/plugins/bluez5.c
index 0f997da..979076e 100644
--- a/plugins/bluez5.c
+++ b/plugins/bluez5.c
@@ -90,9 +90,10 @@ done:
dbus_message_unref(reply);
}
-int bt_register_profile_with_role(DBusConnection *conn, const char *uuid,
+int bt_register_profile(DBusConnection *conn, const char *uuid,
uint16_t version, const char *name,
- const char *object, const char *role)
+ const char *object, const char *role,
+ uint16_t features)
{
DBusMessageIter iter, dict;
DBusPendingCall *c;
@@ -114,6 +115,10 @@ int bt_register_profile_with_role(DBusConnection *conn, const char *uuid,
if (role)
ofono_dbus_dict_append(&dict, "Role", DBUS_TYPE_STRING, &role);
+ if (features)
+ ofono_dbus_dict_append(&dict, "Features", DBUS_TYPE_UINT16,
+ &features);
+
dbus_message_iter_close_container(&iter, &dict);
if (!dbus_connection_send_with_reply(conn, msg, &c, -1)) {
@@ -130,14 +135,6 @@ int bt_register_profile_with_role(DBusConnection *conn, const char *uuid,
return 0;
}
-int bt_register_profile(DBusConnection *conn, const char *uuid,
- uint16_t version, const char *name,
- const char *object)
-{
- return bt_register_profile_with_role(conn, uuid, version, name, object,
- NULL);
-}
-
void bt_unregister_profile(DBusConnection *conn, const char *object)
{
DBusMessageIter iter;
diff --git a/plugins/bluez5.h b/plugins/bluez5.h
index 5b8c1f5..db24b1a 100644
--- a/plugins/bluez5.h
+++ b/plugins/bluez5.h
@@ -29,13 +29,10 @@
#define HFP_HS_UUID "0000111e-0000-1000-8000-00805f9b34fb"
#define HFP_AG_UUID "0000111f-0000-1000-8000-00805f9b34fb"
-int bt_register_profile_with_role(DBusConnection *conn, const char *uuid,
- uint16_t version, const char *name,
- const char *object, const char *role);
-
int bt_register_profile(DBusConnection *conn, const char *uuid,
uint16_t version, const char *name,
- const char *object);
+ const char *object, const char *role,
+ uint16_t features);
void bt_unregister_profile(DBusConnection *conn, const char *object);
diff --git a/plugins/dun_gw_bluez5.c b/plugins/dun_gw_bluez5.c
index 9844092..faea12b 100644
--- a/plugins/dun_gw_bluez5.c
+++ b/plugins/dun_gw_bluez5.c
@@ -172,7 +172,7 @@ static void gprs_watch(struct ofono_atom *atom,
if (modems->next == NULL)
bt_register_profile(conn, DUN_GW_UUID, DUN_GW_VERSION_1_0,
- "dun_gw", DUN_GW_EXT_PROFILE_PATH);
+ "dun_gw", DUN_GW_EXT_PROFILE_PATH, NULL, 0);
}
static void modem_watch(struct ofono_modem *modem, gboolean added, void *user)
diff --git a/plugins/hfp_ag_bluez5.c b/plugins/hfp_ag_bluez5.c
index 59e84d2..245de21 100644
--- a/plugins/hfp_ag_bluez5.c
+++ b/plugins/hfp_ag_bluez5.c
@@ -233,7 +233,7 @@ static void sim_state_watch(enum ofono_sim_state new_state, void *data)
return;
bt_register_profile(conn, HFP_AG_UUID, HFP_VERSION_1_5, "hfp_ag",
- HFP_AG_EXT_PROFILE_PATH);
+ HFP_AG_EXT_PROFILE_PATH, NULL, 0);
}
static gboolean sim_watch_remove(gpointer key, gpointer value,
diff --git a/plugins/hfp_hf_bluez5.c b/plugins/hfp_hf_bluez5.c
index 2b9275b..826796f 100644
--- a/plugins/hfp_hf_bluez5.c
+++ b/plugins/hfp_hf_bluez5.c
@@ -639,7 +639,7 @@ static void connect_handler(DBusConnection *conn, void *user_data)
DBG("Registering External Profile handler ...");
bt_register_profile(conn, HFP_HS_UUID, HFP_VERSION_1_6, "hfp_hf",
- HFP_EXT_PROFILE_PATH);
+ HFP_EXT_PROFILE_PATH, NULL, 0);
}
static gboolean has_hfp_ag_uuid(DBusMessageIter *array)
--
1.8.2.1
7 years, 9 months
[PATCH 0/6] Add HandsfreeAudioCard to emulator
by Paulo Borges
This patch series starts to implement HandsfreeAudioCard logic to Audio
Gateway role from HFP version 1.6 profile:
* Patches 01 to 03 implement a function to add a new
HandsfreeAudioCard to an emulator and call it when a new connection
arrives.
* Patch 04 registers the card when the Service Level Connection is
established.
* Patches 05 and 06 stores the remote and local address in the card.
What is expected for upcoming series?
* Card driver for Audio Gateway version 1.6
* Handle specific AT commands from HFP version 1.6 (AT+BAC, ...)
Paulo Borges (6):
include: Add ofono_emulator_create_card()
emulator: Implement ofono_emulator_create_card()
hfp_ag_bluez5: Create card when connect
emulator: Register card when establish SLC
emulator: Set local and remote address of card
hfp_ag_bluez5: Send fd to card creation
include/emulator.h | 2 ++
plugins/hfp_ag_bluez5.c | 8 ++++++
src/emulator.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 73 insertions(+)
--
1.7.9.5
7 years, 9 months
[PATCH v0 1/7] doc: Add ECNR to Handsfree
by Claudio Takahasi
This patch adds echo canceling and noise reduction property to Handsfree
interface, allowing the handsfree unit to enable or disable this feature
in the audio gateway.
According to Bluetooth HFP 1.6 spec: By default, if the AG supports its
own embedded echo canceling and/or noise reduction functions, it shall
have them activated until the AT+NREC command is received.
---
doc/handsfree-api.txt | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/doc/handsfree-api.txt b/doc/handsfree-api.txt
index 0b5d421..f877db0 100644
--- a/doc/handsfree-api.txt
+++ b/doc/handsfree-api.txt
@@ -56,6 +56,13 @@ Properties array{string} Features [readonly]
to activate or deactivate the function from the HF, or
the AG could autonomously initiate it.
+ boolean ECNR [readwrite]
+
+ Boolean representing whether echo canceling and noise
+ reduction is enabled in the AG. This property may be
+ written to activate or deactivate this feature from
+ the HF unit.
+
byte BatteryChargeLevel [readonly]
The current charge level of the battery. The value
--
1.7.11.7
7 years, 9 months
[PATCH 1/3] bluez5: Add bt_register_profile_full()
by Vinicius Costa Gomes
This function makes it easy to set up optional information in the profile
service record.
---
plugins/bluez5.c | 40 +++++++++++++++++++++++++++++++++-------
plugins/bluez5.h | 10 ++++++++++
2 files changed, 43 insertions(+), 7 deletions(-)
diff --git a/plugins/bluez5.c b/plugins/bluez5.c
index 0f997da..48d8bf2 100644
--- a/plugins/bluez5.c
+++ b/plugins/bluez5.c
@@ -90,9 +90,10 @@ done:
dbus_message_unref(reply);
}
-int bt_register_profile_with_role(DBusConnection *conn, const char *uuid,
- uint16_t version, const char *name,
- const char *object, const char *role)
+int bt_register_profile_full(DBusConnection *conn,
+ const char *uuid, uint16_t version,
+ const char *name, const char *object,
+ struct bt_profile_info *optional)
{
DBusMessageIter iter, dict;
DBusPendingCall *c;
@@ -111,9 +112,19 @@ int bt_register_profile_with_role(DBusConnection *conn, const char *uuid,
ofono_dbus_dict_append(&dict, "Name", DBUS_TYPE_STRING, &name);
ofono_dbus_dict_append(&dict, "Version", DBUS_TYPE_UINT16, &version);
- if (role)
- ofono_dbus_dict_append(&dict, "Role", DBUS_TYPE_STRING, &role);
+ if (optional == NULL)
+ goto done;
+
+ if (optional->role)
+ ofono_dbus_dict_append(&dict, "Role", DBUS_TYPE_STRING,
+ &optional->role);
+
+ if (optional->features)
+ ofono_dbus_dict_append(&dict, "Features", DBUS_TYPE_UINT16,
+ &optional->features);
+
+done:
dbus_message_iter_close_container(&iter, &dict);
if (!dbus_connection_send_with_reply(conn, msg, &c, -1)) {
@@ -130,12 +141,27 @@ int bt_register_profile_with_role(DBusConnection *conn, const char *uuid,
return 0;
}
+int bt_register_profile_with_role(DBusConnection *conn, const char *uuid,
+ uint16_t version, const char *name,
+ const char *object, const char *role)
+{
+ struct bt_profile_info optional;
+
+ memset(&optional, 0, sizeof(optional));
+
+ optional.role = role;
+
+ return bt_register_profile_full(conn, uuid, version, name,
+ object, &optional);
+}
+
+
int bt_register_profile(DBusConnection *conn, const char *uuid,
uint16_t version, const char *name,
const char *object)
{
- return bt_register_profile_with_role(conn, uuid, version, name, object,
- NULL);
+ return bt_register_profile_full(conn, uuid, version, name,
+ object, NULL);
}
void bt_unregister_profile(DBusConnection *conn, const char *object)
diff --git a/plugins/bluez5.h b/plugins/bluez5.h
index 5b8c1f5..8118f1f 100644
--- a/plugins/bluez5.h
+++ b/plugins/bluez5.h
@@ -29,10 +29,20 @@
#define HFP_HS_UUID "0000111e-0000-1000-8000-00805f9b34fb"
#define HFP_AG_UUID "0000111f-0000-1000-8000-00805f9b34fb"
+struct bt_profile_info {
+ const char *role;
+ uint16_t features;
+};
+
int bt_register_profile_with_role(DBusConnection *conn, const char *uuid,
uint16_t version, const char *name,
const char *object, const char *role);
+int bt_register_profile_full(DBusConnection *conn,
+ const char *uuid, uint16_t version,
+ const char *name, const char *object,
+ struct bt_profile_info *optional);
+
int bt_register_profile(DBusConnection *conn, const char *uuid,
uint16_t version, const char *name,
const char *object);
--
1.8.2.1
7 years, 9 months