From 5ee9209534b8ff634dc959b2ab2bea7ded114b30 Mon Sep 17 00:00:00 2001 From: Paul Kocialkowski Date: Tue, 20 Aug 2013 21:54:07 +0200 Subject: Use Samsung-RIL and Audio-RIL-Interface Signed-off-by: Paul Kocialkowski --- audio-ril-interface/Android.mk | 35 ++++++ audio-ril-interface/audio-ril-interface.c | 182 ++++++++++++++++++++++++++++++ n7000.mk | 10 +- system.prop | 2 +- 4 files changed, 225 insertions(+), 4 deletions(-) create mode 100644 audio-ril-interface/Android.mk create mode 100644 audio-ril-interface/audio-ril-interface.c diff --git a/audio-ril-interface/Android.mk b/audio-ril-interface/Android.mk new file mode 100644 index 0000000..f24304e --- /dev/null +++ b/audio-ril-interface/Android.mk @@ -0,0 +1,35 @@ +# +# Copyright (C) 2013 Paul Kocialkowski +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := audio-ril-interface.c + +LOCAL_C_INCLUDES := \ + hardware/ril/samsung-ril/include \ + hardware/ril/samsung-ril/srs-client/include \ + hardware/tinyalsa-audio/include/ + +LOCAL_SHARED_LIBRARIES := liblog libcutils libsrs-client +LOCAL_PRELINK_MODULE := false + +LOCAL_MODULE := libaudio-ril-interface +LOCAL_MODULE_TAGS := optional + +include $(BUILD_SHARED_LIBRARY) diff --git a/audio-ril-interface/audio-ril-interface.c b/audio-ril-interface/audio-ril-interface.c new file mode 100644 index 0000000..14acf5e --- /dev/null +++ b/audio-ril-interface/audio-ril-interface.c @@ -0,0 +1,182 @@ +/* + * Copyright (C) 2013 Paul Kocialkowski + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include + +#define LOG_TAG "Audio-RIL-Interface" +#include +#include + +#include + +#include +#include + +int galaxynote_mic_mute(void *pdata, int mute) +{ + return 0; +} + +int galaxynote_voice_volume(void *pdata, audio_devices_t device, float volume) +{ + struct srs_client *client = NULL; + struct srs_snd_call_volume call_volume; + int rc; + + LOGD("%s(%d, %f)", __func__, device, volume); + + if (pdata == NULL) + return -1; + + client = (struct srs_client *) pdata; + + switch((int) device) { + case AUDIO_DEVICE_OUT_EARPIECE: + call_volume.type = SRS_SND_TYPE_VOICE; + break; + case AUDIO_DEVICE_OUT_SPEAKER: + call_volume.type = SRS_SND_TYPE_SPEAKER; + break; + case AUDIO_DEVICE_OUT_WIRED_HEADSET: + case AUDIO_DEVICE_OUT_WIRED_HEADPHONE: + call_volume.type = SRS_SND_TYPE_HEADSET; + break; + case AUDIO_DEVICE_OUT_BLUETOOTH_SCO: + case AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET: + case AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT: + case AUDIO_DEVICE_OUT_BLUETOOTH_A2DP: + case AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES: + case AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER: + call_volume.type = SRS_SND_TYPE_BTVOICE; + break; + default: + call_volume.type = SRS_SND_TYPE_VOICE; + break; + } + + call_volume.volume = (int) (5 * volume); + + rc = srs_client_send(client, SRS_SND_SET_CALL_VOLUME, &call_volume, sizeof(call_volume)); + if (rc < 0) + return -1; + + return 0; +} + +int galaxynote_route(void *pdata, audio_devices_t device) +{ + struct srs_client *client; + struct srs_snd_call_audio_path call_audio_path; + int rc; + + LOGD("%s(%d)", __func__, device); + + if (pdata == NULL) + return -1; + + client = (struct srs_client *) pdata; + + switch((int) device) { + case AUDIO_DEVICE_OUT_EARPIECE: + call_audio_path.path = SRS_SND_PATH_HANDSET; + break; + case AUDIO_DEVICE_OUT_SPEAKER: + call_audio_path.path = SRS_SND_PATH_SPEAKER; + break; + case AUDIO_DEVICE_OUT_WIRED_HEADSET: + call_audio_path.path = SRS_SND_PATH_HEADSET; + break; + case AUDIO_DEVICE_OUT_WIRED_HEADPHONE: + call_audio_path.path = SRS_SND_PATH_HEADPHONE; + break; + // FIXME: Bluetooth values/path relation + case AUDIO_DEVICE_OUT_BLUETOOTH_SCO: + case AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET: + case AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT: + call_audio_path.path = SRS_SND_PATH_BLUETOOTH; + case AUDIO_DEVICE_OUT_BLUETOOTH_A2DP: + case AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES: + case AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER: + call_audio_path.path = SRS_SND_PATH_BLUETOOTH_NO_NR; + break; + default: + call_audio_path.path = SRS_SND_PATH_HANDSET; + break; + } + + rc = srs_client_send(client, SRS_SND_SET_CALL_AUDIO_PATH, &call_audio_path, sizeof(call_audio_path)); + if (rc < 0) + return -1; + + return 0; +} + +/* + * Interface + */ + +struct audio_ril_interface galaxynote_interface = { + NULL, + galaxynote_mic_mute, + galaxynote_voice_volume, + galaxynote_route +}; + +struct audio_ril_interface *audio_ril_interface_open(void) +{ + struct srs_client *client = NULL; + int rc; + + LOGE("%s()", __func__); + + signal(SIGPIPE, SIG_IGN); + + srs_client_create(&client); + + rc = srs_client_open(client); + if (rc < 0) { + LOGE("%s: Failed to open SRS client", __func__); + return NULL; + } + + rc = srs_client_ping(client); + if (rc < 0) + LOGE("%s: Failed to ping SRS client", __func__); + + galaxynote_interface.pdata = (void *) client; + + return &galaxynote_interface; +} + +void audio_ril_interface_close(struct audio_ril_interface *interface) +{ + struct srs_client *client = NULL; + int rc; + + LOGE("%s(%p)", __func__, interface); + + if (interface == NULL || interface->pdata == NULL) + return; + + client = (struct srs_client *) interface->pdata; + + rc = srs_client_close(client); + if (rc < 0) + LOGE("%s: Failed to close SRS client", __func__); + + srs_client_destroy(client); +} diff --git a/n7000.mk b/n7000.mk index f7c84a9..268cbe4 100755 --- a/n7000.mk +++ b/n7000.mk @@ -72,7 +72,8 @@ PRODUCT_PACKAGES += \ # Audio PRODUCT_PACKAGES += \ - audio.primary.exynos4 + audio.primary.exynos4 \ + libaudio-ril-interface PRODUCT_COPY_FILES += \ device/samsung/n7000/configs/tinyalsa-audio.xml:system/etc/tinyalsa-audio.xml @@ -97,9 +98,12 @@ PRODUCT_PACKAGES += \ PRODUCT_COPY_FILES += \ device/samsung/n7000/configs/media_profiles.xml:system/etc/media_profiles.xml -# Ril +# RIL +PRODUCT_PACKAGES += \ + libsamsung-ril \ + ipc-modemctrl + PRODUCT_PROPERTY_OVERRIDES += \ - ro.telephony.ril_class=Smdk4210RIL \ mobiledata.interfaces=pdp0,wlan0,gprs,ppp0 # Filesystem management tools diff --git a/system.prop b/system.prop index d4c4159..82cb926 100644 --- a/system.prop +++ b/system.prop @@ -2,6 +2,6 @@ # system.prop for n7000 # -rild.libpath=/system/lib/libsec-ril.so +rild.libpath=/system/lib/libsamsung-ril.so rild.libargs=-d /dev/ttyS0 persist.sys.strictmode.visual=0 -- cgit v1.1