Пример #1
0
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;
}
Пример #2
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;
}
Пример #3
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;
}