IARSDR — un receptor RTL-SDR para Android, driver incluido

IARSDR es una app de Android que convierte el teléfono en un receptor de radio definida por software. Conecta un dongle RTL-SDR (RTL2832U) al puerto USB y obtienes un espectro en vivo, una cascada (waterfall) y audio en FM/AM/SSB/CW. También habla rtl_tcp, así que puede recibir desde un servidor remoto en lugar del hardware local.

El driver es la parte interesante. Hablar con un RTL2832U normalmente implica librtlsdr sobre libusb — código C, nativo, y por lo general root o un rodeo por el kernel. Android expone una API de USB host desde Kotlin, así que porté todo: la inicialización del baseband del RTL2832U, el resampler y la sintonía por DDC, el muestreo directo para HF, y los cinco drivers de sintonizador — R820T/R828D (incluido el RTL-SDR Blog V4/V4L con su upconverter integrado), E4000, FC0012, FC0013 y FC2580. El port es fiel línea por línea al fork RTL-SDR Blog de librtlsdr; lo delicado fue el signo (el Byte con signo de Kotlin frente al uint8_t de C), las direcciones I2C de 8 bits en los headers en C, y mantener la aritmética del PLL en 64 bits donde el C usa uint64_t. Sin NDK, sin libusb, sin root.

Ese driver vive en su propio repositorio, librtlsdrk, y se incorpora a la app como un submódulo git para poder reutilizarse por separado. Es GPL v2, acreditando a los autores originales de librtlsdr en cada archivo.

Sobre él, la app. Las muestras IQ fluyen como arreglos de float intercalados — nunca objetos encajonados en el camino crítico, lo que importa cuando el teléfono maneja unos megabytes por segundo y una pausa del GC se convierte en un corte de audio. El mismo búfer alimenta la FFT de la pantalla y, cuando el audio está activo, un demodulador cuya salida se remuestrea fraccionariamente para fijarse exactamente al reloj de audio (la diezmación entera por sí sola deriva y vacía el búfer). Hay una cadena de filtros de audio configurable — reducción de ruido por STFT en flujo, noise blanker, notch automático — con preajustes por modo, además de grabación en WAV e IQ crudo.

La interfaz intenta merecer la pantalla: un divisor arrastrable entre espectro y cascada, un dial de sintonía estilo radio analógica con inercia, un modo de pantalla limpia, y temas claro/oscuro que siguen al sistema. Habla español, inglés y portugués.

No recopila datos ni muestra anuncios. El código está en GitHub.

← todas las entradas