mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2024-12-29 11:52:59 +08:00
ADD: sample buffer size variable, to keep track of possible download lengths which is reserved on client.
This commit is contained in:
parent
a11162a9fe
commit
cd93f3a134
4 changed files with 11 additions and 1 deletions
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue