int CCONV gps_on_position_change(CPhidgetGPSHandle gps, void *userptr, double latitude, double longitude, double altitude) { PhidgetInfo *info = userptr; GpsInfo *gps_info = info->type_info; // Calculate the sample time: sample_tick(gps_info->sample_rate, NULL); // Get the GPS time: GPSDate date; GPSTime time; if ( (CPhidgetGPS_getDate(gps, &date) == EPHIDGET_OK) && (CPhidgetGPS_getTime(gps, &time) == EPHIDGET_OK) ) { gps_info->now_at_utc.tm_sec = time.tm_sec; gps_info->now_at_utc.tm_min = time.tm_min; gps_info->now_at_utc.tm_hour = time.tm_hour; gps_info->now_at_utc.tm_mday = date.tm_mday; gps_info->now_at_utc.tm_mon = date.tm_mon; gps_info->now_at_utc.tm_year = date.tm_year; gps_info->now_at_utc_ms = (time.tm_ms >= 1000) ? 0 : time.tm_ms; gps_info->is_now_at_utc_known = true; } else gps_info->is_now_at_utc_known = false; // Get Position values: if (gps_info->latitude != PUNK_DBL) { gps_info->is_latitude_known = true; gps_info->latitude = latitude; } else gps_info->is_latitude_known = false; if (gps_info->longitude != PUNK_DBL) { gps_info->is_longitude_known = true; gps_info->longitude = longitude; } else gps_info->is_longitude_known = false; if (gps_info->altitude != PUNK_DBL) { gps_info->is_altitude_known = true; gps_info->altitude = altitude; } else gps_info->is_altitude_known = false; double heading, velocity; if (CPhidgetGPS_getHeading(gps, &heading) == EPHIDGET_OK) { gps_info->heading = heading; gps_info->is_heading_known = true; } else gps_info->is_heading_known = false; if (CPhidgetGPS_getVelocity(gps, &velocity) == EPHIDGET_OK) { gps_info->velocity = velocity; gps_info->is_velocity_known = true; } else gps_info->is_velocity_known = false; return 0; }
int GpsSync::runStep() { if(!this->is_signal_acquired) { // Reset status initStatusValues(); // Do nothing - Sleep std::this_thread::sleep_for(this->period_time); } else { // Work // Date and time // TODO check CPhidgetGPS_getDate(this->gps_handle_, &date); CPhidgetGPS_getTime(this->gps_handle_, &time); // NMEA data // TODO check CPhidgetGPS_getNMEAData(this->gps_handle_, &NMEAdata); // Checks if(!is_position_fixed) { is_position_acquired=false; initPoseValues(); } // Fix Status this->positionFixStatusChangeHandler(status); // Position change this->positionHandler(latitude, longitude, altitude); this->headingHandler(heading); this->velocityHandler(velocity); this->dateAndTimeHandler(date, time); this->nmeaDataHandler(NMEAdata); // Sleep this->time_ref = this->time_ref + period_time; std::this_thread::sleep_until(this->time_ref); } return 0; }
int GpsAsync::PositionChange_Handler(CPhidgetGPSHandle gps, double latitude, double longitude, double altitude) { double heading, velocity; GPSDate date; GPSTime time; NMEAData NMEAdata; // Heading and Velocity // TODO check CPhidgetGPS_getHeading(gps, &heading); CPhidgetGPS_getVelocity(gps, &velocity); // Date and time // TODO check CPhidgetGPS_getDate(gps, &date); CPhidgetGPS_getTime(gps, &time); // NMEA data // TODO check CPhidgetGPS_getNMEAData(gps, &NMEAdata); // Function to use the data this->positionHandler(latitude, longitude, altitude); this->headingHandler(heading); this->velocityHandler(velocity); this->dateAndTimeHandler(date, time); this->nmeaDataHandler(NMEAdata); return 1; }