bugfix in low voltage cutoff, switching powersave mode on low battery voltage, eight bit in telemetry to send low battery warning

pull/7/head
Mateusz Lubecki 2022-04-06 20:32:50 +02:00
rodzic 590d5795a2
commit 129b286e49
11 zmienionych plików z 211 dodań i 50 usunięć

Wyświetl plik

@ -527,21 +527,6 @@
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<project id="proba3-vldiscovery.ilg.gnuarmeclipse.managedbuild.cross.target.elf.420602447" name="Executable" projectType="ilg.gnuarmeclipse.managedbuild.cross.target.elf"/>
</storageModule>
<storageModule moduleId="scannerConfiguration">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
<scannerConfigBuildInfo instanceId="ilg.gnuarmeclipse.managedbuild.cross.config.elf.release.1905520139;ilg.gnuarmeclipse.managedbuild.cross.config.elf.release.1905520139.;ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.176156905;ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.input.321079206">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.827603628;ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.827603628.;ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.1002686397;ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.input.726748309">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.827603628;ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.827603628.;ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.204317376;ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.input.90169505">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="ilg.gnuarmeclipse.managedbuild.cross.config.elf.release.1905520139;ilg.gnuarmeclipse.managedbuild.cross.config.elf.release.1905520139.;ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.879859241;ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.input.1662655990">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
</scannerConfigBuildInfo>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
<storageModule moduleId="refreshScope" versionNumber="2">
<configuration configurationName="STM32F100"/>
@ -553,4 +538,25 @@
</storageModule>
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
<storageModule moduleId="scannerConfiguration">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
<scannerConfigBuildInfo instanceId="ilg.gnuarmeclipse.managedbuild.cross.config.elf.release.1905520139;ilg.gnuarmeclipse.managedbuild.cross.config.elf.release.1905520139.;ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.879859241;ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.input.1662655990">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="ilg.gnuarmeclipse.managedbuild.cross.config.elf.release.1905520139;ilg.gnuarmeclipse.managedbuild.cross.config.elf.release.1905520139.;ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.176156905;ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.input.321079206">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.827603628;ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.827603628.;ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.1002686397;ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.input.726748309">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.827603628.109360039;ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.827603628.109360039.;ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.1656265940;ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.input.671886381">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.827603628.109360039;ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.827603628.109360039.;ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.270124285;ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.input.29354374">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.827603628;ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.827603628.;ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.204317376;ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.input.90169505">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
</scannerConfigBuildInfo>
</storageModule>
</cproject>

Wyświetl plik

@ -13,7 +13,7 @@
</configuration>
<configuration id="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.827603628.109360039" name="STM32L476_ParaMETEO">
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
<provider class="org.eclipse.cdt.core.language.settings.providers.LanguageSettingsGenericProvider" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider" name="CDT User Setting Entries" prefer-non-shared="true"/>
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="910025024327584425" id="ilg.gnuarmeclipse.managedbuild.cross.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings Cross ARM" parameter="${COMMAND} ${FLAGS} ${cross_toolchain_flags} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">

Wyświetl plik

@ -6,7 +6,7 @@
#include "config_data.h"
#define SW_VER "EA05"
#define SW_DATE "05042022"
#define SW_DATE "06042022"
#define SYSTICK_TICKS_PER_SECONDS 100
#define SYSTICK_TICKS_PERIOD 10

Wyświetl plik

@ -102,8 +102,13 @@
#include "config_data.h"
#define CURRENTLY_CUTOFF 0x1
#define CURRENTLY_VBATT_LOW 0x8
#if defined(STM32L471xx)
extern int8_t pwr_save_currently_cutoff;
void pwr_save_init(config_data_powersave_mode_t mode);
void pwr_save_enter_stop2(void);
void pwr_save_exit_from_stop2(void);

Wyświetl plik

@ -0,0 +1,36 @@
/*
* pwr_save_configuration.h
*
* Created on: Apr 6, 2022
* Author: mateusz
*/
#ifndef INCLUDE_PWR_SAVE_CONFIGURATION_H_
#define INCLUDE_PWR_SAVE_CONFIGURATION_H_
/**
* This is cutoff voltage at which the power saving subsystem will keep ParaMETEO constantly
* in L7 mode and wakeup once every 20 minutes to check B+ once again
*/
#define PWR_SAVE_CUTOFF_VOLTAGE_DEF 1120u // 11.2V
/**
* This is the restore voltage a battery must be charged to for ParaMETEO to restore it's normal operation
*/
#define PWR_SAVE_STARTUP_RESTORE_VOLTAGE_DEF 1220u // 12.2V
/**
* This is voltage above which controller will switch to PWSAVE_AGGRESV
*/
#define PWR_SAVE_AGGRESIVE_POWERSAVE_VOLTAGE (PWR_SAVE_CUTOFF_VOLTAGE_DEF + 50u)
/**
* How long in minutes the controller will sleep in L7 state between checking
* if battery has been charged.
*/
#define PWR_SAVE_CUTOFF_SLEEP_TIME_IN_MINUTES 4
#endif /* INCLUDE_PWR_SAVE_CONFIGURATION_H_ */

Wyświetl plik

@ -19,6 +19,7 @@
#ifdef STM32L471xx
#include "aprsis.h"
#include "pwr_save.h"
#endif
#include "main.h"
@ -313,11 +314,11 @@ void packet_tx_handler(const config_data_basic_t * const config_basic, const con
// if _METEO will be enabled, but without _DALLAS_AS_TELEM the fifth channel will be used to transmit temperature from MS5611
// which may be treated then as 'rack/cabinet internal temperature'. Dallas DS12B10 will be used for ragular WX frames
telemetry_send_values(rx10m, tx10m, digi10m, rte_main_battery_voltage, digidrop10m, rte_wx_temperature_internal_valid, dallas_qf, pressure_qf, humidity_qf, wind_qf, config_mode);
telemetry_send_values(rx10m, tx10m, digi10m, rte_main_battery_voltage, digidrop10m, rte_wx_temperature_internal_valid, dallas_qf, pressure_qf, humidity_qf, wind_qf, pwr_save_currently_cutoff, config_mode);
}
else {
// if user will disable both _METEO and _DALLAS_AS_TELEM value will be zeroed internally anyway
telemetry_send_values(rx10m, tx10m, digi10m, rte_main_battery_voltage, digidrop10m, 0.0f, dallas_qf, pressure_qf, humidity_qf, wind_qf, config_mode);
telemetry_send_values(rx10m, tx10m, digi10m, rte_main_battery_voltage, digidrop10m, 0.0f, dallas_qf, pressure_qf, humidity_qf, wind_qf, pwr_save_currently_cutoff, config_mode);
}
#else
// if _DALLAS_AS_TELEM will be enabled the fifth channel will be set to temperature measured by DS12B20

Wyświetl plik

@ -6,6 +6,7 @@
*/
#include "pwr_save.h"
#include "pwr_save_configuration.h"
#include "stm32l4xx.h"
#include "system_stm32l4xx.h"
@ -38,22 +39,34 @@
#define ALL_STATES_BITMASK (0xFF << 2)
#define MINIMUM_SENSEFUL_VBATT_VOLTAGE 512u
#if defined(STM32L471xx)
int8_t pwr_save_seconds_to_wx = 0;
int16_t pwr_save_sleep_time_in_seconds = -1;
/**
* Variable stores cutoff state and to save RAM it also keeps a low battery voltage flag
*/
int8_t pwr_save_currently_cutoff = 0;
/**
* This is cutoff voltage at which the power saving subsystem will keep ParaMETEO constantly
* in L7 mode and wakeup once every 20 minutes to check B+ once again
*/
const uint16_t PWR_SAVE_CUTOFF_VOLTAGE = 112; // 11.2V
const uint16_t pwr_save_cutoff_voltage = PWR_SAVE_CUTOFF_VOLTAGE_DEF;
/**
* This is the restore voltage a battery must be charged to for ParaMETEO to restore it's normal operation
*/
const uint16_t PWR_SAVE_STARTUP_RESTORE_VOLTAGE = 122; // 12.2V
const uint16_t pwr_save_startup_restore_voltage = PWR_SAVE_STARTUP_RESTORE_VOLTAGE_DEF;
/**
* Below this voltage (and above pwr_save_cutoff_voltage) software will switch powersaving
* mode to PWSAVE_AGGRESV
*/
const uint16_t pwr_save_aggressive_powersave_voltage = PWR_SAVE_AGGRESIVE_POWERSAVE_VOLTAGE;
static void pwr_save_unclock_rtc_backup_regs(void) {
// enable access to backup domain
@ -202,7 +215,7 @@ void pwr_save_exit_from_stop2(void) {
timers.telemetry_counter += (pwr_save_sleep_time_in_seconds / 60);
timers.telemetry_desc_counter += (pwr_save_sleep_time_in_seconds / 60);
if (pwr_save_currently_cutoff == 0) {
if ((pwr_save_currently_cutoff & CURRENTLY_CUTOFF) == 0) {
// set counters back
packet_tx_set_current_counters(&timers);
}
@ -514,24 +527,40 @@ void pwr_save_pooling_handler(const config_data_mode_t * config, const config_da
packet_tx_counter_values_t counters;
if (vbatt < 0xF) {
// by default use powersave mode from controller configuration
config_data_powersave_mode_t psave_mode = config->powersave;
// check if battery voltage measurement is done and senseful
if (vbatt < MINIMUM_SENSEFUL_VBATT_VOLTAGE) {
// inhibit both cutoff and aggresive powersave if vbatt measurement is either not
// done at all or scaling factor are really screwed
vbatt = 0xFFFFu;
}
if (vbatt <= PWR_SAVE_CUTOFF_VOLTAGE && pwr_save_currently_cutoff == 0) {
pwr_save_currently_cutoff = 1;
if (vbatt <= pwr_save_aggressive_powersave_voltage) {
// if battery voltage is low swtich to aggressive powersave mode
pwr_save_currently_cutoff |= CURRENTLY_VBATT_LOW;
pwr_save_switch_mode_to_l7(60 * 20);
psave_mode = PWSAVE_AGGRESV;
}
else if (vbatt <= pwr_save_cutoff_voltage && (pwr_save_currently_cutoff & CURRENTLY_CUTOFF) == 0) {
// if the battery voltage is below cutoff level and the ParaMETEO controller is currently not cut off
pwr_save_currently_cutoff |= CURRENTLY_CUTOFF;
// go sleep immediately and periodically check if battery has been charged above restore level
pwr_save_switch_mode_to_l7(60 * PWR_SAVE_CUTOFF_SLEEP_TIME_IN_MINUTES);
return;
}
else if (vbatt <= PWR_SAVE_STARTUP_RESTORE_VOLTAGE && pwr_save_currently_cutoff == 1) {
pwr_save_switch_mode_to_l7(60 * 20);
else if (vbatt <= pwr_save_startup_restore_voltage && (pwr_save_currently_cutoff & CURRENTLY_CUTOFF) != 0) {
// if the ParaMETEO is cutted off currently but battery hasn't been charged above restore voltage
pwr_save_switch_mode_to_l7(60 * PWR_SAVE_CUTOFF_SLEEP_TIME_IN_MINUTES);
return;
}
else {
// if battery level is above restore voltage and aggressive powersave voltage
pwr_save_currently_cutoff = 0;
}
@ -554,7 +583,7 @@ void pwr_save_pooling_handler(const config_data_mode_t * config, const config_da
}
// handle depends on current powersave configuration
switch (config->powersave) {
switch (psave_mode) {
/**
* PWSAVE_NONE = 0,
PWSAVE_NORMAL = 1,

Wyświetl plik

@ -74,6 +74,7 @@ void telemetry_send_values( uint8_t rx_pkts,
pressure_qf_t press_qf,
humidity_qf_t humid_qf,
wind_qf_t anemometer_qf,
int8_t cutoff_and_vbat_low,
const config_data_mode_t * const config_mode);
#else
void telemetry_send_values( uint8_t rx_pkts,

Wyświetl plik

@ -17,8 +17,20 @@ typedef enum http_client_method {
HTTP_DELETE
} http_client_method_t;
void http_client_headers_preamble(http_client_method_t method, char * url, uint8_t url_ln, char * output, uint8_t output_ln);
void http_client_headers_user_agent(char * output, uint8_t output_ln);
/**
* All these functions appends HTTP headers to output buffer. Every function (except preamble) receives three
* parameters:
*
* char * output - pointer to the output buffer
* uint16_t output_ln - lenght of output buffer
* uint16_t offset - an offset from which each function will print its header
*
* functions return an offset of one character after the last character of header. this value can be used
* afterwards as the value of 'offset'
*/
uint16_t http_client_headers_preamble(http_client_method_t method, char * url, uint8_t url_ln, char * output, uint16_t output_ln);
uint16_t http_client_headers_user_agent(char * output, uint16_t output_ln, uint16_t offset);
uint16_t http_client_headers_accept(char* output, uint16_t output_ln, uint16_t offset);
#endif /* INCLUDE_HTTP_CLIENT_HTTP_CLIENT_HEADERS_H_ */

Wyświetl plik

@ -208,22 +208,22 @@ void telemetry_send_chns_description(const config_data_basic_t * const config_ba
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", config_basic->callsign);
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", message_prefix_buffer);
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", message_prefix_buffer);
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", config_basic->callsign);
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", message_prefix_buffer);
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", message_prefix_buffer);
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;
}
@ -231,11 +231,11 @@ void telemetry_send_chns_description(const config_data_basic_t * const config_ba
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", config_basic->callsign);
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", message_prefix_buffer);
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", message_prefix_buffer);
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;
}
@ -301,20 +301,20 @@ void telemetry_send_chns_description(const config_data_basic_t * const config_ba
#ifdef STM32L471xx
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", config_basic->callsign);
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", message_prefix_buffer);
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", message_prefix_buffer);
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", config_basic->callsign);
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", message_prefix_buffer);
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", message_prefix_buffer);
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
@ -346,6 +346,7 @@ void telemetry_send_values( uint8_t rx_pkts,
pressure_qf_t press_qf,
humidity_qf_t humid_qf,
wind_qf_t anemometer_qf,
int8_t cutoff_and_vbat_low,
const config_data_mode_t * const config_mode) {
uint8_t scaled_vbatt_voltage = 0;
@ -383,6 +384,7 @@ void telemetry_send_values( uint8_t rx_pkts,
char humidity_qf_navaliable = '0';
char anemometer_degradated = '0';
char anemometer_navble = '0';
char vbatt_low = '0';
// temperature scaled to 0x00-0xFF range for fifth telemetry channel.
// if _METEO mode is enabled this channel sends the temperaure measure by
@ -454,6 +456,11 @@ void telemetry_send_values( uint8_t rx_pkts,
humidity_qf_navaliable = '0';
}
// telemetry won't be sent during cutoff anyway so this simplification is correct here
if (cutoff_and_vbat_low > 0) {
vbatt_low = '1';
}
// reset the buffer where the frame will be contructed and stored for transmission
memset(main_own_aprs_msg, 0x00, sizeof(main_own_aprs_msg));
@ -461,16 +468,16 @@ void telemetry_send_values( uint8_t rx_pkts,
if (config_mode->digi_viscous == 0) {
// generate the telemetry frame from values
#ifdef _DALLAS_AS_TELEM
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, "T#%03d,%03d,%03d,%03d,%03d,%03d,%c%c%c%c%c%c%c0", telemetry_counter++, rx_pkts, tx_pkts, digi_pkts, scaled_vbatt_voltage, scaled_temperature, qf, degr, nav, pressure_qf_navaliable, humidity_qf_navaliable, anemometer_degradated, anemometer_navble);
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, "T#%03d,%03d,%03d,%03d,%03d,%03d,%c%c%c%c%c%c%c%c", telemetry_counter++, rx_pkts, tx_pkts, digi_pkts, scaled_vbatt_voltage, scaled_temperature, qf, degr, nav, pressure_qf_navaliable, humidity_qf_navaliable, anemometer_degradated, anemometer_navble, vbatt_low);
#else
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, "T#%03d,%03d,%03d,%03d,%03d,%03d,%c%c%c%c%c%c%c0", telemetry_counter++, rx_pkts, tx_pkts, digi_pkts, scaled_vbatt_voltage, scaled_temperature, qf, degr, nav, pressure_qf_navaliable, humidity_qf_navaliable, anemometer_degradated, anemometer_navble);
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, "T#%03d,%03d,%03d,%03d,%03d,%03d,%c%c%c%c%c%c%c%c", telemetry_counter++, rx_pkts, tx_pkts, digi_pkts, scaled_vbatt_voltage, scaled_temperature, qf, degr, nav, pressure_qf_navaliable, humidity_qf_navaliable, anemometer_degradated, anemometer_navble, vbatt_low);
#endif
}
else {
#ifdef _DALLAS_AS_TELEM
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, "T#%03d,%03d,%03d,%03d,%03d,%03d,%c%c%c%c%c%c%c0", telemetry_counter++, rx_pkts, viscous_drop_pkts, digi_pkts, scaled_vbatt_voltage, scaled_temperature, qf, degr, nav, pressure_qf_navaliable, humidity_qf_navaliable, anemometer_degradated, anemometer_navble);
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, "T#%03d,%03d,%03d,%03d,%03d,%03d,%c%c%c%c%c%c%c0", telemetry_counter++, rx_pkts, viscous_drop_pkts, digi_pkts, scaled_vbatt_voltage, scaled_temperature, qf, degr, nav, pressure_qf_navaliable, humidity_qf_navaliable, anemometer_degradated, anemometer_navble, vbatt_low);
#else
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, "T#%03d,%03d,%03d,%03d,%03d,%03d,%c%c%c%c%c%c%c0", telemetry_counter++, rx_pkts, viscous_drop_pkts, digi_pkts, scaled_vbatt_voltage, scaled_temperature, qf, degr, nav, pressure_qf_navaliable, humidity_qf_navaliable, anemometer_degradated, anemometer_navble);
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, "T#%03d,%03d,%03d,%03d,%03d,%03d,%c%c%c%c%c%c%c0", telemetry_counter++, rx_pkts, viscous_drop_pkts, digi_pkts, scaled_vbatt_voltage, scaled_temperature, qf, degr, nav, pressure_qf_navaliable, humidity_qf_navaliable, anemometer_degradated, anemometer_navble, vbatt_low);
#endif
}
#else

Wyświetl plik

@ -1,3 +1,4 @@
/*
* http_client_headers.c
*
@ -5,4 +6,67 @@
* Author: mateusz
*/
#include "http_client/http_client_headers.h"
#include <stdio.h>
#include <string.h>
#include "main.h" // for sofrware version
const char * const http_client_get = "GET";
const char * const http_client_post = "POST";
const char * const http_client_put = "PUT";
const char * const http_client_delete = "DELETE";
uint16_t http_client_headers_preamble(http_client_method_t method, char *url,
uint8_t url_ln, char *output, uint16_t output_ln) {
// lenght of header
uint16_t out = 0;
// pointer to string with method name
const char * method_string = 0;
// choose correct
switch (method) {
case HTTP_POST:
method_string = http_client_post;
break;
case HTTP_PUT:
method_string = http_client_put;
break;
case HTTP_DELETE:
method_string = http_client_delete;
break;
case HTTP_GET:
default:
method_string = http_client_get;
break;
}
snprintf(output, output_ln, "%s %s HTTP/1.1\r\n", method_string, url);
out = strlen (output);
return out;
}
uint16_t http_client_headers_user_agent(char *output, uint16_t output_ln,
uint16_t offset) {
uint16_t out = 0;
snprintf(output + offset, output_ln - offset, "User-Agent: %s");
return out;
}
uint16_t http_client_headers_accept(char *output, uint16_t output_ln,
uint16_t offset) {
uint16_t out = 0;
return out;
}