api, aprsis: send data to both systems. fixed indexer configuration

sr9wxz_new_configuration_for_ZZ06
Mateusz Lubecki 2022-05-08 08:58:07 +02:00
rodzic d0a3f8bf2c
commit 4f301c6bc8
7 zmienionych plików z 178 dodań i 79 usunięć

Wyświetl plik

@ -14,7 +14,7 @@
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="${cross_rm} -rf" description="ParaTNC" errorParsers="org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.GmakeErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.CWDLocator;org.eclipse.cdt.core.GCCErrorParser" id="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.827603628" name="STM32F100_ParaTNC" optionalBuildProperties="org.eclipse.cdt.docker.launcher.containerbuild.property.enablement=null,org.eclipse.cdt.docker.launcher.containerbuild.property.selectedvolumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.volumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.image=null,org.eclipse.cdt.docker.launcher.containerbuild.property.connection=null" parent="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug">
<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="${cross_rm} -rf" description="ParaTNC" errorParsers="org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.GmakeErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.CWDLocator;org.eclipse.cdt.core.GCCErrorParser" id="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.827603628" name="STM32F100_ParaTNC" optionalBuildProperties="org.eclipse.cdt.docker.launcher.containerbuild.property.enablement=null,org.eclipse.cdt.docker.launcher.containerbuild.property.volumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.connection=null,org.eclipse.cdt.docker.launcher.containerbuild.property.selectedvolumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.image=null" parent="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug">
<folderInfo id="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.827603628." name="/" resourcePath="">
<toolChain id="ilg.gnuarmeclipse.managedbuild.cross.toolchain.elf.debug.334630505" name="Cross ARM GCC" superClass="ilg.gnuarmeclipse.managedbuild.cross.toolchain.elf.debug">
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.1849839382" name="Optimization Level" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level" useByScannerDiscovery="true" value="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.debug" valueType="enumerated"/>

Wyświetl plik

@ -11,6 +11,11 @@
#include "drivers/serial.h"
#include "gsm/sim800c_tcpip.h"
#define APRSIS_OK 0
#define APRSIS_NOT_CONFIGURED 1
#define APRSIS_WRONG_STATE 2
#define APRSIS_ALREADY_CONNECTED 3
extern uint8_t aprsis_connected;
void aprsis_init(srl_context_t * context, gsm_sim800_state_t * gsm_modem_state, char * callsign, uint8_t ssid, uint32_t passcode, char * default_server, uint16_t default_port);

Wyświetl plik

@ -22,6 +22,7 @@ typedef struct packet_tx_counter_values_t {
void packet_tx_send_wx_frame(void);
void packet_tx_configure(uint8_t meteo_interval, uint8_t beacon_interval, config_data_powersave_mode_t powersave);
void packet_tx_tcp_handler(void);
void packet_tx_handler(const config_data_basic_t * const config_basic, const config_data_mode_t * const config_mode);
void packet_tx_get_current_counters(packet_tx_counter_values_t * out);
void packet_tx_set_current_counters(packet_tx_counter_values_t * in);

Wyświetl plik

@ -93,10 +93,14 @@ void aprsis_init(srl_context_t * context, gsm_sim800_state_t * gsm_modem_state,
uint8_t aprsis_connect_and_login(char * address, uint8_t address_ln, uint16_t port) {
// this function has blocking io
uint8_t out = 2;
uint8_t out = APRSIS_WRONG_STATE;
if (aprsis_serial_port == 0 || aprsis_gsm_modem_state == 0 || aprsis_logged == 1) {
return 1;
if (aprsis_logged == 1) {
return APRSIS_ALREADY_CONNECTED;
}
if (aprsis_serial_port == 0 || aprsis_gsm_modem_state == 0) {
return APRSIS_NOT_CONFIGURED;
}
if (*aprsis_gsm_modem_state == SIM800_ALIVE) {
@ -149,10 +153,12 @@ uint8_t aprsis_connect_and_login(char * address, uint8_t address_ln, uint16_t po
if (retval == 0) {
aprsis_logged = 1;
aprsis_send_beacon(0);
// wait for consecutive data
gsm_sim800_tcpip_async_receive(aprsis_serial_port, aprsis_gsm_modem_state, 0, 61000, aprsis_receive_callback);
out = 0;
out = APRSIS_OK;
}
else {

Wyświetl plik

@ -632,6 +632,7 @@ int main(int argc, char* argv[]){
#endif
#ifndef PARAMETEO
// if Victron VE-direct protocol is enabled set the baudrate to the 19200u
if (main_config_data_mode->victron == 1) {
main_target_kiss_baudrate = 19200u;
@ -639,6 +640,7 @@ int main(int argc, char* argv[]){
// and disable the kiss TNC option as it shares the same port
main_kiss_enabled = 0;
}
#endif
if (main_config_data_mode->wx_davis == 1) {
@ -778,9 +780,6 @@ int main(int argc, char* argv[]){
#endif
#if defined(STM32L471xx)
// switch on voltages exclusively for ParaMETEO
// initialize dallas one-wire driver for termometer
dallas_init(GPIOC, LL_GPIO_PIN_11, 0x0, &rte_wx_dallas_average);
#endif
@ -801,15 +800,16 @@ int main(int argc, char* argv[]){
// configuring interrupt priorities
it_handlers_set_priorities();
// read calibration data from I2C pressure / humidity sensor
if (main_config_data_mode->wx_ms5611_or_bme == 0) {
ms5611_reset(&rte_wx_ms5611_qf);
ms5611_read_calibration(SensorCalData, &rte_wx_ms5611_qf);
ms5611_trigger_measure(0, 0);
ms5611_reset(&rte_wx_ms5611_qf);
ms5611_read_calibration(SensorCalData, &rte_wx_ms5611_qf);
ms5611_trigger_measure(0, 0);
}
else if (main_config_data_mode->wx_ms5611_or_bme == 1) {
bme280_reset(&rte_wx_bme280_qf);
bme280_setup();
bme280_read_calibration(bme280_calibration_data);
bme280_reset(&rte_wx_bme280_qf);
bme280_setup();
bme280_read_calibration(bme280_calibration_data);
}
if (main_kiss_enabled == 1) {
@ -877,6 +877,7 @@ int main(int argc, char* argv[]){
wx_get_all_measurements(main_config_data_wx_sources, main_config_data_mode, main_config_data_umb, main_config_data_rtu);
}
#ifndef PARAMETEO
// start serial port i/o transaction depending on station configuration
if (main_config_data_mode->victron == 1) {
// initializing protocol parser
@ -894,6 +895,10 @@ int main(int argc, char* argv[]){
// switching UART to receive mode to be ready for KISS frames from host
srl_receive_data(main_kiss_srl_ctx_ptr, 100, FEND, FEND, 0, 0, 0);
}
#else
// switching UART to receive mode to be ready for KISS frames from host
srl_receive_data(main_kiss_srl_ctx_ptr, 100, FEND, FEND, 0, 0, 0);
#endif
io_oc_output_low();
@ -954,9 +959,9 @@ int main(int argc, char* argv[]){
http_client_init(&main_gsm_state, main_gsm_srl_ctx_ptr, 0);
api_init(main_config_data_gsm->api_base_url, main_config_data_gsm->api_station_name);
api_init((const char *)main_config_data_gsm->api_base_url, (const char *)main_config_data_gsm->api_station_name);
aprsis_init(&main_gsm_srl_ctx, &main_gsm_state, main_config_data_basic->callsign, main_config_data_basic->ssid, main_config_data_gsm->aprsis_passcode, main_config_data_gsm->aprsis_server_address, main_config_data_gsm->aprsis_server_port);
aprsis_init(&main_gsm_srl_ctx, &main_gsm_state, (const char *)main_config_data_basic->callsign, main_config_data_basic->ssid, (const char *)main_config_data_gsm->aprsis_passcode, (const char *)main_config_data_gsm->aprsis_server_address, main_config_data_gsm->aprsis_server_port);
}
pwm_input_io_init();
@ -1103,7 +1108,7 @@ int main(int argc, char* argv[]){
// if Victron VE.direct client is enabled
if (main_config_data_mode->victron == 1) {
#ifndef PARAMETEO
// if new KISS message has been received from the host
if (main_kiss_srl_ctx_ptr->srl_rx_state == SRL_RX_DONE || main_kiss_srl_ctx_ptr->srl_rx_state == SRL_RX_ERROR) {
@ -1137,6 +1142,7 @@ int main(int argc, char* argv[]){
srl_receive_data(main_kiss_srl_ctx_ptr, VE_DIRECT_MAX_FRAME_LN, 0, 0, 0, 0, 0);
}
#endif
}
else if (main_config_data_mode->wx_umb == 1) {
// if some UMB data have been received
@ -1191,7 +1197,10 @@ int main(int argc, char* argv[]){
// downloaded from sensors if _METEO and/or _DALLAS_AS_TELEM aren't defined
if (main_wx_sensors_pool_timer < 10) {
// get current battery voltage. for non parameteo this will return 0
rte_main_battery_voltage = io_vbat_meas_get();
// get average battery voltage
rte_main_average_battery_voltage = io_vbat_meas_average(rte_main_battery_voltage);
// meas average will return 0 if internal buffer isn't filled completely
@ -1199,24 +1208,35 @@ int main(int argc, char* argv[]){
rte_main_average_battery_voltage = rte_main_battery_voltage;
}
if (main_modbus_rtu_master_enabled == 1) {
rtu_serial_start();
}
if ((main_config_data_mode->wx & WX_ENABLED) == 1) {
// notice: UMB-master and Modbus-RTU uses the same UART
// so they cannot be enabled both at once
// check if modbus rtu master is enabled and configured properly
if (main_modbus_rtu_master_enabled == 1) {
// start quering all Modbus RTU devices & registers one after another
rtu_serial_start();
}
else if (main_config_data_mode->wx_umb == 1) {
// request status from the slave if UMB master is enabled
umb_0x26_status_request(&rte_wx_umb, &rte_wx_umb_context, main_config_data_umb);
}
else {
;
}
// davis serial weather station is connected using UART / RS232 used normally
// for KISS communcation between modem and host PC
if (main_davis_serial_enabled == 1) {
davis_trigger_rxcheck_packet();
}
// get all measurements from 'internal' sensors (except wind which is handled separately)
wx_get_all_measurements(main_config_data_wx_sources, main_config_data_mode, main_config_data_umb, main_config_data_rtu);
}
if (main_config_data_mode->wx_umb == 1) {
//
umb_0x26_status_request(&rte_wx_umb, &rte_wx_umb_context, main_config_data_umb);
}
if (main_davis_serial_enabled == 1) {
davis_trigger_rxcheck_packet();
}
// check if there is a request to send ModbusRTU error status message
if (rte_main_trigger_modbus_status == 1 && main_modbus_rtu_master_enabled == 1) {
rtu_serial_get_status_string(&rte_rtu_pool_queue, main_wx_srl_ctx_ptr, main_own_aprs_msg, OWN_APRS_MSG_LN, &main_own_aprs_msg_len);
@ -1252,13 +1272,14 @@ int main(int argc, char* argv[]){
gsm_sim800_poolers_one_minute(main_gsm_srl_ctx_ptr, &main_gsm_state);
aprsis_connect_and_login_default();
if (gsm_sim800_gprs_ready == 1) {
//api_send_json_status();
api_send_json_measuremenets();
// retval = http_client_async_get("http://pogoda.cc:8080/meteo_backend/status", strlen("http://pogoda.cc:8080/meteo_backend/status"), 0xFFF0, 0x1, 0);
}
// if (gsm_sim800_gprs_ready == 1) {
//
// //api_send_json_status();
// api_send_json_measuremenets();
// // retval = http_client_async_get("http://pogoda.cc:8080/meteo_backend/status", strlen("http://pogoda.cc:8080/meteo_backend/status"), 0xFFF0, 0x1, 0);
// }
}
#endif
@ -1336,6 +1357,7 @@ int main(int argc, char* argv[]){
main_set_monitor(8);
// check if consecutive weather frame has been triggered from 'packet_tx_handler'
if (rte_main_trigger_wx_packet == 1) {
packet_tx_send_wx_frame();
@ -1356,13 +1378,8 @@ int main(int argc, char* argv[]){
#ifdef STM32L471xx
if (main_config_data_mode->gsm == 1) {
// TODO
// retval = aprsis_connect_and_login(TEST_IP, strlen(TEST_IP), 14580);
//
// if (retval == 0) {
// aprsis_send_beacon(0);
// }
packet_tx_tcp_handler();
}
#endif

Wyświetl plik

@ -52,6 +52,15 @@ uint8_t packet_tx_modbus_status = (uint8_t)(_TELEM_DESCR_INTERVAL - _WX_INTERVAL
uint8_t packet_tx_more_than_one = 0;
#ifdef STM32L471xx
uint8_t packet_tx_trigger_tcp = 0;
#define API_TRIGGER_STATUS (1 << 1)
#define API_TRIGGER_METEO (1 << 2)
#define APRSIS_TRIGGER_METEO (1 << 3)
#define RECONNECT_APRSIS (1 << 7)
#endif
void packet_tx_send_wx_frame(void) {
main_wait_for_tx_complete();
@ -91,7 +100,61 @@ inline void packet_tx_multi_per_call_handler(void) {
}
}
// this shall be called in 60 seconds periods
// this shall be called in 10 seconds interval
void packet_tx_tcp_handler(void) {
#ifdef STM32L471xx
if ((packet_tx_trigger_tcp & APRSIS_TRIGGER_METEO) != 0) {
// send APRS-IS frame, if APRS-IS is not connected this function will return immediately
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);
// clear the bit
packet_tx_trigger_tcp ^= APRSIS_TRIGGER_METEO;
}
else if ((packet_tx_trigger_tcp & API_TRIGGER_STATUS) != 0) {
// check if APRS-IS is connected
if (aprsis_connected != 0) {
// disconnect it before call to API - this disconnection has blocking IO
aprsis_disconnect();
// remember to reconnect APRSIS after all API comm will be done
packet_tx_trigger_tcp |= RECONNECT_APRSIS;
}
// send status (async)
api_send_json_status();
// clear the bit
packet_tx_trigger_tcp ^= API_TRIGGER_STATUS;
}
else if ((packet_tx_trigger_tcp & API_TRIGGER_METEO) != 0) {
// check if APRS-IS is connected
if (aprsis_connected != 0) {
// disconnect it before call to API - this disconnection has blocking IO
aprsis_disconnect();
// remember to reconnect APRSIS after all API comm will be done
packet_tx_trigger_tcp |= RECONNECT_APRSIS;
}
api_send_json_measuremenets();
// clear the bit
packet_tx_trigger_tcp ^= API_TRIGGER_METEO;
}
else if ((packet_tx_trigger_tcp & RECONNECT_APRSIS) != 0) {
aprsis_connect_and_login_default();
packet_tx_trigger_tcp ^= RECONNECT_APRSIS;
}
#endif
}
// this shall be called in 60 seconds intervals
void packet_tx_handler(const config_data_basic_t * const config_basic, const config_data_mode_t * const config_mode) {
dallas_qf_t dallas_qf = DALLAS_QF_UNKNOWN;
@ -104,25 +167,18 @@ void packet_tx_handler(const config_data_basic_t * const config_basic, const con
// set to one if more than one packet will be send from this function at once (like beacon + telemetry)
packet_tx_more_than_one = 0;
// increase beacon transmit counters
packet_tx_beacon_counter++;
packet_tx_error_status_counter++;
packet_tx_telemetry_counter++;
packet_tx_telemetry_descr_counter++;
if ((main_config_data_mode->wx & WX_ENABLED) == WX_ENABLED) {
// increse these counters only when WX is enabled
packet_tx_meteo_counter++;
packet_tx_meteo_kiss_counter++;
}
if (packet_tx_error_status_counter >= packet_tx_error_status_interval) {
if (config_mode->wx_umb) {
umb_construct_status_str(&rte_wx_umb_context, main_own_aprs_msg, sizeof(main_own_aprs_msg), &ln, master_time);
packet_tx_multi_per_call_handler();
}
packet_tx_error_status_counter = 0;
}
// check if there is a time to send own beacon
if (packet_tx_beacon_counter >= packet_tx_beacon_interval && packet_tx_beacon_interval != 0) {
packet_tx_multi_per_call_handler();
@ -134,11 +190,25 @@ void packet_tx_handler(const config_data_basic_t * const config_basic, const con
}
// if WX is enabled
if ((main_config_data_mode->wx & WX_ENABLED) == WX_ENABLED) {
#ifdef STM32L471xx
// send wx packet to APRSIS one minute before radio transmission
if (packet_tx_meteo_counter == packet_tx_meteo_interval - 1 && packet_tx_meteo_interval != 0) {
packet_tx_trigger_tcp |= APRSIS_TRIGGER_METEO;
//aprsis_send_wx_frame(rte_wx_average_windspeed, rte_wx_max_windspeed, rte_wx_average_winddirection, rte_wx_temperature_average_external_valid, rte_wx_pressure_valid, rte_wx_humidity_valid);
}
#endif
// check if there is a time to send meteo packet through RF
if (packet_tx_meteo_counter >= packet_tx_meteo_interval && packet_tx_meteo_interval != 0) {
// this function is required if more than one RF frame will be send from this function at once
// it waits for transmission completion and add some delay to let digipeaters do theris job
packet_tx_multi_per_call_handler();
// send WX frame through RF
SendWXFrame(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);
/**
@ -150,10 +220,14 @@ void packet_tx_handler(const config_data_basic_t * const config_basic, const con
*
*/
#ifdef EXTERNAL_WATCHDOG
io_ext_watchdog_service();
#endif
#ifdef STM32L471xx
// and trigger API wx packet transmission
packet_tx_trigger_tcp |= API_TRIGGER_METEO;
#endif
// check if user want's to send two wx packets one after another
if (main_config_data_basic->wx_double_transmit == 1) {
rte_main_trigger_wx_packet = 1;
}
@ -161,12 +235,6 @@ void packet_tx_handler(const config_data_basic_t * const config_basic, const con
packet_tx_meteo_counter = 0;
}
#ifdef STM32L471xx
if (packet_tx_meteo_counter == packet_tx_meteo_interval - 1 && packet_tx_meteo_interval != 0) {
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
if ((main_config_data_mode->wx_modbus & WX_MODBUS_DEBUG) == WX_MODBUS_DEBUG) {
// send the status packet with raw values of all requested modbus-RTU registers
if (packet_tx_meteo_counter == (packet_tx_meteo_interval - 1) &&
@ -178,20 +246,11 @@ void packet_tx_handler(const config_data_basic_t * const config_basic, const con
telemetry_send_status_raw_values_modbus();
}
// trigger the status packet with modbus-rtu state like error counters, timestamps etc.
if (packet_tx_meteo_counter == (packet_tx_meteo_interval - 1) &&
packet_tx_telemetry_descr_counter > packet_tx_modbus_status &&
packet_tx_telemetry_descr_counter <= packet_tx_modbus_status * 2)
{
packet_tx_multi_per_call_handler();
rte_main_trigger_modbus_status = 1;
}
}
// there is no sense to include support for Victron VE.Direct in parameteo
// which has its own charging controller
#ifndef PARAMETEO
// check if Victron VE.Direct serial protocol client is enabled and it is
// a time to send the status message
if (config_mode->victron == 1 &&
@ -203,10 +262,12 @@ void packet_tx_handler(const config_data_basic_t * const config_basic, const con
telemetry_send_status_pv(&rte_pv_average, &rte_pv_last_error, rte_pv_struct.system_state, master_time, rte_pv_messages_count, rte_pv_corrupted_messages_count);
}
#endif
// send wx frame to KISS host once every two minutes
if (packet_tx_meteo_kiss_counter >= packet_tx_meteo_kiss_interval && main_kiss_enabled == 1) {
// wait if serial port is currently used
srl_wait_for_tx_completion(main_kiss_srl_ctx_ptr);
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);
@ -219,11 +280,11 @@ void packet_tx_handler(const config_data_basic_t * const config_basic, const con
if (packet_tx_telemetry_counter >= packet_tx_telemetry_interval) {
telemetry_send_status_powersave_registers(REGISTER_LAST_SLEEP, REGISTER_LAST_WKUP, REGISTER_COUNTERS, REGISTER_MONITOR, REGISTER_LAST_SLTIM);
packet_tx_multi_per_call_handler();
// if there weren't any erros related to communication with DS12B20 from previous function call
// ASSEMBLY QUALITY FACTORS
// if there weren't any erros related to the communication with DS12B20 from previous function call
if (rte_wx_error_dallas_qf == DALLAS_QF_UNKNOWN) {
dallas_qf = rte_wx_current_dallas_qf; // it might be DEGRADATED so we need to copy a value directly
@ -318,7 +379,7 @@ void packet_tx_handler(const config_data_basic_t * const config_basic, const con
}
else {
#ifdef STM32L471xx
#ifdef PARAMETEO
// if _DALLAS_AS_TELEM will be enabled the fifth channel will be set to temperature measured by DS12B20
//telemetry_send_values(rx10m, tx10m, digi10m, kiss10m, rte_wx_temperature_dallas_valid, dallas_qf, rte_wx_ms5611_qf, rte_wx_dht_valid.qf, rte_wx_umb_qf);
if (config_mode->wx == 1) {
@ -353,6 +414,11 @@ void packet_tx_handler(const config_data_basic_t * const config_basic, const con
}
if (packet_tx_telemetry_descr_counter >= packet_tx_telemetry_descr_interval) {
#ifdef PARAMETEO
telemetry_send_status_powersave_registers(REGISTER_LAST_SLEEP, REGISTER_LAST_WKUP, REGISTER_COUNTERS, REGISTER_MONITOR, REGISTER_LAST_SLTIM);
#endif
packet_tx_multi_per_call_handler();
if (config_mode->victron == 1) {
@ -381,6 +447,10 @@ void packet_tx_handler(const config_data_basic_t * const config_basic, const con
umb_clear_error_history(&rte_wx_umb_context);
}
#ifdef STM32L471xx
packet_tx_trigger_tcp |= API_TRIGGER_STATUS;
#endif
packet_tx_telemetry_descr_counter = 0;
}

Wyświetl plik

@ -549,7 +549,7 @@ int32_t rtu_serial_get_status_string(rtu_pool_queue_t* queue, srl_context_t* srl
memset(out, 0x00, out_buffer_ln);
//#ifdef _MODBUS_RTU
string_ln = snprintf(out, out_buffer_ln, ">MT %lX, LRET %lX, LSCT %lX, NSSC %X, NSE %X, RXB %lX, RXI %X, TXB %lX",
string_ln = snprintf(out, out_buffer_ln, ">[MT: %lX][LRET: %lX][LSCT: %lX][NSSC: %X][NSE: %X][RXB: %lX][RXI %X][TXB %lX]",
main_get_master_time(),
rte_rtu_last_modbus_rx_error_timestamp,
rtu_time_of_last_successfull_comm,