f9c7ffa9b6
PulseAudio is used for handling all audio on postmarketOS. This also involves Bluetooth audio such as A2DP, HSP and HFP audio. In the case of HFP/HSP, the HF and AG can interact with each other through AT commands defined in the Bluetooth HFP 1.8 spec. This set of patches implements HFP support to allow Bluetooth devices to accept/reject/hangup calls, dial numbers, DTMF tone generation, query signal strength, roaming status, service status, AG battery level, call status, etc. More details in the upstream MR: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/693 Available in edge for testing this merge request with a broader user base. Not intended for backporting to stable branches. [ci:skip-build]: already built successfully in CI
48 lines
1.9 KiB
Diff
48 lines
1.9 KiB
Diff
From d10422fafd9eececfa6755617c41b05f895e5a5b Mon Sep 17 00:00:00 2001
|
|
From: Dylan Van Assche <me@dylanvanassche.be>
|
|
Date: Thu, 14 Apr 2022 21:03:37 +0200
|
|
Subject: [PATCH 15/26] bluetooth: support AT+CREG?
|
|
|
|
AT+CREG? is not officialy supported by the Bluetooth HFP 1.8 spec,
|
|
but some car multimedia systems use it. AT+CREG? reports if the phone
|
|
has network available or not with a +CREG response.
|
|
---
|
|
src/modules/bluetooth/backend-native.c | 22 ++++++++++++++++++++++
|
|
1 file changed, 22 insertions(+)
|
|
|
|
diff --git a/src/modules/bluetooth/backend-native.c b/src/modules/bluetooth/backend-native.c
|
|
index 1eaa36b4a..2fa769d07 100644
|
|
--- a/src/modules/bluetooth/backend-native.c
|
|
+++ b/src/modules/bluetooth/backend-native.c
|
|
@@ -770,6 +770,28 @@ static bool hfp_rfcomm_handle(int fd, pa_bluetooth_transport *t, const char *buf
|
|
pa_assert_not_reached();
|
|
}
|
|
|
|
+ /*
|
|
+ * Out-of-spec Bluetooth HFP 1.8 AT commands.
|
|
+ * Some car multimedia systems implement the HFP spec,
|
|
+ * but also use out-of-spec AT commands which are normally supported
|
|
+ * by any 3GPP compliant modem such as:
|
|
+ * - AT+CREG?: Get service status
|
|
+ * - AT+CGMM: Get modem model
|
|
+ * - AT+CGMI: Get modem manufacturer
|
|
+ * - AT+CGMR: Get modem revision
|
|
+ * - AT+CGSN: Get modem IMEI
|
|
+ *
|
|
+ * These AT commands are additionally supported if ModemManager is available.
|
|
+ */
|
|
+ if (strstr(buf, "AT+CREG?")) {
|
|
+ if (discovery->native_backend->modemmanager && pa_modemmanager_has_modem(discovery->native_backend->modemmanager)) {
|
|
+ rfcomm_write_response(fd, "+CREG: 0,%d", pa_modemmanager_has_service(discovery->native_backend->modemmanager));
|
|
+ return true;
|
|
+ }
|
|
+ rfcomm_write_error(discovery->native_backend, fd, CMEE_NO_CONNECTION_TO_PHONE);
|
|
+ return false;
|
|
+ }
|
|
+
|
|
/* first-time initialize selected codec to CVSD */
|
|
if (c->selected_codec == 0)
|
|
c->selected_codec = 1;
|
|
--
|
|
2.35.1
|
|
|