src/emulator.c | 53 ++++++++++++++++++++++++++++++++++++++++++--------
src/hfp.h | 1 +
2 files changed, 46 insertions(+), 8 deletions(-)
diff --git a/src/emulator.c b/src/emulator.c
index b3afb3da..78eff8de 100644
--- a/src/emulator.c
+++ b/src/emulator.c
@@ -45,6 +45,10 @@
#define MSBC_OFFSET 1
#define CODECS_COUNT (MSBC_OFFSET + 1)
+//hfp assigned number
+int hf_assnum[128];
+int hf_asskind = 0;
+
struct hfp_codec_info {
unsigned char type;
ofono_bool_t supported;
@@ -853,11 +857,20 @@ static void bind_cb(GAtServer *server, GAtServerRequestType type,
GAtResult *result, gpointer user_data)
{
struct ofono_emulator *em = user_data;
- char buf[128];
+
switch (type) {
case G_AT_SERVER_REQUEST_TYPE_QUERY:
- g_at_server_send_info(em->server, "+BIND: 1,1", TRUE);
+
+ for(int i = 0; i < hf_asskind; i++)
+ {
+ char buf[128];
+ char str1[] = "+BIND:";
+ char str2[] = ",1";
+ sprintf(buf, "%s%i%s", str1, hf_assnum[i], str2);
+ g_at_server_send_info(em->server, buf, TRUE);
+ }
+
g_at_server_send_final(server, G_AT_SERVER_RESULT_OK);
__ofono_emulator_slc_condition(em,
@@ -865,8 +878,16 @@ static void bind_cb(GAtServer *server, GAtServerRequestType type,
break;
case G_AT_SERVER_REQUEST_TYPE_SUPPORT:
- sprintf(buf, "+BIND: (1)");
- g_at_server_send_info(em->server, buf, TRUE);
+
+ for(int i = 0; i < hf_asskind; i++)
+ {
+ char buf[128];
+ char str1[] = "+BIND:(";
+ char str2[] = ")";
+ sprintf(buf, "%s%i%s", str1, hf_assnum[i], str2);
+ g_at_server_send_info(em->server, buf, TRUE);
+ }
+
g_at_server_send_final(server, G_AT_SERVER_RESULT_OK);
break;
@@ -898,9 +919,17 @@ static void bind_cb(GAtServer *server, GAtServerRequestType type,
g_at_result_iter_next(&iter, "");
while (g_at_result_iter_next_number(&iter, &hf_indicator))
+ {
ofono_info("HF supports indicator: 0x%04x",
hf_indicator);
+ hf_assnum[hf_asskind] = hf_indicator;
+ hf_asskind ++;
+ ofono_info("hf_assnum: %d", hf_assnum[hf_asskind]);
+
+ }
+
+ ofono_info("hf_asskind: %d",hf_asskind);
g_at_server_send_final(server, G_AT_SERVER_RESULT_OK);
break;
@@ -931,7 +960,7 @@ static void biev_cb(GAtServer *server, GAtServerRequestType type,
if (g_at_result_iter_next_number(&iter, &hf_indicator) == FALSE)
goto fail;
- if (hf_indicator != HFP_HF_INDICATOR_ENHANCED_SAFETY)
+ if (hf_indicator != HFP_HF_INDICATOR_ENHANCED_SAFETY && hf_indicator !=
HFP_HF_INDICATOR_BATTERY_LEVEL)
goto fail;
if (em->ddr_active == FALSE)
@@ -940,10 +969,18 @@ static void biev_cb(GAtServer *server, GAtServerRequestType type,
if (g_at_result_iter_next_number(&iter, &val) == FALSE)
goto fail;
- if (val < 0 || val > 1)
+ if (val < 0 || val > 100)
+ {
goto fail;
-
- ofono_info("Enhanced Safety indicator: %d", val);
+ }
+ else if(val > 1)
+ {
+ ofono_info("Battery Level indicator: %d", val);
+ }
+ else
+ {
+ ofono_info("Enhanced Safety indicator: %d", val);
+ }
g_at_server_send_final(server, G_AT_SERVER_RESULT_OK);
break;
diff --git a/src/hfp.h b/src/hfp.h
index de4c950f..41a7aef6 100644
--- a/src/hfp.h
+++ b/src/hfp.h
@@ -91,4 +91,5 @@ enum hfp_version {
enum hfp_hf_indicator {
HFP_HF_INDICATOR_ENHANCED_SAFETY = 0x0001,
+ HFP_HF_INDICATOR_BATTERY_LEVEL = 0x0002,
};
--
2.25.1