GPS EM-406 example

In regards to mopowered's problem, I checked the decimal value of those characters you were getting and it looks like they're all off by 128. Try something like a

if( val > 128 )
return val-128;
else
return val;

It's hacky but it's a quick check to see if you can get good characters from it. I remember running into a problem with chars and bytes before in regards to this 128 offset.