I was just thinking that for video and audio we have directX, why not create something like that for cell phones/internet cards/GPS recievers? Use one or two dll's that act as a common front end for these devices. An example might be:
GetGPSCords() or
Dial (Number) or
InetConnect() etc...

This way front end developers can use these dlls and have access to multiple hardware configurations, just like DX developers do.

Of course, just like DirectX, each new version would have to be backwards compatable with all older versions as well.

Just some random thoughts...