sending telemetry and telemetry description

master
Mateusz Lubecki 2023-10-27 21:33:00 +02:00
rodzic 8090c1ed83
commit 95712dedde
14 zmienionych plików z 271 dodań i 169 usunięć

Wyświetl plik

@ -12,6 +12,7 @@
#include "drivers/serial.h"
#include "gsm/sim800c_tcpip.h"
#include "ax25.h"
#include "telemetry.h"
typedef enum aprsis_return {
@ -88,6 +89,11 @@ void aprsis_prepare_telemetry(
char _telemetry_vbatt_low,
const config_data_mode_t * const _config_mode);
void aprsis_send_telemetry(uint8_t async, const char * callsign_with_ssid);
telemetry_description_t aprsis_send_description_telemetry(uint8_t async,
const telemetry_description_t what,
const config_data_basic_t * const config_basic,
const config_data_mode_t * const config_mode,
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);

Wyświetl plik

@ -76,7 +76,7 @@ void backup_reg_set_last_sleep_duration(uint32_t);
void backup_reg_reset_counters(void);
uint8_t backup_reg_get_telemetry(void);
void backup_reg_set_telemetry(uint8_t);
void backup_reg_set_telemetry(uint16_t);
void backup_reg_get_packet_counters(uint8_t * beacon_counter, uint8_t * meteo_counter, uint8_t * meteo_gsm_counter);
void backup_reg_set_packet_counters(uint8_t beacon_counter, uint8_t meteo_counter, uint8_t meteo_gsm_counter);

Wyświetl plik

@ -20,7 +20,7 @@
#define PWR_SWITCH_BOTH
#define OWN_APRS_MSG_LN 256
#define OWN_APRS_MSG_LN 256u
typedef enum main_usart_mode_t {
USART_MODE_UNDEF,

Wyświetl plik

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

Wyświetl plik

@ -9,7 +9,7 @@
#define SOFTWARE_VERSION_H_
#define SW_VER "EB01"
#define SW_DATE "15102023"
#define SW_DATE "27102023"
#define SW_KISS_PROTO "B"
extern const char software_version_str[5];

Wyświetl plik

@ -672,7 +672,7 @@ void aprsis_prepare_telemetry(
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",
"T#%03d,%03d,%03d,%03d,%03d,%03d,%c%c%c%c%c%c%c%c\r\n",
_telemetry_counter,
_rx_pkts,
_tx_pkts,
@ -693,7 +693,7 @@ void aprsis_prepare_telemetry(
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",
"T#%03d,%03d,%03d,%03d,%03d,%03d,%c%c%c%c%c%c%c%c\r\n",
_telemetry_counter,
_rx_pkts,
_viscous_drop_pkts,
@ -753,6 +753,61 @@ void aprsis_send_telemetry(uint8_t async, const char * callsign_with_ssid) {
memset(aprsis_packet_telemetry_buffer, 0x00, APRSIS_TELEMETRY_BUFFER_LN);
}
/**
* Sends
* @param async
* @param what kind of telemetry description packet should be sent now
* @param callsign_with_ssid
* @return what kind of telemetry description should be sent next
*/
telemetry_description_t aprsis_send_description_telemetry(uint8_t async,
const telemetry_description_t what,
const config_data_basic_t * const config_basic,
const config_data_mode_t * const config_mode,
const char * callsign_with_ssid) {
telemetry_description_t next = TELEMETRY_NOTHING;
// check what we want to send and what
switch (what) {
case TELEMETRY_PV_PARM: next = TELEMETRY_PV_EQNS; break;
case TELEMETRY_PV_EQNS: next = TELEMETRY_PV_UNIT; break;
case TELEMETRY_PV_UNIT: next = TELEMETRY_NOTHING; break;
case TELEMETRY_NORMAL_PARAM: next = TELEMETRY_NORMAL_EQNS; break;
case TELEMETRY_NORMAL_EQNS: next = TELEMETRY_NORMAL_UNIT; break;
case TELEMETRY_NORMAL_UNIT: next = TELEMETRY_NOTHING; break;
case TELEMETRY_NOTHING:
default: next = TELEMETRY_NOTHING; break;
}
// exif if APRSIS is not logged
if (aprsis_logged == 0) {
return next;
}
telemetry_create_description_string(config_basic, config_mode, what, main_own_aprs_msg, OWN_APRS_MSG_LN);
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,
main_own_aprs_msg);
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);
}
return next;
}
void aprsis_igate_to_aprsis(AX25Msg *msg, const char * callsign_with_ssid) {
// iterator to move across tx buffer

Wyświetl plik

@ -479,9 +479,15 @@ uint8_t backup_reg_get_telemetry(void) {
/**
*
*/
void backup_reg_set_telemetry(uint8_t in) {
void backup_reg_set_telemetry(uint16_t in) {
backup_reg_unclock();
if (in > 255) {
in = 0;
}
const uint8_t narrowed_in = (uint8_t)(in & 0xFFu);
#ifdef PARAMETEO
// get current value
@ -491,7 +497,7 @@ void backup_reg_set_telemetry(uint8_t in) {
reg_value &= (0xFFFFFFFFu ^ 0xFFu);
// store updated value
reg_value |= in;
reg_value |= narrowed_in;
// recalculate checksum
const uint8_t new_checksum = backup_reg_calculate_checksum(reg_value);

Wyświetl plik

@ -52,6 +52,7 @@
#include "io.h"
#include "float_to_string.h"
#include "pwr_save.h"
#include "button.h"
#include <wx_pwr_switch.h>
#include "io_default_vbat_scaling.h"
@ -61,6 +62,7 @@
#include "aprs/telemetry.h"
#include "aprs/dac.h"
#include "aprs/beacon.h"
#include "aprs/status.h"
#include "ve_direct_protocol/parser.h"
@ -148,11 +150,11 @@
// Sample pragmas to cope with warnings. Please note the related line at
// the end of this function, used to pop the compiler diagnostics status.
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"
#pragma GCC diagnostic ignored "-Wmissing-declarations"
#pragma GCC diagnostic ignored "-Wreturn-type"
#pragma GCC diagnostic ignored "-Wempty-body"
//#pragma GCC diagnostic push
//#pragma GCC diagnostic ignored "-Wunused-parameter"
//#pragma GCC diagnostic ignored "-Wmissing-declarations"
//#pragma GCC diagnostic ignored "-Wreturn-type"
//#pragma GCC diagnostic ignored "-Wempty-body"
// used configuration structures
const config_data_mode_t * main_config_data_mode = 0;
@ -286,6 +288,9 @@ volatile int i = 0;
#if defined(PARAMETEO)
//!< Triggers additional check if ADC has properly reinitialized and conversion is working
uint8_t main_check_adc = 0;
//!< Used to store an information which telemetry descritpion frame should be sent next
telemetry_description_t main_telemetry_description = TELEMETRY_NOTHING;
#endif
char after_tx_lock;
@ -1144,8 +1149,6 @@ int main(int argc, char* argv[]){
// restart ADCs
io_vbat_meas_enable();
// ADCStartConfig();
// DACStartConfig();
rte_main_battery_voltage = io_vbat_meas_get();
rte_main_average_battery_voltage = io_vbat_meas_average(rte_main_battery_voltage);
@ -1249,6 +1252,29 @@ int main(int argc, char* argv[]){
aprsis_send_telemetry(1u, (const char *)&main_callsign_with_ssid);
}
if (rte_main_trigger_gsm_telemetry_descriptions == 1 && gsm_sim800_tcpip_tx_busy() == 0) {
// check if this ought to be first telemetry description in sequence
if (main_telemetry_description == TELEMETRY_NOTHING) {
// if yes check if victron telemetry is enabled
if (main_config_data_mode->victron != 0) {
// set the first packet accordingly
main_telemetry_description = TELEMETRY_PV_PARM;
}
else {
main_telemetry_description = TELEMETRY_NORMAL_PARAM;
}
}
// assemble and sent a telemetry description packet
main_telemetry_description = aprsis_send_description_telemetry(1u, main_telemetry_description, main_config_data_basic, main_config_data_mode, (const char *)&main_callsign_with_ssid);
// if there is nothing to send
if (main_telemetry_description == TELEMETRY_NOTHING) {
rte_main_trigger_gsm_telemetry_descriptions = 0;
}
}
}
#endif

Wyświetl plik

@ -264,15 +264,6 @@ void packet_tx_handler(const config_data_basic_t * const config_basic, const con
// if WX is enabled
if ((main_config_data_mode->wx & WX_ENABLED) == WX_ENABLED) {
#ifdef STM32L471xx
// send wx packet to APRSIS one minute before radio transmission
if (packet_tx_meteo_counter == packet_tx_meteo_interval - 1 && packet_tx_meteo_interval != 0) {
// TODO: fixme
//packet_tx_trigger_tcp |= APRSIS_TRIGGER_METEO;
//aprsis_send_wx_frame(rte_wx_average_windspeed, rte_wx_max_windspeed, rte_wx_average_winddirection, rte_wx_temperature_average_external_valid, rte_wx_pressure_valid, rte_wx_humidity_valid);
}
#endif
// check if there is a time to send meteo packet through RF
if (packet_tx_meteo_counter >= packet_tx_meteo_interval && packet_tx_meteo_interval != 0) {
@ -369,7 +360,7 @@ void packet_tx_handler(const config_data_basic_t * const config_basic, const con
srl_wait_for_tx_completion(main_kiss_srl_ctx_ptr);
// create wx data packet into specified buffer
SendWXFrameToBuffer(rte_wx_average_windspeed, rte_wx_max_windspeed, rte_wx_average_winddirection, rte_wx_temperature_average_external_valid, rte_wx_pressure_valid, rte_wx_humidity_valid, main_kiss_srl_ctx_ptr->srl_tx_buf_pointer, main_kiss_srl_ctx_ptr->srl_tx_buf_ln, &ln);
SendWXFrameToKissBuffer(rte_wx_average_windspeed, rte_wx_max_windspeed, rte_wx_average_winddirection, rte_wx_temperature_average_external_valid, rte_wx_pressure_valid, rte_wx_humidity_valid, main_kiss_srl_ctx_ptr->srl_tx_buf_pointer, main_kiss_srl_ctx_ptr->srl_tx_buf_ln, &ln);
srl_start_tx(main_kiss_srl_ctx_ptr, ln);
@ -538,7 +529,7 @@ void packet_tx_handler(const config_data_basic_t * const config_basic, const con
if (packet_tx_telemetry_descr_counter >= packet_tx_telemetry_descr_interval) {
#ifdef PARAMETEO
rte_main_trigger_gsm_status_packet = 1;
rte_main_trigger_gsm_telemetry_descriptions = 1;
status_send_powersave_registers();
#endif

Wyświetl plik

@ -27,6 +27,9 @@ 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 set of packets with telemetry description
uint8_t rte_main_trigger_gsm_telemetry_descriptions = 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;
typedef enum telemetry_descritpion_t {
TELEMETRY_PV_PARM,
TELEMETRY_PV_EQNS,
TELEMETRY_PV_UNIT,
TELEMETRY_NORMAL_PARAM,
TELEMETRY_NORMAL_EQNS,
TELEMETRY_NORMAL_UNIT,
TELEMETRY_NOTHING
}telemetry_description_t;
extern char telemetry_qf;
extern char telemetry_degr;
extern char telemetry_nav;
@ -57,6 +67,8 @@ extern uint8_t telemetry_scaled_temperature;
void telemetry_init(void);
int telemetry_create_description_string(const config_data_basic_t * const config_basic, const config_data_mode_t * const config_mode, const telemetry_description_t what, char * out, uint16_t out_ln);
#ifdef __cplusplus
extern "C"
{

Wyświetl plik

@ -13,6 +13,6 @@
void SendWXFrame(uint16_t windspeed, uint16_t windgusts, uint16_t winddirection, float temperatura, float cisnienie, uint8_t humidity);
void SendWXFrameToBuffer(uint16_t windspeed, uint16_t windgusts, uint16_t winddirection, float temperatura, float cisnienie, uint8_t humidity, uint8_t* buffer, uint16_t buffer_ln, uint16_t* output_ln);
void SendWXFrameToKissBuffer(uint16_t windspeed, uint16_t windgusts, uint16_t winddirection, float temperatura, float cisnienie, uint8_t humidity, uint8_t* buffer, uint16_t buffer_ln, uint16_t* output_ln);
#endif /* INCLUDE_APRS_WX_H_ */

Wyświetl plik

@ -9,6 +9,7 @@
#include "main.h"
#include "delay.h"
#include "backup_registers.h"
#include "variant.h"
#include "ve_direct_protocol/parser.h"
@ -40,6 +41,135 @@ void telemetry_init(void) {
telemetry_counter = backup_reg_get_telemetry();
}
int telemetry_create_description_string(const config_data_basic_t * const config_basic, const config_data_mode_t * const config_mode, const telemetry_description_t what, char * out, uint16_t out_ln) {
int out_size = 0;
// a buffer to assembly the 'call-ssid' string at the begining of the frame
char message_prefix_buffer[9];
memset(message_prefix_buffer, 0x00, 0x09);
sprintf(message_prefix_buffer, "%s-%d", config_basic->callsign, config_basic->ssid);
int is_viscous = 1;
if (variant_validate_is_within_ram((uint32_t)out) == 0) {
return out_size;
}
if (variant_validate_is_within_ram((uint32_t)config_mode) == 0) {
is_viscous = 0;
}
else if (config_mode->digi_viscous == 0) {
is_viscous = 0;
}
else {
;
}
switch (what) {
case TELEMETRY_PV_PARM: {
if (config_basic->ssid == 0)
out_size = snprintf(out, out_ln, ":%-6s :PARM.Rx10min,Digi10min,BatAmps,BatVolt,PvVolt,DS_QF_FULL,DS_QF_DEGRAD,DS_QF_NAVBLE,QNH_QF_NAVBLE,HUM_QF_NAVBLE,WIND_QF_DEGR,WIND_QF_NAVB", config_basic->callsign);
else if (config_basic->ssid > 0 && config_basic->ssid < 10)
out_size = snprintf(out, out_ln, ":%-9s:PARM.Rx10min,Digi10min,BatAmps,BatVolt,PvVolt,DS_QF_FULL,DS_QF_DEGRAD,DS_QF_NAVBLE,QNH_QF_NAVBLE,HUM_QF_NAVBLE,WIND_QF_DEGR,WIND_QF_NAVB", message_prefix_buffer);
else if (config_basic->ssid >= 10 && config_basic->ssid < 16)
out_size = snprintf(out, out_ln, ":%-9s:PARM.Rx10min,Digi10min,BatAmps,BatVolt,PvVolt,DS_QF_FULL,DS_QF_DEGRAD,DS_QF_NAVBLE,QNH_QF_NAVBLE,HUM_QF_NAVBLE,WIND_QF_DEGR,WIND_QF_NAVB", message_prefix_buffer);
else
return out_size;
break;
}
case TELEMETRY_PV_EQNS: {
if (config_basic->ssid == 0)
out_size = snprintf(out, out_ln, ":%-6s :EQNS.0,1,0,0,1,0,0,0.07,-8,0,0.07,4,0,0.07,4", config_basic->callsign);
else if (config_basic->ssid > 0 && config_basic->ssid < 10)
out_size = snprintf(out, out_ln, ":%-9s:EQNS.0,1,0,0,1,0,0,0.07,-8,0,0.07,4,0,0.07,4", message_prefix_buffer);
else if (config_basic->ssid >= 10 && config_basic->ssid < 16)
out_size = snprintf(out, out_ln, ":%-9s:EQNS.0,1,0,0,1,0,0,0.07,-8,0,0.07,4,0,0.07,4", message_prefix_buffer);
else
return out_size;
break;
}
case TELEMETRY_PV_UNIT: {
if (config_basic->ssid == 0)
out_size = snprintf(out, out_ln, ":%-6s :UNIT.Pkt,Pkt,A,V,V,Hi,Hi,Hi,Hi,Hi,Hi,Hi", config_basic->callsign);
else if (config_basic->ssid > 0 && config_basic->ssid < 10)
out_size = snprintf(out, out_ln, ":%-9s:UNIT.Pkt,Pkt,A,V,V,Hi,Hi,Hi,Hi,Hi,Hi,Hi", message_prefix_buffer);
else if (config_basic->ssid >= 10 && config_basic->ssid < 16)
out_size = snprintf(out, out_ln, ":%-9s:UNIT.Pkt,Pkt,A,V,V,Hi,Hi,Hi,Hi,Hi,Hi,Hi", message_prefix_buffer);
else
return out_size;
break;
}
case TELEMETRY_NORMAL_PARAM : {
if (is_viscous == 0) {
// prepare a frame with channel names depending on SSID
if (config_basic->ssid == 0)
out_size = snprintf(out, out_ln, ":%-6s :PARM.Rx10min,Tx10min,Digi10min,Vbatt,Tempre,DS_QF_FULL,DS_QF_DEGRAD,DS_QF_NAVBLE,QNH_QF_NAVBLE,HUM_QF_NAVBLE,WIND_QF_DEGR,WIND_QF_NAVB,VBATT_LOW", config_basic->callsign);
else if (config_basic->ssid > 0 && config_basic->ssid < 10)
out_size = snprintf(out, out_ln, ":%-9s:PARM.Rx10min,Tx10min,Digi10min,Vbatt,Tempre,DS_QF_FULL,DS_QF_DEGRAD,DS_QF_NAVBLE,QNH_QF_NAVBLE,HUM_QF_NAVBLE,WIND_QF_DEGR,WIND_QF_NAVB,VBATT_LOW", message_prefix_buffer);
else if (config_basic->ssid >= 10 && config_basic->ssid < 16)
out_size = snprintf(out, out_ln, ":%-9s:PARM.Rx10min,Tx10min,Digi10min,Vbatt,Tempre,DS_QF_FULL,DS_QF_DEGRAD,DS_QF_NAVBLE,QNH_QF_NAVBLE,HUM_QF_NAVBLE,WIND_QF_DEGR,WIND_QF_NAVB,VBATT_LOW", message_prefix_buffer);
else
return out_size;
}
else {
// prepare a frame with channel names depending on SSID
if (config_basic->ssid == 0)
out_size = snprintf(out, out_ln, ":%-6s :PARM.Rx10min,Visc10min,Digi10min,Vbatt,Tempre,DS_QF_FULL,DS_QF_DEGRAD,DS_QF_NAVBLE,QNH_QF_NAVBLE,HUM_QF_NAVBLE,WIND_QF_DEGR,WIND_QF_NAVB,VBATT_LOW", config_basic->callsign);
else if (config_basic->ssid > 0 && config_basic->ssid < 10)
out_size = snprintf(out, out_ln, ":%-9s:PARM.Rx10min,Visc10min,Digi10min,Vbatt,Tempre,DS_QF_FULL,DS_QF_DEGRAD,DS_QF_NAVBLE,QNH_QF_NAVBLE,HUM_QF_NAVBLE,WIND_QF_DEGR,WIND_QF_NAVB,VBATT_LOW", message_prefix_buffer);
else if (config_basic->ssid >= 10 && config_basic->ssid < 16)
out_size = snprintf(out, out_ln, ":%-9s:PARM.Rx10min,Visc10min,Digi10min,Vbatt,Tempre,DS_QF_FULL,DS_QF_DEGRAD,DS_QF_NAVBLE,QNH_QF_NAVBLE,HUM_QF_NAVBLE,WIND_QF_DEGR,WIND_QF_NAVB,VBATT_LOW", message_prefix_buffer);
else
return out_size;
}
break;
}
case TELEMETRY_NORMAL_EQNS : {
if (config_basic->ssid == 0)
out_size = snprintf(out, out_ln, out_ln, ":%-6s :EQNS.0,1,0,0,1,0,0,1,0,0,0.02,10,0,0.5,-50", config_basic->callsign);
else if (config_basic->ssid > 0 && config_basic->ssid < 10)
out_size = snprintf(out, out_ln, out_ln, ":%-9s:EQNS.0,1,0,0,1,0,0,1,0,0,0.02,10,0,0.5,-50", message_prefix_buffer);
else if (config_basic->ssid >= 10 && config_basic->ssid < 16)
out_size = snprintf(out, out_ln, out_ln, ":%-9s:EQNS.0,1,0,0,1,0,0,1,0,0,0.02,10,0,0.5,-50", message_prefix_buffer);
else
return out_size;
break;
}
case TELEMETRY_NORMAL_UNIT : {
if (config_basic->ssid == 0)
out_size = snprintf(out, out_ln, ":%-6s :UNIT.Pkt,Pkt,Pkt,V,DegC,Hi,Hi,Hi,Hi,Hi,Hi,Hi,Hi", config_basic->callsign);
else if (config_basic->ssid > 0 && config_basic->ssid < 10)
out_size = snprintf(out, out_ln, ":%-9s:UNIT.Pkt,Pkt,Pkt,V,DegC,Hi,Hi,Hi,Hi,Hi,Hi,Hi,Hi", message_prefix_buffer);
else if (config_basic->ssid >= 10 && config_basic->ssid < 16)
out_size = snprintf(out, out_ln, ":%-9s:UNIT.Pkt,Pkt,Pkt,V,DegC,Hi,Hi,Hi,Hi,Hi,Hi,Hi,Hi", message_prefix_buffer);
else
return out_size;
break;
}
}
out[out_size] = 0;
return out_size;
}
void telemetry_send_chns_description_pv(const config_data_basic_t * const config_basic) {
// a buffer to assembly the 'call-ssid' string at the begining of the frame
@ -51,52 +181,25 @@ void telemetry_send_chns_description_pv(const config_data_basic_t * const config
while (main_afsk.sending == 1);
if (config_basic->ssid == 0)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-6s :PARM.Rx10min,Digi10min,BatAmps,BatVolt,PvVolt,DS_QF_FULL,DS_QF_DEGRAD,DS_QF_NAVBLE,QNH_QF_NAVBLE,HUM_QF_NAVBLE,WIND_QF_DEGR,WIND_QF_NAVB", config_basic->callsign);
else if (config_basic->ssid > 0 && config_basic->ssid < 10)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-9s:PARM.Rx10min,Digi10min,BatAmps,BatVolt,PvVolt,DS_QF_FULL,DS_QF_DEGRAD,DS_QF_NAVBLE,QNH_QF_NAVBLE,HUM_QF_NAVBLE,WIND_QF_DEGR,WIND_QF_NAVB", message_prefix_buffer);
else if (config_basic->ssid >= 10 && config_basic->ssid < 16)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-9s:PARM.Rx10min,Digi10min,BatAmps,BatVolt,PvVolt,DS_QF_FULL,DS_QF_DEGRAD,DS_QF_NAVBLE,QNH_QF_NAVBLE,HUM_QF_NAVBLE,WIND_QF_DEGR,WIND_QF_NAVB", message_prefix_buffer);
else
return;
main_own_aprs_msg[main_own_aprs_msg_len] = 0;
main_own_aprs_msg_len = telemetry_create_description_string(config_basic, 0x00, TELEMETRY_PV_PARM, main_own_aprs_msg, OWN_APRS_MSG_LN);
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
after_tx_lock = 1;
afsk_txStart(&main_afsk);
while (main_afsk.sending == 1);
delay_fixed(1200);
if (config_basic->ssid == 0)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-6s :EQNS.0,1,0,0,1,0,0,0.07,-8,0,0.07,4,0,0.07,4", config_basic->callsign);
else if (config_basic->ssid > 0 && config_basic->ssid < 10)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-9s:EQNS.0,1,0,0,1,0,0,0.07,-8,0,0.07,4,0,0.07,4", message_prefix_buffer);
else if (config_basic->ssid >= 10 && config_basic->ssid < 16)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-9s:EQNS.0,1,0,0,1,0,0,0.07,-8,0,0.07,4,0,0.07,4", message_prefix_buffer);
else
return;
main_own_aprs_msg[main_own_aprs_msg_len] = 0;
main_own_aprs_msg_len = telemetry_create_description_string(config_basic, 0x00, TELEMETRY_PV_EQNS, main_own_aprs_msg, OWN_APRS_MSG_LN);
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
after_tx_lock = 1;
afsk_txStart(&main_afsk);
while (main_afsk.sending == 1);
delay_fixed(1200);
if (config_basic->ssid == 0)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-6s :UNIT.Pkt,Pkt,A,V,V,Hi,Hi,Hi,Hi,Hi,Hi,Hi", config_basic->callsign);
else if (config_basic->ssid > 0 && config_basic->ssid < 10)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-9s:UNIT.Pkt,Pkt,A,V,V,Hi,Hi,Hi,Hi,Hi,Hi,Hi", message_prefix_buffer);
else if (config_basic->ssid >= 10 && config_basic->ssid < 16)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-9s:UNIT.Pkt,Pkt,A,V,V,Hi,Hi,Hi,Hi,Hi,Hi,Hi", message_prefix_buffer);
else
return;
main_own_aprs_msg[main_own_aprs_msg_len] = 0;
main_own_aprs_msg_len = telemetry_create_description_string(config_basic, 0x00, TELEMETRY_PV_UNIT, main_own_aprs_msg, OWN_APRS_MSG_LN);
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
after_tx_lock = 1;
afsk_txStart(&main_afsk);
@ -241,132 +344,30 @@ void telemetry_send_chns_description(const config_data_basic_t * const config_ba
// clear the output frame buffer
memset(main_own_aprs_msg, 0x00, sizeof(main_own_aprs_msg));
#ifdef PARAMETEO
if (config_mode->digi_viscous == 0) {
// prepare a frame with channel names depending on SSID
if (config_basic->ssid == 0)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-6s :PARM.Rx10min,Tx10min,Digi10min,Vbatt,Tempre,DS_QF_FULL,DS_QF_DEGRAD,DS_QF_NAVBLE,QNH_QF_NAVBLE,HUM_QF_NAVBLE,WIND_QF_DEGR,WIND_QF_NAVB,VBATT_LOW", config_basic->callsign);
else if (config_basic->ssid > 0 && config_basic->ssid < 10)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-9s:PARM.Rx10min,Tx10min,Digi10min,Vbatt,Tempre,DS_QF_FULL,DS_QF_DEGRAD,DS_QF_NAVBLE,QNH_QF_NAVBLE,HUM_QF_NAVBLE,WIND_QF_DEGR,WIND_QF_NAVB,VBATT_LOW", message_prefix_buffer);
else if (config_basic->ssid >= 10 && config_basic->ssid < 16)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-9s:PARM.Rx10min,Tx10min,Digi10min,Vbatt,Tempre,DS_QF_FULL,DS_QF_DEGRAD,DS_QF_NAVBLE,QNH_QF_NAVBLE,HUM_QF_NAVBLE,WIND_QF_DEGR,WIND_QF_NAVB,VBATT_LOW", message_prefix_buffer);
else
return;
}
else {
// prepare a frame with channel names depending on SSID
if (config_basic->ssid == 0)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-6s :PARM.Rx10min,Visc10min,Digi10min,Vbatt,Tempre,DS_QF_FULL,DS_QF_DEGRAD,DS_QF_NAVBLE,QNH_QF_NAVBLE,HUM_QF_NAVBLE,WIND_QF_DEGR,WIND_QF_NAVB,VBATT_LOW", config_basic->callsign);
else if (config_basic->ssid > 0 && config_basic->ssid < 10)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-9s:PARM.Rx10min,Visc10min,Digi10min,Vbatt,Tempre,DS_QF_FULL,DS_QF_DEGRAD,DS_QF_NAVBLE,QNH_QF_NAVBLE,HUM_QF_NAVBLE,WIND_QF_DEGR,WIND_QF_NAVB,VBATT_LOW", message_prefix_buffer);
else if (config_basic->ssid >= 10 && config_basic->ssid < 16)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-9s:PARM.Rx10min,Visc10min,Digi10min,Vbatt,Tempre,DS_QF_FULL,DS_QF_DEGRAD,DS_QF_NAVBLE,QNH_QF_NAVBLE,HUM_QF_NAVBLE,WIND_QF_DEGR,WIND_QF_NAVB,VBATT_LOW", message_prefix_buffer);
else
return;
}
#else
if (config_mode->digi_viscous == 0) {
// prepare a frame with channel names depending on SSID
if (config_basic->ssid == 0)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-6s :PARM.Rx10min,Tx10min,Digi10min,HostTx10m,Tempre,DS_QF_FULL,DS_QF_DEGRAD,DS_QF_NAVBLE,QNH_QF_NAVBLE,HUM_QF_NAVBLE,WIND_QF_DEGR,WIND_QF_NAVB,VBATT_LOW", config_basic->callsign);
else if (config_basic->ssid > 0 && config_basic->ssid < 10)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-9s:PARM.Rx10min,Tx10min,Digi10min,HostTx10m,Tempre,DS_QF_FULL,DS_QF_DEGRAD,DS_QF_NAVBLE,QNH_QF_NAVBLE,HUM_QF_NAVBLE,WIND_QF_DEGR,WIND_QF_NAVB,VBATT_LOW", message_prefix_buffer);
else if (config_basic->ssid >= 10 && config_basic->ssid < 16)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-9s:PARM.Rx10min,Tx10min,Digi10min,HostTx10m,Tempre,DS_QF_FULL,DS_QF_DEGRAD,DS_QF_NAVBLE,QNH_QF_NAVBLE,HUM_QF_NAVBLE,WIND_QF_DEGR,WIND_QF_NAVB,VBATT_LOW", message_prefix_buffer);
else
return;
}
else {
// prepare a frame with channel names depending on SSID
if (config_basic->ssid == 0)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-6s :PARM.Rx10min,Tx10min,Digi10min,Visc10min,Tempre,DS_QF_FULL,DS_QF_DEGRAD,DS_QF_NAVBLE,QNH_QF_NAVBLE,HUM_QF_NAVBLE,WIND_QF_DEGR,WIND_QF_NAVB", config_basic->callsign);
else if (config_basic->ssid > 0 && config_basic->ssid < 10)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-9s:PARM.Rx10min,Tx10min,Digi10min,Visc10min,Tempre,DS_QF_FULL,DS_QF_DEGRAD,DS_QF_NAVBLE,QNH_QF_NAVBLE,HUM_QF_NAVBLE,WIND_QF_DEGR,WIND_QF_NAVB", message_prefix_buffer);
else if (config_basic->ssid >= 10 && config_basic->ssid < 16)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-9s:PARM.Rx10min,Tx10min,Digi10min,Visc10min,Tempre,DS_QF_FULL,DS_QF_DEGRAD,DS_QF_NAVBLE,QNH_QF_NAVBLE,HUM_QF_NAVBLE,WIND_QF_DEGR,WIND_QF_NAVB", message_prefix_buffer);
else
return;
}
#endif
// place a null terminator at the end
main_own_aprs_msg[main_own_aprs_msg_len] = 0;
// prepare transmission
main_own_aprs_msg_len = telemetry_create_description_string(config_basic, config_mode, TELEMETRY_NORMAL_PARAM, main_own_aprs_msg, OWN_APRS_MSG_LN);
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
after_tx_lock = 1;
// key up the transmitter and
afsk_txStart(&main_afsk);
main_wait_for_tx_complete();
delay_fixed(1500);
WAIT_FOR_CHANNEL_FREE();
#ifdef PARAMETEO
if (config_basic->ssid == 0)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-6s :EQNS.0,1,0,0,1,0,0,1,0,0,0.02,10,0,0.5,-50", config_basic->callsign);
else if (config_basic->ssid > 0 && config_basic->ssid < 10)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-9s:EQNS.0,1,0,0,1,0,0,1,0,0,0.02,10,0,0.5,-50", message_prefix_buffer);
else if (config_basic->ssid >= 10 && config_basic->ssid < 16)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-9s:EQNS.0,1,0,0,1,0,0,1,0,0,0.02,10,0,0.5,-50", message_prefix_buffer);
else
return;
#else
if (config_basic->ssid == 0)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-6s :EQNS.0,1,0,0,1,0,0,1,0,0,1,0,0,0.5,-50", config_basic->callsign);
else if (config_basic->ssid > 0 && config_basic->ssid < 10)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-9s:EQNS.0,1,0,0,1,0,0,1,0,0,1,0,0,0.5,-50", message_prefix_buffer);
else if (config_basic->ssid >= 10 && config_basic->ssid < 16)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-9s:EQNS.0,1,0,0,1,0,0,1,0,0,1,0,0,0.5,-50", message_prefix_buffer);
else
return;
#endif
main_own_aprs_msg_len = telemetry_create_description_string(config_basic, config_mode, TELEMETRY_NORMAL_EQNS, main_own_aprs_msg, OWN_APRS_MSG_LN);
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
after_tx_lock = 1;
main_own_aprs_msg[main_own_aprs_msg_len] = 0;
afsk_txStart(&main_afsk);
main_wait_for_tx_complete();
delay_fixed(1500);
WAIT_FOR_CHANNEL_FREE();
main_own_aprs_msg_len = telemetry_create_description_string(config_basic, config_mode, TELEMETRY_NORMAL_UNIT, main_own_aprs_msg, OWN_APRS_MSG_LN);
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
after_tx_lock = 1;
afsk_txStart(&main_afsk);
main_wait_for_tx_complete();
delay_fixed(1500);
WAIT_FOR_CHANNEL_FREE();
#ifdef PARAMETEO
if (config_basic->ssid == 0)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-6s :UNIT.Pkt,Pkt,Pkt,V,DegC,Hi,Hi,Hi,Hi,Hi,Hi,Hi,Hi", config_basic->callsign);
else if (config_basic->ssid > 0 && config_basic->ssid < 10)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-9s:UNIT.Pkt,Pkt,Pkt,V,DegC,Hi,Hi,Hi,Hi,Hi,Hi,Hi,Hi", message_prefix_buffer);
else if (config_basic->ssid >= 10 && config_basic->ssid < 16)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-9s:UNIT.Pkt,Pkt,Pkt,V,DegC,Hi,Hi,Hi,Hi,Hi,Hi,Hi,Hi", message_prefix_buffer);
else
return;
#else
if (config_basic->ssid == 0)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-6s :UNIT.Pkt,Pkt,Pkt,Pkt,DegC,Hi,Hi,Hi,Hi,Hi,Hi,Hi,Hi", config_basic->callsign);
else if (config_basic->ssid > 0 && config_basic->ssid < 10)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-9s:UNIT.Pkt,Pkt,Pkt,Pkt,DegC,Hi,Hi,Hi,Hi,Hi,Hi,Hi,Hi", message_prefix_buffer);
else if (config_basic->ssid >= 10 && config_basic->ssid < 16)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%-9s:UNIT.Pkt,Pkt,Pkt,Pkt,DegC,Hi,Hi,Hi,Hi,Hi,Hi,Hi,Hi", message_prefix_buffer);
else
return;
#endif
main_own_aprs_msg[main_own_aprs_msg_len] = 0;
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
after_tx_lock = 1;
afsk_txStart(&main_afsk);
//
// main_wait_for_tx_complete();
//
// delay_fixed(1500);
//
// while (main_ax25.dcd == 1);
}
/**

Wyświetl plik

@ -62,7 +62,7 @@ void SendWXFrame(uint16_t windspeed, uint16_t windgusts, uint16_t winddirection,
}
void SendWXFrameToBuffer(uint16_t windspeed, uint16_t windgusts, uint16_t winddirection, float temperatura, float cisnienie, uint8_t humidity, uint8_t* buffer, uint16_t buffer_ln, uint16_t* output_ln) {
void SendWXFrameToKissBuffer(uint16_t windspeed, uint16_t windgusts, uint16_t winddirection, float temperatura, float cisnienie, uint8_t humidity, uint8_t* buffer, uint16_t buffer_ln, uint16_t* output_ln) {
uint16_t output_frame_ln = 0;