Jerry Rigging an AVR

By Akshit Kumar
Published on May 16, 2021

It began when I was developing this OpenPGP key page on this website. I was wondering how could the legitimacy of my key be verified when the idea of having an over-the-phone fingerprint cross-checking system hit. Since phone numbers are difficult to hijack, I decided to go with it and recorded my voice orating my key's fingerprint, modified it, and exported it.

However, I had no idea how to could an application like that function. I began by searching the web to see if a solution I was looking for even existed. After much research, I found it was practically impossible on Android versions 5.0+ to answer incoming phone calls, let alone route audio to a call internally.

When I finally gave up the hopes of developing this on my own, I began to look for dedicated Android developers to hire in hopes of them knowing better about this than I do. After posting an advertisement on a Discord server, I got two replies. I told them both — I was looking for a relatively straightforward application with minimal interface and variables that would answer a phone call and play a pre-recorded message that would be hardcoded into the application. The first one quoted a price of USD 1,500 to develop such an application. Considering I am from India, I could easily hire someone for an entire year for $1500, who would answer all calls and orate the PGP key's fingerprint. I denied the kind man's offer and moved on to the second applicant. When I listed my requirements, he researched and found it was not possible. Now, I made up my mind to build this myself.

I decided to build this using Node.JS because, well, a Node.JS IDE was open on my computer. Before I could program anything, I needed a basic idea of how to accomplish this. I came up with this:

AVR Diagram

To sum it up, the phone has a browser client listening for a call answer event; when a call connects—it sends a request to the listening web server and begins a timeout as per the audio duration, then the server tells the browser window open on the phone to begin playing the audio. When a call disconnects, the audio is stopped.

I am not very good at explaining nerd stuff, so I think this is a good time to wrap this up.