static void MainFormRefresh(FormType *frmP) { Err errPVT; GPSPVTDataType pvt; UInt16 libVersion = 0; UInt8 maxSats = 0; LatLongComp LatLong; float lat, lon; Char UTC[9]; Int16 secs, mins, hours; HIDEOBJECTID(frmP, MainFix2DLabel); HIDEOBJECTID(frmP, MainFix2DDiffLabel); HIDEOBJECTID(frmP, MainFix3DLabel); HIDEOBJECTID(frmP, MainFix3DDiffLabel); HIDEOBJECTID(frmP, MainFixUnusableLabel); HIDEOBJECTID(frmP, MainFixInvalidLabel); if (mggGarminIsOpen) { libVersion = GPSGetLibAPIVersion(mggGarminLibRef); maxSats = GPSGetMaxSatellites(mggGarminLibRef); errPVT = GPSGetPVT(mggGarminLibRef, &pvt); //err = GPSGetTime(mggGarminLibRef, &time); //err = GPSGetPosition(mggGarminLibRef, &position); //err = GPSGetVelocity(mggGarminLibRef, &velocity); SetFieldFromUInt16(frmP, MainAPIVersionField, libVersion); SetFieldFromUInt16(frmP, MainMaxSatsField, (UInt16) maxSats); switch (pvt.status.mode) { case gpsModeOff: SetFieldTextFromStr(frmP, MainGPSModeField, "GPS Off"); break; case gpsModeNormal: SetFieldTextFromStr(frmP, MainGPSModeField, "GPS normal"); break; case gpsModeBatSaver: SetFieldTextFromStr(frmP, MainGPSModeField, "battery save mode"); break; case gpsModeSim: SetFieldTextFromStr(frmP, MainGPSModeField, "simulated GPS"); break; case gpsModeExternal: SetFieldTextFromStr(frmP, MainGPSModeField, "external GPS"); break; } switch (pvt.status.fix) { case gpsFixUnusable: SHOWOBJECTID(frmP, MainFixUnusableLabel); break; case gpsFixInvalid: SHOWOBJECTID(frmP, MainFixInvalidLabel); break; case gpsFix2D: SHOWOBJECTID(frmP, MainFix2DLabel); break; case gpsFix2DDiff: SHOWOBJECTID(frmP, MainFix2DDiffLabel); break; case gpsFix3D: SHOWOBJECTID(frmP, MainFix3DLabel); break; case gpsFix3DDiff: SHOWOBJECTID(frmP, MainFix3DDiffLabel); break; } if (errPVT == gpsErrNone && (pvt.status.fix >= gpsFix2D)) { SetFieldFromFloat(frmP, MainEPETotalField, pvt.status.epe * METERS_TO_FEET, 1); SetFieldFromFloat(frmP, MainEPEhorizField, pvt.status.eph * METERS_TO_FEET, 1); SetFieldFromFloat(frmP, MainEPEvertField, pvt.status.epv * METERS_TO_FEET, 1); SetFieldFromInt32(frmP, MainLatSemicField, pvt.position.lat); SetFieldFromInt32(frmP, MainLonSemicField, pvt.position.lon); lat = pvt.position.lat * SemicirclesToDegrees; lon = pvt.position.lon * SemicirclesToDegrees; LATLONGCOMPINIT(&LatLong, lat, lon); ShowAngleInField(frmP, MainLatField, &LatLong.lat); ShowAngleInField(frmP, MainLonField, &LatLong.lon); hours = pvt.time.seconds / 3600L; mins = (pvt.time.seconds / 60L) - (hours * 60); secs = pvt.time.seconds - ((hours*3600L) + (mins*60L)); StrPrintF(UTC, "%02d:%02d:%02d", hours, mins, secs); SetFieldTextFromStr(frmP, MainTimeField, UTC); SetFieldFromFloat(frmP, MainMSLelevField, pvt.position.altMSL * METERS_TO_FEET, 1); SetFieldFromFloat(frmP, MainWGS84elevField, pvt.position.altWGS84 * METERS_TO_FEET, 1); SetFieldFromFloat(frmP, MainTrackField, pvt.velocity.track * RADTODEG, 1); SetFieldFromFloat(frmP, MainSpeedField, pvt.velocity.speed, 1); SetFieldFromFloat(frmP, MainVeloNorthField, pvt.velocity.north, 1); SetFieldFromFloat(frmP, MainVeloEastField, pvt.velocity.east, 1); SetFieldFromFloat(frmP, MainVeloUpField, pvt.velocity.up, 1); } else { SetFieldTextFromStr(frmP, MainEPETotalField, ""); SetFieldTextFromStr(frmP, MainEPEhorizField, ""); SetFieldTextFromStr(frmP, MainEPEvertField, ""); SetFieldTextFromStr(frmP, MainLatField, ""); SetFieldTextFromStr(frmP, MainLonField, ""); SetFieldTextFromStr(frmP, MainLatSemicField, ""); SetFieldTextFromStr(frmP, MainLonSemicField, ""); SetFieldTextFromStr(frmP, MainTimeField, ""); SetFieldTextFromStr(frmP, MainMSLelevField, ""); SetFieldTextFromStr(frmP, MainWGS84elevField, ""); SetFieldTextFromStr(frmP, MainTrackField, ""); SetFieldTextFromStr(frmP, MainSpeedField, ""); SetFieldTextFromStr(frmP, MainVeloUpField, ""); SetFieldTextFromStr(frmP, MainVeloNorthField, ""); SetFieldTextFromStr(frmP, MainVeloEastField, ""); } } else if (mggIsaGarmin) _Debug("lib not open"); else _Debug("not a Garmin"); } -------------------------------------- GarminUtils.c #include "GPSLib68k.h" #include "mgGarminUtils.h" UInt16 mggGarminLibRef; Boolean mggGarminIsOpen; Boolean mggIsaGarmin; Err OpenGarminLibrary(void) { /*------------------------------------------- Find the GPS library. If not found, load it. -------------------------------------------*/ Err err; UInt32 companyID; mggGarminIsOpen = false; err = FtrGet(sysFtrCreator, sysFtrNumOEMCompanyID, &companyID); if (companyID != 'grmn') mggIsaGarmin = false; else mggIsaGarmin = true; err = SysLibFind(gpsLibName, &mggGarminLibRef); if (err) { err = SysLibLoad( gpsLibType, gpsLibCreator, &mggGarminLibRef); } err = GPSOpen(mggGarminLibRef); if (!err) mggGarminIsOpen = true; else _Debug2("libopen", "GPSOpen() failed"); return err; } void CloseGarminLibrary(void) { Err err; if (!mggGarminIsOpen) return; err = GPSClose(mggGarminLibRef); if( err != gpsErrStillOpen ) { SysLibRemove( mggGarminLibRef ); } } -------------------------------------- GarminUtils.h #include "GPSLib68K.h" #define SemicirclesToDegrees (180./2147483648.); extern UInt16 mggGarminLibRef; extern Boolean mggGarminIsOpen; extern Boolean mggIsaGarmin; Err OpenGarminLibrary(void); void CloseGarminLibrary(void);