Porównaj commity

...

2 Commity

18 zmienionych plików z 198 dodań i 119 usunięć

Wyświetl plik

@ -218,6 +218,7 @@ This is done by invoking a command:
'sudo echo "options usb-storage quirks=483:3744:i" >> /etc/modprobe.d/stlink_v1.conf' 'sudo echo "options usb-storage quirks=483:3744:i" >> /etc/modprobe.d/stlink_v1.conf'
What will create a new file called 'stlink_v1.conf' in modprobe directory. After the system reboot changes should What will create a new file called 'stlink_v1.conf' in modprobe directory. After the system reboot changes should
be applied and the programmer should be free to go. The kernel log should looks somehow like this below be applied and the programmer should be free to go. The kernel log should looks somehow like this below
[90639.895886] usb 2-1.1: new full-speed USB device number 13 using ehci-pci [90639.895886] usb 2-1.1: new full-speed USB device number 13 using ehci-pci
[90639.990288] usb 2-1.1: New USB device found, idVendor=0483, idProduct=3744 [90639.990288] usb 2-1.1: New USB device found, idVendor=0483, idProduct=3744
[90639.990294] usb 2-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [90639.990294] usb 2-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
@ -229,11 +230,59 @@ be applied and the programmer should be free to go. The kernel log should looks
The next step is to install texane-stlink which supports the ST-Link/V1 programmer and can be used to read an write The next step is to install texane-stlink which supports the ST-Link/V1 programmer and can be used to read an write
the flash memory. Installation is quite straight forward the flash memory. Installation is quite straight forward
'git clone git://github.com/texane/stlink.git'
'cd stlink.git' 'git clone git://github.com/texane/stlink.git'
'make' 'cd stlink.git'
'cd build/Relase' 'make'
'sudo cp st-* /usr/bin' 'cd build/Relase'
'sudo cp st-* /usr/bin'
At the end the HEX file can be loaded into the microcontroler by typing a command At the end the HEX file can be loaded into the microcontroler by typing a command
'sudo st-flash --format ihex write /dev/sr0 ParaTNC.hex'
'sudo st-flash --format ihex write /dev/sr0 ParaTNC.hex'
#### LOADING THE HEX FILE INTO ParaTNC or ParaMETEO TARGET USING STLINK/V2
mateusz@mateusz-ThinkCentre-M720q:~/Documents/___STM32/ParaTNC/STM32L476_ParaMETEO$ st-flash erase
st-flash 1.7.0-120-gbeffed4
/usr/local/stlink/chips: No such file or directory
2023-11-17T07:43:18 INFO common.c: L47x/L48x: 96 KiB SRAM, 1024 KiB flash in at least 2 KiB pages.
Mass erasing
and then programming itself
mateusz@mateusz-ThinkCentre-M720q:~/Documents/___STM32/ParaTNC/STM32L476_ParaMETEO$ st-flash --format ihex write ParaTNC.hex
st-flash 1.7.0-120-gbeffed4
/usr/local/stlink/chips: No such file or directory
2023-11-17T07:44:47 INFO common.c: L47x/L48x: 96 KiB SRAM, 1024 KiB flash in at least 2 KiB pages.
2023-11-17T07:44:47 INFO common.c: Attempting to write 111504 (0x1b390) bytes to stm32 address: 134217728 (0x8000000)
2023-11-17T07:44:48 INFO common.c: Finished erasing 55 pages of 2048 (0x800) bytes
2023-11-17T07:44:48 INFO common.c: Starting Flash write for F2/F4/F7/L4
2023-11-17T07:44:48 INFO flash_loader.c: Successfully loaded flash loader in sram
2023-11-17T07:44:48 INFO flash_loader.c: Clear DFSR
2023-11-17T07:44:48 INFO flash_loader.c: Clear CFSR
2023-11-17T07:44:48 INFO flash_loader.c: Clear HFSR
2023-11-17T07:44:51 INFO common.c: Starting verification of write complete
2023-11-17T07:44:52 INFO common.c: Flash written and verified! jolly good!
#### LOADING THE HEX FILE INTO ParaTNC or ParaMETEO TARGET USING ROM BOOTLOADER AND STM32FLASH software
Examples:
Get device information:
stm32flash /dev/ttyS0
or:
stm32flash /dev/i2c-0
Write with verify and then start execution:
stm32flash -w filename -v -g 0x0 /dev/ttyS0
Read flash to file:
stm32flash -r filename /dev/ttyS0
Read 100 bytes of flash from 0x1000 to stdout:
stm32flash -r - -S 0x1000:100 /dev/ttyS0
Start execution:
stm32flash -g 0x0 /dev/ttyS0

Wyświetl plik

@ -51,7 +51,7 @@ use strict;
# Configuration: set these as appropriate for your architecture/project. # Configuration: set these as appropriate for your architecture/project.
my $objdump = "/usr/local/bin/gcc-arm-none-eabi-7-2018-q2-update/bin/arm-none-eabi-objdump"; my $objdump = "/usr/local/bin/gcc-arm-none-eabi-7-2018-q2-update/bin/arm-none-eabi-objdump";
my $call_cost = 12; my $call_cost = 32;
# First, we need to read all object and corresponding .su files. We're # First, we need to read all object and corresponding .su files. We're
# gathering a mapping of functions to callees and functions to frame # gathering a mapping of functions to callees and functions to frame

Wyświetl plik

@ -0,0 +1,23 @@
/*
* dallas_temperature_limits.h
*
* Created on: Nov 16, 2023
* Author: mateusz
*/
#ifndef ETC_DALLAS_TEMPERATURE_LIMITS_H_
#define ETC_DALLAS_TEMPERATURE_LIMITS_H_
#define DALLAS_TEMPERATURE_LIMITS_LOW -32.0f
#define DALLAS_TEMPERATURE_LIMITS_HI 64.0f
#define DALLAS_TEMPERATURE_NEG_SLEW -16
#define DALLAS_TEMPERATURE_POS_SLEW 16
#define DALLAS_MAX_LIMIT_OF_DEGRADED 64U
#endif /* ETC_DALLAS_TEMPERATURE_LIMITS_H_ */

Wyświetl plik

@ -33,7 +33,6 @@ extern uint8_t rte_main_boot_cycles, rte_main_hard_faults;
extern uint32_t rte_main_hardfault_lr, rte_main_hardfault_pc; extern uint32_t rte_main_hardfault_lr, rte_main_hardfault_pc;
extern uint8_t rte_main_trigger_status; extern uint8_t rte_main_trigger_status;
extern uint8_t rte_main_trigger_modbus_status;
extern uint8_t rte_main_trigger_wx_packet; extern uint8_t rte_main_trigger_wx_packet;

Wyświetl plik

@ -81,6 +81,7 @@ extern ms5611_qf_t rte_wx_ms5611_qf;
extern bme280_qf_t rte_wx_bme280_qf; extern bme280_qf_t rte_wx_bme280_qf;
extern analog_wind_qf_t rte_wx_wind_qf; extern analog_wind_qf_t rte_wx_wind_qf;
extern uint8_t rte_wx_humidity_available; extern uint8_t rte_wx_humidity_available;
extern uint8_t rte_wx_dallas_degraded_counter;
extern umb_frame_t rte_wx_umb; extern umb_frame_t rte_wx_umb;

Wyświetl plik

@ -9,7 +9,7 @@
#define SOFTWARE_VERSION_H_ #define SOFTWARE_VERSION_H_
#define SW_VER "EB03" #define SW_VER "EB03"
#define SW_DATE "12112023" #define SW_DATE "16112023"
#define SW_KISS_PROTO "B" #define SW_KISS_PROTO "B"
extern const char software_version_str[5]; extern const char software_version_str[5];

Wyświetl plik

@ -96,6 +96,8 @@
#include <kiss_communication/kiss_communication.h> #include <kiss_communication/kiss_communication.h>
#include <etc/kiss_configuation.h> #include <etc/kiss_configuation.h>
#include <etc/dallas_temperature_limits.h>
#define SOH 0x01 #define SOH 0x01
//#include "variant.h" //#include "variant.h"
@ -188,6 +190,9 @@ int32_t main_two_second_pool_timer = 2000;
//! ten second pool interval //! ten second pool interval
int32_t main_ten_second_pool_timer = 10000; int32_t main_ten_second_pool_timer = 10000;
//! one hour interval incremented inside one minute
int8_t main_one_hour_pool_timer = 60;
//! serial context for UART used to KISS //! serial context for UART used to KISS
srl_context_t main_kiss_srl_ctx; srl_context_t main_kiss_srl_ctx;
@ -1444,19 +1449,6 @@ 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); wx_get_all_measurements(main_config_data_wx_sources, main_config_data_mode, main_config_data_umb, main_config_data_rtu);
} }
// 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);
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
afsk_txStart(&main_afsk);
rte_main_trigger_modbus_status = 0;
}
backup_reg_set_monitor(3); backup_reg_set_monitor(3);
main_wx_sensors_pool_timer = 65500; main_wx_sensors_pool_timer = 65500;
@ -1498,6 +1490,23 @@ int main(int argc, char* argv[]){
} }
#endif #endif
if (rte_wx_dallas_degraded_counter > DALLAS_MAX_LIMIT_OF_DEGRADED) {
rte_main_reboot_req = 1;
}
/**
* ONE HOUR POOLING
*/
if (--main_one_hour_pool_timer < 0) {
main_one_hour_pool_timer = 60;
if (system_is_rtc_ok() == 0) {
rte_main_reboot_req = 1;
}
}
main_one_minute_pool_timer = 60000; main_one_minute_pool_timer = 60000;
} }

Wyświetl plik

@ -369,7 +369,7 @@ void packet_tx_handler(const config_data_basic_t * const config_basic, const con
// ASSEMBLY QUALITY FACTORS // ASSEMBLY QUALITY FACTORS
// if there weren't any erros related to the communication with DS12B20 from previous function call // if there weren't any errors related to the communication with DS12B20 from previous function call
if (rte_wx_error_dallas_qf == DALLAS_QF_UNKNOWN) { 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 dallas_qf = rte_wx_current_dallas_qf; // it might be DEGRADATED so we need to copy a value directly
@ -579,10 +579,6 @@ void packet_tx_handler(const config_data_basic_t * const config_basic, const con
else { else {
packet_tx_trigger_tcp = 0; packet_tx_trigger_tcp = 0;
} }
if (system_is_rtc_ok() == 0) {
rte_main_reboot_req = 1;
}
#endif #endif
packet_tx_telemetry_descr_counter = 0; packet_tx_telemetry_descr_counter = 0;

Wyświetl plik

@ -14,7 +14,6 @@ uint8_t rte_main_reboot_req = 0;
uint8_t rte_main_boot_cycles = 0, rte_main_hard_faults = 0; uint8_t rte_main_boot_cycles = 0, rte_main_hard_faults = 0;
uint8_t rte_main_trigger_status = 0; uint8_t rte_main_trigger_status = 0;
uint8_t rte_main_trigger_modbus_status = 0;
uint8_t rte_main_trigger_wx_packet = 0; uint8_t rte_main_trigger_wx_packet = 0;

Wyświetl plik

@ -21,6 +21,7 @@
* *
*/ */
//float rte_wx_temperature_average_external = 0.0f; //<! This name should be refactored
float rte_wx_temperature_average_external_valid = 0.0f; //<! This name should be refactored float rte_wx_temperature_average_external_valid = 0.0f; //<! This name should be refactored
float rte_wx_temperature_internal = 0.0f, rte_wx_temperature_internal_valid = 0.0f; float rte_wx_temperature_internal = 0.0f, rte_wx_temperature_internal_valid = 0.0f;
float rte_wx_pressure = 0.0f, rte_wx_pressure_valid = 0.0f; float rte_wx_pressure = 0.0f, rte_wx_pressure_valid = 0.0f;
@ -66,6 +67,7 @@ ms5611_qf_t rte_wx_ms5611_qf = MS5611_QF_UNKNOWN;
bme280_qf_t rte_wx_bme280_qf = BME280_QF_UKNOWN; bme280_qf_t rte_wx_bme280_qf = BME280_QF_UKNOWN;
analog_wind_qf_t rte_wx_wind_qf = AN_WIND_QF_UNKNOWN; analog_wind_qf_t rte_wx_wind_qf = AN_WIND_QF_UNKNOWN;
uint8_t rte_wx_humidity_available = 0; uint8_t rte_wx_humidity_available = 0;
uint8_t rte_wx_dallas_degraded_counter = 0;
umb_frame_t rte_wx_umb; umb_frame_t rte_wx_umb;

Wyświetl plik

@ -19,8 +19,43 @@
#include <modbus_rtu/rtu_getters.h> #include <modbus_rtu/rtu_getters.h>
#include <modbus_rtu/rtu_return_values.h> #include <modbus_rtu/rtu_return_values.h>
#include <etc/dallas_temperature_limits.h>
#define WX_MAX_TEMPERATURE_SLEW_RATE 4.0f #define WX_MAX_TEMPERATURE_SLEW_RATE 4.0f
inline static int8_t wx_handler_temperature_check_slew(const float last, const float_average_t* average) {
// 0 -> OK
int8_t result = 0;
float avg = 0.0f;
// continue only if average circular buffer is completely full
if (float_get_nonfull(average) == 0) {
// get current average
avg = float_get_average(average);
// get difference
avg = avg - last;
// resuse result variable to save stack space
result = (int8_t)avg;
if (result < DALLAS_TEMPERATURE_NEG_SLEW) {
result = 1;
}
else if (result > DALLAS_TEMPERATURE_POS_SLEW) {
result = 1;
}
else {
result = 0;
}
}
return result;
}
int32_t wx_get_temperature_measurement(const config_data_wx_sources_t * const config_sources, const config_data_mode_t * const config_mode, const config_data_umb_t * const config_umb, const config_data_rtu_t * const config_rtu, float * output) { int32_t wx_get_temperature_measurement(const config_data_wx_sources_t * const config_sources, const config_data_mode_t * const config_mode, const config_data_umb_t * const config_umb, const config_data_rtu_t * const config_rtu, float * output) {
@ -31,6 +66,8 @@ int32_t wx_get_temperature_measurement(const config_data_wx_sources_t * const co
float temperature = 0.0f; float temperature = 0.0f;
float dallas_temperature = 0.0f;
// choose main temperature source from the configuration. main sensor is something which is used to send data though aprs // choose main temperature source from the configuration. main sensor is something which is used to send data though aprs
switch(config_sources->temperature) { switch(config_sources->temperature) {
// controller measures two temperatures // controller measures two temperatures
@ -69,7 +106,14 @@ int32_t wx_get_temperature_measurement(const config_data_wx_sources_t * const co
// this function has blockin I/O which also adds a delay required by MS5611 // this function has blockin I/O which also adds a delay required by MS5611
// sensor to finish data acquisition after the pressure measurement // sensor to finish data acquisition after the pressure measurement
// is triggered. // is triggered.
wx_get_temperature_dallas(); dallas_temperature = dallas_query(&rte_wx_current_dallas_qf);
// check against excessive slew rate
const uint8_t dallas_slew_exceeded = wx_handler_temperature_check_slew(dallas_temperature, &rte_wx_dallas_average);
if (dallas_slew_exceeded > 0) {
rte_wx_current_dallas_qf = DALLAS_QF_NOT_AVALIABLE;
}
#ifdef STM32L471xx #ifdef STM32L471xx
// measure temperature from PT100 sensor if it is selected as main temperature sensor // measure temperature from PT100 sensor if it is selected as main temperature sensor
@ -81,11 +125,32 @@ int32_t wx_get_temperature_measurement(const config_data_wx_sources_t * const co
} }
#endif #endif
if (config_sources->temperature == WX_SOURCE_INTERNAL && rte_wx_current_dallas_qf != DALLAS_QF_NOT_AVALIABLE) { if (config_sources->temperature == WX_SOURCE_INTERNAL && rte_wx_current_dallas_qf == DALLAS_QF_FULL) {
// updating last good measurement time
wx_last_good_temperature_time = master_time;
// include current temperature into the average
float_average(dallas_temperature, &rte_wx_dallas_average);
temperature = float_get_average(&rte_wx_dallas_average); temperature = float_get_average(&rte_wx_dallas_average);
#if defined(STM32L471xx)
rte_wx_temperature_average_dallas = (int16_t)(temperature * 10.0f);
#endif
parameter_result = parameter_result | WX_HANDLER_PARAMETER_RESULT_TEMPERATURE; parameter_result = parameter_result | WX_HANDLER_PARAMETER_RESULT_TEMPERATURE;
} }
else if (config_sources->temperature == WX_SOURCE_INTERNAL && rte_wx_current_dallas_qf == DALLAS_QF_DEGRADATED) {
// if there were a communication error set the error to unavaliable
rte_wx_error_dallas_qf = DALLAS_QF_NOT_AVALIABLE;
// increase degraded quality factor counter
rte_wx_dallas_degraded_counter++;
}
else if (config_sources->temperature == WX_SOURCE_INTERNAL && rte_wx_current_dallas_qf == DALLAS_QF_NOT_AVALIABLE) {
// if there were a communication error set the error to unavaliable
rte_wx_error_dallas_qf = DALLAS_QF_NOT_AVALIABLE;
}
break; break;
} }
@ -135,60 +200,9 @@ int32_t wx_get_temperature_measurement(const config_data_wx_sources_t * const co
*output = temperature; *output = temperature;
} }
//#if defined(STM32L471xx)
// // get modbus temperature reading regardless if it has been chosen as main
// if (config_mode->wx_modbus == 1) {
// rtu_get_temperature(&rte_wx_temperature_average_modbus, config_rtu);
// }
//
// // get temperature from dallas sensor if this isn't a sensor of choice
// if (config_sources->temperature != WX_SOURCE_INTERNAL) {
// wx_get_temperature_dallas();
// }
//
// rte_wx_temperature_average_internal = (int16_t)(rte_wx_temperature_internal * 10.0f);
//#endif
return parameter_result; return parameter_result;
} }
int32_t wx_get_temperature_dallas() {
int32_t output = 0;
float temperature = 0.0f;
// get the value from dallas one-wire sensor
temperature = dallas_query(&rte_wx_current_dallas_qf);
// checking if communication was successfull
if (temperature != -128.0f) {
// include current temperature into the average
float_average(temperature, &rte_wx_dallas_average);
// update the current temperature with current average
// rte_wx_temperature_average_external_valid = float_get_average(&rte_wx_dallas_average);
// updating last good measurement time
wx_last_good_temperature_time = master_time;
#if defined(STM32L471xx)
rte_wx_temperature_average_dallas = (int16_t)(rte_wx_temperature_average_external_valid * 10.0f);
#endif
}
else {
// if there were a communication error set the error to unavaliable
rte_wx_error_dallas_qf = DALLAS_QF_NOT_AVALIABLE;
// set the output value
output = -1;
}
return output;
}
int32_t wx_get_temperature_ms5611(float * const temperature) { int32_t wx_get_temperature_ms5611(float * const temperature) {
int32_t return_value = 0; int32_t return_value = 0;

Wyświetl plik

@ -21,5 +21,6 @@ void float_average(float in, float_average_t* average);
float float_get_average(const float_average_t* average); float float_get_average(const float_average_t* average);
float float_get_min(const float_average_t* average); float float_get_min(const float_average_t* average);
float float_get_max(const float_average_t* average); float float_get_max(const float_average_t* average);
char float_get_nonfull(const float_average_t* average);
#endif /* INCLUDE_FLOAT_AVERAGE_H_ */ #endif /* INCLUDE_FLOAT_AVERAGE_H_ */

Wyświetl plik

@ -25,5 +25,6 @@ int32_t int_get_average(const int_average_t* average);
int32_t int_get_min(const int_average_t* average); int32_t int_get_min(const int_average_t* average);
int32_t int_get_max(const int_average_t* average); int32_t int_get_max(const int_average_t* average);
int32_t int_get_last(const int_average_t* average); int32_t int_get_last(const int_average_t* average);
int32_t int_get_nonfull(const int_average_t* average);
#endif /* INCLUDE_INT_AVERAGE_H_ */ #endif /* INCLUDE_INT_AVERAGE_H_ */

Wyświetl plik

@ -8,7 +8,7 @@
#ifndef VE_DIRECT_PROTOCOL_AVERAGE_STRUCT_H_ #ifndef VE_DIRECT_PROTOCOL_AVERAGE_STRUCT_H_
#define VE_DIRECT_PROTOCOL_AVERAGE_STRUCT_H_ #define VE_DIRECT_PROTOCOL_AVERAGE_STRUCT_H_
#define VE_DIRECT_AVERAGE_LEN 24 #define VE_DIRECT_AVERAGE_LEN 12
typedef __attribute__ ((aligned(1))) struct ve_direct_average_struct { typedef __attribute__ ((aligned(1))) struct ve_direct_average_struct {

Wyświetl plik

@ -18,6 +18,7 @@
#endif #endif
#include "drivers/dallas.h" #include "drivers/dallas.h"
#include "etc/dallas_temperature_limits.h"
#include <string.h> #include <string.h>
volatile int delay_5us = 0; volatile int delay_5us = 0;
@ -241,9 +242,7 @@ float __attribute__((optimize("O0"))) dallas_query(dallas_qf_t *qf) {
return -128.0f; return -128.0f;
} }
if (temperature < -50.0f || temperature > 120.0f) if (temperature < DALLAS_TEMPERATURE_LIMITS_LOW || temperature > DALLAS_TEMPERATURE_LIMITS_HI)
*qf = DALLAS_QF_NOT_AVALIABLE;
else if (temperature < -25.0f || temperature > 38.75f)
*qf = DALLAS_QF_DEGRADATED; *qf = DALLAS_QF_DEGRADATED;
else else
*qf = DALLAS_QF_FULL; *qf = DALLAS_QF_FULL;

Wyświetl plik

@ -71,3 +71,13 @@ float dallas_get_max(const float_average_t* average) {
return out; return out;
} }
char float_get_nonfull(const float_average_t* average) {
for (int i = 0; i < FLOAT_AVERAGE_LN; i++) {
if (average->values[i] == FLOAT_INIT_VALUE) {
return 1;
}
}
return 0;
}

Wyświetl plik

@ -97,3 +97,13 @@ int32_t int_get_last(const int_average_t* average) {
return out; return out;
} }
int32_t int_get_nonfull(const int_average_t* average) {
for (int i = 0; i < INT_AVERAGE_LN; i++) {
if (average->values[i] == INT_INIT_VALUE) {
return 1;
}
}
return 0;
}

Wyświetl plik

@ -72,13 +72,6 @@ uint8_t rtu_blocking_io = 0;
*/ */
uint32_t rtu_time_of_last_successfull_comm = 0; uint32_t rtu_time_of_last_successfull_comm = 0;
/**
* This variable latches the value of 'rtu_time_of_last_successfull_comm' across
* consecutive messages with an error status. If the value is the same as during
* previous transmission the controller is restarted
*/
uint32_t rtu_time_of_last_succ_comm_at_previous_error_status = 0;
/** /**
* CRC value after the last call to rtu_serial_callback * CRC value after the last call to rtu_serial_callback
*/ */
@ -217,8 +210,6 @@ int32_t rtu_serial_pool(void) {
// check how many serial I/O erros have been detected so far // check how many serial I/O erros have been detected so far
if ((rte_rtu_number_of_serial_io_errors % RTU_NUMBER_OF_ERRORS_TO_TRIG_STATUS) == 0) { if ((rte_rtu_number_of_serial_io_errors % RTU_NUMBER_OF_ERRORS_TO_TRIG_STATUS) == 0) {
// set the status trigger
rte_main_trigger_modbus_status = 1;
// increment the error counter artificially to protect sending status in the loop // increment the error counter artificially to protect sending status in the loop
rte_rtu_number_of_serial_io_errors++; rte_rtu_number_of_serial_io_errors++;
@ -230,8 +221,6 @@ int32_t rtu_serial_pool(void) {
// rte_main_reboot_req = 1; // rte_main_reboot_req = 1;
// } // }
// latch the current value of last successfull communication
rtu_time_of_last_succ_comm_at_previous_error_status = rtu_time_of_last_successfull_comm;
} }
} }
@ -541,26 +530,3 @@ int32_t rtu_serial_start(void) {
return retval; return retval;
} }
int32_t rtu_serial_get_status_string(rtu_pool_queue_t* queue, srl_context_t* srl_ctx, char* out, uint16_t out_buffer_ln, uint8_t* generated_string_ln) {
int32_t retval = MODBUS_RET_UNINITIALIZED;
int string_ln = 0;
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]",
main_get_master_time(),
rte_rtu_last_modbus_rx_error_timestamp,
rtu_time_of_last_successfull_comm,
(int)rte_rtu_number_of_successfull_serial_comm,
(int)rte_rtu_number_of_serial_io_errors,
srl_ctx->total_rx_bytes,
srl_ctx->total_idle_counter,
srl_ctx->total_tx_bytes);
*generated_string_ln = (uint8_t) string_ln;
//#endif
return retval;
}