use async buffer for apars respond other than http
This commit is contained in:
@@ -11,7 +11,6 @@
|
|||||||
#include "version.h"
|
#include "version.h"
|
||||||
#include "uart_buffer.h"
|
#include "uart_buffer.h"
|
||||||
#include "screen.h"
|
#include "screen.h"
|
||||||
#include "uart_driver.h"
|
|
||||||
|
|
||||||
volatile bool enquiry_suppressed = false;
|
volatile bool enquiry_suppressed = false;
|
||||||
ETSTimer enqTimer;
|
ETSTimer enqTimer;
|
||||||
@@ -27,8 +26,8 @@ void ICACHE_FLASH_ATTR enqTimerCb(void *unused)
|
|||||||
void ICACHE_FLASH_ATTR
|
void ICACHE_FLASH_ATTR
|
||||||
apars_respond(const char *str)
|
apars_respond(const char *str)
|
||||||
{
|
{
|
||||||
UART_WriteString(UART0, str, UART_TIMEOUT_US);
|
// Using the Tx buffer causes issues with large data (eg. from http requests)
|
||||||
//UART_SendAsync(str, -1);
|
UART_SendAsync(str, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+18
-9
@@ -7,6 +7,7 @@
|
|||||||
#include "version.h"
|
#include "version.h"
|
||||||
#include "ansi_parser_callbacks.h"
|
#include "ansi_parser_callbacks.h"
|
||||||
#include "api.h"
|
#include "api.h"
|
||||||
|
#include "uart_driver.h"
|
||||||
#include <httpclient.h>
|
#include <httpclient.h>
|
||||||
#include <esp_utils.h>
|
#include <esp_utils.h>
|
||||||
|
|
||||||
@@ -29,6 +30,14 @@ struct d2d_request_opts {
|
|||||||
|
|
||||||
volatile bool request_pending = false;
|
volatile bool request_pending = false;
|
||||||
|
|
||||||
|
// NOTE! We bypass the async buffer here - used for user input and
|
||||||
|
// responses to queries {apars_respond()}. In rare situations this could
|
||||||
|
// lead to a race condition and mixing two different messages
|
||||||
|
static inline void ICACHE_FLASH_ATTR sendResponseToUART(const char *str)
|
||||||
|
{
|
||||||
|
UART_WriteString(UART0, str, UART_TIMEOUT_US);
|
||||||
|
}
|
||||||
|
|
||||||
static void ICACHE_FLASH_ATTR
|
static void ICACHE_FLASH_ATTR
|
||||||
requestNoopCb(int http_status,
|
requestNoopCb(int http_status,
|
||||||
char *response_headers,
|
char *response_headers,
|
||||||
@@ -95,7 +104,7 @@ requestCb(int http_status,
|
|||||||
// semicolon only if more data is to be sent
|
// semicolon only if more data is to be sent
|
||||||
if (opts->want_head || opts->want_body) sprintf(bb, ";");
|
if (opts->want_head || opts->want_body) sprintf(bb, ";");
|
||||||
|
|
||||||
apars_respond(buff100);
|
sendResponseToUART(buff100);
|
||||||
|
|
||||||
//d2d_dbg("Headers (part) %100s", response_headers);
|
//d2d_dbg("Headers (part) %100s", response_headers);
|
||||||
//d2d_dbg("Body (part) %100s", response_body);
|
//d2d_dbg("Body (part) %100s", response_body);
|
||||||
@@ -107,8 +116,8 @@ requestCb(int http_status,
|
|||||||
response_headers[len] = 0;
|
response_headers[len] = 0;
|
||||||
opts->want_body = false; // soz, it wouldn't fit
|
opts->want_body = false; // soz, it wouldn't fit
|
||||||
}
|
}
|
||||||
apars_respond(response_headers);
|
sendResponseToUART(response_headers);
|
||||||
if(opts->want_body) apars_respond("\r\n");
|
if(opts->want_body) sendResponseToUART("\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(opts->want_body) {
|
if(opts->want_body) {
|
||||||
@@ -117,10 +126,10 @@ requestCb(int http_status,
|
|||||||
response_body[len - (opts->want_head*(headers_size+2))] = 0;
|
response_body[len - (opts->want_head*(headers_size+2))] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
apars_respond(response_body);
|
sendResponseToUART(response_body);
|
||||||
}
|
}
|
||||||
|
|
||||||
apars_respond("\a");
|
sendResponseToUART("\a");
|
||||||
|
|
||||||
free(opts->nonce);
|
free(opts->nonce);
|
||||||
free(opts);
|
free(opts);
|
||||||
@@ -290,14 +299,14 @@ httpd_cgi_state ICACHE_FLASH_ATTR cgiD2DMessage(HttpdConnData *connData)
|
|||||||
u8 *ip = connData->remote_ip;
|
u8 *ip = connData->remote_ip;
|
||||||
char buf[20];
|
char buf[20];
|
||||||
sprintf(buf, "\x1b^m;"IPSTR";L=%d;", ip[0], ip[1], ip[2], ip[3], (int)len);
|
sprintf(buf, "\x1b^m;"IPSTR";L=%d;", ip[0], ip[1], ip[2], ip[3], (int)len);
|
||||||
apars_respond(buf);
|
sendResponseToUART(buf);
|
||||||
|
|
||||||
if (connData->post && connData->post->buff)
|
if (connData->post && connData->post->buff)
|
||||||
apars_respond(connData->post->buff);
|
sendResponseToUART(connData->post->buff);
|
||||||
else if (connData->getArgs)
|
else if (connData->getArgs)
|
||||||
apars_respond(connData->getArgs);
|
sendResponseToUART(connData->getArgs);
|
||||||
|
|
||||||
apars_respond("\a");
|
sendResponseToUART("\a");
|
||||||
|
|
||||||
d2d_dbg("D2D Rx src="IPSTR",len=%d", ip[0], ip[1], ip[2], ip[3],len);
|
d2d_dbg("D2D Rx src="IPSTR",len=%d", ip[0], ip[1], ip[2], ip[3],len);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user