sending telemetry to aprs-is

master
Mateusz Lubecki 2023-10-25 22:29:39 +02:00
rodzic 6f0a9c3cbc
commit d8fb993001
9 zmienionych plików z 292 dodań i 75 usunięć

Wyświetl plik

@ -70,6 +70,25 @@ void aprsis_send_beacon(uint8_t async,
const char * string_longitude,
char symbol_s,
const config_data_basic_t * config_data_basic);
void aprsis_prepare_telemetry(
uint16_t _telemetry_counter,
uint8_t _rx_pkts,
uint8_t _tx_pkts,
uint8_t _digi_pkts,
uint8_t _scaled_vbatt_voltage,
uint8_t _viscous_drop_pkts,
uint8_t _scaled_temperature,
char _telemetry_qf,
char _telemetry_degr,
char _telemetry_nav,
char _telemetry_pressure_qf_navaliable,
char _telemetry_humidity_qf_navaliable,
char _telemetry_anemometer_degradated,
char _telemetry_anemometer_navble,
char _telemetry_vbatt_low,
const config_data_mode_t * const _config_mode);
void aprsis_send_telemetry(uint8_t async, const char * callsign_with_ssid);
void aprsis_igate_to_aprsis(AX25Msg *msg, const char * callsign_with_ssid);
void aprsis_send_server_conn_status(const char * callsign_with_ssid);
void aprsis_send_loginstring(const char * callsign_with_ssid);

Wyświetl plik

@ -18,6 +18,8 @@ extern uint8_t rte_main_trigger_gsm_status_packet;
extern uint8_t rte_main_trigger_gsm_loginstring_packet;
extern uint8_t rte_main_trigger_gsm_telemetry_values;
//!< Trigger some reinitialization after waking up from deep sleep
extern uint8_t rte_main_woken_up;

Wyświetl plik

@ -36,6 +36,16 @@ gsm_sim800_state_t * aprsis_gsm_modem_state;
*/
char aprsis_packet_tx_buffer[APRSIS_TX_BUFFER_LN];
/**
* Lenght of buffer
*/
#define APRSIS_TELEMETRY_BUFFER_LN 34
/**
* Buffer used to sent telemetry frames to APRS-IS
*/
char aprsis_packet_telemetry_buffer[APRSIS_TELEMETRY_BUFFER_LN];
/**
*
*/
@ -614,6 +624,135 @@ void aprsis_send_beacon(
aprsis_last_packet_transmit_ts = main_get_master_time();
}
/**
* Prepare telemetry packets to be sent later to the APRS-IS. Just store a string
* with all values, which will be then embedded into packet to be sent to APRS-IS
* @param _telemetry_counter
* @param _rx_pkts
* @param _tx_pkts
* @param _digi_pkts
* @param _scaled_vbatt_voltage
* @param _viscous_drop_pkts
* @param _scaled_temperature
* @param _telemetry_qf
* @param _telemetry_degr
* @param _telemetry_nav
* @param _telemetry_pressure_qf_navaliable
* @param _telemetry_humidity_qf_navaliable
* @param _telemetry_anemometer_degradated
* @param _telemetry_anemometer_navble
* @param _telemetry_vbatt_low
* @param _config_mode
*/
void aprsis_prepare_telemetry(
uint16_t _telemetry_counter,
uint8_t _rx_pkts,
uint8_t _tx_pkts,
uint8_t _digi_pkts,
uint8_t _scaled_vbatt_voltage,
uint8_t _viscous_drop_pkts,
uint8_t _scaled_temperature,
char _telemetry_qf,
char _telemetry_degr,
char _telemetry_nav,
char _telemetry_pressure_qf_navaliable,
char _telemetry_humidity_qf_navaliable,
char _telemetry_anemometer_degradated,
char _telemetry_anemometer_navble,
char _telemetry_vbatt_low,
const config_data_mode_t * const _config_mode) {
// clear buffer before doin anything
memset(aprsis_packet_telemetry_buffer, 0x00, APRSIS_TELEMETRY_BUFFER_LN);
// string lenght returned by snprintf
int snprintf_size = 0;
if (_config_mode->digi_viscous == 0) {
snprintf_size = snprintf(
aprsis_packet_telemetry_buffer,
APRSIS_TELEMETRY_BUFFER_LN,
"T#%03d,%03d,%03d,%03d,%03d,%03d,%c%c%c%c%c%c%c%c",
_telemetry_counter,
_rx_pkts,
_tx_pkts,
_digi_pkts,
_scaled_vbatt_voltage,
_scaled_temperature,
_telemetry_qf,
_telemetry_degr,
_telemetry_nav,
_telemetry_pressure_qf_navaliable,
_telemetry_humidity_qf_navaliable,
_telemetry_anemometer_degradated,
_telemetry_anemometer_navble,
_telemetry_vbatt_low);
}
else {
snprintf_size = snprintf(
aprsis_packet_telemetry_buffer,
APRSIS_TELEMETRY_BUFFER_LN,
"T#%03d,%03d,%03d,%03d,%03d,%03d,%c%c%c%c%c%c%c%c",
_telemetry_counter,
_rx_pkts,
_viscous_drop_pkts,
_digi_pkts,
_scaled_vbatt_voltage,
_scaled_temperature,
_telemetry_qf,
_telemetry_degr,
_telemetry_nav,
_telemetry_pressure_qf_navaliable,
_telemetry_humidity_qf_navaliable,
_telemetry_anemometer_degradated,
_telemetry_anemometer_navble,
_telemetry_vbatt_low);
}
aprsis_packet_telemetry_buffer[snprintf_size] = 0;
}
/**
* Sends to APRS-IS prepared telemetry frame prepared in advance
*/
void aprsis_send_telemetry(uint8_t async, const char * callsign_with_ssid) {
// exif if APRSIS is not logged
if (aprsis_logged == 0) {
return;
}
// exit if message is empty
if (*aprsis_packet_telemetry_buffer == 0) {
return;
}
aprsis_tx_counter++;
aprsis_packet_tx_message_size = snprintf(
aprsis_packet_tx_buffer,
APRSIS_TX_BUFFER_LN,
"%s>AKLPRZ,qAR,%s:%s\r\n",
callsign_with_ssid,
callsign_with_ssid,
aprsis_packet_telemetry_buffer);
aprsis_packet_tx_buffer[aprsis_packet_tx_message_size] = 0;
if (async > 0) {
gsm_sim800_tcpip_async_write((uint8_t *)aprsis_packet_tx_buffer, aprsis_packet_tx_message_size, aprsis_serial_port, aprsis_gsm_modem_state);
}
else {
gsm_sim800_tcpip_write((uint8_t *)aprsis_packet_tx_buffer, aprsis_packet_tx_message_size, aprsis_serial_port, aprsis_gsm_modem_state);
}
aprsis_last_packet_transmit_ts = main_get_master_time();
// clear buffer after it has been used
memset(aprsis_packet_telemetry_buffer, 0x00, APRSIS_TELEMETRY_BUFFER_LN);
}
void aprsis_igate_to_aprsis(AX25Msg *msg, const char * callsign_with_ssid) {
// iterator to move across tx buffer

Wyświetl plik

@ -1192,6 +1192,7 @@ int main(int argc, char* argv[]){
main_ax25.dcd = false;
// check this frame against other frame in visvous buffer waiting to be transmitted
digi_check_with_viscous(&ax25_rxed_frame);
// check if this packet needs to be repeated (digipeated) and do it if it is necessary
@ -1227,18 +1228,27 @@ int main(int argc, char* argv[]){
gsm_sim800_tx_done_event_handler(main_gsm_srl_ctx_ptr, &main_gsm_state);
}
// if GSM status message is triggered and GSM module is not busy transmitting something else
if (rte_main_trigger_gsm_status_packet == 1 && gsm_sim800_tcpip_tx_busy() == 0) {
rte_main_trigger_gsm_status_packet = 0;
aprsis_send_server_conn_status((const char *)&main_callsign_with_ssid);
}
// if loginstring packet (APRS status packet with loginstring received from a server)
// is triggered and GSM module is not busy
if (rte_main_trigger_gsm_loginstring_packet == 1 && gsm_sim800_tcpip_tx_busy() == 0) {
rte_main_trigger_gsm_loginstring_packet = 0;
aprsis_send_loginstring((const char *)&main_callsign_with_ssid);
}
if (rte_main_trigger_gsm_telemetry_values == 1 && gsm_sim800_tcpip_tx_busy() == 0) {
rte_main_trigger_gsm_telemetry_values = 0;
aprsis_send_telemetry(1u, (const char *)&main_callsign_with_ssid);
}
}
#endif

Wyświetl plik

@ -511,6 +511,26 @@ void packet_tx_handler(const config_data_basic_t * const config_basic, const con
// service external watchdog while sending telemetry
io_ext_watchdog_service();
#ifdef PARAMETEO
aprsis_prepare_telemetry(
telemetry_get_counter(),
rx10m,
tx10m,
digi10m,
rte_main_average_battery_voltage,
digidrop10m,
telemetry_scaled_temperature,
telemetry_qf,
telemetry_degr,
telemetry_nav,
telemetry_pressure_qf_navaliable,
telemetry_humidity_qf_navaliable,
telemetry_anemometer_degradated,
telemetry_anemometer_navble,
telemetry_vbatt_low,
config_mode);
#endif
rx10m = 0, tx10m = 0, digi10m = 0, kiss10m = 0, digidrop10m = 0;
}

Wyświetl plik

@ -24,6 +24,9 @@ uint8_t rte_main_trigger_gsm_status_packet = 0;
//!< Trigger sending status packet with received APRS is login string
uint8_t rte_main_trigger_gsm_loginstring_packet = 0;
//!< Trigger packet with telemetry value AFTER it is prepared
uint8_t rte_main_trigger_gsm_telemetry_values = 0;
//!< Trigger some reinitialization after waking up from deep sleep
uint8_t rte_main_woken_up = 0;

Wyświetl plik

@ -45,6 +45,16 @@ typedef enum wind_qf {
WIND_QF_DEGRADATED = 3
}wind_qf_t;
extern char telemetry_qf;
extern char telemetry_degr;
extern char telemetry_nav;
extern char telemetry_pressure_qf_navaliable;
extern char telemetry_humidity_qf_navaliable;
extern char telemetry_anemometer_degradated;
extern char telemetry_anemometer_navble;
extern char telemetry_vbatt_low;
extern uint8_t telemetry_scaled_temperature;
void telemetry_init(void);
#ifdef __cplusplus
@ -96,5 +106,6 @@ void telemetry_send_chns_description(const config_data_basic_t * const config_ba
}
#endif
uint16_t telemetry_get_counter(void);
#endif /* INCLUDE_APRS_TELEMETRY_H_ */

Wyświetl plik

@ -18,10 +18,10 @@
#ifdef PARAMETEO
#include "pwr_save.h"
const char * telemetry_vbatt_normal = "VBATT_GOOD";
const char * telemetry_vbatt_low = "VBATT_LOW";
const char * telemetry_vbatt_cutoff = "VBATT_CUTOFF";
const char * telemetry_vbatt_unknown = "VBATT_UNKNOWN";
const char * status_vbatt_normal = "VBATT_GOOD";
const char * status_vbatt_low = "VBATT_LOW";
const char * status_vbatt_cutoff = "VBATT_CUTOFF";
const char * status_vbatt_unknown = "VBATT_UNKNOWN";
#include "gsm/sim800c_gprs.h"
#include "gsm/sim800c.h"
@ -62,29 +62,29 @@ void status_send_powersave_cutoff(uint16_t battery_voltage, int8_t previous_cuto
// telemetry_vbatt_unknown
if ((previous_cutoff & CURRENTLY_CUTOFF) != 0) {
p = telemetry_vbatt_cutoff;
p = status_vbatt_cutoff;
}
else if ((previous_cutoff & CURRENTLY_VBATT_LOW) != 0) {
p = telemetry_vbatt_low;
p = status_vbatt_low;
}
else if (((previous_cutoff & CURRENTLY_CUTOFF) == 0) && (previous_cutoff & CURRENTLY_VBATT_LOW) == 0){
p = telemetry_vbatt_normal;
p = status_vbatt_normal;
}
else {
p = telemetry_vbatt_unknown;
p = status_vbatt_unknown;
}
if ((current_cutoff & CURRENTLY_CUTOFF) != 0) {
c = telemetry_vbatt_cutoff;
c = status_vbatt_cutoff;
}
else if ((current_cutoff & CURRENTLY_VBATT_LOW) != 0) {
c = telemetry_vbatt_low;
c = status_vbatt_low;
}
else if (((current_cutoff & CURRENTLY_CUTOFF) == 0) && (current_cutoff & CURRENTLY_VBATT_LOW) == 0){
c = telemetry_vbatt_normal;
c = status_vbatt_normal;
}
else {
c = telemetry_vbatt_unknown;
c = status_vbatt_unknown;
}
main_wait_for_tx_complete();

Wyświetl plik

@ -18,7 +18,23 @@
#include <stdio.h>
#include <string.h>
uint16_t telemetry_counter = 0;
static uint16_t telemetry_counter = 0;
// variables with characters to be inserted to APRS telemetry frame
char telemetry_qf = '0';
char telemetry_degr = '0';
char telemetry_nav = '0';
char telemetry_pressure_qf_navaliable = '0';
char telemetry_humidity_qf_navaliable = '0';
char telemetry_anemometer_degradated = '0';
char telemetry_anemometer_navble = '0';
char telemetry_vbatt_low = '0';
// temperature scaled to 0x00-0xFF range for fifth telemetry channel.
// if _METEO mode is enabled this channel sends the temperaure measure by
// internal MS5611 or BME280. If _METEO is not enabled this channel
// could send Dallas DS18B20 masurements if this is enabled in station_config.h
uint8_t telemetry_scaled_temperature = 0;
void telemetry_init(void) {
telemetry_counter = backup_reg_get_telemetry();
@ -99,12 +115,12 @@ void telemetry_send_values_pv ( uint8_t rx_pkts,
wind_qf_t anemometer_qf)
{
// local variables with characters to be inserted to APRS telemetry frame
char qf = '0', degr = '0', nav = '0';
char pressure_qf_navaliable = '0';
char humidity_qf_navaliable = '0';
char anemometer_degradated = '0';
char anemometer_navble = '0';
// char qf = '0', degr = '0', nav = '0';
//
// char pressure_qf_navaliable = '0';
// char humidity_qf_navaliable = '0';
// char anemometer_degradated = '0';
// char anemometer_navble = '0';
uint8_t scaled_battery_current = 0;
uint8_t scaled_battery_voltage = 0;
@ -124,18 +140,18 @@ void telemetry_send_values_pv ( uint8_t rx_pkts,
switch (dallas_qf) {
case DALLAS_QF_FULL:
qf = '1', degr = '0', nav = '0';
telemetry_qf = '1', telemetry_degr = '0', telemetry_nav = '0';
break;
case DALLAS_QF_DEGRADATED:
qf = '0', degr = '1', nav = '0';
telemetry_qf = '0', telemetry_degr = '1', telemetry_nav = '0';
break;
case DALLAS_QF_NOT_AVALIABLE:
qf = '0', degr = '0', nav = '1';
telemetry_qf = '0', telemetry_degr = '0', telemetry_nav = '1';
break;
default:
qf = '0', degr = '0', nav = '0';
telemetry_qf = '0', telemetry_degr = '0', telemetry_nav = '0';
break;
}
@ -143,23 +159,38 @@ void telemetry_send_values_pv ( uint8_t rx_pkts,
switch (press_qf) {
case PRESSURE_QF_NOT_AVALIABLE:
case PRESSURE_QF_UNKNOWN:
pressure_qf_navaliable = '1';
telemetry_pressure_qf_navaliable = '1';
break;
default:
pressure_qf_navaliable = '0';
telemetry_pressure_qf_navaliable = '0';
break;
}
switch (humid_qf) {
case HUMIDITY_QF_UNKNOWN:
case HUMIDITY_QF_NOT_AVALIABLE:
humidity_qf_navaliable = '1';
telemetry_humidity_qf_navaliable = '1';
break;
default:
humidity_qf_navaliable = '0';
telemetry_humidity_qf_navaliable = '0';
}
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, "T#%03d,%03d,%03d,%03d,%03d,%03d,%c%c%c%c%c%c%c0", telemetry_counter++, rx_pkts, digi_pkts, scaled_battery_current, scaled_battery_voltage, scaled_pvcell_volage, qf, degr, nav, pressure_qf_navaliable, humidity_qf_navaliable, anemometer_degradated, anemometer_navble);
main_own_aprs_msg_len = sprintf(
main_own_aprs_msg,
"T#%03d,%03d,%03d,%03d,%03d,%03d,%c%c%c%c%c%c%c0",
telemetry_counter++,
rx_pkts,
digi_pkts,
scaled_battery_current,
scaled_battery_voltage,
scaled_pvcell_volage,
telemetry_qf,
telemetry_degr,
telemetry_nav,
telemetry_pressure_qf_navaliable,
telemetry_humidity_qf_navaliable,
telemetry_anemometer_degradated,
telemetry_anemometer_navble);
if (telemetry_counter > 999)
@ -384,61 +415,47 @@ void telemetry_send_values( uint8_t rx_pkts,
const config_data_mode_t * const config_mode) {
#endif
// local variables with characters to be inserted to APRS telemetry frame
char qf = '0', degr = '0', nav = '0';
char pressure_qf_navaliable = '0';
char humidity_qf_navaliable = '0';
char anemometer_degradated = '0';
char anemometer_navble = '0';
char vbatt_low = '0';
// temperature scaled to 0x00-0xFF range for fifth telemetry channel.
// if _METEO mode is enabled this channel sends the temperaure measure by
// internal MS5611 or BME280. If _METEO is not enabled this channel
// could send Dallas DS18B20 masurements if this is enabled in station_config.h
uint8_t scaled_temperature = 0;
// get the quality factor for wind measurements
if (anemometer_qf == WIND_QF_DEGRADATED) {
anemometer_degradated = '1';
anemometer_navble = '0';
telemetry_anemometer_degradated = '1';
telemetry_anemometer_navble = '0';
}
else if (anemometer_qf == WIND_QF_NOT_AVALIABLE) {
anemometer_degradated = '0';
anemometer_navble = '1';
telemetry_anemometer_degradated = '0';
telemetry_anemometer_navble = '1';
}
else if (anemometer_qf == WIND_QF_UNKNOWN) {
anemometer_degradated = '1';
anemometer_navble = '1';
telemetry_anemometer_degradated = '1';
telemetry_anemometer_navble = '1';
}
// scale the physical temperature and limit upper and lower boundary if
// it is required
if (temperature < -50.0f) {
scaled_temperature = (uint8_t)0;
telemetry_scaled_temperature = (uint8_t)0;
}
else if (temperature > 70.0f) {
scaled_temperature = (uint8_t)255;
telemetry_scaled_temperature = (uint8_t)255;
}
else {
scaled_temperature = (uint8_t)((temperature + 50.0f) * 2.0f);
telemetry_scaled_temperature = (uint8_t)((temperature + 50.0f) * 2.0f);
}
// set the quality factor for dallas DS18B20
switch (dallas_qf) {
case DALLAS_QF_FULL:
qf = '1', degr = '0', nav = '0';
telemetry_qf = '1', telemetry_degr = '0', telemetry_nav = '0';
break;
case DALLAS_QF_DEGRADATED:
qf = '0', degr = '1', nav = '0';
telemetry_qf = '0', telemetry_degr = '1', telemetry_nav = '0';
break;
case DALLAS_QF_NOT_AVALIABLE:
qf = '0', degr = '0', nav = '1';
telemetry_qf = '0', telemetry_degr = '0', telemetry_nav = '1';
break;
default:
qf = '0', degr = '0', nav = '0';
telemetry_qf = '0', telemetry_degr = '0', telemetry_nav = '0';
break;
}
@ -446,26 +463,26 @@ void telemetry_send_values( uint8_t rx_pkts,
switch (press_qf) {
case PRESSURE_QF_NOT_AVALIABLE:
case PRESSURE_QF_UNKNOWN:
pressure_qf_navaliable = '1';
telemetry_pressure_qf_navaliable = '1';
break;
default:
pressure_qf_navaliable = '0';
telemetry_pressure_qf_navaliable = '0';
break;
}
switch (humid_qf) {
case HUMIDITY_QF_UNKNOWN:
case HUMIDITY_QF_NOT_AVALIABLE:
humidity_qf_navaliable = '1';
telemetry_humidity_qf_navaliable = '1';
break;
default:
humidity_qf_navaliable = '0';
telemetry_humidity_qf_navaliable = '0';
}
#ifdef PARAMETEO
// telemetry won't be sent during cutoff anyway so this simplification is correct here
if (cutoff_and_vbat_low > 0) {
vbatt_low = '1';
telemetry_vbatt_low = '1';
}
#endif
@ -475,39 +492,31 @@ void telemetry_send_values( uint8_t rx_pkts,
#ifdef STM32L471xx
if (config_mode->digi_viscous == 0) {
// generate the telemetry frame from values
#ifdef _DALLAS_AS_TELEM
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, "T#%03d,%03d,%03d,%03d,%03d,%03d,%c%c%c%c%c%c%c%c", telemetry_counter++, rx_pkts, tx_pkts, digi_pkts, scaled_vbatt_voltage, scaled_temperature, qf, degr, nav, pressure_qf_navaliable, humidity_qf_navaliable, anemometer_degradated, anemometer_navble, vbatt_low);
#else
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, "T#%03d,%03d,%03d,%03d,%03d,%03d,%c%c%c%c%c%c%c%c", telemetry_counter++, rx_pkts, tx_pkts, digi_pkts, scaled_vbatt_voltage, scaled_temperature, qf, degr, nav, pressure_qf_navaliable, humidity_qf_navaliable, anemometer_degradated, anemometer_navble, vbatt_low);
#endif
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, "T#%03d,%03d,%03d,%03d,%03d,%03d,%c%c%c%c%c%c%c%c", telemetry_counter++, rx_pkts, tx_pkts, digi_pkts, scaled_vbatt_voltage, telemetry_scaled_temperature, telemetry_qf, telemetry_degr, telemetry_nav, telemetry_pressure_qf_navaliable, telemetry_humidity_qf_navaliable, telemetry_anemometer_degradated, telemetry_anemometer_navble, telemetry_vbatt_low);
}
else {
#ifdef _DALLAS_AS_TELEM
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, "T#%03d,%03d,%03d,%03d,%03d,%03d,%c%c%c%c%c%c%c%c", telemetry_counter++, rx_pkts, viscous_drop_pkts, digi_pkts, scaled_vbatt_voltage, scaled_temperature, qf, degr, nav, pressure_qf_navaliable, humidity_qf_navaliable, anemometer_degradated, anemometer_navble, vbatt_low);
#else
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, "T#%03d,%03d,%03d,%03d,%03d,%03d,%c%c%c%c%c%c%c%c", telemetry_counter++, rx_pkts, viscous_drop_pkts, digi_pkts, scaled_vbatt_voltage, scaled_temperature, qf, degr, nav, pressure_qf_navaliable, humidity_qf_navaliable, anemometer_degradated, anemometer_navble, vbatt_low);
#endif
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, "T#%03d,%03d,%03d,%03d,%03d,%03d,%c%c%c%c%c%c%c%c", telemetry_counter++, rx_pkts, viscous_drop_pkts, digi_pkts, scaled_vbatt_voltage, telemetry_scaled_temperature, telemetry_qf, telemetry_degr, telemetry_nav, telemetry_pressure_qf_navaliable, telemetry_humidity_qf_navaliable, telemetry_anemometer_degradated, telemetry_anemometer_navble, telemetry_vbatt_low);
}
#else
if (config_mode->digi_viscous == 0) {
// generate the telemetry frame from values
#ifdef _DALLAS_AS_TELEM
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, "T#%03d,%03d,%03d,%03d,%03d,%03d,%c%c%c%c%c%c%c0", telemetry_counter++, rx_pkts, tx_pkts, digi_pkts, kiss_pkts, scaled_temperature, qf, degr, nav, pressure_qf_navaliable, humidity_qf_navaliable, anemometer_degradated, anemometer_navble);
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, "T#%03d,%03d,%03d,%03d,%03d,%03d,%c%c%c%c%c%c%c0", telemetry_counter++, rx_pkts, tx_pkts, digi_pkts, kiss_pkts, scaled_temperature, telemetry_qf, telemetry_degr, telemetry_nav, telemetry_pressure_qf_navaliable, telemetry_humidity_qf_navaliable, telemetry_anemometer_degradated, telemetry_anemometer_navble);
#else
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, "T#%03d,%03d,%03d,%03d,%03d,%03d,%c%c%c%c%c%c%c0", telemetry_counter++, rx_pkts, tx_pkts, digi_pkts, kiss_pkts, scaled_temperature, qf, degr, nav, pressure_qf_navaliable, humidity_qf_navaliable, anemometer_degradated, anemometer_navble);
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, "T#%03d,%03d,%03d,%03d,%03d,%03d,%c%c%c%c%c%c%c0", telemetry_counter++, rx_pkts, tx_pkts, digi_pkts, kiss_pkts, scaled_temperature, telemetry_qf, telemetry_degr, telemetry_nav, telemetry_pressure_qf_navaliable, telemetry_humidity_qf_navaliable, telemetry_anemometer_degradated, telemetry_anemometer_navble);
#endif
}
else {
#ifdef _DALLAS_AS_TELEM
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, "T#%03d,%03d,%03d,%03d,%03d,%03d,%c%c%c%c%c%c%c0", telemetry_counter++, rx_pkts, tx_pkts, digi_pkts, viscous_drop_pkts, scaled_temperature, qf, degr, nav, pressure_qf_navaliable, humidity_qf_navaliable, anemometer_degradated, anemometer_navble);
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, "T#%03d,%03d,%03d,%03d,%03d,%03d,%c%c%c%c%c%c%c0", telemetry_counter++, rx_pkts, tx_pkts, digi_pkts, viscous_drop_pkts, scaled_temperature, telemetry_qf, telemetry_degr, telemetry_nav, telemetry_pressure_qf_navaliable, telemetry_humidity_qf_navaliable, telemetry_anemometer_degradated, telemetry_anemometer_navble);
#else
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, "T#%03d,%03d,%03d,%03d,%03d,%03d,%c%c%c%c%c%c%c0", telemetry_counter++, rx_pkts, tx_pkts, digi_pkts, viscous_drop_pkts, scaled_temperature, qf, degr, nav, pressure_qf_navaliable, humidity_qf_navaliable, anemometer_degradated, anemometer_navble);
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, "T#%03d,%03d,%03d,%03d,%03d,%03d,%c%c%c%c%c%c%c0", telemetry_counter++, rx_pkts, tx_pkts, digi_pkts, viscous_drop_pkts, scaled_temperature, telemetry_qf, telemetry_degr, telemetry_nav, telemetry_pressure_qf_navaliable, telemetry_humidity_qf_navaliable, telemetry_anemometer_degradated, telemetry_anemometer_navble);
#endif
}
#endif
// reset the frame counter if it overflowed
if (telemetry_counter > 255) {
if (telemetry_counter > 999) {
telemetry_counter = 0;
}
@ -533,3 +542,7 @@ void telemetry_send_values( uint8_t rx_pkts,
afsk_txStart(&main_afsk);
}
uint16_t telemetry_get_counter(void) {
return telemetry_counter;
}