ADD: sample buffer size variable, to keep track of possible download lengths which is reserved on client.

This commit is contained in:
iceman1001 2018-04-27 10:09:14 +02:00
parent a11162a9fe
commit cd93f3a134
4 changed files with 11 additions and 1 deletions

View file

@ -276,6 +276,7 @@ int CmdVersion(const char *Cmd) {
int CmdStatus(const char *Cmd) {
uint8_t speed_test_buffer[USB_CMD_DATA_SIZE];
sample_buf = speed_test_buffer;
sample_buf_size = USB_CMD_DATA_SIZE;
clearCommandBuffer();
UsbCommand c = {CMD_STATUS};
SendCommand(&c);

View file

@ -118,7 +118,7 @@ void storeCommand(UsbCommand *command) {
int getCommand(UsbCommand* response) {
pthread_mutex_lock(&cmdBufferMutex);
//If head == tail, there's nothing to read, or if we just got initialized
if(cmd_head == cmd_tail) {
if (cmd_head == cmd_tail) {
pthread_mutex_unlock(&cmdBufferMutex);
return 0;
}
@ -235,6 +235,10 @@ void UsbCommandReceived(UsbCommand* _ch) {
uint32_t offset = c->arg[0];
uint32_t len = c->arg[1];
//uint32_t tracelen = c->arg[2];
// extra bounds check.
len = MIN(sample_buf_size, len);
memcpy( sample_buf + offset, c->d.asBytes, len);
//PrintAndLogEx(NORMAL, "ICE:: Download from device. chunk %" PRIu32 " | size %" PRIu32 " | tracelen:%" PRIu32 " \n", offset, len, c->arg[2]);
break;

View file

@ -15,12 +15,14 @@
#include "proxmark3.h"
#include "cmdmain.h"
uint32_t sample_buf_size;
uint8_t* sample_buf;
// this triggers a download sequence from device, its received inside cmdmain.c UsbCommandReceived()
void GetFromBigBuf(uint8_t *dest, uint32_t len, uint32_t start_index) {
// global
sample_buf = dest;
sample_buf_size = len;
UsbCommand c = {CMD_DOWNLOAD_RAW_ADC_SAMPLES_125K, {start_index, len, 0}};
clearCommandBuffer();
SendCommand(&c);
@ -29,6 +31,7 @@ void GetFromBigBuf(uint8_t *dest, uint32_t len, uint32_t start_index) {
// inside the BigBuf EML zon.
bool GetEMLFromBigBuf(uint8_t *dest, uint32_t len, uint32_t start_index) {
sample_buf = dest;
sample_buf_size = len;
UsbCommand c = {CMD_DOWNLOAD_EML_BIGBUF, {start_index, len, 0}};
clearCommandBuffer();
SendCommand(&c);
@ -45,6 +48,7 @@ bool GetEMLFromBigBuf(uint8_t *dest, uint32_t len, uint32_t start_index) {
// Download data from flashmem, rdv40
void GetFromFlashMen(uint8_t *dest, uint32_t len, uint32_t start_index) {
sample_buf = dest;
sample_buf_size = len;
UsbCommand c = {CMD_DOWNLOAND_FLASH_MEM, {start_index, len, 0}};
clearCommandBuffer();
SendCommand(&c);

View file

@ -16,6 +16,7 @@
#define FILE_PATH_SIZE 1000
extern uint32_t sample_buf_size;
extern uint8_t* sample_buf;
extern void GetFromBigBuf(uint8_t *dest, uint32_t len, uint32_t start_index);
extern bool GetEMLFromBigBuf(uint8_t *dest, uint32_t len, uint32_t start_index);