kopia lustrzana https://github.com/SP8EBC/ParaTNC
daily, a lot of reworking. tcp disconnecto doesn't work
rodzic
433050d2ed
commit
47564c69f2
|
@ -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="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <memoryBlockExpressionList context="Context string"/> "/>
|
||||
<stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <memoryBlockExpressionList context="Context string"> <memoryBlockExpression address="536876652" label="api_buffer"/> </memoryBlockExpressionList> "/>
|
||||
<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 |
|
@ -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) \
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
#define HTTP_CLIENT_DEFAULT_TIMEOUT_MSEC 9000
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
14
src/aprsis.c
14
src/aprsis.c
|
@ -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;
|
||||
|
||||
// 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) {
|
||||
|
|
|
@ -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) {
|
||||
//
|
||||
|
|
|
@ -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) {
|
||||
|
||||
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;
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
#include "gsm/sim800c.h"
|
||||
|
||||
#include "main.h"
|
||||
#include "delay.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
|
@ -228,7 +229,14 @@ 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) {
|
||||
|
||||
do {
|
||||
// set default timeout of 1200msec
|
||||
srl_switch_timeout(srl_context, SRL_TIMEOUT_ENABLE, 2222);
|
||||
|
||||
// send escape sequence to exit connection mode
|
||||
srl_send_data(srl_context, (const uint8_t*) ESCAPE, SRL_MODE_ZERO, strlen(ESCAPE), SRL_INTERNAL);
|
||||
|
||||
|
@ -236,14 +244,35 @@ void gsm_sim800_tcpip_close(srl_context_t * srl_context, gsm_sim800_state_t * st
|
|||
srl_wait_for_tx_completion(srl_context);
|
||||
|
||||
// wait for OK to be received
|
||||
srl_receive_data_with_callback(srl_context, gsm_sim800_escape_terminating_callback);
|
||||
srl_receive_data(srl_context, 4, SRL_NO_START_CHR, SRL_NO_STOP_CHR, SRL_ECHO_DISABLE, 0x7F, 0);
|
||||
|
||||
// start timeout calculation
|
||||
srl_context->srl_rx_timeout_calc_started = 1;
|
||||
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);
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue