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 "drivers/serial.h"
|
||||||
#include "gsm/sim800c_tcpip.h"
|
#include "gsm/sim800c_tcpip.h"
|
||||||
#include "ax25.h"
|
#include "ax25.h"
|
||||||
|
#include "telemetry.h"
|
||||||
|
|
||||||
|
|
||||||
typedef enum aprsis_return {
|
typedef enum aprsis_return {
|
||||||
|
@ -88,6 +89,11 @@ void aprsis_prepare_telemetry(
|
||||||
char _telemetry_vbatt_low,
|
char _telemetry_vbatt_low,
|
||||||
const config_data_mode_t * const _config_mode);
|
const config_data_mode_t * const _config_mode);
|
||||||
void aprsis_send_telemetry(uint8_t async, const char * callsign_with_ssid);
|
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_igate_to_aprsis(AX25Msg *msg, const char * callsign_with_ssid);
|
||||||
void aprsis_send_server_conn_status(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);
|
void backup_reg_reset_counters(void);
|
||||||
|
|
||||||
uint8_t backup_reg_get_telemetry(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_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);
|
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 PWR_SWITCH_BOTH
|
||||||
|
|
||||||
#define OWN_APRS_MSG_LN 256
|
#define OWN_APRS_MSG_LN 256u
|
||||||
|
|
||||||
typedef enum main_usart_mode_t {
|
typedef enum main_usart_mode_t {
|
||||||
USART_MODE_UNDEF,
|
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_values;
|
||||||
|
|
||||||
|
extern uint8_t rte_main_trigger_gsm_telemetry_descriptions;
|
||||||
|
|
||||||
//!< Trigger some reinitialization after waking up from deep sleep
|
//!< Trigger some reinitialization after waking up from deep sleep
|
||||||
extern uint8_t rte_main_woken_up;
|
extern uint8_t rte_main_woken_up;
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
#define SOFTWARE_VERSION_H_
|
#define SOFTWARE_VERSION_H_
|
||||||
|
|
||||||
#define SW_VER "EB01"
|
#define SW_VER "EB01"
|
||||||
#define SW_DATE "15102023"
|
#define SW_DATE "27102023"
|
||||||
#define SW_KISS_PROTO "B"
|
#define SW_KISS_PROTO "B"
|
||||||
|
|
||||||
extern const char software_version_str[5];
|
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(
|
snprintf_size = snprintf(
|
||||||
aprsis_packet_telemetry_buffer,
|
aprsis_packet_telemetry_buffer,
|
||||||
APRSIS_TELEMETRY_BUFFER_LN,
|
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,
|
_telemetry_counter,
|
||||||
_rx_pkts,
|
_rx_pkts,
|
||||||
_tx_pkts,
|
_tx_pkts,
|
||||||
|
@ -693,7 +693,7 @@ void aprsis_prepare_telemetry(
|
||||||
snprintf_size = snprintf(
|
snprintf_size = snprintf(
|
||||||
aprsis_packet_telemetry_buffer,
|
aprsis_packet_telemetry_buffer,
|
||||||
APRSIS_TELEMETRY_BUFFER_LN,
|
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,
|
_telemetry_counter,
|
||||||
_rx_pkts,
|
_rx_pkts,
|
||||||
_viscous_drop_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);
|
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) {
|
void aprsis_igate_to_aprsis(AX25Msg *msg, const char * callsign_with_ssid) {
|
||||||
|
|
||||||
// iterator to move across tx buffer
|
// 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();
|
backup_reg_unclock();
|
||||||
|
|
||||||
|
if (in > 255) {
|
||||||
|
in = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const uint8_t narrowed_in = (uint8_t)(in & 0xFFu);
|
||||||
|
|
||||||
#ifdef PARAMETEO
|
#ifdef PARAMETEO
|
||||||
|
|
||||||
// get current value
|
// get current value
|
||||||
|
@ -491,7 +497,7 @@ void backup_reg_set_telemetry(uint8_t in) {
|
||||||
reg_value &= (0xFFFFFFFFu ^ 0xFFu);
|
reg_value &= (0xFFFFFFFFu ^ 0xFFu);
|
||||||
|
|
||||||
// store updated value
|
// store updated value
|
||||||
reg_value |= in;
|
reg_value |= narrowed_in;
|
||||||
|
|
||||||
// recalculate checksum
|
// recalculate checksum
|
||||||
const uint8_t new_checksum = backup_reg_calculate_checksum(reg_value);
|
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 "io.h"
|
||||||
#include "float_to_string.h"
|
#include "float_to_string.h"
|
||||||
#include "pwr_save.h"
|
#include "pwr_save.h"
|
||||||
|
#include "button.h"
|
||||||
#include <wx_pwr_switch.h>
|
#include <wx_pwr_switch.h>
|
||||||
#include "io_default_vbat_scaling.h"
|
#include "io_default_vbat_scaling.h"
|
||||||
|
|
||||||
|
@ -61,6 +62,7 @@
|
||||||
#include "aprs/telemetry.h"
|
#include "aprs/telemetry.h"
|
||||||
#include "aprs/dac.h"
|
#include "aprs/dac.h"
|
||||||
#include "aprs/beacon.h"
|
#include "aprs/beacon.h"
|
||||||
|
#include "aprs/status.h"
|
||||||
|
|
||||||
#include "ve_direct_protocol/parser.h"
|
#include "ve_direct_protocol/parser.h"
|
||||||
|
|
||||||
|
@ -148,11 +150,11 @@
|
||||||
|
|
||||||
// Sample pragmas to cope with warnings. Please note the related line at
|
// Sample pragmas to cope with warnings. Please note the related line at
|
||||||
// the end of this function, used to pop the compiler diagnostics status.
|
// the end of this function, used to pop the compiler diagnostics status.
|
||||||
#pragma GCC diagnostic push
|
//#pragma GCC diagnostic push
|
||||||
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
//#pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||||
#pragma GCC diagnostic ignored "-Wmissing-declarations"
|
//#pragma GCC diagnostic ignored "-Wmissing-declarations"
|
||||||
#pragma GCC diagnostic ignored "-Wreturn-type"
|
//#pragma GCC diagnostic ignored "-Wreturn-type"
|
||||||
#pragma GCC diagnostic ignored "-Wempty-body"
|
//#pragma GCC diagnostic ignored "-Wempty-body"
|
||||||
|
|
||||||
// used configuration structures
|
// used configuration structures
|
||||||
const config_data_mode_t * main_config_data_mode = 0;
|
const config_data_mode_t * main_config_data_mode = 0;
|
||||||
|
@ -286,6 +288,9 @@ volatile int i = 0;
|
||||||
#if defined(PARAMETEO)
|
#if defined(PARAMETEO)
|
||||||
//!< Triggers additional check if ADC has properly reinitialized and conversion is working
|
//!< Triggers additional check if ADC has properly reinitialized and conversion is working
|
||||||
uint8_t main_check_adc = 0;
|
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
|
#endif
|
||||||
|
|
||||||
char after_tx_lock;
|
char after_tx_lock;
|
||||||
|
@ -1144,8 +1149,6 @@ int main(int argc, char* argv[]){
|
||||||
|
|
||||||
// restart ADCs
|
// restart ADCs
|
||||||
io_vbat_meas_enable();
|
io_vbat_meas_enable();
|
||||||
// ADCStartConfig();
|
|
||||||
// DACStartConfig();
|
|
||||||
|
|
||||||
rte_main_battery_voltage = io_vbat_meas_get();
|
rte_main_battery_voltage = io_vbat_meas_get();
|
||||||
rte_main_average_battery_voltage = io_vbat_meas_average(rte_main_battery_voltage);
|
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);
|
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
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -264,15 +264,6 @@ void packet_tx_handler(const config_data_basic_t * const config_basic, const con
|
||||||
|
|
||||||
// if WX is enabled
|
// if WX is enabled
|
||||||
if ((main_config_data_mode->wx & WX_ENABLED) == WX_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
|
// 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) {
|
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);
|
srl_wait_for_tx_completion(main_kiss_srl_ctx_ptr);
|
||||||
|
|
||||||
// create wx data packet into specified buffer
|
// 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);
|
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) {
|
if (packet_tx_telemetry_descr_counter >= packet_tx_telemetry_descr_interval) {
|
||||||
|
|
||||||
#ifdef PARAMETEO
|
#ifdef PARAMETEO
|
||||||
rte_main_trigger_gsm_status_packet = 1;
|
rte_main_trigger_gsm_telemetry_descriptions = 1;
|
||||||
status_send_powersave_registers();
|
status_send_powersave_registers();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,9 @@ uint8_t rte_main_trigger_gsm_loginstring_packet = 0;
|
||||||
//!< Trigger packet with telemetry value AFTER it is prepared
|
//!< Trigger packet with telemetry value AFTER it is prepared
|
||||||
uint8_t rte_main_trigger_gsm_telemetry_values = 0;
|
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
|
//!< Trigger some reinitialization after waking up from deep sleep
|
||||||
uint8_t rte_main_woken_up = 0;
|
uint8_t rte_main_woken_up = 0;
|
||||||
|
|
||||||
|
|
|
@ -45,6 +45,16 @@ typedef enum wind_qf {
|
||||||
WIND_QF_DEGRADATED = 3
|
WIND_QF_DEGRADATED = 3
|
||||||
}wind_qf_t;
|
}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_qf;
|
||||||
extern char telemetry_degr;
|
extern char telemetry_degr;
|
||||||
extern char telemetry_nav;
|
extern char telemetry_nav;
|
||||||
|
@ -57,6 +67,8 @@ extern uint8_t telemetry_scaled_temperature;
|
||||||
|
|
||||||
void telemetry_init(void);
|
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
|
#ifdef __cplusplus
|
||||||
extern "C"
|
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 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_ */
|
#endif /* INCLUDE_APRS_WX_H_ */
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "delay.h"
|
#include "delay.h"
|
||||||
#include "backup_registers.h"
|
#include "backup_registers.h"
|
||||||
|
#include "variant.h"
|
||||||
|
|
||||||
#include "ve_direct_protocol/parser.h"
|
#include "ve_direct_protocol/parser.h"
|
||||||
|
|
||||||
|
@ -40,6 +41,135 @@ void telemetry_init(void) {
|
||||||
telemetry_counter = backup_reg_get_telemetry();
|
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) {
|
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
|
// 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);
|
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);
|
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
|
||||||
after_tx_lock = 1;
|
after_tx_lock = 1;
|
||||||
afsk_txStart(&main_afsk);
|
afsk_txStart(&main_afsk);
|
||||||
|
|
||||||
while (main_afsk.sending == 1);
|
while (main_afsk.sending == 1);
|
||||||
|
|
||||||
delay_fixed(1200);
|
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);
|
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
|
||||||
after_tx_lock = 1;
|
after_tx_lock = 1;
|
||||||
afsk_txStart(&main_afsk);
|
afsk_txStart(&main_afsk);
|
||||||
|
|
||||||
while (main_afsk.sending == 1);
|
while (main_afsk.sending == 1);
|
||||||
|
|
||||||
delay_fixed(1200);
|
delay_fixed(1200);
|
||||||
|
|
||||||
if (config_basic->ssid == 0)
|
main_own_aprs_msg_len = telemetry_create_description_string(config_basic, 0x00, TELEMETRY_PV_UNIT, main_own_aprs_msg, OWN_APRS_MSG_LN);
|
||||||
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;
|
|
||||||
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
|
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
|
||||||
after_tx_lock = 1;
|
after_tx_lock = 1;
|
||||||
afsk_txStart(&main_afsk);
|
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
|
// clear the output frame buffer
|
||||||
memset(main_own_aprs_msg, 0x00, sizeof(main_own_aprs_msg));
|
memset(main_own_aprs_msg, 0x00, sizeof(main_own_aprs_msg));
|
||||||
|
|
||||||
#ifdef PARAMETEO
|
main_own_aprs_msg_len = telemetry_create_description_string(config_basic, config_mode, TELEMETRY_NORMAL_PARAM, main_own_aprs_msg, OWN_APRS_MSG_LN);
|
||||||
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
|
|
||||||
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
|
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
|
||||||
after_tx_lock = 1;
|
after_tx_lock = 1;
|
||||||
|
|
||||||
// key up the transmitter and
|
// key up the transmitter and
|
||||||
afsk_txStart(&main_afsk);
|
afsk_txStart(&main_afsk);
|
||||||
|
|
||||||
main_wait_for_tx_complete();
|
main_wait_for_tx_complete();
|
||||||
|
|
||||||
delay_fixed(1500);
|
delay_fixed(1500);
|
||||||
|
|
||||||
WAIT_FOR_CHANNEL_FREE();
|
WAIT_FOR_CHANNEL_FREE();
|
||||||
|
|
||||||
#ifdef PARAMETEO
|
main_own_aprs_msg_len = telemetry_create_description_string(config_basic, config_mode, TELEMETRY_NORMAL_EQNS, main_own_aprs_msg, OWN_APRS_MSG_LN);
|
||||||
if (config_basic->ssid == 0)
|
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
|
||||||
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);
|
after_tx_lock = 1;
|
||||||
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[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);
|
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
|
||||||
after_tx_lock = 1;
|
after_tx_lock = 1;
|
||||||
afsk_txStart(&main_afsk);
|
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;
|
uint16_t output_frame_ln = 0;
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue