disable sensor detection - temporary solution

This commit is contained in:
2025-04-28 21:00:16 +02:00
parent 8b9e72ef71
commit 5ea05fa209
6 changed files with 95 additions and 107 deletions

View File

@@ -49,7 +49,7 @@ void gps_task(void *arg)
line[line_pos] = '\0';
if (line[0] == '$') {
ESP_LOGV(TAG, "Received NMEA: %s", line);
ESP_LOGI(TAG, "Received NMEA: %s", line);
if (strstr(line, "$GPGGA") == line) {
parse_gpgga(line);
@@ -72,8 +72,7 @@ void gps_task(void *arg)
}
}
void parse_gpgga(const char *nmea)
{
void parse_gpgga(const char *nmea) {
char *fields[15];
char temp[GPS_LINE_MAX_LEN];
strncpy(temp, nmea, GPS_LINE_MAX_LEN);
@@ -108,12 +107,11 @@ void parse_gpgga(const char *nmea)
// Altitude
const char *altitude = fields[9];
ESP_LOGI(TAG, "[GPGGA] Time: %s, Lat: %s %s, Lon: %s %s, Fix: %s, Sats: %s, Alt: %sm",
utc_time, lat, lat_dir, lon, lon_dir, fix_quality, num_satellites, altitude);
printf("[GPGGA] Time: %s, Lat: %s %s, Lon: %s %s, Fix: %s, Sats: %s, Alt: %sm\n",
utc_time, lat, lat_dir, lon, lon_dir, fix_quality, num_satellites, altitude);
}
void parse_gprmc(const char *nmea)
{
void parse_gprmc(const char *nmea) {
char *fields[13];
char temp[GPS_LINE_MAX_LEN];
strncpy(temp, nmea, GPS_LINE_MAX_LEN);
@@ -137,8 +135,8 @@ void parse_gprmc(const char *nmea)
const char *speed_knots = fields[7];
const char *date = fields[9];
ESP_LOGI(TAG, "[GPRMC] Date: %s, Time: %s, Lat: %s %s, Lon: %s %s, Speed: %s knots, Status: %s",
date, utc_time, lat, lat_dir, lon, lon_dir, speed_knots, status);
printf("[GPRMC] Date: %s, Time: %s, Lat: %s %s, Lon: %s %s, Speed: %s knots, Status: %s\n",
date, utc_time, lat, lat_dir, lon, lon_dir, speed_knots, status);
}
@@ -154,29 +152,34 @@ static uint32_t time_to_seconds_struct(const char *time_str) {
// Function to convert DMS (degrees minutes.decimalminutes) to centi-degrees
static int32_t dms_to_centi_degrees_struct(const char *dms_str, const char *direction) {
if (dms_str == NULL || direction == NULL || strlen(dms_str) < 7) return 0;
char degrees_str[4] = {0};
char minutes_decimal_str[10] = {0};
strncpy(degrees_str, dms_str, 2);
strncpy(minutes_decimal_str, dms_str + 2, strlen(dms_str) - 2);
double degrees = atof(degrees_str);
double minutes = atof(minutes_decimal_str);
double decimal_degrees = degrees + (minutes / 60.0);
if (direction[0] == 'S' || direction[0] == 'W') {
decimal_degrees *= -1.0;
char data_str[20] = {0};
char *dataStr = data_str;
for (int i = 0; i < 20; i++) {
if (dms_str[i] == 0) {
break;
}
if (dms_str[i] == '.') {
continue;
}
*(dataStr++) = dms_str[i];
}
return (int32_t)(decimal_degrees * 10000);
int32_t degrees = atoi(data_str);
if (direction[0] == 'S' || direction[0] == 'W') {
degrees *= -1;
}
return degrees;
}
// Function to convert altitude string to centi-meters
static int16_t altitude_to_centi_meters_struct(const char *alt_str) {
if (alt_str == NULL) return 0;
return (int16_t)(atof(alt_str) * 100);
return (int16_t) (atof(alt_str) * 100);
}
// Function to convert speed from knots to centi-knots
static uint16_t speed_to_centi_knots_struct(const char *speed_str) {
if (speed_str == NULL) return 0;
return (uint16_t)(atof(speed_str) * 100);
return (uint16_t) (atof(speed_str) * 100);
}
// Function to convert date string (ddmmyy) to yymmdd integer
@@ -190,8 +193,7 @@ static uint16_t date_to_yyddmm_struct(const char *date_str) {
}
// Function to parse GPGGA NMEA string and return the struct
void parse_gpgga_to_struct(const char *nmea, gps_binary_struct_t *data)
{
void parse_gpgga_to_struct(const char *nmea, gps_binary_struct_t *data) {
char *fields[15];
char temp[GPS_LINE_MAX_LEN];
strncpy(temp, nmea, GPS_LINE_MAX_LEN);
@@ -212,13 +214,12 @@ void parse_gpgga_to_struct(const char *nmea, gps_binary_struct_t *data)
data->num_satellites = atoi(fields[7]);
data->altitude_centi_meters = altitude_to_centi_meters_struct(fields[9]);
} else {
ESP_LOGW(TAG, "GPGGA: Not enough fields to parse struct");
printf("GPGGA: Not enough fields to parse struct");
}
}
// Function to parse GPRMC NMEA string and return the struct
void parse_gprmc_to_struct(const char *nmea, gps_binary_struct_t *data)
{
void parse_gprmc_to_struct(const char *nmea, gps_binary_struct_t *data) {
char *fields[13];
char temp[GPS_LINE_MAX_LEN];
strncpy(temp, nmea, GPS_LINE_MAX_LEN);
@@ -239,6 +240,6 @@ void parse_gprmc_to_struct(const char *nmea, gps_binary_struct_t *data)
data->speed_centi_knots = speed_to_centi_knots_struct(fields[7]);
// Fix quality and num_satellites are typically in GPGGA, so they might be 0 here.
} else {
ESP_LOGW(TAG, "GPRMC: Not enough fields to parse struct");
printf("GPRMC: Not enough fields to parse struct");
}
}