kopia lustrzana https://github.com/SP8EBC/ParaTNC
sending telemetry and telemetry description
rodzic
8090c1ed83
commit
95712dedde
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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];
|
||||
|
|
59
src/aprsis.c
59
src/aprsis.c
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
40
src/main.c
40
src/main.c
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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"
|
||||
{
|
||||
|
|
|
@ -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_ */
|
||||
|
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue