Skip to content

Commit d6dc7fb

Browse files
lylezhu2012kartben
authored andcommitted
Bluetooth: Classic: Shell: Add command ongoing_calls
Add shell command `ongoing_calls` to set the ongoing calls. Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
1 parent 488d577 commit d6dc7fb

File tree

1 file changed

+53
-0
lines changed
  • subsys/bluetooth/host/classic/shell

1 file changed

+53
-0
lines changed

subsys/bluetooth/host/classic/shell/hfp.c

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -984,6 +984,10 @@ struct bt_hfp_ag *hfp_ag;
984984
struct bt_conn *hfp_ag_sco_conn;
985985
static struct bt_hfp_ag_call *hfp_ag_call[CONFIG_BT_HFP_AG_MAX_CALLS];
986986

987+
static struct bt_hfp_ag_ongoing_call ag_ongoing_call_info[CONFIG_BT_HFP_AG_MAX_CALLS];
988+
989+
static size_t ag_ongoing_calls;
990+
987991
static void ag_add_a_call(struct bt_hfp_ag_call *call)
988992
{
989993
ARRAY_FOR_EACH(hfp_ag_call, i) {
@@ -1052,6 +1056,30 @@ static void ag_sco_disconnected(struct bt_conn *sco_conn, uint8_t reason)
10521056
}
10531057
}
10541058

1059+
static int ag_get_ongoing_call(struct bt_hfp_ag *ag, struct bt_hfp_ag_ongoing_call *call)
1060+
{
1061+
static int call_index;
1062+
1063+
if ((ag_ongoing_calls < 1) || (call == NULL)) {
1064+
return -EINVAL;
1065+
}
1066+
1067+
if (ag_ongoing_calls > ARRAY_SIZE(ag_ongoing_call_info)) {
1068+
ag_ongoing_calls = ARRAY_SIZE(ag_ongoing_call_info);
1069+
}
1070+
1071+
if (call_index >= ag_ongoing_calls) {
1072+
call_index = 0;
1073+
ag_ongoing_calls = 0;
1074+
return -EINVAL;
1075+
}
1076+
1077+
memcpy(call, &ag_ongoing_call_info[call_index], sizeof(*call));
1078+
call_index++;
1079+
1080+
return 0;
1081+
}
1082+
10551083
static int ag_memory_dial(struct bt_hfp_ag *ag, const char *location, char **number)
10561084
{
10571085
static char *phone = "123456789";
@@ -1249,6 +1277,7 @@ static struct bt_hfp_ag_cb ag_cb = {
12491277
.disconnected = ag_disconnected,
12501278
.sco_connected = ag_sco_connected,
12511279
.sco_disconnected = ag_sco_disconnected,
1280+
.get_ongoing_call = ag_get_ongoing_call,
12521281
.memory_dial = ag_memory_dial,
12531282
.number_call = ag_number_call,
12541283
.outgoing = ag_outgoing,
@@ -1337,6 +1366,28 @@ static int cmd_ag_sco_disconnect(const struct shell *sh, size_t argc, char **arg
13371366
return err;
13381367
}
13391368

1369+
static int cmd_ag_ongoing_call(const struct shell *sh, size_t argc, char **argv)
1370+
{
1371+
size_t max_calls;
1372+
1373+
max_calls = MIN(CONFIG_BT_HFP_AG_MAX_CALLS, ARRAY_SIZE(ag_ongoing_call_info));
1374+
if (ag_ongoing_calls >= max_calls) {
1375+
shell_error(sh, "Supported max call count %d", max_calls);
1376+
return -EINVAL;
1377+
}
1378+
1379+
memset(ag_ongoing_call_info[ag_ongoing_calls].number, 0,
1380+
sizeof(ag_ongoing_call_info[ag_ongoing_calls].number));
1381+
memcpy(ag_ongoing_call_info[ag_ongoing_calls].number, argv[1],
1382+
MIN(strlen(argv[1]), sizeof(ag_ongoing_call_info[ag_ongoing_calls].number) - 1));
1383+
ag_ongoing_call_info[ag_ongoing_calls].type = (uint8_t)atoi(argv[2]);
1384+
ag_ongoing_call_info[ag_ongoing_calls].status = (enum bt_hfp_ag_call_status)atoi(argv[3]);
1385+
ag_ongoing_call_info[ag_ongoing_calls].dir = (enum bt_hfp_ag_call_dir)atoi(argv[4]);
1386+
1387+
ag_ongoing_calls++;
1388+
return 0;
1389+
}
1390+
13401391
static int cmd_ag_remote_incoming(const struct shell *sh, size_t argc, char **argv)
13411392
{
13421393
int err;
@@ -1877,6 +1928,8 @@ SHELL_STATIC_SUBCMD_SET_CREATE(ag_cmds,
18771928
SHELL_CMD_ARG(connect, NULL, "<channel>", cmd_ag_connect, 2, 0),
18781929
SHELL_CMD_ARG(disconnect, NULL, HELP_NONE, cmd_ag_disconnect, 1, 0),
18791930
SHELL_CMD_ARG(sco_disconnect, NULL, HELP_NONE, cmd_ag_sco_disconnect, 1, 0),
1931+
SHELL_CMD_ARG(ongoing_calls, NULL, "<number> <type> <status> <dir>", cmd_ag_ongoing_call, 5,
1932+
0),
18801933
SHELL_CMD_ARG(remote_incoming, NULL, "<number>", cmd_ag_remote_incoming, 2, 0),
18811934
SHELL_CMD_ARG(hold_incoming, NULL, "<number>", cmd_ag_hold_incoming, 2, 0),
18821935
SHELL_CMD_ARG(remote_reject, NULL, "<call index>", cmd_ag_remote_reject, 2, 0),

0 commit comments

Comments
 (0)