summaryrefslogtreecommitdiffstats
path: root/audio/ril_interface.c
diff options
context:
space:
mode:
authorWolfgang Wiedmeyer <wolfgit@wiedmeyer.de>2017-05-10 23:33:21 +0200
committerWolfgang Wiedmeyer <wolfgit@wiedmeyer.de>2017-05-10 23:33:21 +0200
commit352cd135fb48506e66f749f24970e17a20e7f20d (patch)
treec33a0cd3a8f728ce6daada214ada2170d01fb68f /audio/ril_interface.c
parent67184868ad1532067c1435d2f2abaf84e3b6e8ef (diff)
downloaddevice_samsung_tuna-352cd135fb48506e66f749f24970e17a20e7f20d.zip
device_samsung_tuna-352cd135fb48506e66f749f24970e17a20e7f20d.tar.gz
device_samsung_tuna-352cd135fb48506e66f749f24970e17a20e7f20d.tar.bz2
Revert "audio: link against libsecril-client"
This reverts commit 5a25b17d4e3b8a52c753f23ee3f1db15b3ef5feb.
Diffstat (limited to 'audio/ril_interface.c')
-rw-r--r--audio/ril_interface.c82
1 files changed, 63 insertions, 19 deletions
diff --git a/audio/ril_interface.c b/audio/ril_interface.c
index 558b157..0f9cb30 100644
--- a/audio/ril_interface.c
+++ b/audio/ril_interface.c
@@ -28,6 +28,18 @@
#define VOLUME_STEPS_DEFAULT "5"
#define VOLUME_STEPS_PROPERTY "ro.config.vc_call_vol_steps"
+/* Function pointers */
+void *(*_ril_open_client)(void);
+int (*_ril_close_client)(void *);
+int (*_ril_connect)(void *);
+int (*_ril_is_connected)(void *);
+int (*_ril_disconnect)(void *);
+int (*_ril_set_call_volume)(void *, enum ril_sound_type, int);
+int (*_ril_set_call_audio_path)(void *, enum ril_audio_path);
+int (*_ril_register_unsolicited_handler)(void *, int, void *);
+int (*_ril_get_wb_amr)(void *, void *);
+int (*_ril_set_mic_mute)(void *, enum ril_mic_mute);
+
/* Audio WB AMR callback */
void (*_audio_set_wb_amr_callback)(void *, int);
void *callback_data = NULL;
@@ -56,17 +68,18 @@ static int ril_set_wb_amr_callback(void *ril_client,
static int ril_connect_if_required(struct ril_handle *ril)
{
- if (isConnected_RILD(ril->client))
+ if (_ril_is_connected(ril->client))
return 0;
- if (Connect_RILD(ril->client) != RIL_CLIENT_ERR_SUCCESS) {
- ALOGE("Connect_RILD() failed");
+ if (_ril_connect(ril->client) != RIL_CLIENT_ERR_SUCCESS) {
+ ALOGE("ril_connect() failed");
return -1;
}
/* get wb amr status to set pcm samplerate depending on
wb amr status when ril is connected. */
- GetWB_AMR(ril->client, (RilOnComplete)ril_set_wb_amr_callback);
+ if(_ril_get_wb_amr)
+ _ril_get_wb_amr(ril->client, ril_set_wb_amr_callback);
return 0;
}
@@ -78,15 +91,45 @@ int ril_open(struct ril_handle *ril)
if (!ril)
return -1;
- ril->client = OpenClient_RILD();
+ ril->handle = dlopen(RIL_CLIENT_LIBPATH, RTLD_NOW);
+
+ if (!ril->handle) {
+ ALOGE("Cannot open '%s'", RIL_CLIENT_LIBPATH);
+ return -1;
+ }
+
+ _ril_open_client = dlsym(ril->handle, "OpenClient_RILD");
+ _ril_close_client = dlsym(ril->handle, "CloseClient_RILD");
+ _ril_connect = dlsym(ril->handle, "Connect_RILD");
+ _ril_is_connected = dlsym(ril->handle, "isConnected_RILD");
+ _ril_disconnect = dlsym(ril->handle, "Disconnect_RILD");
+ _ril_set_call_volume = dlsym(ril->handle, "SetCallVolume");
+ _ril_set_call_audio_path = dlsym(ril->handle, "SetCallAudioPath");
+ _ril_set_mic_mute = dlsym(ril->handle, "SetMute");
+ _ril_register_unsolicited_handler = dlsym(ril->handle,
+ "RegisterUnsolicitedHandler");
+ /* since this function is not supported in all RILs, don't require it */
+ _ril_get_wb_amr = dlsym(ril->handle, "GetWB_AMR");
+
+ if (!_ril_open_client || !_ril_close_client || !_ril_connect ||
+ !_ril_is_connected || !_ril_disconnect || !_ril_set_call_volume ||
+ !_ril_set_call_audio_path || !_ril_register_unsolicited_handler ||
+ !_ril_set_mic_mute) {
+ ALOGE("Cannot get symbols from '%s'", RIL_CLIENT_LIBPATH);
+ dlclose(ril->handle);
+ return -1;
+ }
+
+ ril->client = _ril_open_client();
if (!ril->client) {
- ALOGE("OpenClient_RILD() failed");
+ ALOGE("ril_open_client() failed");
+ dlclose(ril->handle);
return -1;
}
/* register the wideband AMR callback */
- RegisterUnsolicitedHandler(ril->client, RIL_UNSOL_WB_AMR_STATE,
- (RilOnUnsolicited)ril_set_wb_amr_callback);
+ _ril_register_unsolicited_handler(ril->client, RIL_UNSOL_WB_AMR_STATE,
+ ril_set_wb_amr_callback);
property_get(VOLUME_STEPS_PROPERTY, property, VOLUME_STEPS_DEFAULT);
ril->volume_steps_max = atoi(property);
@@ -100,40 +143,41 @@ int ril_open(struct ril_handle *ril)
int ril_close(struct ril_handle *ril)
{
- if (!ril || !ril->client)
+ if (!ril || !ril->handle || !ril->client)
return -1;
- if ((Disconnect_RILD(ril->client) != RIL_CLIENT_ERR_SUCCESS) ||
- (CloseClient_RILD(ril->client) != RIL_CLIENT_ERR_SUCCESS)) {
- ALOGE("Disconnect_RILD() or CloseClient_RILD() failed");
+ if ((_ril_disconnect(ril->client) != RIL_CLIENT_ERR_SUCCESS) ||
+ (_ril_close_client(ril->client) != RIL_CLIENT_ERR_SUCCESS)) {
+ ALOGE("ril_disconnect() or ril_close_client() failed");
return -1;
}
+ dlclose(ril->handle);
return 0;
}
-int ril_set_call_volume(struct ril_handle *ril, enum _SoundType sound_type,
+int ril_set_call_volume(struct ril_handle *ril, enum ril_sound_type sound_type,
float volume)
{
if (ril_connect_if_required(ril))
return 0;
- return SetCallVolume(ril->client, sound_type,
- (int)(volume * ril->volume_steps_max));
+ return _ril_set_call_volume(ril->client, sound_type,
+ (int)(volume * ril->volume_steps_max));
}
-int ril_set_call_audio_path(struct ril_handle *ril, enum _AudioPath path)
+int ril_set_call_audio_path(struct ril_handle *ril, enum ril_audio_path path)
{
if (ril_connect_if_required(ril))
return 0;
- return SetCallAudioPath(ril->client, path);
+ return _ril_set_call_audio_path(ril->client, path);
}
-int ril_set_mic_mute(struct ril_handle *ril, enum _MuteCondition state)
+int ril_set_mic_mute(struct ril_handle *ril, enum ril_mic_mute state)
{
if (ril_connect_if_required(ril))
return 0;
- return SetMute(ril->client, state);
+ return _ril_set_mic_mute(ril->client, state);
}