kopia lustrzana https://github.com/SP8EBC/ParaTNC
critical bugfix in stm32l4 serial driver - to narrow type srl_rx_lenght_param_addres, improved callback for tcpip connecting
rodzic
7002cd6f60
commit
a8f783ac38
|
@ -484,7 +484,7 @@ uint8_t srl_receive_data_with_callback(srl_context_t *ctx, srl_rx_termination_ca
|
|||
|
||||
ctx->srl_rx_bytes_counter = 0;
|
||||
|
||||
ctx->srl_rx_lenght_param_addres = ctx->srl_rx_buf_ln - 1;
|
||||
ctx->srl_rx_lenght_param_addres = 0xFF;
|
||||
ctx->srl_rx_lenght_param_modifier = 0;
|
||||
|
||||
ctx->srl_triggered_start = 0;
|
||||
|
|
|
@ -18,6 +18,7 @@ const static char * CLOSE_TCP = "AT+CIPCLOSE\r\0";
|
|||
|
||||
static const char * ESCAPE = "+++\0";
|
||||
|
||||
#define CONNECT_LN 13
|
||||
static const char * CONNECT = "OK\r\n\r\nCONNECT\0";
|
||||
static const char * OK = "OK\0";
|
||||
#define DISCONNECTED_LN 6
|
||||
|
@ -52,6 +53,11 @@ static char gsm_sim800_previous = ' ';
|
|||
|
||||
gsm_sim800_tcpip_receive_callback_t gsm_sim800_tcpip_async_receive_cbk = 0;
|
||||
|
||||
/**
|
||||
* Index at which 'CONNECT' or 'ERROR' response ends. Set by @link{gsm_sim800_connecting_terminating_callback}
|
||||
*/
|
||||
uint16_t gsm_sim800_connect_response_idx = 0;
|
||||
|
||||
static uint8_t gsm_sim800_escape_terminating_callback(uint8_t current_data, const uint8_t * const rx_buffer, uint16_t rx_bytes_counter) {
|
||||
if (gsm_sim800_previous == 'O') {
|
||||
if ((char)current_data == 'K') {
|
||||
|
@ -66,6 +72,32 @@ static uint8_t gsm_sim800_escape_terminating_callback(uint8_t current_data, cons
|
|||
return 0;
|
||||
}
|
||||
|
||||
static uint8_t gsm_sim800_connecting_terminating_callback(uint8_t current_data, const uint8_t * const rx_buffer, uint16_t rx_bytes_counter) {
|
||||
if (gsm_sim800_previous == 'C') {
|
||||
if ((char)current_data == 'T') {
|
||||
gsm_sim800_previous = ' ';
|
||||
|
||||
gsm_sim800_connect_response_idx = rx_bytes_counter;
|
||||
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (gsm_sim800_previous == 'O') {
|
||||
if ((char)current_data == 'R') {
|
||||
gsm_sim800_previous = ' ';
|
||||
|
||||
gsm_sim800_connect_response_idx = rx_bytes_counter;
|
||||
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
gsm_sim800_previous = (char) current_data;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
sim800_return_t gsm_sim800_tcpip_connect(char * ip_or_dns_address, uint8_t address_ln, char * port, uint8_t port_ln, srl_context_t * srl_context, gsm_sim800_state_t * state) {
|
||||
// this function has blocking io
|
||||
|
||||
|
@ -106,7 +138,7 @@ sim800_return_t gsm_sim800_tcpip_connect(char * ip_or_dns_address, uint8_t addre
|
|||
srl_switch_timeout(srl_context, 1, 2000);
|
||||
|
||||
// trigger reception
|
||||
srl_receive_data_with_callback(srl_context, gsm_sim800_rx_terminating_callback);
|
||||
srl_receive_data_with_callback(srl_context, gsm_sim800_connecting_terminating_callback);
|
||||
gsm_at_command_sent_last = TCP3;
|
||||
|
||||
// start timeout calculation
|
||||
|
@ -118,7 +150,7 @@ sim800_return_t gsm_sim800_tcpip_connect(char * ip_or_dns_address, uint8_t addre
|
|||
// if response from the modem has been received
|
||||
if (receive_result == SRL_OK) {
|
||||
// check if 'OK and 'CONNECT' has been received which means that connection has been established
|
||||
comparision_result = strncmp(OK, (const char *)(srl_context->srl_rx_buf_pointer + gsm_sim800_get_response_start_idx()), 2);
|
||||
comparision_result = strncmp(CONNECT, (const char *)(srl_context->srl_rx_buf_pointer + gsm_sim800_connect_response_idx - CONNECT_LN + 1), CONNECT_LN);
|
||||
|
||||
if (comparision_result == 0) {
|
||||
*state = SIM800_TCP_CONNECTED;
|
||||
|
|
Ładowanie…
Reference in New Issue