Skip to content

Commit

Permalink
fix: add send buffer
Browse files Browse the repository at this point in the history
  • Loading branch information
darlanalves committed Feb 24, 2024
1 parent 99954ad commit 738b6a4
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 34 deletions.
76 changes: 45 additions & 31 deletions src/include/vm_types.hpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#define MAX_SLOTS 256
#define MAX_STACK_SIZE 64
#define MAX_PRINT_BUFFER 1024
#define MAX_PRINT_CURSOR MAX_PRINT_BUFFER - 1

#define vt_null 0
#define vt_identifier 1
Expand All @@ -12,6 +13,7 @@
#define vt_string 7

static char *printBuffer = (char *)malloc(MAX_PRINT_BUFFER);
static int printBufferCursor = 0;

typedef unsigned char byte;
typedef unsigned char *byteref;
Expand Down Expand Up @@ -181,73 +183,85 @@ class Program
return 1;
}

void printf(const char *format, va_list args)
void flush()
{
onSend(printBuffer, printBufferCursor);
printBufferCursor = 0;
os_memset(printBuffer, 0, MAX_PRINT_BUFFER);
int len = 0;
}

void putchar(char c)
{
if (printBufferCursor >= MAX_PRINT_CURSOR)
{
flush();
}

printBuffer[printBufferCursor++] = c;

if (c == '\n')
{
flush();
}
}

void putchars(const char *c, int len)
{
int i = 0;

for (; i < len; i++)
{
putchar(c[i]);
}
}

void printf(const char *format, va_list args)
{

char *s = va_arg(args, char *);
char *p = (char *)format;
char number[8];

for (; *p; p++)
{
if (len >= MAX_PRINT_BUFFER)
break;

if (*p != '%')
{
printBuffer[len++] = (*p);
putchar(*p);
continue;
}

switch (*++p)
{
case 'd':
{
if (sizeof(int) > MAX_PRINT_BUFFER - len)
{
break;
}

int d = va_arg(args, int);
int c = os_sprintf(printBuffer + len, "%d", d);
len += c - 1;
int c = os_sprintf(number, "%d", d);
putchars(number, c);
break;
}
case 'x':
{
int d = va_arg(args, int);
int c = os_sprintf(printBuffer + len, "%02x", d);
len += c - 1;
int c = os_sprintf(number, "%02x", d);
putchars(number, c);
break;
}
case 'c':
{
char c = va_arg(args, int);
printBuffer[len++] = c;
putchar(c);
break;
}
case 's':
{
char *s = va_arg(args, char *);
int slen = os_strlen(s);

if (slen > MAX_PRINT_BUFFER - len)
{
slen = MAX_PRINT_BUFFER - len - 1;
}

os_memcpy(printBuffer + len, s, slen);
len += slen;
putchars(s, strlen(s));
break;
}
default:
printBuffer[len++] = (*p);
putchar(*p);
break;
}
}

if (len)
{
onSend(printBuffer, len);
}
}
};
4 changes: 1 addition & 3 deletions src/index.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#define WITH_DEBUG
// #define WITH_DEBUG
#define SERIAL_SPEED 115200
#define __CHIP_ESP8266__

Expand Down Expand Up @@ -155,7 +155,6 @@ void onReceive(void *arg, char *data, unsigned short length)

void onSend(char *data, int length)
{
// TRACE("send %d bytes, state %d\n", length, conn->state);
if (conn->state == ESPCONN_CONNECT || conn->state == ESPCONN_WRITE)
{
espconn_send(conn, (uint8 *)data, length);
Expand All @@ -164,7 +163,6 @@ void onSend(char *data, int length)

void onHalt()
{
TRACE("halt, state %d\n", conn->state);
if (conn->state == ESPCONN_CONNECT)
{
espconn_disconnect(conn);
Expand Down

0 comments on commit 738b6a4

Please sign in to comment.