kopia lustrzana https://github.com/SP8EBC/ParaTNC
bugfix in serial port driver regarding switching between internal and external tx buffer
rodzic
129b286e49
commit
16f147810e
|
@ -6,7 +6,7 @@
|
|||
#include "config_data.h"
|
||||
|
||||
#define SW_VER "EA05"
|
||||
#define SW_DATE "06042022"
|
||||
#define SW_DATE "07042022"
|
||||
|
||||
#define SYSTICK_TICKS_PER_SECONDS 100
|
||||
#define SYSTICK_TICKS_PERIOD 10
|
||||
|
|
12
src/main.c
12
src/main.c
|
@ -971,11 +971,15 @@ int main(int argc, char* argv[]){
|
|||
|
||||
// if new packet has been received from radio channel
|
||||
if(ax25_new_msg_rx_flag == 1) {
|
||||
memset(main_kiss_srl_ctx.srl_tx_buf_pointer, 0x00, main_kiss_srl_ctx.srl_tx_buf_ln);
|
||||
|
||||
if (main_kiss_enabled == 1) {
|
||||
// convert message to kiss format and send it to host
|
||||
srl_start_tx(main_kiss_srl_ctx_ptr, SendKISSToHost(ax25_rxed_frame.raw_data, (ax25_rxed_frame.raw_msg_len - 2), main_kiss_srl_ctx.srl_tx_buf_pointer, main_kiss_srl_ctx.srl_tx_buf_ln));
|
||||
// if serial port is currently not busy on transmission
|
||||
if (main_kiss_srl_ctx_ptr->srl_tx_state != SRL_TXING) {
|
||||
memset(main_kiss_srl_ctx.srl_tx_buf_pointer, 0x00, main_kiss_srl_ctx.srl_tx_buf_ln);
|
||||
|
||||
if (main_kiss_enabled == 1) {
|
||||
// convert message to kiss format and send it to host
|
||||
srl_start_tx(main_kiss_srl_ctx_ptr, SendKISSToHost(ax25_rxed_frame.raw_data, (ax25_rxed_frame.raw_msg_len - 2), main_kiss_srl_ctx.srl_tx_buf_pointer, main_kiss_srl_ctx.srl_tx_buf_ln));
|
||||
}
|
||||
}
|
||||
|
||||
main_ax25.dcd = false;
|
||||
|
|
|
@ -85,12 +85,20 @@ typedef struct srl_context_t {
|
|||
GPIO_TypeDef* te_port;
|
||||
uint16_t te_pin;
|
||||
|
||||
// these pointers points to either internal buffer
|
||||
// or external provided by caller, depends on 'uint8_t internal_external'
|
||||
// parameter in send functions
|
||||
uint8_t *srl_tx_buf_pointer;
|
||||
uint8_t *srl_rx_buf_pointer;
|
||||
|
||||
// thatt pointer always points to internal buffer
|
||||
uint8_t *srl_tx_internal_buf_pointer;
|
||||
|
||||
uint16_t srl_rx_buf_ln;
|
||||
uint16_t srl_tx_buf_ln;
|
||||
|
||||
uint16_t srl_tx_internal_buf_ln;
|
||||
|
||||
uint16_t srl_rx_bytes_counter;
|
||||
uint16_t srl_tx_bytes_counter;
|
||||
|
||||
|
|
|
@ -45,16 +45,6 @@ extern uint16_t http_client_content_lenght;
|
|||
*/
|
||||
extern uint16_t http_client_max_content_ln;
|
||||
|
||||
/**
|
||||
* Temporary buffer for processing
|
||||
*/
|
||||
extern char http_client_header_buffer[HEADER_BUFFER_LN];
|
||||
|
||||
/**
|
||||
* Index used to walk through 'http_client_header_buffer'
|
||||
*/
|
||||
extern uint8_t http_client_header_index;
|
||||
|
||||
void http_client_init(gsm_sim800_state_t * state, srl_context_t * serial_context, uint8_t ignore_content_on_http_error);
|
||||
uint8_t http_client_async_get(char * url, uint8_t url_ln, uint16_t response_ln_limit, uint8_t force_disconnect_on_busy);
|
||||
uint8_t http_client_async_post(char * url, uint8_t url_ln, char * data_to_post, uint8_t data_ln, uint8_t force_disconnect_on_busy);
|
||||
|
|
|
@ -31,6 +31,7 @@ typedef enum http_client_method {
|
|||
uint16_t http_client_headers_preamble(http_client_method_t method, char * url, uint8_t url_ln, char * output, uint16_t output_ln);
|
||||
uint16_t http_client_headers_user_agent(char * output, uint16_t output_ln, uint16_t offset);
|
||||
uint16_t http_client_headers_accept(char* output, uint16_t output_ln, uint16_t offset);
|
||||
uint16_t http_client_headers_terminate(char* output, uint16_t output_ln, uint16_t offset);
|
||||
|
||||
|
||||
#endif /* INCLUDE_HTTP_CLIENT_HTTP_CLIENT_HEADERS_H_ */
|
||||
|
|
|
@ -49,6 +49,9 @@ void srl_init(
|
|||
ctx->srl_tx_buf_ln = rx_buffer_size;
|
||||
#endif
|
||||
|
||||
ctx->srl_tx_internal_buf_pointer = tx_buffer;
|
||||
ctx->srl_tx_internal_buf_ln = tx_buffer_size;
|
||||
|
||||
memset(ctx->srl_rx_buf_pointer, 0x00, ctx->srl_rx_buf_ln);
|
||||
memset(ctx->srl_tx_buf_pointer, 0x00, ctx->srl_tx_buf_ln);
|
||||
|
||||
|
@ -187,12 +190,12 @@ uint8_t srl_send_data(srl_context_t *ctx, const uint8_t* data, uint8_t mode, uin
|
|||
return SRL_DATA_TOO_LONG;
|
||||
|
||||
// setting a pointer to transmit buffer to the internal buffer inside the driver
|
||||
ctx->srl_tx_buf_pointer = srl_usart1_tx_buffer;
|
||||
ctx->srl_tx_buf_pointer = ctx->srl_tx_internal_buf_pointer;
|
||||
|
||||
ctx->srl_tx_buf_ln = TX_BUFFER_1_LN;
|
||||
ctx->srl_tx_buf_ln = ctx->srl_tx_internal_buf_ln;
|
||||
|
||||
// cleaning the buffer from previous content
|
||||
memset(ctx->srl_tx_buf_pointer, 0x00, TX_BUFFER_1_LN);
|
||||
memset(ctx->srl_tx_buf_pointer, 0x00, ctx->srl_tx_buf_ln);
|
||||
|
||||
// copying the data from provided pointer to internal buffer
|
||||
if (mode == 0) {
|
||||
|
@ -663,6 +666,10 @@ void srl_irq_handler(srl_context_t *ctx) {
|
|||
ctx->port->SR &= (0xFFFFFFFF ^ USART_SR_TC);
|
||||
ctx->srl_tx_state = SRL_TX_IDLE;
|
||||
|
||||
// reset tx buffer pointer to internal one
|
||||
ctx->srl_tx_buf_pointer = ctx->srl_tx_internal_buf_pointer;
|
||||
ctx->srl_tx_buf_ln = ctx->srl_tx_internal_buf_ln;
|
||||
|
||||
if (ctx->te_port != 0)
|
||||
GPIO_ResetBits(ctx->te_port, ctx->te_pin);
|
||||
|
||||
|
@ -677,6 +684,10 @@ void srl_irq_handler(srl_context_t *ctx) {
|
|||
ctx->port->SR &= (0xFFFFFFFF ^ USART_SR_TC);
|
||||
ctx->srl_tx_state = SRL_TX_IDLE;
|
||||
|
||||
// reset tx buffer pointer to internal one
|
||||
ctx->srl_tx_buf_pointer = ctx->srl_tx_internal_buf_pointer;
|
||||
ctx->srl_tx_buf_ln = ctx->srl_tx_internal_buf_ln;
|
||||
|
||||
if (ctx->te_port != 0)
|
||||
GPIO_ResetBits(ctx->te_port, ctx->te_pin);
|
||||
//GPIO_ResetBits(GPIOA, GPIO_Pin_7);
|
||||
|
|
|
@ -47,6 +47,7 @@ void srl_init(
|
|||
if (ctx->srl_rx_state == SRL_RX_IDLE)
|
||||
return;
|
||||
|
||||
// point to internal buffers by default
|
||||
#ifdef SEPARATE_TX_BUFF
|
||||
ctx->srl_tx_buf_pointer = tx_buffer;
|
||||
ctx->srl_rx_buf_ln = tx_buffer_size;
|
||||
|
@ -57,6 +58,9 @@ void srl_init(
|
|||
ctx->srl_tx_buf_ln = rx_buffer_size;
|
||||
#endif
|
||||
|
||||
ctx->srl_tx_internal_buf_pointer = tx_buffer;
|
||||
ctx->srl_tx_internal_buf_ln = tx_buffer_size;
|
||||
|
||||
memset(ctx->srl_rx_buf_pointer, 0x00, ctx->srl_rx_buf_ln);
|
||||
memset(ctx->srl_tx_buf_pointer, 0x00, ctx->srl_tx_buf_ln);
|
||||
|
||||
|
@ -208,12 +212,12 @@ uint8_t srl_send_data(srl_context_t *ctx, const uint8_t* data, uint8_t mode, uin
|
|||
return SRL_DATA_TOO_LONG;
|
||||
|
||||
// setting a pointer to transmit buffer to the internal buffer inside the driver
|
||||
ctx->srl_tx_buf_pointer = srl_usart1_tx_buffer;
|
||||
ctx->srl_tx_buf_pointer = ctx->srl_tx_internal_buf_pointer;
|
||||
|
||||
ctx->srl_tx_buf_ln = TX_BUFFER_1_LN;
|
||||
ctx->srl_tx_buf_ln = ctx->srl_tx_internal_buf_ln;
|
||||
|
||||
// cleaning the buffer from previous content
|
||||
memset(ctx->srl_tx_buf_pointer, 0x00, TX_BUFFER_1_LN);
|
||||
memset(ctx->srl_tx_buf_pointer, 0x00, ctx->srl_tx_buf_ln);
|
||||
|
||||
// copying the data from provided pointer to internal buffer
|
||||
if (mode == 0) {
|
||||
|
@ -688,6 +692,10 @@ void srl_irq_handler(srl_context_t *ctx) {
|
|||
ctx->port->ISR &= (0xFFFFFFFF ^ USART_ISR_TC);
|
||||
ctx->srl_tx_state = SRL_TX_IDLE;
|
||||
|
||||
// reset tx buffer pointer to internal one
|
||||
ctx->srl_tx_buf_pointer = ctx->srl_tx_internal_buf_pointer;
|
||||
ctx->srl_tx_buf_ln = ctx->srl_tx_internal_buf_ln;
|
||||
|
||||
if (ctx->te_port != 0) {
|
||||
LL_GPIO_ResetOutputPin(ctx->te_port, ctx->te_pin);
|
||||
}
|
||||
|
@ -703,6 +711,10 @@ void srl_irq_handler(srl_context_t *ctx) {
|
|||
ctx->port->ISR &= (0xFFFFFFFF ^ USART_ISR_TC);
|
||||
ctx->srl_tx_state = SRL_TX_IDLE;
|
||||
|
||||
// reset tx buffer pointer to internal one
|
||||
ctx->srl_tx_buf_pointer = ctx->srl_tx_internal_buf_pointer;
|
||||
ctx->srl_tx_buf_ln = ctx->srl_tx_internal_buf_ln;
|
||||
|
||||
if (ctx->te_port != 0) {
|
||||
LL_GPIO_ResetOutputPin(ctx->te_port, ctx->te_pin);
|
||||
}
|
||||
|
|
|
@ -27,16 +27,6 @@ uint16_t http_client_content_lenght = 0;
|
|||
*/
|
||||
int16_t http_client_http_code = 0;
|
||||
|
||||
/**
|
||||
* Temporary buffer for processing
|
||||
*/
|
||||
char http_client_header_buffer[HEADER_BUFFER_LN];
|
||||
|
||||
/**
|
||||
* Index used to walk through 'http_client_header_buffer'
|
||||
*/
|
||||
uint8_t http_client_header_index = 0;
|
||||
|
||||
/**
|
||||
* SIM800 state and serial context used to communication with gsm module.
|
||||
*/
|
||||
|
@ -90,7 +80,7 @@ static uint16_t http_client_split_hostname_and_path(char * input, uint16_t input
|
|||
return out;
|
||||
}
|
||||
|
||||
static void http_client_get_port_from_url(char * input, uint16_t input_ln, char * port, uint16_t port_ln) {
|
||||
static uint16_t http_client_get_port_from_url(char * input, uint16_t input_ln, char * port, uint16_t port_ln) {
|
||||
|
||||
char temp[5] = {0, 0, 0, 0, 0};
|
||||
|
||||
|
@ -132,10 +122,11 @@ static void http_client_get_port_from_url(char * input, uint16_t input_ln, char
|
|||
|
||||
}
|
||||
|
||||
return split_point;
|
||||
|
||||
}
|
||||
|
||||
static void http_client_get_address_from_url(char * input, uint16_t input_ln, char * address, uint16_t address_ln) {
|
||||
static uint16_t http_client_get_address_from_url(char * input, uint16_t input_ln, char * address, uint16_t address_ln) {
|
||||
|
||||
int first_index = 0, last_index = 0;
|
||||
|
||||
|
@ -170,6 +161,8 @@ static void http_client_get_address_from_url(char * input, uint16_t input_ln, ch
|
|||
}
|
||||
}
|
||||
|
||||
return split_point;
|
||||
|
||||
}
|
||||
|
||||
void http_client_init(gsm_sim800_state_t * state, srl_context_t * serial_context, uint8_t ignore_content_on_http_error) {
|
||||
|
@ -216,6 +209,11 @@ uint8_t http_client_async_get(char * url, uint8_t url_ln, uint16_t response_ln_l
|
|||
// set appropriate state
|
||||
http_client_state = HTTP_CLIENT_CONNECTED_IDLE;
|
||||
}
|
||||
|
||||
// clear a buffer to make a room for http request
|
||||
memset(http_client_deticated_serial_context->srl_tx_buf_pointer, 0x00, http_client_deticated_serial_context->srl_tx_buf_ln);
|
||||
|
||||
//
|
||||
}
|
||||
else if (split_point == 0xFFFF) {
|
||||
out = HTTP_CLIENT_RET_WRONG_URL;
|
||||
|
|
|
@ -58,7 +58,9 @@ uint16_t http_client_headers_user_agent(char *output, uint16_t output_ln,
|
|||
|
||||
uint16_t out = 0;
|
||||
|
||||
snprintf(output + offset, output_ln - offset, "User-Agent: %s");
|
||||
snprintf(output + offset, output_ln - offset, "User-Agent: ParaMETEO %s-%s\r\n", SW_VER, SW_DATE);
|
||||
|
||||
out = strlen (output);
|
||||
|
||||
return out;
|
||||
}
|
||||
|
@ -68,5 +70,19 @@ uint16_t http_client_headers_accept(char *output, uint16_t output_ln,
|
|||
|
||||
uint16_t out = 0;
|
||||
|
||||
snprintf(output + offset, output_ln - offset, "Accept: application/json\r\n");
|
||||
|
||||
out = strlen (output);
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
uint16_t http_client_headers_terminate(char* output, uint16_t output_ln, uint16_t offset) {
|
||||
uint16_t out = 0;
|
||||
|
||||
snprintf(output + offset, output_ln - offset, "\r\n\r\n");
|
||||
|
||||
out = strlen (output);
|
||||
|
||||
return out;
|
||||
}
|
||||
|
|
|
@ -45,6 +45,16 @@ static uint8_t http_client_response_header_processing = 1;
|
|||
// amount of bytes (octets) of a content of the HTTP response received so far
|
||||
static uint16_t http_client_content_received_so_far = 0;
|
||||
|
||||
/**
|
||||
* Temporary buffer for processing
|
||||
*/
|
||||
char http_client_header_buffer[HEADER_BUFFER_LN];
|
||||
|
||||
/**
|
||||
* Index used to walk through 'http_client_header_buffer'
|
||||
*/
|
||||
uint8_t http_client_header_index = 0;
|
||||
|
||||
/**
|
||||
* This function is responsible for checking what HTTP header has been received
|
||||
*/
|
||||
|
|
Ładowanie…
Reference in New Issue