diff --git a/src/shared/hfp.c b/src/shared/hfp.c
index 2342c24..c2028ac 100644
--- a/src/shared/hfp.c
+++ b/src/shared/hfp.c
hfp_debug(_hfp->debug_callback, _hfp->debug_data, "%s:%s() " fmt, \
__FILE__, __func__, ## arg)
-#define HFP_HF_FEATURES (HFP_HF_FEAT_CLIP | HFP_HF_FEAT_ESCO_S4_T2)
+#define HFP_HF_FEATURES ( \
+ HFP_HF_FEAT_ECNR | \
+ HFP_HF_FEAT_CLIP | \
+ HFP_HF_FEAT_ESCO_S4_T2 \
+)
struct hfp_gw {
int ref_count;
hfp->callbacks_data);
}
-static void cmee_resp(enum hfp_result result, enum hfp_error cme_err,
+static void nrec_resp(enum hfp_result result, enum hfp_error cme_err,
void *user_data)
{
struct hfp_hf *hfp = user_data;
DBG(hfp, "");
if (result != HFP_RESULT_OK) {
- DBG(hfp, "hf: CMEE error: %d", result);
+ DBG(hfp, "hf: NREC error: %d", result);
goto failed;
}
hfp->callbacks_data);
}
+static void cmee_resp(enum hfp_result result, enum hfp_error cme_err,
+ void *user_data)
+{
+ struct hfp_hf *hfp = user_data;
+
+ DBG(hfp, "");
+
+ if (result != HFP_RESULT_OK) {
+ DBG(hfp, "hf: CMEE error: %d", result);
+ goto failed;
+ }
+
+ if (!(hfp->features & HFP_AG_FEAT_ECNR)) {
+ /* Jump to next setup state */
+ nrec_resp(HFP_RESULT_OK, cme_err, user_data);
+ return;
+ }
+
+ if (!hfp_hf_send_command(hfp, nrec_resp, hfp, "AT+NREC=0")) {
+ DBG(hfp, "hf: Could not send AT+NREC=0");
+ result = HFP_RESULT_ERROR;
+ goto failed;
+ }
+
+ return;
+
+failed:
+ if (hfp->callbacks->session_ready)
+ hfp->callbacks->session_ready(result, cme_err,
+ hfp->callbacks_data);
+}
+
static void clip_resp(enum hfp_result result, enum hfp_error cme_err,
void *user_data)
{
diff --git a/unit/test-hfp.c b/unit/test-hfp.c
index fc9fb18..94553d6 100644
--- a/unit/test-hfp.c
+++ b/unit/test-hfp.c
'0', ',', '\"', 'T', 'E', 'S', 'T', '\"', '\r', '\n'), \
frg_pdu('\r', '\n', 'O', 'K', '\r', '\n'), \
raw_pdu('\r', '\n', 'O', 'K', '\r', '\n'), \
+ raw_pdu('\r', '\n', 'O', 'K', '\r', '\n'), \
raw_pdu('\r', '\n', 'O', 'K', '\r', '\n')
static void hf_cmd_complete(enum hfp_result res, enum hfp_error cme_err,