This commit is contained in:
iceman1001
2017-03-01 20:14:46 +01:00
parent c24364a8a4
commit a9eeb57698
13 changed files with 91 additions and 22 deletions

View File

@@ -531,6 +531,7 @@ int ASKDemod_ext(const char *Cmd, bool verbose, bool emSearch, uint8_t askType,
int clk = 0;
int maxErr = 100;
int maxLen = 0;
uint8_t askamp = 0;
char amp = param_getchar(Cmd, 0);
uint8_t BitStream[MAX_GRAPH_TRACE_LEN] = {0};
sscanf(Cmd, "%i %i %i %i %c", &clk, &invert, &maxErr, &maxLen, &amp);
@@ -553,14 +554,16 @@ int ASKDemod_ext(const char *Cmd, bool verbose, bool emSearch, uint8_t askType,
askAmp(BitStream, BitLen);
bool st = false;
if (*stCheck) st = DetectST(BitStream, &BitLen, &foundclk);
size_t ststart = 0, stend = 0;
if (*stCheck) st = DetectST_ext(BitStream, &BitLen, &foundclk, &ststart, &stend);
if (st) {
*stCheck = st;
clk = (clk == 0) ? foundclk : clk;
if (verbose || g_debugMode) PrintAndLog("\nFound Sequence Terminator");
CursorCPos = ststart;
CursorDPos = stend;
if (verbose || g_debugMode) PrintAndLog("\nFound Sequence Terminator - First one is shown by orange and blue graph markers");
}
int errCnt = askdemod(BitStream, &BitLen, &clk, &invert, maxErr, 0, askType);
int errCnt = askdemod(BitStream, &BitLen, &clk, &invert, maxErr, askamp, askType);
if (errCnt<0 || BitLen<16){ //if fatal error (or -1)
if (g_debugMode) PrintAndLog("DEBUG: no data found %d, errors:%d, bitlen:%d, clock:%d",errCnt,invert,BitLen,clk);
return 0;
@@ -2100,6 +2103,11 @@ void setGrid_Clock(uint8_t clock){
RepaintGraphWindow();
}
int CmdSetGraphMarkers(const char *Cmd) {
sscanf(Cmd, "%i %i", &CursorCPos, &CursorDPos);
RepaintGraphWindow();
return 0;
}
int CmdHexsamples(const char *Cmd)
{
@@ -2361,6 +2369,22 @@ int CmdRtrim(const char *Cmd)
return 0;
}
// trim graph (middle) piece
int CmdMtrim(const char *Cmd) {
int start = 0, stop = 0;
sscanf(Cmd, "%i %i", &start, &stop);
if (start > GraphTraceLen || stop > GraphTraceLen || start > stop) return 0;
start++; //leave start position sample
GraphTraceLen -= stop - start;
for (int i = 0; i < GraphTraceLen; i++) {
GraphBuffer[start+i] = GraphBuffer[stop+i];
}
return 0;
}
int CmdNorm(const char *Cmd)
{
int i;
@@ -2593,6 +2617,7 @@ static command_t CommandTable[] =
{"load", CmdLoad, 1, "<filename> -- Load trace (to graph window"},
{"ltrim", CmdLtrim, 1, "<samples> -- Trim samples from left of trace"},
{"rtrim", CmdRtrim, 1, "<location to end trace> -- Trim samples from right of trace"},
{"mtrim", CmdMtrim, 1, "<start> <stop> -- Trim out samples from the specified start to the specified stop"},
{"manrawdecode", Cmdmandecoderaw, 1, "[invert] [maxErr] -- Manchester decode binary stream in DemodBuffer"},
{"norm", CmdNorm, 1, "Normalize max/min to +/-128"},
{"plot", CmdPlot, 1, "Show graph window (hit 'h' in window for keystroke help)"},
@@ -2602,6 +2627,7 @@ static command_t CommandTable[] =
{"rawdemod", CmdRawDemod, 1, "[modulation] ... <options> -see help (h option) -- Demodulate the data in the GraphBuffer and output binary"},
{"samples", CmdSamples, 0, "[512 - 40000] -- Get raw samples for graph window (GraphBuffer)"},
{"save", CmdSave, 1, "<filename> -- Save trace (from graph window)"},
{"setgraphmarkers", CmdSetGraphMarkers, 1, "[orange_marker] [blue_marker] (in graph window)"},
{"scale", CmdScale, 1, "<int> -- Set cursor display scale"},
{"setdebugmode", CmdSetDebugMode, 1, "<0|1|2> -- Turn on or off Debugging Level for lf demods"},
{"shiftgraphzero", CmdGraphShiftZero, 1, "<shift> -- Shift 0 for Graphed wave + or - shift value"},

View File

@@ -492,8 +492,9 @@ int CmdHF14AMfDump(const char *Cmd) {
PrintAndLog("|-----------------------------------------|");
PrintAndLog("|------ Reading sector access bits...-----|");
PrintAndLog("|-----------------------------------------|");
uint8_t tries = 0;
for (sectorNo = 0; sectorNo < numSectors; sectorNo++) {
for (tries = 0; tries < 3; tries++) {
UsbCommand c = {CMD_MIFARE_READBL, {FirstBlockOfSector(sectorNo) + NumBlocksPerSector(sectorNo) - 1, 0, 0}};
memcpy(c.d.asBytes, keyA[sectorNo], 6);
clearCommandBuffer();
@@ -507,7 +508,8 @@ int CmdHF14AMfDump(const char *Cmd) {
rights[sectorNo][1] = ((data[7] & 0x20)>>3) | ((data[8] & 0x2)<<0) | ((data[8] & 0x20)>>5); // C1C2C3 for data area 1
rights[sectorNo][2] = ((data[7] & 0x40)>>4) | ((data[8] & 0x4)>>1) | ((data[8] & 0x40)>>6); // C1C2C3 for data area 2
rights[sectorNo][3] = ((data[7] & 0x80)>>5) | ((data[8] & 0x8)>>2) | ((data[8] & 0x80)>>7); // C1C2C3 for sector trailer
} else {
break;
} else if (tries == 2) { // on last try set defaults
PrintAndLog("Could not get access rights for sector %2d. Trying with defaults...", sectorNo);
rights[sectorNo][0] = rights[sectorNo][1] = rights[sectorNo][2] = 0x00;
rights[sectorNo][3] = 0x01;
@@ -518,6 +520,7 @@ int CmdHF14AMfDump(const char *Cmd) {
rights[sectorNo][3] = 0x01;
}
}
}
PrintAndLog("|-----------------------------------------|");
PrintAndLog("|----- Dumping all blocks to file... -----|");
@@ -527,7 +530,7 @@ int CmdHF14AMfDump(const char *Cmd) {
for (sectorNo = 0; isOK && sectorNo < numSectors; sectorNo++) {
for (blockNo = 0; isOK && blockNo < NumBlocksPerSector(sectorNo); blockNo++) {
bool received = false;
for (tries = 0; tries < 3; tries++) {
if (blockNo == NumBlocksPerSector(sectorNo) - 1) { // sector trailer. At least the Access Conditions can always be read with key A.
UsbCommand c = {CMD_MIFARE_READBL, {FirstBlockOfSector(sectorNo) + blockNo, 0, 0}};
memcpy(c.d.asBytes, keyA[sectorNo], 6);
@@ -544,12 +547,18 @@ int CmdHF14AMfDump(const char *Cmd) {
} else if (rights[sectorNo][data_area] == 0x07) { // no key would work
isOK = false;
PrintAndLog("Access rights do not allow reading of sector %2d block %3d", sectorNo, blockNo);
tries = 2;
} else { // key A would work
UsbCommand c = {CMD_MIFARE_READBL, {FirstBlockOfSector(sectorNo) + blockNo, 0, 0}};
memcpy(c.d.asBytes, keyA[sectorNo], 6);
clearCommandBuffer();
SendCommand(&c);
received = WaitForResponseTimeout(CMD_ACK,&resp,1500);
}
}
if (received) {
isOK = resp.arg[0] & 0xff;
if (isOK) break;
}
}
@@ -594,7 +603,6 @@ int CmdHF14AMfDump(const char *Cmd) {
uint16_t numblocks = FirstBlockOfSector(numSectors - 1) + NumBlocksPerSector(numSectors - 1);
fwrite(carddata, 1, 16*numblocks, fout);
fclose(fout);
fout = NULL;
PrintAndLog("Dumped %d blocks (%d bytes) to file dumpdata.bin", numblocks, 16*numblocks);
}

View File

@@ -149,6 +149,7 @@ int CmdFdxDemod(const char *Cmd) {
}
setDemodBuf(DemodBuffer, 128, ans);
setGrid_Clock(32);
// remove marker bits (1's every 9th digit after preamble) (pType = 2)
size = removeParity(DemodBuffer, 11, 9, 2, 117);
if ( size != 104 ) {

View File

@@ -136,7 +136,8 @@ int CmdLFNedapDemod(const char *Cmd) {
raw[2] = bytebits_to_byte(DemodBuffer+idx+32,32);
raw[3] = bytebits_to_byte(DemodBuffer+idx,32);
setDemodBuf(DemodBuffer,128,idx);
setGrid_Clock(64);
uint8_t firstParity = GetParity( DemodBuffer, EVEN, 63);
if ( firstParity != DemodBuffer[63] ) {
PrintAndLog("DEBUG: Error - Nedap 1st 64bit parity check failed: %d|%d ", DemodBuffer[63], firstParity);

View File

@@ -108,6 +108,7 @@ int CmdNoralsyDemod(const char *Cmd) {
return 0;
}
setDemodBuf(DemodBuffer, 96, ans);
setGrid_Clock(32);
//got a good demod
uint32_t raw1 = bytebits_to_byte(DemodBuffer, 32);

View File

@@ -137,6 +137,7 @@ int CmdPrescoDemod(const char *Cmd) {
return 0;
}
setDemodBuf(DemodBuffer, 128, ans);
setGrid_Clock(32);
//got a good demod
uint32_t raw1 = bytebits_to_byte(DemodBuffer, 32);

View File

@@ -23,7 +23,7 @@ void ExitGraphics(void);
extern int GraphBuffer[MAX_GRAPH_TRACE_LEN];
extern int GraphTraceLen;
extern double CursorScaleFactor;
extern int PlotGridX, PlotGridY, PlotGridXdefault, PlotGridYdefault;
extern int PlotGridX, PlotGridY, PlotGridXdefault, PlotGridYdefault, CursorCPos, CursorDPos;
extern int CommandFinished;
extern int offline;

View File

@@ -99,7 +99,7 @@ ProxGuiQT::~ProxGuiQT(void)
void ProxWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
QPainterPath penPath, whitePath, greyPath, lightgreyPath, cursorAPath, cursorBPath;
QPainterPath penPath, whitePath, greyPath, lightgreyPath, cursorAPath, cursorBPath, cursorCPath, cursorDPath;
QRect r;
QBrush brush(QColor(100, 255, 100));
QPen pen(QColor(100, 255, 100));
@@ -114,6 +114,10 @@ void ProxWidget::paintEvent(QPaintEvent *event)
if(CursorBPos > GraphTraceLen)
CursorBPos= 0;
if(CursorCPos > GraphTraceLen)
CursorCPos= 0;
if(CursorDPos > GraphTraceLen)
CursorDPos= 0;
r = rect();
@@ -238,13 +242,17 @@ void ProxWidget::paintEvent(QPaintEvent *event)
penPath.moveTo(x,y);
}
if(i == CursorAPos || i == CursorBPos) {
if(i == CursorAPos || i == CursorBPos || i == CursorCPos || i == CursorDPos) {
QPainterPath *cursorPath;
if(i == CursorAPos)
if (i == CursorAPos)
cursorPath = &cursorAPath;
else
else if (i == CursorBPos)
cursorPath = &cursorBPath;
else if (i == CursorCPos)
cursorPath = &cursorCPath;
else
cursorPath = &cursorDPath;
cursorPath->moveTo(x, r.top());
cursorPath->lineTo(x, r.bottom());
@@ -263,6 +271,10 @@ void ProxWidget::paintEvent(QPaintEvent *event)
painter.drawPath(cursorAPath);
painter.setPen(QColor(255, 0, 255));
painter.drawPath(cursorBPath);
painter.setPen(QColor(255, 153, 0)); //orange
painter.drawPath(cursorCPath);
painter.setPen(QColor(0, 0, 205)); //light blue
painter.drawPath(cursorDPath);
char str[200];
sprintf(str, "@%d max=%d min=%d mean=%d n=%d/%d dt=%d [%.3f] zoom=%.3f CursorA=%d [%d] CursorB=%d [%d] GridX=%d GridY=%d (%s)",

View File

@@ -11,7 +11,7 @@
#include "ui.h"
double CursorScaleFactor;
int PlotGridX, PlotGridY, PlotGridXdefault= 64, PlotGridYdefault= 64;
int PlotGridX, PlotGridY, PlotGridXdefault= 64, PlotGridYdefault= 64, CursorCPos= 0, CursorDPos= 0;
int offline;
int flushAfterWrite = 0;
extern pthread_mutex_t print_lock;

View File

@@ -45,7 +45,7 @@ void PrintAndLog(char *fmt, ...);
void SetLogFilename(char *fn);
extern double CursorScaleFactor;
extern int PlotGridX, PlotGridY, PlotGridXdefault, PlotGridYdefault;
extern int PlotGridX, PlotGridY, PlotGridXdefault, PlotGridYdefault, CursorCPos, CursorDPos;
extern int offline;
extern int flushAfterWrite; //buzzy