kopia lustrzana https://github.com/SP8EBC/ParaTNC
bugfix in low voltage cutoff, switching powersave mode on low battery voltage, eight bit in telemetry to send low battery warning
rodzic
590d5795a2
commit
129b286e49
36
.cproject
36
.cproject
|
@ -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>
|
|
@ -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 "${INPUTS}"" prefer-non-shared="true">
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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_ */
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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_ */
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Ładowanie…
Reference in New Issue