The microcontroller does the things the PC does not have time to do, namely monitor the RDS clock and data signals.
The first step was to write some RDS decoder software code in plain C for a console application using stdio, which is much simpler than a full Windows application. This decoded the files and sent decoded information to an output file. This software worked okay. The files contain data like this:
00C201 0101FC 027671 035261
00C201 01E1E1 026173 03C2A1
The second step was to write a Windows front end which would display the decoded information. I created a dialogue based application with buttons that opened one of eight inputs. Another button starts a timer which triggers the PC to read data at a regular rate (one block every 64ms) and decode that data. If RDS data has such as the station name or radio text has been changed, that is updated in the appropriate windows.
Within the application, the software tasks are carefully sectioned. As much of the software is written in a plain C module, for ease of porting. The bits for display and supplying the raw data are machine-specific so it is okay to have these in the Windows modules.
The I/O stream is created by the windows createfile function. Not only does this create files, but also make other things look like files. My application has a button that tells the software to open a com port as an RDS data source instead of the pre-recorded files. Other devices include sockets and named pipes, so theoretically it would eventually be possible for a PC to analyse RDS data (live or recorded) from a radio on the other side of the planet.
The project came to a halt when the company laid off many people, but it was a lot of fun until then.