mirror of
https://github.com/Proxmark/proxmark3.git
synced 2025-07-31 03:50:12 -07:00
Added a way to overlay a grid to graph window
This commit is contained in:
parent
67853904cc
commit
bd4cc2c95b
4 changed files with 134 additions and 111 deletions
|
@ -1,3 +1,2 @@
|
||||||
@echo off
|
@echo off
|
||||||
cd ..\winsrc
|
call ..\winsrc\prox %1
|
||||||
call prox gui
|
|
||||||
|
|
|
@ -1798,9 +1798,9 @@ static void CmdThreshold(char *str)
|
||||||
|
|
||||||
for(i = 0; i < GraphTraceLen; i++) {
|
for(i = 0; i < GraphTraceLen; i++) {
|
||||||
if(GraphBuffer[i]>= threshold)
|
if(GraphBuffer[i]>= threshold)
|
||||||
GraphBuffer[i]=127;
|
GraphBuffer[i]=1;
|
||||||
else
|
else
|
||||||
GraphBuffer[i]=-128;
|
GraphBuffer[i]=-1;
|
||||||
}
|
}
|
||||||
RepaintGraphWindow();
|
RepaintGraphWindow();
|
||||||
}
|
}
|
||||||
|
@ -2588,6 +2588,14 @@ static void CmdPlot(char *str)
|
||||||
ShowGraphWindow();
|
ShowGraphWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void CmdGrid(char *str)
|
||||||
|
{
|
||||||
|
int x = 0, y = 0;
|
||||||
|
sscanf(str, "%i %i", &x, &y);
|
||||||
|
SetGraphGrid(x, y);
|
||||||
|
RepaintGraphWindow();
|
||||||
|
}
|
||||||
|
|
||||||
static void CmdHide(char *str)
|
static void CmdHide(char *str)
|
||||||
{
|
{
|
||||||
HideGraphWindow();
|
HideGraphWindow();
|
||||||
|
@ -2684,12 +2692,6 @@ static void CmdLcd(char *str)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void CmdTest(char *str)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Sets the divisor for LF frequency clock: lets the user choose any LF frequency below
|
* Sets the divisor for LF frequency clock: lets the user choose any LF frequency below
|
||||||
* 600kHz.
|
* 600kHz.
|
||||||
|
@ -2730,13 +2732,14 @@ static struct {
|
||||||
{"em4x50read", CmdEM4x50read, 1, "Extract data from EM4x50 tag"},
|
{"em4x50read", CmdEM4x50read, 1, "Extract data from EM4x50 tag"},
|
||||||
{"exit", CmdQuit, 1, "Exit program"},
|
{"exit", CmdQuit, 1, "Exit program"},
|
||||||
{"flexdemod", CmdFlexdemod, 1, "Demodulate samples for FlexPass"},
|
{"flexdemod", CmdFlexdemod, 1, "Demodulate samples for FlexPass"},
|
||||||
{"fpgaoff", CmdFPGAOff,0, " Set FPGA off"}, // ## FPGA Control
|
{"fpgaoff", CmdFPGAOff, 0, "Set FPGA off"},
|
||||||
{"fskdemod", CmdFSKdemod, 1, "Demodulate graph window as a HID FSK"},
|
{"fskdemod", CmdFSKdemod, 1, "Demodulate graph window as a HID FSK"},
|
||||||
|
{"grid", CmdGrid, 1, "grid x y, overlay grid on graph window, use zero value to turn off either"},
|
||||||
{"hexsamples", CmdHexsamples, 0, "<blocks> -- Dump big buffer as hex bytes"},
|
{"hexsamples", CmdHexsamples, 0, "<blocks> -- Dump big buffer as hex bytes"},
|
||||||
{"hi14alist", CmdHi14alist,0, " List ISO 14443a history"}, // ## New list command
|
{"hi14alist", CmdHi14alist, 0, "List ISO 14443a history"},
|
||||||
{"hi14areader", CmdHi14areader,0, " Act like an ISO14443 Type A reader"}, // ## New reader command
|
{"hi14areader", CmdHi14areader, 0, "Act like an ISO14443 Type A reader"},
|
||||||
{"hi14asim", CmdHi14asim,0, "<UID> -- Fake ISO 14443a tag"}, // ## Simulate 14443a tag
|
{"hi14asim", CmdHi14asim, 0, "<UID> -- Fake ISO 14443a tag"},
|
||||||
{"hi14asnoop", CmdHi14asnoop,0, " Eavesdrop ISO 14443 Type A"}, // ## New snoop command
|
{"hi14asnoop", CmdHi14asnoop, 0, "Eavesdrop ISO 14443 Type A"},
|
||||||
{"hi14bdemod", CmdHi14bdemod, 1, "Demodulate ISO14443 Type B from tag"},
|
{"hi14bdemod", CmdHi14bdemod, 1, "Demodulate ISO14443 Type B from tag"},
|
||||||
{"hi14list", CmdHi14list, 0, "List ISO 14443 history"},
|
{"hi14list", CmdHi14list, 0, "List ISO 14443 history"},
|
||||||
{"hi14read", CmdHi14read, 0, "Read HF tag (ISO 14443)"},
|
{"hi14read", CmdHi14read, 0, "Read HF tag (ISO 14443)"},
|
||||||
|
@ -2744,8 +2747,8 @@ static struct {
|
||||||
{"hi14snoop", CmdHi14snoop, 0, "Eavesdrop ISO 14443"},
|
{"hi14snoop", CmdHi14snoop, 0, "Eavesdrop ISO 14443"},
|
||||||
{"hi15demod", CmdHi15demod, 1, "Demodulate ISO15693 from tag"},
|
{"hi15demod", CmdHi15demod, 1, "Demodulate ISO15693 from tag"},
|
||||||
{"hi15read", CmdHi15read, 0, "Read HF tag (ISO 15693)"},
|
{"hi15read", CmdHi15read, 0, "Read HF tag (ISO 15693)"},
|
||||||
{"hi15reader", CmdHi15reader,0, " Act like an ISO15693 reader"}, // new command greg
|
{"hi15reader", CmdHi15reader, 0, "Act like an ISO15693 reader"},
|
||||||
{"hi15sim", CmdHi15tag,0, " Fake an ISO15693 tag"}, // new command greg
|
{"hi15sim", CmdHi15tag, 0, "Fake an ISO15693 tag"},
|
||||||
{"hiddemod", CmdHiddemod, 1, "Demodulate HID Prox Card II (not optimal)"},
|
{"hiddemod", CmdHiddemod, 1, "Demodulate HID Prox Card II (not optimal)"},
|
||||||
{"hide", CmdHide, 1, "Hide graph window"},
|
{"hide", CmdHide, 1, "Hide graph window"},
|
||||||
{"hidfskdemod", CmdHIDdemodFSK, 0, "Realtime HID FSK demodulator"},
|
{"hidfskdemod", CmdHIDdemodFSK, 0, "Realtime HID FSK demodulator"},
|
||||||
|
|
|
@ -34,12 +34,13 @@ void dbp(char *str, ...)
|
||||||
int GraphBuffer[MAX_GRAPH_TRACE_LEN];
|
int GraphBuffer[MAX_GRAPH_TRACE_LEN];
|
||||||
int GraphTraceLen;
|
int GraphTraceLen;
|
||||||
|
|
||||||
HPEN GreyPen, GreenPen, WhitePen, YellowPen;
|
HPEN GreyPenLite, GreyPen, GreenPen, WhitePen, YellowPen;
|
||||||
HBRUSH GreenBrush, YellowBrush;
|
HBRUSH GreenBrush, YellowBrush;
|
||||||
|
|
||||||
static int GraphStart = 0;
|
static int GraphStart = 0;
|
||||||
static double GraphPixelsPerPoint = 1;
|
static double GraphPixelsPerPoint = 1;
|
||||||
|
|
||||||
|
static int PlotGridX = 0, PlotGridY = 0;
|
||||||
static int CursorAPos;
|
static int CursorAPos;
|
||||||
static int CursorBPos;
|
static int CursorBPos;
|
||||||
double CursorScaleFactor = 1.0;
|
double CursorScaleFactor = 1.0;
|
||||||
|
@ -61,11 +62,17 @@ static HFONT MyFixedFont;
|
||||||
|
|
||||||
void ExecCmd(char *cmd)
|
void ExecCmd(char *cmd)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int CommandFinished;
|
int CommandFinished;
|
||||||
int offset = 64;
|
int offset = 64;
|
||||||
|
|
||||||
|
void SetGraphGrid(int x, int y)
|
||||||
|
{
|
||||||
|
PlotGridX = x;
|
||||||
|
PlotGridY = y;
|
||||||
|
}
|
||||||
|
|
||||||
static void ResizeCommandWindow(void)
|
static void ResizeCommandWindow(void)
|
||||||
{
|
{
|
||||||
int w, h;
|
int w, h;
|
||||||
|
@ -108,43 +115,63 @@ static LRESULT CALLBACK
|
||||||
|
|
||||||
static void PaintGraph(HDC hdc)
|
static void PaintGraph(HDC hdc)
|
||||||
{
|
{
|
||||||
|
RECT r;
|
||||||
HBRUSH brush;
|
HBRUSH brush;
|
||||||
HPEN pen;
|
HPEN pen;
|
||||||
|
char str[250];
|
||||||
|
int yMin = INT_MAX;
|
||||||
|
int yMax = INT_MIN;
|
||||||
|
int yMean = 0;
|
||||||
|
int startMax = 0;
|
||||||
|
int absYMax = 1;
|
||||||
|
int n = 0, i = 0;
|
||||||
|
|
||||||
brush = GreenBrush;
|
brush = GreenBrush;
|
||||||
pen = GreenPen;
|
pen = GreenPen;
|
||||||
|
|
||||||
if(GraphStart < 0) {
|
GetClientRect(GraphWindow, &r);
|
||||||
GraphStart = 0;
|
int zeroHeight = (r.top + r.bottom) >> 1;
|
||||||
|
|
||||||
|
// plot X and Y grid lines
|
||||||
|
if ((PlotGridX > 0) && ((PlotGridX * GraphPixelsPerPoint) > 1)) {
|
||||||
|
for(i = offset; i < r.right; i += (int)(PlotGridX * GraphPixelsPerPoint)) {
|
||||||
|
SelectObject(hdc, GreyPenLite);
|
||||||
|
MoveToEx(hdc, r.left + i, r.top, NULL);
|
||||||
|
LineTo(hdc, r.left + i, r.bottom);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RECT r;
|
if ((PlotGridY > 0) && ((PlotGridY * GraphPixelsPerPoint) > 1)){
|
||||||
GetClientRect(GraphWindow, &r);
|
for(i = 0; i < ((r.top + r.bottom)>>1); i += (int)(PlotGridY * GraphPixelsPerPoint)) {
|
||||||
|
SelectObject(hdc, GreyPenLite);
|
||||||
|
MoveToEx(hdc, r.left, zeroHeight + i, NULL);
|
||||||
|
LineTo(hdc, r.right, zeroHeight + i);
|
||||||
|
MoveToEx(hdc, r.left, zeroHeight - i, NULL);
|
||||||
|
LineTo(hdc, r.right, zeroHeight - i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// print vertical separator white line on the left of the window
|
||||||
SelectObject(hdc, WhitePen);
|
SelectObject(hdc, WhitePen);
|
||||||
|
|
||||||
MoveToEx(hdc, r.left + offset, r.top, NULL);
|
MoveToEx(hdc, r.left + offset, r.top, NULL);
|
||||||
LineTo(hdc, r.left + offset, r.bottom);
|
LineTo(hdc, r.left + offset, r.bottom);
|
||||||
|
|
||||||
int zeroHeight = r.top + (r.bottom - r.top) / 2;
|
// print horizontal grey zero axis line
|
||||||
SelectObject(hdc, GreyPen);
|
SelectObject(hdc, GreyPen);
|
||||||
MoveToEx(hdc, r.left, zeroHeight, NULL);
|
MoveToEx(hdc, r.left, zeroHeight, NULL);
|
||||||
LineTo(hdc, r.right, zeroHeight);
|
LineTo(hdc, r.right, zeroHeight);
|
||||||
|
|
||||||
int startMax =
|
startMax = (GraphTraceLen - (int)((r.right - r.left - offset) / GraphPixelsPerPoint));
|
||||||
(GraphTraceLen - (int)((r.right - r.left - offset) / GraphPixelsPerPoint));
|
// check boundaries
|
||||||
if(startMax < 0) {
|
if(startMax < 0) startMax = 0;
|
||||||
startMax = 0;
|
if(GraphStart > startMax) GraphStart = startMax;
|
||||||
}
|
if(GraphStart < 0) GraphStart = 0;
|
||||||
if(GraphStart > startMax) {
|
|
||||||
GraphStart = startMax;
|
|
||||||
}
|
|
||||||
|
|
||||||
int absYMax = 1;
|
|
||||||
|
|
||||||
SelectObject(hdc, pen);
|
SelectObject(hdc, pen);
|
||||||
|
|
||||||
int i;
|
// go over the portion of the graph to be displayed and find the largest
|
||||||
|
// absolute value which will be used to auto scale the graph when displayed
|
||||||
for(i = GraphStart; ; i++) {
|
for(i = GraphStart; ; i++) {
|
||||||
if(i >= GraphTraceLen) {
|
if(i >= GraphTraceLen) {
|
||||||
break;
|
break;
|
||||||
|
@ -174,11 +201,7 @@ static void PaintGraph(HDC hdc)
|
||||||
if(pointsPerLabel <= 0) pointsPerLabel = 1;
|
if(pointsPerLabel <= 0) pointsPerLabel = 1;
|
||||||
pointsPerLabel = (int)pow(2.0,pointsPerLabel);
|
pointsPerLabel = (int)pow(2.0,pointsPerLabel);
|
||||||
|
|
||||||
int yMin = INT_MAX;
|
// go over the graph and plot samples and labels
|
||||||
int yMax = INT_MIN;
|
|
||||||
int yMean = 0;
|
|
||||||
int n = 0;
|
|
||||||
|
|
||||||
for(i = GraphStart; ; i++) {
|
for(i = GraphStart; ; i++) {
|
||||||
if(i >= GraphTraceLen) {
|
if(i >= GraphTraceLen) {
|
||||||
break;
|
break;
|
||||||
|
@ -189,12 +212,8 @@ static void PaintGraph(HDC hdc)
|
||||||
}
|
}
|
||||||
|
|
||||||
int y = GraphBuffer[i];
|
int y = GraphBuffer[i];
|
||||||
if(y < yMin) {
|
if(y < yMin) yMin = y;
|
||||||
yMin = y;
|
if(y > yMax) yMax = y;
|
||||||
}
|
|
||||||
if(y > yMax) {
|
|
||||||
yMax = y;
|
|
||||||
}
|
|
||||||
yMean += y;
|
yMean += y;
|
||||||
n++;
|
n++;
|
||||||
|
|
||||||
|
@ -214,13 +233,13 @@ static void PaintGraph(HDC hdc)
|
||||||
FillRect(hdc, &f, brush);
|
FillRect(hdc, &f, brush);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// plot labels
|
||||||
if(((i - GraphStart) % pointsPerLabel == 0) && i != GraphStart) {
|
if(((i - GraphStart) % pointsPerLabel == 0) && i != GraphStart) {
|
||||||
SelectObject(hdc, WhitePen);
|
SelectObject(hdc, WhitePen);
|
||||||
MoveToEx(hdc, x, zeroHeight - 8, NULL);
|
MoveToEx(hdc, x, zeroHeight - 8, NULL);
|
||||||
LineTo(hdc, x, zeroHeight + 8);
|
LineTo(hdc, x, zeroHeight + 8);
|
||||||
|
|
||||||
char str[100];
|
sprintf(str, "+%d", i);
|
||||||
sprintf(str, "+%d", (i - GraphStart));
|
|
||||||
SIZE size;
|
SIZE size;
|
||||||
GetTextExtentPoint32(hdc, str, strlen(str), &size);
|
GetTextExtentPoint32(hdc, str, strlen(str), &size);
|
||||||
TextOut(hdc, x - size.cx, zeroHeight + 8, str, strlen(str));
|
TextOut(hdc, x - size.cx, zeroHeight + 8, str, strlen(str));
|
||||||
|
@ -229,6 +248,7 @@ static void PaintGraph(HDC hdc)
|
||||||
MoveToEx(hdc, x, y, NULL);
|
MoveToEx(hdc, x, y, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// plot measurement cursors
|
||||||
if(i == CursorAPos || i == CursorBPos) {
|
if(i == CursorAPos || i == CursorBPos) {
|
||||||
if(i == CursorAPos) {
|
if(i == CursorAPos) {
|
||||||
SelectObject(hdc, CursorAPen);
|
SelectObject(hdc, CursorAPen);
|
||||||
|
@ -247,8 +267,7 @@ static void PaintGraph(HDC hdc)
|
||||||
yMean /= n;
|
yMean /= n;
|
||||||
}
|
}
|
||||||
|
|
||||||
char str[200];
|
// print misc information at bottom of graph window
|
||||||
|
|
||||||
sprintf(str, "@%d max=%d min=%d mean=%d n=%d/%d dt=%d [%.3f] zoom=%.3f CursorA=%d [%d] CursorB=%d [%d]",
|
sprintf(str, "@%d max=%d min=%d mean=%d n=%d/%d dt=%d [%.3f] zoom=%.3f CursorA=%d [%d] CursorB=%d [%d]",
|
||||||
GraphStart, yMax, yMin, yMean, n, GraphTraceLen,
|
GraphStart, yMax, yMin, yMean, n, GraphTraceLen,
|
||||||
CursorBPos - CursorAPos, (CursorBPos - CursorAPos)/CursorScaleFactor, GraphPixelsPerPoint,
|
CursorBPos - CursorAPos, (CursorBPos - CursorAPos)/CursorScaleFactor, GraphPixelsPerPoint,
|
||||||
|
@ -438,6 +457,7 @@ void ShowGui()
|
||||||
PrintToScrollback(">> Started prox, built " __DATE__ " " __TIME__);
|
PrintToScrollback(">> Started prox, built " __DATE__ " " __TIME__);
|
||||||
PrintToScrollback(">> Connected to device");
|
PrintToScrollback(">> Connected to device");
|
||||||
|
|
||||||
|
GreyPenLite = CreatePen(PS_SOLID, 1, RGB(50, 50, 50));
|
||||||
GreyPen = CreatePen(PS_SOLID, 1, RGB(100, 100, 100));
|
GreyPen = CreatePen(PS_SOLID, 1, RGB(100, 100, 100));
|
||||||
GreenPen = CreatePen(PS_SOLID, 1, RGB(100, 255, 100));
|
GreenPen = CreatePen(PS_SOLID, 1, RGB(100, 255, 100));
|
||||||
YellowPen = CreatePen(PS_SOLID, 1, RGB(255, 255, 0));
|
YellowPen = CreatePen(PS_SOLID, 1, RGB(255, 255, 0));
|
||||||
|
|
|
@ -13,6 +13,7 @@ void ShowGui();
|
||||||
void HideGraphWindow(void);
|
void HideGraphWindow(void);
|
||||||
void ShowGraphWindow(void);
|
void ShowGraphWindow(void);
|
||||||
void RepaintGraphWindow(void);
|
void RepaintGraphWindow(void);
|
||||||
|
void SetGraphGrid(int x, int y);
|
||||||
void PrintToScrollback(char *fmt, ...);
|
void PrintToScrollback(char *fmt, ...);
|
||||||
#define MAX_GRAPH_TRACE_LEN (1024*128)
|
#define MAX_GRAPH_TRACE_LEN (1024*128)
|
||||||
extern int GraphBuffer[MAX_GRAPH_TRACE_LEN];
|
extern int GraphBuffer[MAX_GRAPH_TRACE_LEN];
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue