ADD: a little function to see if GraphBuffer is not used.
#include "util.h"
#include "data.h"
#define LF_TRACE_BUFF_SIZE 12000
+#define LF_BITSSTREAM_LEN 1000
char *global_em410xId;
}
GraphTraceLen = LF_TRACE_BUFF_SIZE;
- uint8_t bits[1000] = {0x00};
+ uint8_t bits[LF_BITSSTREAM_LEN] = {0x00};
uint8_t * bitstream = bits;
- manchester_decode(GraphBuffer, LF_TRACE_BUFF_SIZE, bitstream);
+ manchester_decode(GraphBuffer, LF_TRACE_BUFF_SIZE, bitstream,LF_BITSSTREAM_LEN);
RepaintGraphWindow();
return 0;
}
}
GraphTraceLen = LF_TRACE_BUFF_SIZE;
- uint8_t bits[1000] = {0x00};
- uint8_t * bitstream = bits;
-
- manchester_decode(GraphBuffer, LF_TRACE_BUFF_SIZE, bitstream);
+ uint8_t bits[LF_BITSSTREAM_LEN] = {0x00};
+ uint8_t * bitstream = bits;
+ manchester_decode(GraphBuffer, LF_TRACE_BUFF_SIZE, bitstream, LF_BITSSTREAM_LEN);
RepaintGraphWindow();
return 0;
}
\r
\r
#define LF_TRACE_BUFF_SIZE 12000 // 32 x 32 x 10 (32 bit times numofblock (7), times clock skip..)\r
+#define LF_BITSSTREAM_LEN 1000 // more then 1000 bits shouldn't happend.. 8block * 4 bytes * 8bits = \r
static int CmdHelp(const char *Cmd);\r
\r
\r
int CmdReadBlk(const char *Cmd)\r
{\r
- int Block = -1;\r
- sscanf(Cmd, "%d", &Block);\r
+ int block = -1;\r
+ sscanf(Cmd, "%d", &block);\r
\r
- if ((Block > 7) | (Block < 0)) {\r
+ if ((block > 7) | (block < 0)) {\r
PrintAndLog("Block must be between 0 and 7");\r
return 1;\r
} \r
// }\r
// GraphTraceLen = LF_TRACE_BUFF_SIZE;\r
CmdSamples("12000");\r
- ManchesterDemod(Block);\r
+ ManchesterDemod(block);\r
// RepaintGraphWindow();\r
return 0;\r
}\r
GraphTraceLen = LF_TRACE_BUFF_SIZE;\r
}\r
\r
- uint8_t bits[1000] = {0x00};\r
+ uint8_t bits[LF_BITSSTREAM_LEN] = {0x00};\r
uint8_t * bitstream = bits;\r
\r
- manchester_decode(GraphBuffer, LF_TRACE_BUFF_SIZE, bitstream);\r
+ manchester_decode(GraphBuffer, LF_TRACE_BUFF_SIZE, bitstream, LF_BITSSTREAM_LEN);\r
RepaintGraphWindow();\r
\r
uint8_t si = 5;\r
CmdReadBlk("0");\r
} \r
\r
- uint8_t bits[1000] = {0x00};\r
+ uint8_t bits[LF_BITSSTREAM_LEN] = {0x00};\r
uint8_t * bitstream = bits;\r
\r
- manchester_decode(GraphBuffer, LF_TRACE_BUFF_SIZE, bitstream);\r
+ manchester_decode(GraphBuffer, LF_TRACE_BUFF_SIZE, bitstream, LF_BITSSTREAM_LEN);\r
\r
uint8_t si = 5;\r
uint32_t bl0 = PackBits(si, 32, bitstream);\r
for ( int i = 0; i <8; ++i){\r
memset(s,0,sizeof(s));\r
if ( hasPwd ) {\r
- sprintf(s,"%d %s", i, sprint_hex(pwd,4));\r
+ sprintf(s,"%d %02x%02x%02x%02x", i, pwd[0],pwd[1],pwd[2],pwd[3]);\r
CmdReadBlkPWD(s);\r
} else {\r
sprintf(s,"%d", i);\r
}\r
\r
int CmdIceFsk(const char *Cmd){\r
+\r
+ if (!HasGraphData()) return 0;\r
+\r
iceFsk3(GraphBuffer, LF_TRACE_BUFF_SIZE);\r
RepaintGraphWindow();\r
return 0;\r
ManchesterDemod( -1);\r
return 0;\r
}\r
-int ManchesterDemod(int block){\r
+int ManchesterDemod(int blockNum){\r
\r
- int blockNum = -1;\r
+ if (!HasGraphData()) return 0;\r
+ \r
uint8_t sizebyte = 32;\r
uint8_t offset = 5;\r
uint32_t blockData;\r
- uint8_t bits[1000] = {0x00};\r
+ uint8_t bits[LF_BITSSTREAM_LEN] = {0x00};\r
uint8_t * bitstream = bits;\r
\r
- manchester_decode(GraphBuffer, LF_TRACE_BUFF_SIZE, bitstream); \r
+ manchester_decode(GraphBuffer, LF_TRACE_BUFF_SIZE, bitstream, LF_BITSSTREAM_LEN); \r
blockData = PackBits(offset, sizebyte, bitstream);\r
\r
if ( blockNum < 0)\r
{
{"help", CmdHelp, 1, "This help. Use '<command> help' for details of a particular command."},
{"data", CmdData, 1, "{ Plot window / data buffer manipulation... }"},
- {"hf", CmdHF, 1, "{ HF commands... }"},
+ {"hf", CmdHF, 1, "{ High Frequency commands... }"},
{"hw", CmdHW, 1, "{ Hardware commands... }"},
- {"lf", CmdLF, 1, "{ LF commands... }"},
+ {"lf", CmdLF, 1, "{ Low Frequency commands... }"},
{"script", CmdScript, 1,"{ Scripting commands }"},
{"quit", CmdQuit, 1, "Exit program"},
{"exit", CmdQuit, 1, "Exit program"},
//-----------------------------------------------------------------------------
#include <stdio.h>
+#include <stdbool.h>
#include <string.h>
#include "ui.h"
#include "graph.h"
return clock;
}
+
+
+/* A simple test to see if there is any data inside Graphbuffer.
+*/
+bool HasGraphData(){
+
+ if ( GraphTraceLen <= 0) {
+ PrintAndLog("No data available, try reading something first");
+ return false;
+ }
+ return true;
+}
\ No newline at end of file
int ClearGraph(int redraw);
int DetectClock(int peak);
int GetClock(const char *str, int peak, int verbose);
+bool HasGraphData();
#define MAX_GRAPH_TRACE_LEN (1024*128)
extern int GraphBuffer[MAX_GRAPH_TRACE_LEN];
extern int GraphTraceLen;
-
#endif
logfilename = fn;
}
-int manchester_decode( int * data, const size_t len, uint8_t * dataout){
+int manchester_decode( int * data, const size_t len, uint8_t * dataout, size_t dataoutlen){
int bitlength = 0;
int i, clock, high, low, startindex;
low = startindex = 0;
high = 1;
- uint8_t * bitStream = (uint8_t* ) malloc(sizeof(uint8_t) * len);
- memset(bitStream, 0x00, len);
+ uint8_t * bitStream = (uint8_t* ) malloc(sizeof(uint8_t) * dataoutlen);
+ memset(bitStream, 0x00, dataoutlen);
/* Detect high and lows */
for (i = 0; i < len; i++) {
clock = GetT55x7Clock( data, len, high );
startindex = DetectFirstTransition(data, len, high);
- PrintAndLog(" Clock : %d", clock);
+ //PrintAndLog(" Clock : %d", clock);
if (high != 1)
- bitlength = ManchesterConvertFrom255(data, len, bitStream, high, low, clock, startindex);
+ bitlength = ManchesterConvertFrom255(data, len, bitStream, dataoutlen, high, low, clock, startindex);
else
- bitlength= ManchesterConvertFrom1(data, len, bitStream, clock, startindex);
+ bitlength= ManchesterConvertFrom1(data, len, bitStream, dataoutlen, clock, startindex);
memcpy(dataout, bitStream, bitlength);
free(bitStream);
return i;
}
- int ManchesterConvertFrom255(const int * data, const size_t len, uint8_t * dataout, int high, int low, int clock, int startIndex){
+ int ManchesterConvertFrom255(const int * data, const size_t len, uint8_t * dataout, int dataoutlen, int high, int low, int clock, int startIndex){
int i, j, z, hithigh, hitlow, bitIndex, startType;
i = 0;
int firstST = 0;
// i = clock frame of data
- for (; i < (int)(len / clock); i++)
+ for (; i < (int)(len/clock); i++)
{
hithigh = 0;
hitlow = 0;
if ( firstST == 4)
break;
+ if ( bitIndex >= dataoutlen-1 )
+ break;
}
return bitIndex;
}
- int ManchesterConvertFrom1(const int * data, const size_t len, uint8_t * dataout, int clock, int startIndex){
+ int ManchesterConvertFrom1(const int * data, const size_t len, uint8_t * dataout,int dataoutlen, int clock, int startIndex){
PrintAndLog(" Path B");
extern int offline;
extern int flushAfterWrite; //buzzy
-int manchester_decode( int * data, const size_t len, uint8_t * dataout);
+int manchester_decode( int * data, const size_t len, uint8_t * dataout, size_t dataoutlen);
int GetT55x7Clock( const int * data, const size_t len, int high );
int DetectFirstTransition(const int * data, const size_t len, int low);
void PrintPaddedManchester( uint8_t * bitStream, size_t len, size_t blocksize);
void ManchesterDiffDecodedString( const uint8_t *bitStream, size_t len, uint8_t invert );
-int ManchesterConvertFrom255(const int * data, const size_t len, uint8_t * dataout, int high, int low, int clock, int startIndex);
-int ManchesterConvertFrom1(const int * data, const size_t len, uint8_t * dataout, int clock, int startIndex);
+int ManchesterConvertFrom255(const int * data, const size_t len, uint8_t * dataout,int dataoutlen, int high, int low, int clock, int startIndex);
+int ManchesterConvertFrom1(const int * data, const size_t len, uint8_t * dataout, int dataoutlen, int clock, int startIndex);
void iceFsk2(int * data, const size_t len);
void iceFsk3(int * data, const size_t len);
#endif