No vas a ser capaz de lograr esto utilizando sólo las herramientas de userland, como lo que describes - al menos no mientras se ejecuta Android.
La razón es que el RIL abre el dispositivo de radio (generalmente algún nodo de dispositivo bajo /dev/*
) como un servicio linux de bajo nivel, y mientras eso tiene un bloqueo exclusivo en el dispositivo, nada más puede leer o escribir en la radio. El RIL se comunica entonces con la plataforma Android para todos los eventos relacionados con la radio.
Se podría hacer con algunos extensa modificaciones en el núcleo subyacente de Linux (es de código abierto, así que definitivamente es una posibilidad si no te importa ensuciarte las manos en C), o sustituyendo el demonio RIL (no es tan fácil, porque el rild
es no que se requiere que sea de código abierto, por lo que no se sabe cuál es la implementación subyacente sin hacer ingeniería inversa). Hacer esto último romperá la capacidad de Android para usarlo correctamente, a menos que de alguna manera se llegue a un canal de compatibilidad para la comunicación proxy entre el nuevo RIL y el RIL existente - e incluso entonces, hay una buena probabilidad de que Android se confunda cuando intenta hacer una llamada (sabiendo que el módem no debe estar actualmente en uso, pero recibiendo una respuesta de la radio diciendo que está en uso).
En su defecto, también podrías conseguirlo sustituyendo la aplicación Teléfono y utilizando todas las APIs nativas de la plataforma. Pero creo que no funcionará (al menos basándome en mi conocimiento de cómo funcionan las radios de HTC). En un dispositivo HTC, cuando realizas una llamada, Android notifica rild
que realiza la llamada, y luego rild
dice el radio que debe enrutar todo el audio de la llamada a través del altavoz del teléfono y enrutar todo el sonido recogido del micrófono en la llamada telefónica. La plataforma Android no gestiona el enrutamiento del audio de la llamada por sí misma.
Todo lo anterior requiere rootear el dispositivo e instalar una ROM personalizada como mínimo.