Add `BOTH_SUPT_FEAT(ag, _hf_feature, _ag_feature)` to check if the
feature is supported by both side.
Add `HF_SUPT_FEAT(ag, _feature)` to check if the feature is supported
by HF.
Add `AG_SUPT_FEAT(ag, _feature)` to check if the feature is supported
by AG.
Use `BOTH_SUPT_FEAT/HF_SUPT_FEAT/AG_SUPT_FEAT` to optimize code that
checks whether a feature is supported.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
The lock/unlock for AG/HF feature read access is unnecessary.
For AG feature, it only be changed when creating new AG object.
For HF feature, it only be changed when exchanging feature in SLC
establishment.
Remove the hfp_ag_lock/hfp_ag_unlock for AG/HF feature read access.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
There is an error reported in platform `native_sim` that the value of
`EOPNOTSUPP` is same as `ENOTSUP`.
It cause the building error `duplicate case value '-95'` reported.
Use `ENOEXEC` to replace `EOPNOTSUPP` to fix the building issue.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
Divide hfp_internal.h into two parts, HFP HF part hfp_hf_internal.h and
HFP common part hfp_internal.h.
Includes "hfp_internal.h" in file "hfp_ag_internal.h".
Includes "hfp_ag_internal.h" in file "hfp_ag.c".
Includes "hfp_internal.h" in file "hfp_hf_internal.h".
Includes "hfp_hf_internal.h" in file "hfp_hf.c".
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
Add a option `HFPHF` to find HFP HF SDP records from HFP AG side.
Add a SDP records discovery parameter `discov_hfphf` for this option.
Add a function `sdp_hfp_hf_user` to handle the discovery result.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
Define SDP records for HFP AG. Register HFP AG SDP service records in
AG initialization.
Register HFP AG RFCOMM server in AG initialization.
Register HFP AG SCO server in AG initialization.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
Add function `bt_hfp_hf_connect` to initialize the Service Level
Connection establishment procedure.
Add function `bt_hfp_hf_disconnect` to release the Service Level
Connection.
Clear HF object if the RFCOMM is disconnected.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
Add configuration `CONFIG_BT_HFP_AG_HF_INDICATORS` to enable feature
HF Indicators.
Add configuration `CONFIG_BT_HFP_AG_HF_INDICATOR_ENH_SAFETY` to
support HF indicator `Enhanced Safety`.
Add configuration `CONFIG_BT_HFP_AG_HF_INDICATOR_BATTERY` to support
HF indicator `Remaining level of Battery`.
Add function `bt_hfp_ag_hf_indicator` to activate/deactivate HF
indicator.
Optimize the handle of AT command `AT+BIND`.
Handle AT command `AT+BIEV`.
Add callback `hf_indicator_value` to notify the value of HF indicator.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
Add configuration `CONFIG_BT_HFP_HF_HF_INDICATORS` to enable feature
HF Indicators.
Add configuration `CONFIG_BT_HFP_HF_HF_INDICATOR_ENH_SAFETY` to
support HF indicator `Enhanced Safety`.
Add configuration `CONFIG_BT_HFP_HF_HF_INDICATOR_BATTERY` to support
HF indicator `Remaining level of Battery`.
Add function `bt_hfp_hf_enhanced_safety` to transfer enhanced safety
status.
Add function `bt_hfp_hf_battery` to transfer Remaining level of
Battery.
Send AT command to notify AG the supported HF indicators of HF in SLC
initialization sequence.
Send AT command to get the supported HF indicators of AG in SLC
initialization sequence.
Send AT command to get the enabled/disabled state of generic status
indicators from AG in SLC initialization sequence.
Handle unsolicited result code `+BIND`.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
In current implementation, it is difficult to insert new AT commands
in the SLC initialization sequence.
Add a SLC initialization sequence. Send AT command one by one.
It will be easy to insert new AT commands in the appropriate position.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
Improve the process of AT command `AT+BIA` to mask the activated/
deactivated indicators.
Only notify the activated indicator if the value of it is updated.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
Handle AT command `AT+CNUM`.
Add a callback function `subscriber_number` to notify the upper layer
that the HF needs to get subscriber number information from the AG.
If there is subscriber number information needs to be sent, the passed
function `bt_hfp_ag_query_subscriber_func_t func` can be called for
this purpose.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
Add function `bt_hfp_hf_query_subscriber` to query the AG subscriber
number.
Add callback `subscriber_number` to notify the result of the query of
the subscriber number information.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
Handle AT command `AT+VTS`.
Add a callback `transmit_dtmf_code`. When a valid AT command `AT+VTS`
is received, call the callback to notify the upper layer.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
Add configuration `CONFIG_BT_HFP_AG_VOICE_TAG` to enable the feature
`attach a phone number for a voice tag`.
Handle AT command `AT+BINP=1`.
Add callback `request_phone_number` to notify the request and get the
phone number from the upper layer.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
Add a function `bt_hfp_hf_request_phone_number` to request phone number
to the AG.
Add a callback `request_phone_number` to notify the result of the
request.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
Add configuration `CONFIG_BT_HFP_AG_VOICE_RECG` to enable Voice
recognition activation feature.
Add configuration `CONFIG_BT_HFP_AG_ENH_VOICE_RECG` to enable Enhanced
Voice Recognition Status feature.
Add configuration `CONFIG_BT_HFP_AG_VOICE_RECG_TEXT` to enable Voice
Recognition Text feature.
Add function `bt_hfp_ag_voice_recognition` activate/deactivate the
Voice recognition activation feature.
Add function `bt_hfp_ag_vre_state` to notify the state of the voice
recognition engine.
Add function `bt_hfp_ag_vre_textual_representation` to notify the
state and textual representation of voice recognition engine.
Add callback `voice_recognition` to notify the upper layer the status
of voice recognition activation.
Add callback `ready_to_accept_audio` to notify the upper layer that
the HF is ready to accept audio.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
Add configuration `CONFIG_BT_HFP_HF_VOICE_RECG` to enable Voice
recognition activation feature.
Add configuration `CONFIG_BT_HFP_HF_ENH_VOICE_RECG` to enable Enhanced
Voice Recognition Status feature.
Add configuration `CONFIG_BT_HFP_HF_VOICE_RECG_TEXT` to enable Voice
Recognition Text feature.
Add function `bt_hfp_hf_voice_recognition` to activate/deactivate the
Voice recognition activation feature.
Add function `bt_hfp_hf_ready_to_accept_audio` to indicate that the HF
is ready to accept audio.
Add a callback `voice_recognition` to notify the upper layer the
status of voice recognition activation.
Add a callback `vre_state` to notify the upper layer the state of
voice recognition engine.
Add a callback `textual_representation` to notify the upper layer the
textual representation.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
The TX buf will be removed from TX queue after the data has been sent.
It causes the following TX buffers to be lost.
Fix it by removing TX buffer when sending it.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
There is an issue that the sending of AT+command will overwrite the at
status when the at is handling receiving.
Add a flag `BT_HFP_HF_FLAG_RX_ONGOING` to flag the receiving is
working.
When the flag is set, suspend the TX sending.
Add a worker to restart the tx sending.
After the flag `BT_HFP_HF_FLAG_RX_ONGOING` is cleared, submit the TX
worker to restart the tx sending.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
Add a configuration `BT_HFP_HF_3WAY_CALL` to control the feature.
Add a configuration `BT_HFP_HF_MAX_CALLS` to define supported maximum
calls.
Add a configuration `BT_HFP_HF_ECS` to configure the Enhanced Call
Status feature.
Add a configuration `BT_HFP_HF_ECC` to configure the Enhanced Call
Control feature.
Add a structure `struct bt_hfp_hf_call` to manage the call.
Add the call object to callback `outgoing`, and`incoming`.
Use call object to replace AG object for callbacks `remote_ringing`,
`on_hold`, `accept`, `reject`, `terminate`, `call_held`,
`ring_indication`, and `clip`.
Change callback `call_held` to `held`.
Add callback `retrieve` for the retrieved held call.
Add callback `call_waiting` to notify the application a new call is
waiting.
Use call object to replace AG object for function `bt_hfp_hf_accept`,
`bt_hfp_hf_reject`, `bt_hfp_hf_terminate`, and
`bt_hfp_hf_hold_incoming`.
Add functions for 3-way feature, including
`bt_hfp_hf_call_waiting_notify`, `bt_hfp_hf_release_all_held`,
`bt_hfp_hf_set_udub`, `bt_hfp_hf_release_active_accept_other`,
`bt_hfp_hf_hold_active_accept_other`, `bt_hfp_hf_join_conversation`,
`bt_hfp_hf_explicit_call_transfer`, `bt_hfp_hf_release_specified_call`,
and `bt_hfp_hf_private_consultation_mode`.
Add a new function `at_get_raw_string` to get the raw string from AT
response.
Move definitions of AT+CLCC value from hfp_ag_internal.h to
hfp_internal.h.
Monitor unsolicited result code `+CCWA`.
Enable `Call Waiting Notification` if the feature is supported by both
side when the SLC connected.
Get CHLD values supported by AG if the 3-way calling feature is
supported by both side.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
Move CLCC status definitions from hfp_ag_internal.h to hfp_internal.h.
And change name from HFP_AG_CLCC_STATUS_XXX to BT_HFP_CLCC_STATUS_XXX.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
Add a configuration `BT_HFP_AG_3WAY_CALL` to control the feature.
Add a configuration `BT_HFP_AG_MAX_CALLS` to define supported maximum
calls.
Add a structure `struct bt_hfp_ag_call` to manage the call.
Add the call object to callback `outgoing`, and`incoming`.
Use call object to replace AG object for callbacks `incoming_held`,
`ringing`, `accept`, `reject`, and `terminate`.
Add callback `held` to notify the call held status.
Use call object to replace AG object for function
`bt_hfp_ag_hold_incoming`, `bt_hfp_ag_reject`, `bt_hfp_ag_accept`,
`bt_hfp_ag_terminate`, `bt_hfp_ag_remote_ringing`,
`bt_hfp_ag_remote_reject`, `bt_hfp_ag_remote_accept`, and
`bt_hfp_ag_remote_terminate`.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
Add a flag `BT_HFP_AG_CCWA_ENABLE` to keep the status of `Call Waiting
Notification`.
Set/clear the flag according to the value of received command AT+CCWA.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
Add a flag `BT_HFP_AG_INCOMING_HELD` to identify the incoming call is
held.
Add a function `bt_hfp_ag_hold_incoming` to put the incoming call on
hold.
Add a callback `incoming_held` to notify the application the incoming
is held.
Handle AT command `AT+BTRH=x` to hold/accept/reject the incoming call.
Improve function `bt_hfp_hf_accept` to accept the held incoming call.
Improve function `bt_hfp_hf_reject` to reject the held incoming call.
Improve function `bt_hfp_hf_terminate` to terminate the held incoming
call.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
Add a flag `BT_HFP_HF_FLAG_INCOMING_HELD` to identify the incoming call
is held.
Add a function `bt_hfp_hf_hold_incoming` to put the incoming call on
hold.
Handle the response `+BTRH` to get the incoming call status.
Add a callback `incoming_held` to notify the application the incoming
is held.
Remove callback `call_setup`. Add callback `outgoing` for call_setup=1,
`incoming` for call_setup=2, and `remote_ringing` for call_setup=3.
Remove callback `call`. Add callback `accept`, `reject`, `terminate`,
and `incoming_held`.
`accept` is triggered if the call is active.
`reject` is triggered if the incoming/
outgoing is not accepted but call is terminated.
`terminate` is triggered if the accepted is terminated.
`incoming_held` is triggered if the incoming call is held.
Improve function `bt_hfp_hf_accept` to accept the held incoming call.
Improve function `bt_hfp_hf_reject` to reject the held incoming call.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
Add a configuration `CONFIG_BT_HFP_HF_ECNR` to enable "EC and/or NR
function" of HFP HF.
Add a function `bt_hfp_hf_turn_off_ecnr` to turn off AG's EC and NR.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
Add a configuration to support "EC and/or NR function" of HFP AG.
Add a callback `ecnr_turn_off` to notify the application that "EC and/
or NR function" has been turned off.
Handle AT command AT+NREC=0. Only if the feature enabled, and the
callback `ecnr_turn_off` provided, the result code `OK` will be
responded.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
Add a function `bt_hfp_hf_redial` to initiate outgoing voice calls by
recalling the last number dialed by the AG.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
Add a function `bt_hfp_hf_memory_dial` to initiate outgoing voice
calls using the memory dialing feature of the AG.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
Add a function `bt_hfp_hf_number_call` to initiate outgoing voice calls
by providing the destination phone number to the AG.
Add a callback `dialing` to notify the application the result from AG.
Add a flag `BT_HFP_HF_FLAG_DIALING` to make sure there is only one
dialing call at the same time.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
Add phone number dialing callback if the ATDNnnn AT command is
received from HFP HF.
If the callback is NULL, the ATDNnnn AT command cannot be
supported by the HFP AG.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
Add a function `bt_hfp_hf_terminate` to terminate the active call.
Add a flag BT_HFP_HF_FLAG_ACTIVE to identify the call is active. Set
the flag if the call value is 1.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
Add a function `bt_hfp_hf_reject` to reject the incoming call.
Add a flag BT_HFP_HF_FLAG_INCOMING to identify the incoming call.
Set the flag if the call_setup value is 1.
Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>