@@ -984,6 +984,10 @@ struct bt_hfp_ag *hfp_ag;
984
984
struct bt_conn * hfp_ag_sco_conn ;
985
985
static struct bt_hfp_ag_call * hfp_ag_call [CONFIG_BT_HFP_AG_MAX_CALLS ];
986
986
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
+
987
991
static void ag_add_a_call (struct bt_hfp_ag_call * call )
988
992
{
989
993
ARRAY_FOR_EACH (hfp_ag_call , i ) {
@@ -1052,6 +1056,30 @@ static void ag_sco_disconnected(struct bt_conn *sco_conn, uint8_t reason)
1052
1056
}
1053
1057
}
1054
1058
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
+
1055
1083
static int ag_memory_dial (struct bt_hfp_ag * ag , const char * location , char * * number )
1056
1084
{
1057
1085
static char * phone = "123456789" ;
@@ -1249,6 +1277,7 @@ static struct bt_hfp_ag_cb ag_cb = {
1249
1277
.disconnected = ag_disconnected ,
1250
1278
.sco_connected = ag_sco_connected ,
1251
1279
.sco_disconnected = ag_sco_disconnected ,
1280
+ .get_ongoing_call = ag_get_ongoing_call ,
1252
1281
.memory_dial = ag_memory_dial ,
1253
1282
.number_call = ag_number_call ,
1254
1283
.outgoing = ag_outgoing ,
@@ -1337,6 +1366,28 @@ static int cmd_ag_sco_disconnect(const struct shell *sh, size_t argc, char **arg
1337
1366
return err ;
1338
1367
}
1339
1368
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
+
1340
1391
static int cmd_ag_remote_incoming (const struct shell * sh , size_t argc , char * * argv )
1341
1392
{
1342
1393
int err ;
@@ -1877,6 +1928,8 @@ SHELL_STATIC_SUBCMD_SET_CREATE(ag_cmds,
1877
1928
SHELL_CMD_ARG (connect , NULL , "<channel>" , cmd_ag_connect , 2 , 0 ),
1878
1929
SHELL_CMD_ARG (disconnect , NULL , HELP_NONE , cmd_ag_disconnect , 1 , 0 ),
1879
1930
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 ),
1880
1933
SHELL_CMD_ARG (remote_incoming , NULL , "<number>" , cmd_ag_remote_incoming , 2 , 0 ),
1881
1934
SHELL_CMD_ARG (hold_incoming , NULL , "<number>" , cmd_ag_hold_incoming , 2 , 0 ),
1882
1935
SHELL_CMD_ARG (remote_reject , NULL , "<call index>" , cmd_ag_remote_reject , 2 , 0 ),
0 commit comments