From c11c7ab54533aae7f2640225b8137b7f8ba45de2 Mon Sep 17 00:00:00 2001 From: slurdge Date: Wed, 10 Jun 2020 23:03:03 +0200 Subject: [PATCH] Add support for client getting bigbufsize --- armsrc/appmain.c | 9 +++++++++ client/src/cmddata.c | 14 ++++++++------ client/src/cmddata.h | 1 - client/src/cmdlft55xx.c | 2 +- include/pm3_cmd.h | 3 ++- 5 files changed, 20 insertions(+), 9 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 96f133f49..7ba6158c7 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -392,6 +392,7 @@ static void SendCapabilities(void) { capabilities.version = CAPABILITIES_VERSION; capabilities.via_fpc = g_reply_via_fpc; capabilities.via_usb = g_reply_via_usb; + capabilities.bigbuf_size = BigBuf_get_size(); capabilities.baudrate = 0; // no real baudrate for USB-CDC #ifdef WITH_FPC_USART if (g_reply_via_fpc) @@ -2051,11 +2052,15 @@ static void PacketReceived(PacketCommandNG *packet) { } } +extern uint32_t _stack_start; + void __attribute__((noreturn)) AppMain(void) { SpinDelay(100); BigBuf_initialize(); + _stack_start = 0xdeadbeef; + if (common_area.magic != COMMON_AREA_MAGIC || common_area.version != 1) { /* Initialize common area */ memset(&common_area, 0, sizeof(common_area)); @@ -2121,6 +2126,10 @@ void __attribute__((noreturn)) AppMain(void) { for (;;) { WDT_HIT(); + if (_stack_start != 0xdeadbeef) { + Dbprintf("Stack overflow detected! Please increase stack size."); + } + // Check if there is a packet available PacketCommandNG rx; memset(&rx.data, 0, sizeof(rx.data)); diff --git a/client/src/cmddata.c b/client/src/cmddata.c index 326e0d457..99908d1ea 100644 --- a/client/src/cmddata.c +++ b/client/src/cmddata.c @@ -567,7 +567,7 @@ int ASKDemod_ext(const char *Cmd, bool verbose, bool emSearch, uint8_t askType, sscanf(Cmd, "%i %i %i %zu %c", &clk, &invert, &maxErr, &maxLen, &); - if (!maxLen) maxLen = BIGBUF_SIZE; + if (!maxLen) maxLen = pm3_capabilities.bigbuf_size; if (invert != 0 && invert != 1) { PrintAndLogEx(WARNING, "Invalid argument: %s", Cmd); @@ -1517,16 +1517,18 @@ static int CmdHexsamples(const char *Cmd) { uint32_t offset = 0; char string_buf[25]; char *string_ptr = string_buf; - uint8_t got[BIGBUF_SIZE]; + uint8_t got[512*1024]; sscanf(Cmd, "%u %u", &requested, &offset); /* if no args send something */ if (requested == 0) requested = 8; + if (requested > pm3_capabilities.bigbuf_size) + requested = pm3_capabilities.bigbuf_size; if (offset + requested > sizeof(got)) { - PrintAndLogEx(NORMAL, "Tried to read past end of buffer, + > %d", BIGBUF_SIZE); + PrintAndLogEx(NORMAL, "Tried to read past end of buffer, + > %d", pm3_capabilities.bigbuf_size); return PM3_EINVARG; } @@ -1595,10 +1597,10 @@ int getSamples(uint32_t n, bool verbose) { // we don't have to worry about remaining trash // in the last byte in case the bits-per-sample // does not line up on byte boundaries - uint8_t got[BIGBUF_SIZE - 1] = { 0 }; + uint8_t got[512*1024] = { 0 }; - if (n == 0 || n > sizeof(got)) - n = sizeof(got); + if (n == 0 || n > pm3_capabilities.bigbuf_size) + n = pm3_capabilities.bigbuf_size; if (verbose) PrintAndLogEx(INFO, "Reading " _YELLOW_("%u") " bytes from device memory", n); diff --git a/client/src/cmddata.h b/client/src/cmddata.h index a7a69e430..abef8fde8 100644 --- a/client/src/cmddata.h +++ b/client/src/cmddata.h @@ -79,7 +79,6 @@ int AskEdgeDetect(const int *in, int *out, int len, int threshold); int demodIdteck(void); #define MAX_DEMOD_BUF_LEN (1024*128) -#define BIGBUF_SIZE 40000 extern uint8_t DemodBuffer[MAX_DEMOD_BUF_LEN]; extern size_t DemodBufferLen; diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index 6294ffef6..b2f048665 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -2837,7 +2837,7 @@ static int CmdResetRead(const char *Cmd) { if (resp.status == PM3_SUCCESS) { - uint16_t gotsize = BIGBUF_SIZE - 1; + uint16_t gotsize = pm3_capabilities.bigbuf_size - 1; uint8_t *got = calloc(gotsize, sizeof(uint8_t)); if (got == NULL) { PrintAndLogEx(WARNING, "failed to allocate memory"); diff --git a/include/pm3_cmd.h b/include/pm3_cmd.h index b6de6f292..3cafb9df1 100644 --- a/include/pm3_cmd.h +++ b/include/pm3_cmd.h @@ -175,6 +175,7 @@ typedef struct { typedef struct { uint8_t version; uint32_t baudrate; + uint32_t bigbuf_size; bool via_fpc : 1; bool via_usb : 1; // rdv4 @@ -203,7 +204,7 @@ typedef struct { bool hw_available_flash : 1; bool hw_available_smartcard : 1; } PACKED capabilities_t; -#define CAPABILITIES_VERSION 4 +#define CAPABILITIES_VERSION 5 extern capabilities_t pm3_capabilities; // For CMD_LF_T55XX_WRITEBL