[ofono-binder] Add call volume support for AIDL
This commit is contained in:
@@ -21,8 +21,10 @@
|
||||
#include <ofono/call-volume.h>
|
||||
#include <ofono/log.h>
|
||||
|
||||
#include <radio_client.h>
|
||||
#include <radio_request.h>
|
||||
#include <radio_request_group.h>
|
||||
#include <radio_voice_types.h>
|
||||
|
||||
#include <gbinder_reader.h>
|
||||
#include <gbinder_writer.h>
|
||||
@@ -30,11 +32,13 @@
|
||||
typedef struct binder_call_volume {
|
||||
struct ofono_call_volume* v;
|
||||
RadioRequestGroup* g;
|
||||
RADIO_AIDL_INTERFACE interface_aidl;
|
||||
char* log_prefix;
|
||||
guint register_id;
|
||||
} BinderCallVolume;
|
||||
|
||||
typedef struct binder_call_volume_req {
|
||||
BinderCallVolume* self;
|
||||
ofono_call_volume_cb_t cb;
|
||||
gpointer data;
|
||||
} BinderCallVolumeCbData;
|
||||
@@ -48,11 +52,13 @@ binder_call_volume_get_data(struct ofono_call_volume* v)
|
||||
static
|
||||
BinderCallVolumeCbData*
|
||||
binder_call_volume_callback_data_new(
|
||||
BinderCallVolume* self,
|
||||
ofono_call_volume_cb_t cb,
|
||||
void* data)
|
||||
{
|
||||
BinderCallVolumeCbData* cbd = g_slice_new0(BinderCallVolumeCbData);
|
||||
|
||||
cbd->self = self;
|
||||
cbd->cb = cb;
|
||||
cbd->data = data;
|
||||
return cbd;
|
||||
@@ -81,7 +87,9 @@ binder_call_volume_mute_cb(
|
||||
ofono_call_volume_cb_t cb = cbd->cb;
|
||||
|
||||
if (status == RADIO_TX_STATUS_OK) {
|
||||
if (resp == RADIO_RESP_SET_MUTE) {
|
||||
guint32 code = cbd->self->interface_aidl == RADIO_VOICE_INTERFACE ?
|
||||
RADIO_VOICE_RESP_SET_MUTE : RADIO_RESP_SET_MUTE;
|
||||
if (resp == code) {
|
||||
if (error == RADIO_ERROR_NONE) {
|
||||
cb(binder_error_ok(&err), cbd->data);
|
||||
return;
|
||||
@@ -104,14 +112,16 @@ binder_call_volume_mute(
|
||||
void* data)
|
||||
{
|
||||
BinderCallVolume* self = binder_call_volume_get_data(v);
|
||||
guint32 code = self->interface_aidl == RADIO_VOICE_INTERFACE ?
|
||||
RADIO_VOICE_REQ_SET_MUTE : RADIO_REQ_SET_MUTE;
|
||||
|
||||
/* setMute(int32_t serial, bool enable); */
|
||||
GBinderWriter writer;
|
||||
RadioRequest* req = radio_request_new2(self->g,
|
||||
RADIO_REQ_SET_MUTE, &writer,
|
||||
code, &writer,
|
||||
binder_call_volume_mute_cb,
|
||||
binder_call_volume_callback_data_free,
|
||||
binder_call_volume_callback_data_new(cb, data));
|
||||
binder_call_volume_callback_data_new(self, cb, data));
|
||||
|
||||
DBG_(self, "%d", muted);
|
||||
gbinder_writer_append_bool(&writer, muted); /* enabled */
|
||||
@@ -130,8 +140,11 @@ binder_call_volume_query_mute_cb(
|
||||
const GBinderReader* args,
|
||||
void* user_data)
|
||||
{
|
||||
const BinderCallVolume* self = user_data;
|
||||
if (status == RADIO_TX_STATUS_OK) {
|
||||
if (resp == RADIO_RESP_GET_MUTE) {
|
||||
guint32 code = self->interface_aidl == RADIO_VOICE_INTERFACE ?
|
||||
RADIO_VOICE_RESP_GET_MUTE : RADIO_RESP_GET_MUTE;
|
||||
if (resp == code) {
|
||||
if (error == RADIO_ERROR_NONE) {
|
||||
GBinderReader reader;
|
||||
gboolean muted;
|
||||
@@ -159,6 +172,8 @@ binder_call_volume_register(
|
||||
gpointer user_data)
|
||||
{
|
||||
BinderCallVolume* self = user_data;
|
||||
guint32 code = self->interface_aidl == RADIO_VOICE_INTERFACE ?
|
||||
RADIO_VOICE_REQ_GET_MUTE : RADIO_REQ_GET_MUTE;
|
||||
|
||||
DBG_(self, "");
|
||||
GASSERT(self->register_id);
|
||||
@@ -166,7 +181,7 @@ binder_call_volume_register(
|
||||
ofono_call_volume_register(self->v);
|
||||
|
||||
/* Probe the mute state */
|
||||
binder_submit_request2(self->g, RADIO_REQ_GET_MUTE,
|
||||
binder_submit_request2(self->g, code,
|
||||
binder_call_volume_query_mute_cb, NULL, self);
|
||||
|
||||
return G_SOURCE_REMOVE;
|
||||
@@ -183,7 +198,8 @@ binder_call_volume_probe(
|
||||
BinderCallVolume* self = g_new0(BinderCallVolume, 1);
|
||||
|
||||
self->v = v;
|
||||
self->g = radio_request_group_new(modem->client);
|
||||
self->g = radio_request_group_new(modem->voice_client);
|
||||
self->interface_aidl = radio_client_aidl_interface(modem->voice_client);
|
||||
self->log_prefix = binder_dup_prefix(modem->log_prefix);
|
||||
self->register_id = g_idle_add(binder_call_volume_register, self);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user