daily, a lot of reworking. tcp disconnecto doesn't work

sr9wxz_new_configuration_for_ZZ06
Mateusz Lubecki 2022-05-09 22:46:50 +02:00
rodzic 433050d2ed
commit 47564c69f2
12 zmienionych plików z 87 dodań i 27 usunięć

Wyświetl plik

@ -57,6 +57,6 @@
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="4"/>
</listAttribute>
<stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;memoryBlockExpressionList context=&quot;Context string&quot;/&gt;&#10;"/>
<stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;memoryBlockExpressionList context=&quot;Context string&quot;&gt;&#10; &lt;memoryBlockExpression address=&quot;536876652&quot; label=&quot;api_buffer&quot;/&gt;&#10;&lt;/memoryBlockExpressionList&gt;&#10;"/>
<stringAttribute key="process_factory_id" value="org.eclipse.cdt.dsf.gdb.GdbProcessFactory"/>
</launchConfiguration>

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 104 KiB

Wyświetl plik

@ -18,7 +18,7 @@
#define ENTRIES_STRING(ENTRY) \
ENTRY(main_config_data_basic->callsign, callsign) \
ENTRY(SW_VER, sw_ver) \
ENTRY(SW_DATE, sw_data) \
ENTRY(SW_DATE, sw_date) \
#define ENTRIES_32INT_STATUS(ENTRY) \
ENTRY(master_time, master_time) \

Wyświetl plik

@ -17,14 +17,15 @@ typedef enum aprsis_return {
APRSIS_OK = 0,
APRSIS_NOT_CONFIGURED = 1,
APRSIS_WRONG_STATE = 2,
APRSIS_ALREADY_CONNECTED = 3
APRSIS_ALREADY_CONNECTED = 3,
APRSIS_UNKNOWN = -1
}aprsis_return_t;
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);
aprsis_return_t aprsis_connect_and_login(char * address, uint8_t address_ln, uint16_t port);
aprsis_return_t aprsis_connect_and_login_default(void);
aprsis_return_t aprsis_connect_and_login(char * address, uint8_t address_ln, uint16_t port, uint8_t auto_send_beacon);
aprsis_return_t aprsis_connect_and_login_default(uint8_t auto_send_beacon);
void aprsis_disconnect(void);
void aprsis_receive_callback(srl_context_t* srl_context);
void aprsis_check_alive(void);

Wyświetl plik

@ -0,0 +1 @@
#define HTTP_CLIENT_DEFAULT_TIMEOUT_MSEC 9000

Wyświetl plik

@ -8,7 +8,7 @@
#include "config_data.h"
#define SW_VER "EA05"
#define SW_DATE "04052022"
#define SW_DATE "09052022"
#define SYSTICK_TICKS_PER_SECONDS 100
#define SYSTICK_TICKS_PERIOD 10

Wyświetl plik

@ -69,10 +69,10 @@ static void api_construct_url_status(api_endpoint_t endpoint) {
switch (endpoint) {
case PARAMETEO_STATUS:
snprintf(api_url_buffer, URL_BUFFER_LN - 1, "%s/parameteo/%s/status", api_base_url, api_station_name);
snprintf(api_url_buffer, URL_BUFFER_LN - 1, "%s/parameteo/%s/status/v1", api_base_url, api_station_name);
break;
case PARAMETEO_WX:
snprintf(api_url_buffer, URL_BUFFER_LN - 1, "%s/parameteo/%s/measurements", api_base_url, api_station_name);
snprintf(api_url_buffer, URL_BUFFER_LN - 1, "%s/parameteo/%s/measurements/v1", api_base_url, api_station_name);
break;
}
}

Wyświetl plik

@ -96,7 +96,7 @@ void aprsis_init(srl_context_t * context, gsm_sim800_state_t * gsm_modem_state,
}
aprsis_return_t aprsis_connect_and_login(char * address, uint8_t address_ln, uint16_t port) {
aprsis_return_t aprsis_connect_and_login(char * address, uint8_t address_ln, uint16_t port, uint8_t auto_send_beacon) {
// this function has blocking io
uint8_t out = APRSIS_WRONG_STATE;
@ -158,7 +158,15 @@ aprsis_return_t aprsis_connect_and_login(char * address, uint8_t address_ln, uin
if (retval == 0) {
aprsis_logged = 1;
aprsis_send_beacon(0);
// set current timestamp as last
aprsis_last_keepalive_ts = master_time;
if (auto_send_beacon != 0) {
aprsis_send_beacon(0);
}
// set timeout for aprs-is server
srl_switch_timeout(aprsis_serial_port, 1, APRSIS_TIMEOUT_MS);
// wait for consecutive data
gsm_sim800_tcpip_async_receive(aprsis_serial_port, aprsis_gsm_modem_state, 0, 61000, aprsis_receive_callback);
@ -186,9 +194,9 @@ aprsis_return_t aprsis_connect_and_login(char * address, uint8_t address_ln, uin
}
aprsis_return_t aprsis_connect_and_login_default(void) {
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);
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) {

Wyświetl plik

@ -121,7 +121,7 @@
/**
* A foreword about '#define' mess. This software is indented to run on at least two
* different hardware platform. First which is ParaTNC basing on STM32F100 and second
* different hardware platforms. First which is ParaTNC basing on STM32F100 and second
* ParaMETEO using STM32L476. In future more platforms may appear. Like ParaTNC2 which
* will be a ParaMETEO without battery charging and in form factor similar to ParaTNC.
*
@ -1289,7 +1289,7 @@ int main(int argc, char* argv[]){
gsm_sim800_poolers_one_minute(main_gsm_srl_ctx_ptr, &main_gsm_state);
aprsis_connect_and_login_default();
aprsis_connect_and_login_default(1);
// if (gsm_sim800_gprs_ready == 1) {
//

Wyświetl plik

@ -106,9 +106,23 @@ void packet_tx_tcp_handler(void) {
uint8_t result = 0;
aprsis_return_t aprsis_result = APRSIS_UNKNOWN;
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);
if (aprsis_connected == 0) {
aprsis_result = aprsis_connect_and_login_default(0);
if (aprsis_result == APRSIS_OK) {
// 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);
}
}
else {
// 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;
@ -149,7 +163,7 @@ void packet_tx_tcp_handler(void) {
packet_tx_trigger_tcp ^= API_TRIGGER_METEO;
}
else if ((packet_tx_trigger_tcp & RECONNECT_APRSIS) != 0) {
result = aprsis_connect_and_login_default();
result = aprsis_connect_and_login_default(1);
if (result == APRSIS_OK) {
packet_tx_trigger_tcp ^= RECONNECT_APRSIS;

Wyświetl plik

@ -3,6 +3,7 @@
#include "gsm/sim800c.h"
#include "main.h"
#include "delay.h"
#include <string.h>
@ -228,21 +229,49 @@ void gsm_sim800_tcpip_close(srl_context_t * srl_context, gsm_sim800_state_t * st
uint8_t receive_result = 0;
volatile uint8_t escape_counter = 0;
if (*state == SIM800_TCP_CONNECTED || force == 1) {
// send escape sequence to exit connection mode
srl_send_data(srl_context, (const uint8_t*) ESCAPE, SRL_MODE_ZERO, strlen(ESCAPE), SRL_INTERNAL);
// wait for transmission to finish
srl_wait_for_tx_completion(srl_context);
do {
// set default timeout of 1200msec
srl_switch_timeout(srl_context, SRL_TIMEOUT_ENABLE, 2222);
// wait for OK to be received
srl_receive_data_with_callback(srl_context, gsm_sim800_escape_terminating_callback);
// send escape sequence to exit connection mode
srl_send_data(srl_context, (const uint8_t*) ESCAPE, SRL_MODE_ZERO, strlen(ESCAPE), SRL_INTERNAL);
// start timeout calculation
srl_context->srl_rx_timeout_calc_started = 1;
// wait for transmission to finish
srl_wait_for_tx_completion(srl_context);
// wait for it to finish
srl_wait_for_rx_completion_or_timeout(srl_context, & receive_result);
// wait for OK to be received
srl_receive_data(srl_context, 4, SRL_NO_START_CHR, SRL_NO_STOP_CHR, SRL_ECHO_DISABLE, 0x7F, 0);
// start timeout calculation
srl_switch_timeout_for_waiting(srl_context, SRL_TIMEOUT_ENABLE);
// wait for it to finish
srl_wait_for_rx_completion_or_timeout(srl_context, & receive_result);
// check if we escaped from data mode
if (strncmp((const char *) (srl_context->srl_rx_buf_pointer), NEWLINE, 1) == 0) {
break;
}
else if (strncmp((const char *) (srl_context->srl_rx_buf_pointer), OK, 2) == 0) {
break;
}
else if (strncmp((const char *) (srl_context->srl_rx_buf_pointer), ESCAPE, 3) == 0) {
// if module has already returned to command mode it will echo all input
break;
}
else {
if (receive_result == SRL_OK) {
delay_fixed(200);
}
}
} while(escape_counter++ < 3);
// send escape sequence to exit connection mode
srl_send_data(srl_context, (const uint8_t*) CLOSE_TCP, SRL_MODE_ZERO, strlen(CLOSE_TCP), SRL_INTERNAL);

Wyświetl plik

@ -1,6 +1,7 @@
#include "http_client/http_client.h"
#include "http_client/http_client_rx_callback.h"
#include "http_client/http_client_headers.h"
#include "http_client_configuration.h"
#include "gsm/sim800c_tcpip.h"
@ -269,6 +270,9 @@ uint8_t http_client_async_get(char * url, uint8_t url_ln, uint16_t response_ln_l
// check if data has been sent succesfully
if (connect_result == 0) {
// configure timeout for reception
srl_switch_timeout(http_client_deticated_serial_context, 1, HTTP_CLIENT_DEFAULT_TIMEOUT_MSEC);
// reset callback to initial state
http_client_rx_done_callback_init();
@ -367,6 +371,9 @@ uint8_t http_client_async_post(char * url, uint8_t url_ln, char * data_to_post,
// check if data has been sent succesfully
if (connect_result == 0) {
// configure timeout for reception
srl_switch_timeout(http_client_deticated_serial_context, 1, HTTP_CLIENT_DEFAULT_TIMEOUT_MSEC);
// reset callback to initial state
http_client_rx_done_callback_init();