I've just started with the whole car pc scene, so forgive me if this isn't helpful. I was reading on here where a few people are using the radioshark and have been looking for an sdk or an API. I was also unable to find anything on this, but with a little hunting and a little luck I did discover something interesting.

There is a program out there, RadioTime, that says it uses plug-ins in the style of the application Radiator that I have seen mentioned here a few times, and RadioTime supports the RadioShark through a plug-in that comes with the standard free install. What I discovered is that this plug-in will not work with Radiator, but with the install of RadioTime, I realized the RadioTime application is an ActiveX exe and you get some very nice objects that allow you to control the RadioShark.

The reference you will want to add is to the file mrt.exe file in the RadioTime directory. There is a an object exposed MRTLib.MrtRadioClass. Using this ActiveX object, I've managed to write my own C# application to control the RadioShark. The only failing I've had is in implementing seek/scan functionality. There are methods of searchup and searchdown and a searching property, but I've found no way to actually tell when the object has found a station, it simply searches from where you start until the end.

I imagine that this is because one of the things RadioTime is trying to sell you is their service which includes looking up radio stations by city.

I've also looked at the radioshark.dll that is dropped in the plug-ins directory in the RadioTime folder to see its exports. I attempted to get around the scan issue by calling the ScanStation method in the dll, but I have not had any luck with this yet in C# or Visual Basic. In C# I can declare the HWInit call and get a successful return, but the only way I can declare the ScanStation call and get any return value is with longs which are 8 bytes in .net and I believe the call should be using 4 byte integers, but with that I can get no return. The return I get using a long is a ridiculously large number way out of range. I tried to declare the calls in VB and I just get an invalid calling convention even though the Radiator sdk guide says its done by stdcall with two parameters, bool and longint , I guess these are Delphi variable types which I'm assuming to be bool and int32(or just int) in C# and boolean and long in VB6.

Anyway, just thought I'd share this and if anyone else wants to take a look at the ActiveX objects and dll and let me know what I'm missing on the seek/scan, feel free, hehe. If I ever come up with a solution to this, I'll post it, have a few more tricks to try myself.