waiting for a while if more than one frame is transmitted from single packet_tx_handler call

pull/2/head DF10
Mateusz Lubecki 2021-01-07 08:11:44 +01:00
rodzic 53ebcfe7b8
commit 7279ceea26
6 zmienionych plików z 103 dodań i 37 usunięć

Wyświetl plik

@ -13,6 +13,7 @@
#include "./umb_master/umb_master.h" #include "./umb_master/umb_master.h"
#include "main.h" #include "main.h"
#include "delay.h"
#define _TELEM_DESCR_INTERVAL 150 #define _TELEM_DESCR_INTERVAL 150
@ -39,6 +40,29 @@ uint8_t packet_tx_telemetry_descr_counter = 145;
const uint8_t packet_tx_modbus_raw_values = (uint8_t)(_TELEM_DESCR_INTERVAL - _WX_INTERVAL * (uint8_t)(_TELEM_DESCR_INTERVAL / 28)); const uint8_t packet_tx_modbus_raw_values = (uint8_t)(_TELEM_DESCR_INTERVAL - _WX_INTERVAL * (uint8_t)(_TELEM_DESCR_INTERVAL / 28));
const uint8_t packet_tx_modbus_status = (uint8_t)(_TELEM_DESCR_INTERVAL - _WX_INTERVAL * (uint8_t)(_TELEM_DESCR_INTERVAL / 8)); const uint8_t packet_tx_modbus_status = (uint8_t)(_TELEM_DESCR_INTERVAL - _WX_INTERVAL * (uint8_t)(_TELEM_DESCR_INTERVAL / 8));
uint8_t packet_tx_more_than_one = 0;
/**
* This function is called from the inside of 'packet_rx_handler' to put an extra wait
* if more than one packet is sent from the single call to that function. This is required
* to protect against jamming own frames when any path is configured.
*
*/
inline void packet_tx_multi_per_call_handler(void) {
// if this consecutive frame sent from one call to this function
if (packet_tx_more_than_one > 0) {
// wait for previous transmission to complete
main_wait_for_tx_complete();
// wait for any possible retransmission to kick in
delay_fixed(1000);
}
else {
packet_tx_more_than_one = 1;
}
}
// this shall be called in 60 seconds periods // this shall be called in 60 seconds periods
void packet_tx_handler(void) { void packet_tx_handler(void) {
dallas_qf_t dallas_qf = DALLAS_QF_UNKNOWN; dallas_qf_t dallas_qf = DALLAS_QF_UNKNOWN;
@ -49,6 +73,9 @@ void packet_tx_handler(void) {
int ln = 0; int ln = 0;
// 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;
packet_tx_beacon_counter++; packet_tx_beacon_counter++;
packet_tx_error_status_counter++; packet_tx_error_status_counter++;
packet_tx_telemetry_counter++; packet_tx_telemetry_counter++;
@ -62,13 +89,7 @@ void packet_tx_handler(void) {
#if defined(_UMB_MASTER) #if defined(_UMB_MASTER)
umb_construct_status_str(&rte_wx_umb_context, main_own_aprs_msg, sizeof(main_own_aprs_msg), &ln, master_time); umb_construct_status_str(&rte_wx_umb_context, main_own_aprs_msg, sizeof(main_own_aprs_msg), &ln, master_time);
// if there is anything to send packet_tx_multi_per_call_handler();
if (ln > 0) {
beacon_send_from_user_content(ln, main_own_aprs_msg);
main_wait_for_tx_complete();
}
#endif #endif
packet_tx_error_status_counter = 0; packet_tx_error_status_counter = 0;
@ -76,16 +97,20 @@ void packet_tx_handler(void) {
if (packet_tx_beacon_counter >= packet_tx_beacon_interval) { if (packet_tx_beacon_counter >= packet_tx_beacon_interval) {
packet_tx_multi_per_call_handler();
beacon_send_own(); beacon_send_own();
main_wait_for_tx_complete();
packet_tx_beacon_counter = 0; packet_tx_beacon_counter = 0;
} }
#ifdef _METEO #ifdef _METEO
if (packet_tx_meteo_counter >= packet_tx_meteo_interval) { if (packet_tx_meteo_counter >= packet_tx_meteo_interval) {
packet_tx_multi_per_call_handler();
#if defined _DALLAS_AS_TELEM #if defined _DALLAS_AS_TELEM
// _DALLAS_AS_TELEM wil be set during compilation wx packets will be filled by temperature from MS5611 sensor // _DALLAS_AS_TELEM wil be set during compilation wx packets will be filled by temperature from MS5611 sensor
//SendWXFrame(&VNAME, rte_wx_temperature_valid, rte_wx_pressure_valid); //SendWXFrame(&VNAME, rte_wx_temperature_valid, rte_wx_pressure_valid);
@ -94,8 +119,6 @@ void packet_tx_handler(void) {
SendWXFrame(rte_wx_average_windspeed, rte_wx_max_windspeed, rte_wx_average_winddirection, rte_wx_temperature_average_dallas_valid, rte_wx_pressure_valid, rte_wx_humidity_valid); SendWXFrame(rte_wx_average_windspeed, rte_wx_max_windspeed, rte_wx_average_winddirection, rte_wx_temperature_average_dallas_valid, rte_wx_pressure_valid, rte_wx_humidity_valid);
#endif #endif
main_wait_for_tx_complete();
#ifdef EXTERNAL_WATCHDOG #ifdef EXTERNAL_WATCHDOG
GPIOA->ODR ^= GPIO_Pin_12; GPIOA->ODR ^= GPIO_Pin_12;
#endif #endif
@ -111,6 +134,8 @@ void packet_tx_handler(void) {
packet_tx_telemetry_descr_counter >= packet_tx_modbus_raw_values) packet_tx_telemetry_descr_counter >= packet_tx_modbus_raw_values)
{ {
packet_tx_multi_per_call_handler();
telemetry_send_status_raw_values_modbus(); telemetry_send_status_raw_values_modbus();
} }
@ -120,6 +145,8 @@ void packet_tx_handler(void) {
packet_tx_telemetry_descr_counter <= packet_tx_modbus_status * 2) packet_tx_telemetry_descr_counter <= packet_tx_modbus_status * 2)
{ {
packet_tx_multi_per_call_handler();
rte_main_trigger_modbus_status = 1; rte_main_trigger_modbus_status = 1;
} }
#endif #endif
@ -131,13 +158,14 @@ void packet_tx_handler(void) {
srl_start_tx(main_kiss_srl_ctx_ptr, ln); srl_start_tx(main_kiss_srl_ctx_ptr, ln);
packet_tx_meteo_kiss_counter = 0; packet_tx_meteo_kiss_counter = 0;
} }
#endif // #ifdef _METEO #endif // #ifdef _METEO
if (packet_tx_telemetry_counter >= packet_tx_telemetry_interval) { if (packet_tx_telemetry_counter >= packet_tx_telemetry_interval) {
packet_tx_multi_per_call_handler();
// if there weren't any erros related to communication with DS12B20 from previous function call // if there weren't any erros related to 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
@ -250,8 +278,6 @@ void packet_tx_handler(void) {
#endif #endif
// //
#endif #endif
main_wait_for_tx_complete();
packet_tx_telemetry_counter = 0; packet_tx_telemetry_counter = 0;
rx10m = 0, tx10m = 0, digi10m = 0, kiss10m = 0; rx10m = 0, tx10m = 0, digi10m = 0, kiss10m = 0;
@ -261,6 +287,8 @@ void packet_tx_handler(void) {
} }
if (packet_tx_telemetry_descr_counter >= packet_tx_telemetry_descr_interval) { if (packet_tx_telemetry_descr_counter >= packet_tx_telemetry_descr_interval) {
packet_tx_multi_per_call_handler();
#ifdef _VICTRON #ifdef _VICTRON
telemetry_send_chns_description_pv(); telemetry_send_chns_description_pv();
@ -268,13 +296,11 @@ void packet_tx_handler(void) {
telemetry_send_status(&rte_pv_average, &rte_pv_last_error, rte_pv_struct.system_state); telemetry_send_status(&rte_pv_average, &rte_pv_last_error, rte_pv_struct.system_state);
main_wait_for_tx_complete();
#else #else
telemetry_send_chns_description(); telemetry_send_chns_description();
telemetry_send_status(); telemetry_send_status();
main_wait_for_tx_complete();
#endif #endif
#if defined _UMB_MASTER #if defined _UMB_MASTER
umb_clear_error_history(&rte_wx_umb_context); umb_clear_error_history(&rte_wx_umb_context);

Wyświetl plik

@ -10,7 +10,7 @@
#include "station_config.h" #include "station_config.h"
#ifdef _UMB_MASTER #ifdef _MODBUS_RTU
#define RTU_GETTERS_F1_NAME rte_wx_modbus_rtu_f1 #define RTU_GETTERS_F1_NAME rte_wx_modbus_rtu_f1
#define RTU_GETTERS_F2_NAME rte_wx_modbus_rtu_f2 #define RTU_GETTERS_F2_NAME rte_wx_modbus_rtu_f2

Wyświetl plik

@ -15,6 +15,7 @@
#include <stdio.h> #include <stdio.h>
void beacon_send_own(void) { void beacon_send_own(void) {
main_wait_for_tx_complete();
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, "=%07.2f%c%c%08.2f%c%c %s", (float)_LAT, _LATNS, _SYMBOL_F, (float)_LON, _LONWE, _SYMBOL_S, _COMMENT); main_own_aprs_msg_len = sprintf(main_own_aprs_msg, "=%07.2f%c%c%08.2f%c%c %s", (float)_LAT, _LATNS, _SYMBOL_F, (float)_LON, _LONWE, _SYMBOL_S, _COMMENT);
main_own_aprs_msg[main_own_aprs_msg_len] = 0; main_own_aprs_msg[main_own_aprs_msg_len] = 0;
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len); ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
@ -31,7 +32,7 @@ void beacon_send_on_startup(void) {
} }
void beacon_send_from_user_content(uint16_t content_ln, char* content_ptr) { void beacon_send_from_user_content(uint16_t content_ln, char* content_ptr) {
main_wait_for_tx_complete();
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, content_ptr, content_ln); ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, content_ptr, content_ln);
after_tx_lock = 1; after_tx_lock = 1;
afsk_txStart(&main_afsk); afsk_txStart(&main_afsk);

Wyświetl plik

@ -150,12 +150,10 @@ void telemetry_send_values_pv ( uint8_t rx_pkts,
main_own_aprs_msg[main_own_aprs_msg_len] = 0; main_own_aprs_msg[main_own_aprs_msg_len] = 0;
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len); ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
after_tx_lock = 1; after_tx_lock = 1;
// while(ax25.dcd == true); while(ax25.dcd == true);
afsk_txStart(&main_afsk); afsk_txStart(&main_afsk);
} }
void telemetry_send_status(ve_direct_average_struct* avg, ve_direct_error_reason* last_error, ve_direct_system_state state) { void telemetry_send_status(ve_direct_average_struct* avg, ve_direct_error_reason* last_error, ve_direct_system_state state) {
@ -168,6 +166,8 @@ void telemetry_send_status(ve_direct_average_struct* avg, ve_direct_error_reason
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len); ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
afsk_txStart(&main_afsk); afsk_txStart(&main_afsk);
main_wait_for_tx_complete();
avg->max_battery_current = 0; avg->max_battery_current = 0;
avg->min_battery_current = 0; avg->min_battery_current = 0;
*last_error = ERR_UNINITIALIZED; *last_error = ERR_UNINITIALIZED;
@ -175,11 +175,17 @@ void telemetry_send_status(ve_direct_average_struct* avg, ve_direct_error_reason
#else #else
/**
* Sends four frames with telemetry description
*/
void telemetry_send_chns_description(void) { void telemetry_send_chns_description(void) {
while (main_afsk.sending == 1); // wait for any RF transmission to finish
main_wait_for_tx_complete();
// clear the output frame buffer
memset(main_own_aprs_msg, 0x00, sizeof(main_own_aprs_msg)); memset(main_own_aprs_msg, 0x00, sizeof(main_own_aprs_msg));
// prepare a frame with channel names depending on SSID
#if (_SSID == 0) #if (_SSID == 0)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%s :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", _CALL); main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%s :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", _CALL);
#endif #endif
@ -189,14 +195,20 @@ void telemetry_send_chns_description(void) {
#if (_SSID > 9 && _SSID <= 15) #if (_SSID > 9 && _SSID <= 15)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%s-%d: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", _CALL, _SSID); main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%s-%d: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", _CALL, _SSID);
#endif #endif
// place a null terminator at the end
main_own_aprs_msg[main_own_aprs_msg_len] = 0; main_own_aprs_msg[main_own_aprs_msg_len] = 0;
// prepare transmission
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len); ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
after_tx_lock = 1; after_tx_lock = 1;
// key up the transmitter and
afsk_txStart(&main_afsk); afsk_txStart(&main_afsk);
while (main_afsk.sending == 1); main_wait_for_tx_complete();
delay_fixed(1200); delay_fixed(1500);
while (main_ax25.dcd == 1); while (main_ax25.dcd == 1);
@ -214,9 +226,9 @@ main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%s-%d:PARM.Rx10min,Tx10min,
after_tx_lock = 1; after_tx_lock = 1;
afsk_txStart(&main_afsk); afsk_txStart(&main_afsk);
while (main_afsk.sending == 1); main_wait_for_tx_complete();
delay_fixed(1200); delay_fixed(1500);
while (main_ax25.dcd == 1); while (main_ax25.dcd == 1);
@ -233,15 +245,18 @@ main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%s-%d:PARM.Rx10min,Tx10min,
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len); ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
after_tx_lock = 1; after_tx_lock = 1;
afsk_txStart(&main_afsk); afsk_txStart(&main_afsk);
//
while (main_afsk.sending == 1); // main_wait_for_tx_complete();
//
delay_fixed(1200); // delay_fixed(1500);
//
while (main_ax25.dcd == 1); // while (main_ax25.dcd == 1);
} }
/**
* This function sends telemetry values in 'typical configuration' when VICTRON VE.direct protocol parser is not enabled.
*/
void telemetry_send_values( uint8_t rx_pkts, void telemetry_send_values( uint8_t rx_pkts,
uint8_t tx_pkts, uint8_t tx_pkts,
uint8_t digi_pkts, uint8_t digi_pkts,
@ -260,8 +275,13 @@ void telemetry_send_values( uint8_t rx_pkts,
char anemometer_degradated = '0'; char anemometer_degradated = '0';
char anemometer_navble = '0'; char anemometer_navble = '0';
// temperature scaled to 0x00-0xFF range for fifth telemetry channel.
// if _METEO mode is enabled this channel sends the temperaure measure by
// internal MS5611 or BME280. If _METEO is not enabled this channel
// could send Dallas DS18B20 masurements if this is enabled in station_config.h
uint8_t scaled_temperature = 0; uint8_t scaled_temperature = 0;
// get the quality factor for wind measurements
if (anemometer_qf == WIND_QF_DEGRADATED) { if (anemometer_qf == WIND_QF_DEGRADATED) {
anemometer_degradated = '1'; anemometer_degradated = '1';
anemometer_navble = '0'; anemometer_navble = '0';
@ -275,6 +295,8 @@ void telemetry_send_values( uint8_t rx_pkts,
anemometer_navble = '1'; anemometer_navble = '1';
} }
// scale the physical temperature and limit upper and lower boundary if
// it is required
if (temperature < -50.0f) { if (temperature < -50.0f) {
scaled_temperature = (uint8_t)0; scaled_temperature = (uint8_t)0;
} }
@ -285,6 +307,7 @@ void telemetry_send_values( uint8_t rx_pkts,
scaled_temperature = (uint8_t)((temperature + 50.0f) * 2.0f); scaled_temperature = (uint8_t)((temperature + 50.0f) * 2.0f);
} }
// set the quality factor for dallas DS18B20
switch (dallas_qf) { switch (dallas_qf) {
case DALLAS_QF_FULL: case DALLAS_QF_FULL:
qf = '1', degr = '0', nav = '0'; qf = '1', degr = '0', nav = '0';
@ -302,6 +325,7 @@ void telemetry_send_values( uint8_t rx_pkts,
break; break;
} }
// set the quality factor for pressure
switch (press_qf) { switch (press_qf) {
case PRESSURE_QF_NOT_AVALIABLE: case PRESSURE_QF_NOT_AVALIABLE:
case PRESSURE_QF_UNKNOWN: case PRESSURE_QF_UNKNOWN:
@ -321,32 +345,46 @@ void telemetry_send_values( uint8_t rx_pkts,
humidity_qf_navaliable = '0'; humidity_qf_navaliable = '0';
} }
// reset the buffer where the frame will be contructed and stored for transmission
memset(main_own_aprs_msg, 0x00, sizeof(main_own_aprs_msg)); memset(main_own_aprs_msg, 0x00, sizeof(main_own_aprs_msg));
// generate the telemetry frame from values
#ifdef _DALLAS_AS_TELEM #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, kiss_pkts, 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, tx_pkts, digi_pkts, kiss_pkts, scaled_temperature, qf, degr, nav, pressure_qf_navaliable, humidity_qf_navaliable, anemometer_degradated, anemometer_navble);
#else #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, kiss_pkts, 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, tx_pkts, digi_pkts, kiss_pkts, scaled_temperature, qf, degr, nav, pressure_qf_navaliable, humidity_qf_navaliable, anemometer_degradated, anemometer_navble);
#endif #endif
// reset the frame counter if it overflowed
if (telemetry_counter > 999) if (telemetry_counter > 999)
telemetry_counter = 0; telemetry_counter = 0;
// put a null terminator at the end of frame (but it should be placed there anyway)
main_own_aprs_msg[main_own_aprs_msg_len] = 0; main_own_aprs_msg[main_own_aprs_msg_len] = 0;
// wait for completing any previous transmission (afsk_txStart will exit with failure if the modem is transmitting)
main_wait_for_tx_complete();
// prepare transmission of the frame
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len); ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
// ??
after_tx_lock = 1; after_tx_lock = 1;
// check if RF channel is free from other transmissions and wait for the clearance if it is needed
while (main_ax25.dcd == 1);
// key up a transmitter and start transmission
afsk_txStart(&main_afsk); afsk_txStart(&main_afsk);
while (main_afsk.sending == 1);
} }
void telemetry_send_status(void) { void telemetry_send_status(void) {
memset(main_own_aprs_msg, 0x00, sizeof(main_own_aprs_msg)); memset(main_own_aprs_msg, 0x00, sizeof(main_own_aprs_msg));
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ">ParaTNC firmware %s-%s by SP8EBC", SW_VER, SW_DATE); main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ">ParaTNC firmware %s-%s by SP8EBC", SW_VER, SW_DATE);
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len); ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
while (main_ax25.dcd == 1);
afsk_txStart(&main_afsk); afsk_txStart(&main_afsk);
while (main_afsk.sending == 1);
} }
@ -359,8 +397,9 @@ void telemetry_send_status_raw_values_modbus(void) {
rtu_get_raw_values_string(main_own_aprs_msg, OWN_APRS_MSG_LN, &status_ln); rtu_get_raw_values_string(main_own_aprs_msg, OWN_APRS_MSG_LN, &status_ln);
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, status_ln); ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, status_ln);
while (main_ax25.dcd == 1);
afsk_txStart(&main_afsk); afsk_txStart(&main_afsk);
while (main_afsk.sending == 1); main_wait_for_tx_complete();
#endif #endif
} }

Wyświetl plik

@ -607,7 +607,7 @@ void rtu_get_raw_values_string(char* out, uint16_t out_buffer_ln, uint8_t* gener
uint16_t f6_value = 0; uint16_t f6_value = 0;
int string_ln = 0; int string_ln = 0;
#ifdef _MODBUS_RTU
#if defined(_RTU_SLAVE_ID_1) #if defined(_RTU_SLAVE_ID_1)
f1_value = RTU_GETTERS_F1_NAME.registers_values[0]; f1_value = RTU_GETTERS_F1_NAME.registers_values[0];
#endif #endif
@ -631,7 +631,7 @@ void rtu_get_raw_values_string(char* out, uint16_t out_buffer_ln, uint8_t* gener
#if defined(_RTU_SLAVE_ID_6) #if defined(_RTU_SLAVE_ID_6)
f6_value = RTU_GETTERS_F6_NAME.registers_values[0]; f6_value = RTU_GETTERS_F6_NAME.registers_values[0];
#endif #endif
#endif
string_ln = snprintf(out, out_buffer_ln, ">F1V %X, F2V %X, F3V %X, F4V %X, F5V %X, F6V %X", string_ln = snprintf(out, out_buffer_ln, ">F1V %X, F2V %X, F3V %X, F4V %X, F5V %X, F6V %X",
(int) f1_value, (int) f1_value,
(int) f2_value, (int) f2_value,