kopia lustrzana https://github.com/SP8EBC/ParaTNC
- KISS DID: distinguish size_byte value for integer and float types
- KISS DID: returning did value as first two bytes, before size_byte - KISS diagnostics: bugfix in NRC service identifier - APRS-IS comm: better way to close tcp connection in case of connecting failure - functions to send status via radio channel moved to separate files.master
rodzic
50187cdf20
commit
b4cd12017c
75
src/aprsis.c
75
src/aprsis.c
|
@ -9,6 +9,8 @@
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "text.h"
|
#include "text.h"
|
||||||
|
|
||||||
|
#include "etc/aprsis_config.h"
|
||||||
|
|
||||||
#include "gsm/sim800c.h"
|
#include "gsm/sim800c.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -16,6 +18,9 @@
|
||||||
|
|
||||||
srl_context_t * aprsis_serial_port;
|
srl_context_t * aprsis_serial_port;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pointer to used gsm_modem_state
|
||||||
|
*/
|
||||||
gsm_sim800_state_t * aprsis_gsm_modem_state;
|
gsm_sim800_state_t * aprsis_gsm_modem_state;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -44,14 +49,24 @@ int32_t aprsis_passcode;
|
||||||
char aprsis_login_string[64];
|
char aprsis_login_string[64];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default APRS-IS address to be used by
|
* Default APRS-IS address to be used by 'aprsis_connect_and_login_default' function
|
||||||
*/
|
*/
|
||||||
const char * aprsis_default_server_address;
|
const char * aprsis_default_server_address;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String with a callsign and a ssid in aprsis format. Used sent auto beacon
|
||||||
|
* when connection to APRS-IS server is established
|
||||||
|
*/
|
||||||
const char * aprsis_callsign_with_ssid;
|
const char * aprsis_callsign_with_ssid;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lenght of APRS-IS server address string
|
||||||
|
*/
|
||||||
uint16_t aprsis_default_server_address_ln = 0;
|
uint16_t aprsis_default_server_address_ln = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TCP port used to connect to default APRS-IS server.
|
||||||
|
*/
|
||||||
uint16_t aprsis_default_server_port;
|
uint16_t aprsis_default_server_port;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -66,11 +81,30 @@ uint8_t aprsis_connected = 0;
|
||||||
|
|
||||||
const char * aprsis_sucessfull_login = "# logresp\0";
|
const char * aprsis_sucessfull_login = "# logresp\0";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Counter of unsuccessful connects to APRS-IS, to trigger GSM modem reset.
|
||||||
|
* Please note that it works differently that 'aprsis_reset_on_timeout' and
|
||||||
|
* has nothing to do with a timeouts of already established connection. This
|
||||||
|
* counter will trigger GSM modem reset even if no APRS-IS connection has
|
||||||
|
* been established at all. It protects against a situation when GSM modem
|
||||||
|
* is not able to register in cellular network, SIM card is not working for
|
||||||
|
* some reason etc. Of course there is no guarantee that a reset in such
|
||||||
|
* case will help, but there is nothing better to do.
|
||||||
|
*/
|
||||||
|
uint8_t aprsis_unsucessfull_conn_counter = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A timestamp when server has send anything
|
* A timestamp when server has send anything
|
||||||
*/
|
*/
|
||||||
uint32_t aprsis_last_keepalive_ts = 0;
|
uint32_t aprsis_last_keepalive_ts = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set to one if the GSM modem shall be immediately reset when APRS-IS communication
|
||||||
|
* time out. Please note that this is different that 'aprsis_unsucessfull_conn_counter'
|
||||||
|
* and reseting GSM mode after many unsuccessfull connection attempts! This
|
||||||
|
* comes in when the connection has been established at least one time. It won't
|
||||||
|
* help if there is some problem with establishing connection at all.
|
||||||
|
*/
|
||||||
uint32_t aprsis_reset_on_timeout = 0;
|
uint32_t aprsis_reset_on_timeout = 0;
|
||||||
|
|
||||||
#define APRSIS_TIMEOUT_MS 123000//123000
|
#define APRSIS_TIMEOUT_MS 123000//123000
|
||||||
|
@ -205,23 +239,40 @@ aprsis_return_t aprsis_connect_and_login(const char * address, uint8_t address_l
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// if authoruzation wasn't successfull drop a connection
|
// if authoruzation wasn't successfull drop a connection
|
||||||
disconnection_result = gsm_sim800_tcpip_close(aprsis_serial_port, aprsis_gsm_modem_state, 0);
|
disconnection_result = aprsis_disconnect();
|
||||||
|
|
||||||
|
// increase failure counter
|
||||||
|
aprsis_unsucessfull_conn_counter++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
disconnection_result = gsm_sim800_tcpip_close(aprsis_serial_port, aprsis_gsm_modem_state, 0);
|
disconnection_result = aprsis_disconnect();
|
||||||
|
|
||||||
|
// increase failure counter
|
||||||
|
aprsis_unsucessfull_conn_counter++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
disconnection_result = gsm_sim800_tcpip_close(aprsis_serial_port, aprsis_gsm_modem_state, 1);
|
disconnection_result = aprsis_disconnect();
|
||||||
|
|
||||||
|
// increase failure counter
|
||||||
|
aprsis_unsucessfull_conn_counter++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// if a connection has been ordered to close, but there were severe errors during that
|
// if a connection has been ordered to close, but there were severe errors during that
|
||||||
if (disconnection_result == SIM800_TCP_CLOSE_UNCERTAIN || disconnection_result == SIM800_RECEIVING_TIMEOUT) {
|
if (disconnection_result == SIM800_TCP_CLOSE_UNCERTAIN ||
|
||||||
|
disconnection_result == SIM800_RECEIVING_TIMEOUT ||
|
||||||
|
aprsis_unsucessfull_conn_counter > APRSIS_FAILED_CONN_ATTEMPTS_TO_RESET_GSM) {
|
||||||
|
|
||||||
|
// reset unsuccesfull connection counter back to zero
|
||||||
|
aprsis_unsucessfull_conn_counter = 0;
|
||||||
|
|
||||||
|
// and reset GSM modem
|
||||||
gsm_sim800_reset(aprsis_gsm_modem_state);
|
gsm_sim800_reset(aprsis_gsm_modem_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
|
@ -238,12 +289,17 @@ aprsis_return_t aprsis_connect_and_login_default(uint8_t auto_send_beacon) {
|
||||||
return aprsis_connect_and_login(aprsis_default_server_address, aprsis_default_server_address_ln, aprsis_default_server_port, auto_send_beacon);
|
return aprsis_connect_and_login(aprsis_default_server_address, aprsis_default_server_address_ln, aprsis_default_server_port, auto_send_beacon);
|
||||||
}
|
}
|
||||||
|
|
||||||
void aprsis_disconnect(void) {
|
sim800_return_t aprsis_disconnect(void) {
|
||||||
gsm_sim800_tcpip_close(aprsis_serial_port, aprsis_gsm_modem_state, 0);
|
|
||||||
|
sim800_return_t out;
|
||||||
|
|
||||||
|
out = gsm_sim800_tcpip_close(aprsis_serial_port, aprsis_gsm_modem_state, 0);
|
||||||
|
|
||||||
aprsis_logged = 0;
|
aprsis_logged = 0;
|
||||||
|
|
||||||
aprsis_connected = 0;
|
aprsis_connected = 0;
|
||||||
|
|
||||||
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
void aprsis_receive_callback(srl_context_t* srl_context) {
|
void aprsis_receive_callback(srl_context_t* srl_context) {
|
||||||
|
@ -278,6 +334,7 @@ void aprsis_check_alive(void) {
|
||||||
|
|
||||||
aprsis_connected = 0;
|
aprsis_connected = 0;
|
||||||
|
|
||||||
|
// check if it is intendend to reset GSM modem in case of timeout
|
||||||
if (aprsis_reset_on_timeout == 0) {
|
if (aprsis_reset_on_timeout == 0) {
|
||||||
// close connection with force flag as it is uncertain if a remote server
|
// close connection with force flag as it is uncertain if a remote server
|
||||||
// finished connection explicitly, or the connection is stuck for
|
// finished connection explicitly, or the connection is stuck for
|
||||||
|
@ -491,3 +548,7 @@ void aprsis_igate_to_aprsis(AX25Msg *msg, const char * callsign_with_ssid) {
|
||||||
char * aprsis_get_tx_buffer(void) {
|
char * aprsis_get_tx_buffer(void) {
|
||||||
return aprsis_packet_tx_buffer;
|
return aprsis_packet_tx_buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t aprsis_get_aprsis_logged(void) {
|
||||||
|
return aprsis_logged;
|
||||||
|
}
|
||||||
|
|
|
@ -221,6 +221,12 @@ int32_t kiss_callback_program_startup(uint8_t* input_frame_from_host, uint16_t i
|
||||||
|
|
||||||
int32_t kiss_callback_read_did(uint8_t* input_frame_from_host, uint16_t input_len, uint8_t* response_buffer, uint16_t buffer_size) {
|
int32_t kiss_callback_read_did(uint8_t* input_frame_from_host, uint16_t input_len, uint8_t* response_buffer, uint16_t buffer_size) {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Response frame structure
|
||||||
|
*
|
||||||
|
* FEND, KISS_READ_DID_RESP, DID_lsb, DID_msb, size_byte, DATA (...), FEND
|
||||||
|
*/
|
||||||
|
|
||||||
int32_t out = 0;
|
int32_t out = 0;
|
||||||
|
|
||||||
// result to be returned to the host PC
|
// result to be returned to the host PC
|
||||||
|
|
|
@ -71,6 +71,15 @@ static uint8_t kiss_did_how_much_data(kiss_did_numeric_definition_t * definition
|
||||||
if (definition->third_data != &DID_EMPTY) {
|
if (definition->third_data != &DID_EMPTY) {
|
||||||
out++;
|
out++;
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
// zero data size as DID_EMPTY is only a dummy placeholder
|
||||||
|
definition->third_data_size = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// zero data size as DID_EMPTY is only a dummy placeholder
|
||||||
|
definition->third_data_size = 0;
|
||||||
|
definition->second_data_size = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -79,7 +88,7 @@ static uint8_t kiss_did_how_much_data(kiss_did_numeric_definition_t * definition
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if this DID
|
* Checks if this DID defines data with float
|
||||||
* @param definition
|
* @param definition
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
|
@ -87,7 +96,11 @@ static int kiss_did_validate_is_float(kiss_did_numeric_definition_t * definition
|
||||||
int out = 0;
|
int out = 0;
|
||||||
|
|
||||||
if (definition != 0) {
|
if (definition != 0) {
|
||||||
|
if (kiss_did_how_much_data(definition) >= 1) {
|
||||||
|
if (definition->first_data_size == 0 && definition->second_data_size == 0 && definition->third_data_size == 0) {
|
||||||
|
out = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
|
@ -229,11 +242,11 @@ uint8_t kiss_did_response(uint16_t identifier, uint8_t * output_buffer, uint16_t
|
||||||
* float (also one, two or three). size_byte is used to distinguish
|
* float (also one, two or three). size_byte is used to distinguish
|
||||||
* between these three formats. It works like that
|
* between these three formats. It works like that
|
||||||
*
|
*
|
||||||
* 0y - If most significant nibble is set to zero, size_byte will
|
* 0y - If most significant bit is set to zero, size_byte will
|
||||||
* signalize string DID as ASCII characters from basic ASIC
|
* signalize string DID as ASCII characters from basic ASIC
|
||||||
* table are from range 0 to 127
|
* table are from range 0 to 127
|
||||||
* 10 - If most significant nibble is set to zero AND less significant
|
* 10 - If most significant bit is set to zero AND next significant
|
||||||
* nibble is set to zero this DID returns integer data. In such
|
* bit is set to zero this DID returns integer data. In such
|
||||||
* case three groups of two bits controls a size of data according
|
* case three groups of two bits controls a size of data according
|
||||||
* to 'kiss_did_sizeof_to_sizebyte_mapping'. If a group of two bits
|
* to 'kiss_did_sizeof_to_sizebyte_mapping'. If a group of two bits
|
||||||
* is set to 0 it means that DID consist less than 3 variables
|
* is set to 0 it means that DID consist less than 3 variables
|
||||||
|
@ -272,8 +285,15 @@ uint8_t kiss_did_response(uint16_t identifier, uint8_t * output_buffer, uint16_t
|
||||||
// check if this is string did
|
// check if this is string did
|
||||||
const int is_string = kiss_did_validate_is_string(&found);
|
const int is_string = kiss_did_validate_is_string(&found);
|
||||||
|
|
||||||
|
// check if this is float number did
|
||||||
|
const int is_float = kiss_did_validate_is_float(&found);
|
||||||
|
|
||||||
// if something has been found and it is valid
|
// if something has been found and it is valid
|
||||||
if (found.identifier != 0xFFFFu && is_valid == 1) {
|
if (found.identifier != 0xFFFFu && is_valid == 1 && is_float == 0) {
|
||||||
|
|
||||||
|
// put DID itself at the begining of a response
|
||||||
|
output_buffer[0] = (identifier & 0xFF);
|
||||||
|
output_buffer[1] = (identifier & 0xFF00) >> 8;
|
||||||
|
|
||||||
// set the sign bit in size_byte to distinguish that from ASCII did.
|
// set the sign bit in size_byte to distinguish that from ASCII did.
|
||||||
// ASCII characters are from range 0 - 127 so they never have that
|
// ASCII characters are from range 0 - 127 so they never have that
|
||||||
|
@ -289,9 +309,10 @@ uint8_t kiss_did_response(uint16_t identifier, uint8_t * output_buffer, uint16_t
|
||||||
// append a size of third data source
|
// append a size of third data source
|
||||||
size_byte |= (kiss_did_sizeof_to_sizebyte_mapping[found.third_data_size] << 4);
|
size_byte |= (kiss_did_sizeof_to_sizebyte_mapping[found.third_data_size] << 4);
|
||||||
|
|
||||||
output_buffer[0] = size_byte;
|
output_buffer[2] = size_byte;
|
||||||
|
|
||||||
output_buffer++;
|
// move after DID value and size_byte
|
||||||
|
output_buffer += 3;
|
||||||
|
|
||||||
//append first data source
|
//append first data source
|
||||||
memcpy(output_buffer, found.first_data, found.first_data_size);
|
memcpy(output_buffer, found.first_data, found.first_data_size);
|
||||||
|
@ -324,15 +345,74 @@ uint8_t kiss_did_response(uint16_t identifier, uint8_t * output_buffer, uint16_t
|
||||||
// also include size_byte in this calculation
|
// also include size_byte in this calculation
|
||||||
out++;
|
out++;
|
||||||
|
|
||||||
|
// include DID value itself
|
||||||
|
out += 2;
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (found.identifier != 0xFFFFu && is_valid == 1 && is_float == 1) {
|
||||||
|
|
||||||
|
// put DID itself at the begining of a response
|
||||||
|
output_buffer[0] = (identifier & 0xFF);
|
||||||
|
output_buffer[1] = (identifier & 0xFF00) >> 8;
|
||||||
|
|
||||||
|
// set two most significant bits to one to signalize that it is
|
||||||
|
size_byte |= 0xC0u;
|
||||||
|
|
||||||
|
size_byte |= number_of_data_source;
|
||||||
|
|
||||||
|
output_buffer[2] = size_byte;
|
||||||
|
|
||||||
|
// move after DID value and size_byte
|
||||||
|
output_buffer += 3;
|
||||||
|
|
||||||
|
//append first data source
|
||||||
|
memcpy(output_buffer, found.first_data, sizeof(float));
|
||||||
|
|
||||||
|
//move forward a poiner to response buffer
|
||||||
|
output_buffer += sizeof(float);
|
||||||
|
|
||||||
|
out += found.first_data_size;
|
||||||
|
|
||||||
|
if (number_of_data_source > 1) {
|
||||||
|
//append second data source
|
||||||
|
memcpy(output_buffer, found.second_data, sizeof(float));
|
||||||
|
|
||||||
|
//move forward a poiner to response buffer
|
||||||
|
output_buffer += sizeof(float);
|
||||||
|
|
||||||
|
out += sizeof(float);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (number_of_data_source > 2) {
|
||||||
|
//append third data source
|
||||||
|
memcpy(output_buffer, found.third_data, sizeof(float));
|
||||||
|
|
||||||
|
//move forward a poitner to response buffer
|
||||||
|
output_buffer += sizeof(float);
|
||||||
|
|
||||||
|
out += sizeof(float);
|
||||||
|
}
|
||||||
|
|
||||||
|
// also include size_byte in this calculation
|
||||||
|
out++;
|
||||||
|
|
||||||
|
// include DID value itself
|
||||||
|
out += 2;
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (found.identifier != 0xFFFFu && is_string == 1) {
|
else if (found.identifier != 0xFFFFu && is_string == 1) {
|
||||||
|
|
||||||
|
// put DID itself at the begining of a response
|
||||||
|
output_buffer[0] = (identifier & 0xFF);
|
||||||
|
output_buffer[1] = (identifier & 0xFF00) >> 8;
|
||||||
|
|
||||||
// if this is a string DID
|
// if this is a string DID
|
||||||
const char * str = (char *)found.first_data;
|
const char * str = (char *)found.first_data;
|
||||||
|
|
||||||
const size_t str_len = strlen(str);
|
const size_t str_len = strlen(str);
|
||||||
|
|
||||||
if (str_len > buffer_ln) {
|
if (str_len - 2 > buffer_ln) {
|
||||||
memcpy(output_buffer, found.first_data, buffer_ln);
|
memcpy(output_buffer + 2, found.first_data, buffer_ln);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
memcpy(output_buffer, found.first_data, str_len);
|
memcpy(output_buffer, found.first_data, str_len);
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include <kiss_communication/kiss_nrc_response.h>
|
#include <kiss_communication/kiss_nrc_response.h>
|
||||||
#include "kiss_communication/kiss_communication_nrc_t.h"
|
#include "kiss_communication/kiss_communication_nrc_t.h"
|
||||||
#include "kiss_communication/kiss_communication.h"
|
#include "kiss_communication/kiss_communication.h"
|
||||||
|
#include "kiss_communication/kiss_communication_service_ids.h"
|
||||||
#include "kiss_configuation.h"
|
#include "kiss_configuation.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -21,7 +22,7 @@ static const uint8_t kiss_nrc_response_unknown_service[KISS_NRC_RESPONSE_UNKNOWN
|
||||||
FEND,
|
FEND,
|
||||||
NONSTANDARD,
|
NONSTANDARD,
|
||||||
KISS_NRC_RESPONSE_UNKNOWN_SERVICE_LN,
|
KISS_NRC_RESPONSE_UNKNOWN_SERVICE_LN,
|
||||||
KISS_COMMUNICATION_NRC_SERVICE,
|
KISS_NEGATIVE_RESPONSE_SERVICE,
|
||||||
NRC_SERVICE_NOT_SUPPORTED,
|
NRC_SERVICE_NOT_SUPPORTED,
|
||||||
FEND};
|
FEND};
|
||||||
|
|
||||||
|
@ -29,7 +30,7 @@ static const uint8_t kiss_nrc_response_out_of_range[KISS_NRC_RESPONSE_OUT_OF_RAN
|
||||||
FEND,
|
FEND,
|
||||||
NONSTANDARD,
|
NONSTANDARD,
|
||||||
KISS_NRC_RESPONSE_UNKNOWN_SERVICE_LN,
|
KISS_NRC_RESPONSE_UNKNOWN_SERVICE_LN,
|
||||||
KISS_COMMUNICATION_NRC_SERVICE,
|
KISS_NEGATIVE_RESPONSE_SERVICE,
|
||||||
NRC_REQUEST_OUT_OF_RANGE,
|
NRC_REQUEST_OUT_OF_RANGE,
|
||||||
FEND
|
FEND
|
||||||
};
|
};
|
||||||
|
|
19
src/main.c
19
src/main.c
|
@ -1181,7 +1181,7 @@ int main(int argc, char* argv[]){
|
||||||
|
|
||||||
// if aprsis is logged
|
// if aprsis is logged
|
||||||
if (aprsis_connected == 1) {
|
if (aprsis_connected == 1) {
|
||||||
aprsis_igate_to_aprsis(&ax25_rxed_frame, &main_callsign_with_ssid);
|
aprsis_igate_to_aprsis(&ax25_rxed_frame, (const char *)&main_callsign_with_ssid);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1432,7 +1432,22 @@ int main(int argc, char* argv[]){
|
||||||
#ifdef PARAMETEO
|
#ifdef PARAMETEO
|
||||||
if (main_config_data_mode->gsm == 1) {
|
if (main_config_data_mode->gsm == 1) {
|
||||||
|
|
||||||
if (gsm_sim800_gprs_ready == 1) {
|
// check if GSM modem must be power-cycled / restarted like after
|
||||||
|
// waking up from deep sleep or chaning power saving mode
|
||||||
|
if (rte_main_reset_gsm_modem == 1) {
|
||||||
|
// rest the flag
|
||||||
|
rte_main_reset_gsm_modem = 0;
|
||||||
|
|
||||||
|
// reset gsm modem
|
||||||
|
gsm_sim800_reset(&main_gsm_state);
|
||||||
|
|
||||||
|
// please remember that a reset might not be performed if
|
||||||
|
// the GSM modem is inhibited completely, due to current
|
||||||
|
// power saving mode and few another things. In that case
|
||||||
|
// the flag will be cleared but modem NOT restarted
|
||||||
|
}
|
||||||
|
|
||||||
|
if (aprsis_get_aprsis_logged() == 1) {
|
||||||
led_control_led1_upper(true);
|
led_control_led1_upper(true);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include "station_config_target_hw.h"
|
#include "station_config_target_hw.h"
|
||||||
|
|
||||||
#include "./aprs/beacon.h"
|
#include "./aprs/beacon.h"
|
||||||
|
#include "./aprs/status.h"
|
||||||
#include "./aprs/wx.h"
|
#include "./aprs/wx.h"
|
||||||
#include "./aprs/telemetry.h"
|
#include "./aprs/telemetry.h"
|
||||||
|
|
||||||
|
|
|
@ -18,8 +18,9 @@
|
||||||
#include "packet_tx_handler.h"
|
#include "packet_tx_handler.h"
|
||||||
#include "wx_handler.h"
|
#include "wx_handler.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "telemetry.h"
|
#include "status.h"
|
||||||
#include "afsk_pr.h"
|
#include "afsk_pr.h"
|
||||||
|
#include "gsm/sim800c.h"
|
||||||
|
|
||||||
#include "rte_main.h"
|
#include "rte_main.h"
|
||||||
|
|
||||||
|
@ -312,6 +313,9 @@ int pwr_save_switch_mode_to_c0(void) {
|
||||||
// turn ON +5V_C (SD card, PT100 interface and Op Amplifier)
|
// turn ON +5V_C (SD card, PT100 interface and Op Amplifier)
|
||||||
io___cntrl_vbat_c_enable();
|
io___cntrl_vbat_c_enable();
|
||||||
|
|
||||||
|
// deinhibit GSM modem
|
||||||
|
gsm_sim800_inhibit(0);
|
||||||
|
|
||||||
// unlock access to backup registers
|
// unlock access to backup registers
|
||||||
pwr_save_unclock_rtc_backup_regs();
|
pwr_save_unclock_rtc_backup_regs();
|
||||||
|
|
||||||
|
@ -349,6 +353,9 @@ int pwr_save_switch_mode_to_c1(void) {
|
||||||
// turn ON +5V_C (SD card, PT100 interface and Op Amplifier)
|
// turn ON +5V_C (SD card, PT100 interface and Op Amplifier)
|
||||||
io___cntrl_vbat_c_enable();
|
io___cntrl_vbat_c_enable();
|
||||||
|
|
||||||
|
// inhibit GSM modem
|
||||||
|
gsm_sim800_inhibit(1);
|
||||||
|
|
||||||
// unlock access to backup registers
|
// unlock access to backup registers
|
||||||
pwr_save_unclock_rtc_backup_regs();
|
pwr_save_unclock_rtc_backup_regs();
|
||||||
|
|
||||||
|
@ -387,6 +394,9 @@ void pwr_save_switch_mode_to_c2(void) {
|
||||||
// turn ON +5V_C (SD card, PT100 interface and Op Amplifier)
|
// turn ON +5V_C (SD card, PT100 interface and Op Amplifier)
|
||||||
io___cntrl_vbat_c_enable();
|
io___cntrl_vbat_c_enable();
|
||||||
|
|
||||||
|
// inhibit GSM modem
|
||||||
|
gsm_sim800_inhibit(1);
|
||||||
|
|
||||||
// unlock access to backup registers
|
// unlock access to backup registers
|
||||||
pwr_save_unclock_rtc_backup_regs();
|
pwr_save_unclock_rtc_backup_regs();
|
||||||
|
|
||||||
|
@ -421,6 +431,9 @@ void pwr_save_switch_mode_to_c3(void) {
|
||||||
// turn ON +5V_C (SD card, PT100 interface and Op Amplifier)
|
// turn ON +5V_C (SD card, PT100 interface and Op Amplifier)
|
||||||
io___cntrl_vbat_c_enable();
|
io___cntrl_vbat_c_enable();
|
||||||
|
|
||||||
|
// deinhibit GSM modem
|
||||||
|
gsm_sim800_inhibit(0);
|
||||||
|
|
||||||
// unlock access to backup registers
|
// unlock access to backup registers
|
||||||
pwr_save_unclock_rtc_backup_regs();
|
pwr_save_unclock_rtc_backup_regs();
|
||||||
|
|
||||||
|
@ -456,6 +469,9 @@ int pwr_save_switch_mode_to_m4(void) {
|
||||||
// turn ON +5V_C (SD card, PT100 interface and Op Amplifier)
|
// turn ON +5V_C (SD card, PT100 interface and Op Amplifier)
|
||||||
io___cntrl_vbat_c_enable();
|
io___cntrl_vbat_c_enable();
|
||||||
|
|
||||||
|
// inhibit GSM modem
|
||||||
|
gsm_sim800_inhibit(1);
|
||||||
|
|
||||||
// unlock access to backup registers
|
// unlock access to backup registers
|
||||||
pwr_save_unclock_rtc_backup_regs();
|
pwr_save_unclock_rtc_backup_regs();
|
||||||
|
|
||||||
|
@ -490,6 +506,9 @@ int pwr_save_switch_mode_to_m4a(void) {
|
||||||
// turn ON +5V_C (SD card, PT100 interface and Op Amplifier)
|
// turn ON +5V_C (SD card, PT100 interface and Op Amplifier)
|
||||||
io___cntrl_vbat_c_enable();
|
io___cntrl_vbat_c_enable();
|
||||||
|
|
||||||
|
// deinhibit GSM modem
|
||||||
|
gsm_sim800_inhibit(0);
|
||||||
|
|
||||||
// unlock access to backup registers
|
// unlock access to backup registers
|
||||||
pwr_save_unclock_rtc_backup_regs();
|
pwr_save_unclock_rtc_backup_regs();
|
||||||
|
|
||||||
|
@ -525,6 +544,9 @@ void pwr_save_switch_mode_to_i5(void) {
|
||||||
// turn OFF +5V_C (SD card, PT100 interface and Op Amplifier)
|
// turn OFF +5V_C (SD card, PT100 interface and Op Amplifier)
|
||||||
io___cntrl_vbat_c_disable();
|
io___cntrl_vbat_c_disable();
|
||||||
|
|
||||||
|
// inhibit GSM modem
|
||||||
|
gsm_sim800_inhibit(1);
|
||||||
|
|
||||||
// unlock access to backup registers
|
// unlock access to backup registers
|
||||||
pwr_save_unclock_rtc_backup_regs();
|
pwr_save_unclock_rtc_backup_regs();
|
||||||
|
|
||||||
|
@ -575,6 +597,9 @@ void pwr_save_switch_mode_to_l6(uint16_t sleep_time) {
|
||||||
// turn OFF +5V_C (SD card, PT100 interface and Op Amplifier)
|
// turn OFF +5V_C (SD card, PT100 interface and Op Amplifier)
|
||||||
io___cntrl_vbat_c_disable();
|
io___cntrl_vbat_c_disable();
|
||||||
|
|
||||||
|
// de inhibit GSM modem
|
||||||
|
gsm_sim800_inhibit(0);
|
||||||
|
|
||||||
// unlock access to backup registers
|
// unlock access to backup registers
|
||||||
pwr_save_unclock_rtc_backup_regs();
|
pwr_save_unclock_rtc_backup_regs();
|
||||||
|
|
||||||
|
@ -640,6 +665,9 @@ void pwr_save_switch_mode_to_l7(uint16_t sleep_time) {
|
||||||
// turn OFF +5V_C (SD card, PT100 interface and Op Amplifier)
|
// turn OFF +5V_C (SD card, PT100 interface and Op Amplifier)
|
||||||
io___cntrl_vbat_c_disable();
|
io___cntrl_vbat_c_disable();
|
||||||
|
|
||||||
|
// inhibit GSM modem
|
||||||
|
gsm_sim800_inhibit(1);
|
||||||
|
|
||||||
// unlock access to backup registers
|
// unlock access to backup registers
|
||||||
pwr_save_unclock_rtc_backup_regs();
|
pwr_save_unclock_rtc_backup_regs();
|
||||||
|
|
||||||
|
@ -915,7 +943,7 @@ void pwr_save_pooling_handler(const config_data_mode_t * config, const config_da
|
||||||
}
|
}
|
||||||
else { // WX + GSM (only)
|
else { // WX + GSM (only)
|
||||||
if (timers->wx_transmit_period >= 5) {
|
if (timers->wx_transmit_period >= 5) {
|
||||||
// if stations is configured to send wx packet less often than every 5 minutes
|
// if stations is configured to send wx packet less frequent than every 5 minutes
|
||||||
|
|
||||||
if (minutes_to_wx > 1) {
|
if (minutes_to_wx > 1) {
|
||||||
main_set_monitor(16);
|
main_set_monitor(16);
|
||||||
|
@ -924,7 +952,7 @@ void pwr_save_pooling_handler(const config_data_mode_t * config, const config_da
|
||||||
pwr_save_switch_mode_to_l7((timers->wx_transmit_period * 60) - 60); // TODO: !!!
|
pwr_save_switch_mode_to_l7((timers->wx_transmit_period * 60) - 60); // TODO: !!!
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (pwr_save_seconds_to_wx <= 30) {
|
if (pwr_save_seconds_to_wx <= 50) {
|
||||||
// if there is 30 seconds or less to next wx packet
|
// if there is 30 seconds or less to next wx packet
|
||||||
reinit_sensors = pwr_save_switch_mode_to_c0();
|
reinit_sensors = pwr_save_switch_mode_to_c0();
|
||||||
}
|
}
|
||||||
|
@ -1005,6 +1033,9 @@ void pwr_save_pooling_handler(const config_data_mode_t * config, const config_da
|
||||||
// reinitialize all i2c sensors
|
// reinitialize all i2c sensors
|
||||||
wx_force_i2c_sensor_reset = 1;
|
wx_force_i2c_sensor_reset = 1;
|
||||||
|
|
||||||
|
// reset GSM modem, internally this also check if GSM modem is inhibited or not
|
||||||
|
rte_main_reset_gsm_modem = 1;
|
||||||
|
|
||||||
// reinitialize everything realted to anemometer
|
// reinitialize everything realted to anemometer
|
||||||
analog_anemometer_init(main_config_data_mode->wx_anemometer_pulses_constant, 38, 100, 1);
|
analog_anemometer_init(main_config_data_mode->wx_anemometer_pulses_constant, 38, 100, 1);
|
||||||
|
|
||||||
|
|
|
@ -29,5 +29,7 @@ uint16_t rte_main_wakeup_count = 0;
|
||||||
uint16_t rte_main_going_sleep_count = 0;
|
uint16_t rte_main_going_sleep_count = 0;
|
||||||
|
|
||||||
uint32_t rte_main_last_sleep_master_time = 0;
|
uint32_t rte_main_last_sleep_master_time = 0;
|
||||||
|
|
||||||
|
uint8_t rte_main_reset_gsm_modem = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue