Fix degrees to DMH conversion for APRS to support longitudes > 127 and < -128. Use 16-bit signed values for degrees.

pull/54/head
Mikael Nousiainen 2023-08-09 10:39:17 +03:00
rodzic c23c1569d3
commit da2743e4d1
4 zmienionych plików z 6 dodań i 6 usunięć

Wyświetl plik

@ -4,19 +4,19 @@
volatile uint16_t aprs_packet_counter = 0;
void convert_degrees_to_dmh(long x, int8_t *degrees, uint8_t *minutes, uint8_t *h_minutes)
void convert_degrees_to_dmh(long x, int16_t *degrees, uint8_t *minutes, uint8_t *h_minutes)
{
uint8_t sign = (uint8_t) (x > 0 ? 1 : 0);
if (!sign) {
x = -(x);
}
*degrees = (int8_t) (x / 1000000);
*degrees = (int16_t) (x / 1000000);
x = x - (*degrees * 1000000);
x = (x) * 60 / 10000;
*minutes = (uint8_t) (x / 100);
*h_minutes = (uint8_t) (x - (*minutes * 100));
if (!sign) {
*degrees = -*degrees;
*degrees = (int16_t ) -*degrees;
}
}

Wyświetl plik

@ -7,7 +7,7 @@
#include "gps.h"
#include "telemetry.h"
void convert_degrees_to_dmh(long x, int8_t *degrees, uint8_t *minutes, uint8_t *h_minutes);
void convert_degrees_to_dmh(long x, int16_t *degrees, uint8_t *minutes, uint8_t *h_minutes);
void aprs_generate_timestamp(char *timestamp, size_t length, telemetry_data *data);
extern volatile uint16_t aprs_packet_counter;

Wyświetl plik

@ -10,7 +10,7 @@ size_t aprs_generate_position(uint8_t *payload, size_t length, telemetry_data *d
{
char timestamp[12];
int8_t la_degrees, lo_degrees;
int16_t la_degrees, lo_degrees;
uint8_t la_minutes, la_h_minutes, lo_minutes, lo_h_minutes;
convert_degrees_to_dmh(data->gps.latitude_degrees_1000000 / 10, &la_degrees, &la_minutes, &la_h_minutes);

Wyświetl plik

@ -10,7 +10,7 @@ size_t aprs_generate_weather_report(uint8_t *payload, size_t length, telemetry_d
{
char timestamp[12];
int8_t la_degrees, lo_degrees;
int16_t la_degrees, lo_degrees;
uint8_t la_minutes, la_h_minutes, lo_minutes, lo_h_minutes;
convert_degrees_to_dmh(data->gps.latitude_degrees_1000000 / 10, &la_degrees, &la_minutes, &la_h_minutes);