Example #1
0
//GPS模块控制应答
static int proto_gps_ctlreply(int seq,const char *data,int len)
{
  char ctl_no;

  ctl_no=data[4];
  
  switch(ctl_no)
  {
    case GPS_GET_LATLON://获得经纬度
    return gps_latlon(seq,data,len);
    break;

    case GPS_GET_TIME://获取卫星时间
    return gps_time(seq,data,len);
    break;

    case GPS_GET_ALTITUDE://获取海拔高度
    return gps_altitude(seq,data,len);
    break;

    case GPS_GET_ALL://所有数据
    return gps_all(seq,data,len);
    break;
  }
  return 0;
}
Example #2
0
void measures_logFormat(char *buf, size_t len)
{
	struct tm *t;
	time_t tim;
	udegree_t lat, lon;
	int32_t altitude;


	bool fix = gps_fixed();
	if (fix)
	{
		lat = gps_info()->latitude;
		lon = gps_info()->longitude;
		altitude = gps_info()->altitude;
	}
	else
	{
		lat = 0;
		lon = 0;
		altitude = 0;
	}

	tim = gps_time();
	t = gmtime(&tim);

	snprintf(buf, len, "%02d:%02d:%02d;%s;%02ld.%.06ld;%03ld.%.06ld;%ld;%.1f;%.1f;%.0f;%.0f;%.1f;%.2f;%.2f;%.2f;%.0f;%.2f;%.2f;%.2f;%d",
		t->tm_hour, t->tm_min, t->tm_sec,
		fix ? "FIX" : "NOFIX",
		lat/1000000, ABS(lat)%1000000,
		lon/1000000, ABS(lon)%1000000,
		altitude,
		sensor_read(ADC_T1),
		sensor_read(ADC_T2),
		sensor_read(ADC_PRESS),
		sensor_read(ADC_HUMIDITY),
		measures_intTemp(),
		sensor_read(ADC_VIN),
		sensor_read(ADC_5V),
		sensor_read(ADC_3V3),
		sensor_read(ADC_CURR),
		measures_acceleration(MMA_X),
		measures_acceleration(MMA_Y),
		measures_acceleration(MMA_Z),
		hadarp_read()
	);

	buf[len - 1] = '\0';
}
Example #3
0
void measures_logFormat(char *buf, size_t len)
{
	struct tm *t;
	time_t tim;
	udegree_t lat, lon;

	bool fix = gps_fixed();
	if (fix)
	{
		lat = gps_info()->latitude;
		lon = gps_info()->longitude;
	}
	else
	{
		lat = 0;
		lon = 0;
	}

	tim = gps_time();
	t = gmtime(&tim);

	size_t cnt = snprintf(buf, len, "%02d:%02d:%02d;%s;%02ld.%.06ld;%03ld.%.06ld;",
		t->tm_hour, t->tm_min, t->tm_sec,
		fix ? "FIX" : "NOFIX",
		lat/1000000, ABS(lat)%1000000,
		lon/1000000, ABS(lon)%1000000);

	if (cnt < len)
	{
		buf += cnt;
		len -= cnt;
		measures_printMeasures(buf, len);
	}
	else
		buf[len-1] = '\0';
}
Example #4
0
void gps_pool(void) {
	int i = 0;

	//zapis odczytanego znaku
	RxBuffer[RxCounter] = (USART_ReceiveData(GPS_USART) & 0x7F);
	//inkrementacja licznika danych
	RxCounter++;
	//zabezpieczenie przed wprowadzeniem zbyt dlugiego ciagiu znakow
	if((RxBuffer[RxCounter - 2] != '\r') &&
	   (RxBuffer[RxCounter - 1] != '\n') &&
	   (RxCounter == 255)) 
	{
		
		RxCounter = 253;
	}
	
	//zakonczenie transmisji ciagu znakiem nowej linii
	else if(
		(RxBuffer[RxCounter - 2] == '\r') &&
		(RxBuffer[RxCounter - 1] == '\n')
	) {

		//odebrany ciag jest komunikatem VTG
		if(
			(RxBuffer[0] == '$') &&
			(RxBuffer[1] == 'G') &&
			(RxBuffer[2] == 'P') &&
			(RxBuffer[3] == 'V') &&
			(RxBuffer[4] == 'T') &&
			(RxBuffer[5] == 'G')
		)
		{
			//skopiowanie odebranego ciagu do RxBufferVTG
			//oraz wyzerowanie RxBuffer
			for(i=0; i<256; i++)
			{
				RxBufferVTG[i] = RxBuffer[i];
//				printf("%c", RxBuffer[i]);
				RxBuffer[i] = 0;
			}
			//wyzerowanie licznika
			RxCounter = 0;
		}
		//odebrany ciag jest komunikatem RMC
		else if(
			(RxBuffer[0] == '$') &&
			(RxBuffer[1] == 'G') &&
			(RxBuffer[2] == 'P') &&
			(RxBuffer[3] == 'R') &&
			(RxBuffer[4] == 'M') &&
			(RxBuffer[5] == 'C')
		)
		{
			//skopiowanie odebranego ciagu do RxBufferRMC
			//oraz wyzerowanie RxBuffer
			for(i=0; i<256; i++)
			{
				RxBufferRMC[i] = RxBuffer[i];
//				printf("%c", RxBuffer[i]);
				RxBuffer[i] = 0;
			}
			//wyzerowanie licznika
			RxCounter = 0;
		}
		//odebrany ciag nie nalezy do oczekiwanych komunikatów
		else
		{
			//wyczyszczenie bufora
			for(i=0; i<256; i++)
				{RxBuffer[i] = 0;}
			//wyzerowanie licznika
			RxCounter = 0;
		}
	}

	// create output string
    sprintf(gps_string, "X:%s,%s,%s,%s,%s", gps_time(), gps_latitude(),
					  									  gps_longitude(), gps_speed(), 
														  gps_direction());    

}