]> git.zerfleddert.de Git - proxmark3-svn/commitdiff
maybe fixed loading/unloading bug.
authormarshmellow42 <marshmellowrf@gmail.com>
Fri, 14 Apr 2017 13:53:36 +0000 (09:53 -0400)
committermarshmellow42 <marshmellowrf@gmail.com>
Fri, 14 Apr 2017 13:53:36 +0000 (09:53 -0400)
client/proxgui.cpp
client/proxgui.h
client/proxguiqt.cpp
client/proxguiqt.h
client/proxmark3.c
client/ui.h

index 12faab79cd3d7eb002d50b2dd53b06ce34989913..7dcb0da0fec3cbe8765049d6ca69a2af40c3fa0f 100644 (file)
@@ -63,6 +63,7 @@ extern "C" void ExitGraphics(void)
   if (!gui)
     return;
 
   if (!gui)
     return;
 
-  delete gui;
+  gui->Exit();
+  //delete gui;
   gui = NULL;
 }
   gui = NULL;
 }
index de6dd6c2386879180264f7e6fd00d77448965588..846ac45d2add13e69cdb43a0a71e5de088c260f9 100644 (file)
@@ -45,6 +45,7 @@ extern uint8_t DemodBuffer[MAX_DEMOD_BUF_LEN];
 extern size_t DemodBufferLen;
 extern size_t g_DemodStartIdx;
 extern bool showDemod;
 extern size_t DemodBufferLen;
 extern size_t g_DemodStartIdx;
 extern bool showDemod;
+extern uint8_t g_debugMode;
 
 #ifdef __cplusplus
 }
 
 #ifdef __cplusplus
 }
index c1541999265ec80786f23f90e91e03606c80df70..d81c8108e2a47dcdcfcb048095546d8e19268768 100644 (file)
@@ -23,7 +23,6 @@
 #include <QSlider>
 #include <QHBoxLayout>
 #include <string.h>
 #include <QSlider>
 #include <QHBoxLayout>
 #include <string.h>
-#include "proxguiqt.h"
 #include "proxgui.h"
 #include <QtGui>
 //#include <ctime>
 #include "proxgui.h"
 #include <QtGui>
 //#include <ctime>
@@ -47,6 +46,11 @@ void ProxGuiQT::HideGraphWindow(void)
        emit HideGraphWindowSignal();
 }
 
        emit HideGraphWindowSignal();
 }
 
+void ProxGuiQT::Exit(void)
+{
+       emit ExitSignal();
+}
+
 void ProxGuiQT::_ShowGraphWindow(void)
 {
        if(!plotapp)
 void ProxGuiQT::_ShowGraphWindow(void)
 {
        if(!plotapp)
@@ -74,6 +78,9 @@ void ProxGuiQT::_HideGraphWindow(void)
        plotwidget->hide();
 }
 
        plotwidget->hide();
 }
 
+void ProxGuiQT::_Exit(void) {
+       delete this;
+}
 void ProxGuiQT::MainLoop()
 {
        plotapp = new QApplication(argc, argv);
 void ProxGuiQT::MainLoop()
 {
        plotapp = new QApplication(argc, argv);
@@ -81,6 +88,7 @@ void ProxGuiQT::MainLoop()
        connect(this, SIGNAL(ShowGraphWindowSignal()), this, SLOT(_ShowGraphWindow()));
        connect(this, SIGNAL(RepaintGraphWindowSignal()), this, SLOT(_RepaintGraphWindow()));
        connect(this, SIGNAL(HideGraphWindowSignal()), this, SLOT(_HideGraphWindow()));
        connect(this, SIGNAL(ShowGraphWindowSignal()), this, SLOT(_ShowGraphWindow()));
        connect(this, SIGNAL(RepaintGraphWindowSignal()), this, SLOT(_RepaintGraphWindow()));
        connect(this, SIGNAL(HideGraphWindowSignal()), this, SLOT(_HideGraphWindow()));
+       connect(this, SIGNAL(ExitSignal()), this, SLOT(_Exit()));
 
        plotapp->exec();
 }
 
        plotapp->exec();
 }
@@ -92,12 +100,11 @@ ProxGuiQT::ProxGuiQT(int argc, char **argv) : plotapp(NULL), plotwidget(NULL),
 
 ProxGuiQT::~ProxGuiQT(void)
 {
 
 ProxGuiQT::~ProxGuiQT(void)
 {
-       if (plotwidget) {
-               //plotwidget->close();
-               delete plotwidget;
-               plotwidget = NULL;
-       }
-
+       //if (plotwidget) {
+               //plotwidget->destroy(true,true);
+       //      delete plotwidget;
+       //      plotwidget = NULL;
+       //}
        if (plotapp) {
                plotapp->quit();
                delete plotapp;
        if (plotapp) {
                plotapp->quit();
                delete plotapp;
@@ -108,22 +115,21 @@ ProxGuiQT::~ProxGuiQT(void)
 //--------------------
 void ProxWidget::applyOperation()
 {
 //--------------------
 void ProxWidget::applyOperation()
 {
-       printf("ApplyOperation()");
+       //printf("ApplyOperation()");
        save_restoreGB(1);
        memcpy(GraphBuffer, s_Buff, sizeof(int) * GraphTraceLen);
        RepaintGraphWindow();
        save_restoreGB(1);
        memcpy(GraphBuffer, s_Buff, sizeof(int) * GraphTraceLen);
        RepaintGraphWindow();
-
 }
 void ProxWidget::stickOperation()
 {
        save_restoreGB(0);
 }
 void ProxWidget::stickOperation()
 {
        save_restoreGB(0);
-       printf("stickOperation()");
+       //printf("stickOperation()");
 }
 void ProxWidget::vchange_autocorr(int v)
 {
        int ans;
        ans = AutoCorrelate(GraphBuffer, s_Buff, GraphTraceLen, v, true, false);
 }
 void ProxWidget::vchange_autocorr(int v)
 {
        int ans;
        ans = AutoCorrelate(GraphBuffer, s_Buff, GraphTraceLen, v, true, false);
-       printf("vchange_autocorr(w:%d): %d\n", v, ans);
+       if (g_debugMode) printf("vchange_autocorr(w:%d): %d\n", v, ans);
        RepaintGraphWindow();
 }
 void ProxWidget::vchange_askedge(int v)
        RepaintGraphWindow();
 }
 void ProxWidget::vchange_askedge(int v)
@@ -131,20 +137,20 @@ void ProxWidget::vchange_askedge(int v)
        int ans;
        //extern int AskEdgeDetect(const int *in, int *out, int len, int threshold);
        ans = AskEdgeDetect(GraphBuffer, s_Buff, GraphTraceLen, v);
        int ans;
        //extern int AskEdgeDetect(const int *in, int *out, int len, int threshold);
        ans = AskEdgeDetect(GraphBuffer, s_Buff, GraphTraceLen, v);
-       printf("vchange_askedge(w:%d)\n", v);
+       if (g_debugMode) printf("vchange_askedge(w:%d)%d\n", v, ans);
        RepaintGraphWindow();
 }
 void ProxWidget::vchange_dthr_up(int v)
 {
        int down = opsController->horizontalSlider_dirthr_down->value();
        directionalThreshold(GraphBuffer, s_Buff, GraphTraceLen, v, down);
        RepaintGraphWindow();
 }
 void ProxWidget::vchange_dthr_up(int v)
 {
        int down = opsController->horizontalSlider_dirthr_down->value();
        directionalThreshold(GraphBuffer, s_Buff, GraphTraceLen, v, down);
-       printf("vchange_dthr_up(%d)", v);
+       //printf("vchange_dthr_up(%d)", v);
        RepaintGraphWindow();
 
 }
 void ProxWidget::vchange_dthr_down(int v)
 {
        RepaintGraphWindow();
 
 }
 void ProxWidget::vchange_dthr_down(int v)
 {
-       printf("vchange_dthr_down(%d)", v);
+       //printf("vchange_dthr_down(%d)", v);
        int up = opsController->horizontalSlider_dirthr_up->value();
        directionalThreshold(GraphBuffer,s_Buff, GraphTraceLen, v, up);
        RepaintGraphWindow();
        int up = opsController->horizontalSlider_dirthr_up->value();
        directionalThreshold(GraphBuffer,s_Buff, GraphTraceLen, v, up);
        RepaintGraphWindow();
@@ -157,7 +163,7 @@ ProxWidget::ProxWidget(QWidget *parent, ProxGuiQT *master) : QWidget(parent)
 
        /** Setup the controller widget **/
 
 
        /** Setup the controller widget **/
 
-       QWidget* controlWidget = new QWidget();
+       controlWidget = new QWidget();
        opsController = new Ui::Form();
        opsController->setupUi(controlWidget);
        //Due to quirks in QT Designer, we need to fiddle a bit
        opsController = new Ui::Form();
        opsController->setupUi(controlWidget);
        //Due to quirks in QT Designer, we need to fiddle a bit
@@ -189,9 +195,43 @@ ProxWidget::ProxWidget(QWidget *parent, ProxGuiQT *master) : QWidget(parent)
        //layout->addWidget(slider);
        layout->addWidget(plot);
        setLayout(layout);
        //layout->addWidget(slider);
        layout->addWidget(plot);
        setLayout(layout);
-       printf("Proxwidget Constructor just set layout\r\n");
+       //printf("Proxwidget Constructor just set layout\r\n");
 }
 
 }
 
+// not 100% sure what i need in this block
+// feel free to fix - marshmellow...
+ProxWidget::~ProxWidget(void)
+{
+       if (controlWidget) {
+               controlWidget->close();
+               delete controlWidget;
+               controlWidget = NULL;
+       }
+
+       if (opsController) {
+               delete opsController;
+               opsController = NULL;
+       }
+
+       if (plot) {
+               plot->close();
+               delete plot;
+               plot = NULL;
+       }
+}
+void ProxWidget::closeEvent(QCloseEvent *event)
+{
+       event->ignore();
+       this->hide();
+}
+void ProxWidget::hideEvent(QHideEvent *event) {
+       controlWidget->hide();
+       plot->hide();
+}
+void ProxWidget::showEvent(QShowEvent *event) {
+       controlWidget->show();
+       plot->show();
+}
 
 //----------- Plotting
 
 
 //----------- Plotting
 
@@ -242,7 +282,7 @@ void Plot::PlotDemod(uint8_t *buffer, size_t len, QRect plotRect, QRect annotati
        // round down
        if (DemodStart-plotOffset > 0) BitStart = (int)(((DemodStart-plotOffset)+(PlotGridX-1))/PlotGridX)-1;
        first_delta_x += BitStart * PlotGridX;
        // round down
        if (DemodStart-plotOffset > 0) BitStart = (int)(((DemodStart-plotOffset)+(PlotGridX-1))/PlotGridX)-1;
        first_delta_x += BitStart * PlotGridX;
-       if (BitStart > len) return;
+       if (BitStart > (int)len) return;
        int delta_x = 0;
        int v = 0;
        //printf("first_delta_x %i, grid_delta_x %i, DemodStart %i, BitStart %i\n",first_delta_x,grid_delta_x,DemodStart, BitStart);
        int delta_x = 0;
        int v = 0;
        //printf("first_delta_x %i, grid_delta_x %i, DemodStart %i, BitStart %i\n",first_delta_x,grid_delta_x,DemodStart, BitStart);
@@ -255,8 +295,8 @@ void Plot::PlotDemod(uint8_t *buffer, size_t len, QRect plotRect, QRect annotati
        penPath.moveTo(x, y);
        delta_x = 0;
        int clk = first_delta_x;
        penPath.moveTo(x, y);
        delta_x = 0;
        int clk = first_delta_x;
-       for(int i = BitStart; i < len && xCoordOf(delta_x+DemodStart, plotRect) < plotRect.right(); i++) {
-               for (int ii = 0; ii < (clk) && i < len && xCoordOf(DemodStart+delta_x+ii, plotRect) < plotRect.right() ; ii++ ) {
+       for(int i = BitStart; i < (int)len && xCoordOf(delta_x+DemodStart, plotRect) < plotRect.right(); i++) {
+               for (int ii = 0; ii < (clk) && i < (int)len && xCoordOf(DemodStart+delta_x+ii, plotRect) < plotRect.right() ; ii++ ) {
                        x = xCoordOf(DemodStart+delta_x+ii, plotRect);
                        v = buffer[i]*200-100;
 
                        x = xCoordOf(DemodStart+delta_x+ii, plotRect);
                        v = buffer[i]*200-100;
 
@@ -407,8 +447,6 @@ void Plot::plotGridLines(QPainter* painter,QRect r)
 void Plot::paintEvent(QPaintEvent *event)
 {
        QPainter painter(this);
 void Plot::paintEvent(QPaintEvent *event)
 {
        QPainter painter(this);
-       //QPainterPath penPath, whitePath, greyPath, lightgreyPath, cursorAPath, cursorBPath, cursorCPath, cursorDPath;
-       //QRect r;
        QBrush brush(QColor(100, 255, 100));
        QPen pen(QColor(100, 255, 100));
 
        QBrush brush(QColor(100, 255, 100));
        QPen pen(QColor(100, 255, 100));
 
index fa1ba018d756874da56182ce6658e8c53e3798bb..aa3b5b355e55ee03caeca0f4c84bc377b5a7d244 100644 (file)
@@ -8,6 +8,9 @@
 // GUI (QT)
 //-----------------------------------------------------------------------------
 
 // GUI (QT)
 //-----------------------------------------------------------------------------
 
+#ifndef PROXGUI_QT
+#define PROXGUI_QT
+
 #include <QApplication>
 #include <QPushButton>
 #include <QObject>
 #include <QApplication>
 #include <QPushButton>
 #include <QObject>
@@ -51,19 +54,24 @@ class ProxGuiQT;
  */
 class ProxWidget : public QWidget
 {
  */
 class ProxWidget : public QWidget
 {
-       Q_OBJECT;
+       Q_OBJECT; //needed for slot/signal classes
 
        private:
 
        private:
+               ProxGuiQT *master;
                Plot *plot;
                Ui::Form *opsController;
                Plot *plot;
                Ui::Form *opsController;
-               ProxGuiQT *master;
-       
+               QWidget* controlWidget;
+
        public:
                ProxWidget(QWidget *parent = 0, ProxGuiQT *master = NULL);
        public:
                ProxWidget(QWidget *parent = 0, ProxGuiQT *master = NULL);
+               ~ProxWidget(void);
+               //OpsShow(void);
 
 
-       //protected:
+       protected:
        //      void paintEvent(QPaintEvent *event);
        //      void paintEvent(QPaintEvent *event);
-       //      void closeEvent(QCloseEvent *event);
+               void closeEvent(QCloseEvent *event);
+               void showEvent(QShowEvent *event);
+               void hideEvent(QHideEvent *event);
        //      void mouseMoveEvent(QMouseEvent *event);
        //      void mousePressEvent(QMouseEvent *event) { mouseMoveEvent(event); }
        //      void keyPressEvent(QKeyEvent *event);
        //      void mouseMoveEvent(QMouseEvent *event);
        //      void mousePressEvent(QMouseEvent *event) { mouseMoveEvent(event); }
        //      void keyPressEvent(QKeyEvent *event);
@@ -94,14 +102,16 @@ class ProxGuiQT : public QObject
                void RepaintGraphWindow(void);
                void HideGraphWindow(void);
                void MainLoop(void);
                void RepaintGraphWindow(void);
                void HideGraphWindow(void);
                void MainLoop(void);
-       
+               void Exit(void);
        private slots:
                void _ShowGraphWindow(void);
                void _RepaintGraphWindow(void);
                void _HideGraphWindow(void);
        private slots:
                void _ShowGraphWindow(void);
                void _RepaintGraphWindow(void);
                void _HideGraphWindow(void);
-
+               void _Exit(void);
        signals:
                void ShowGraphWindowSignal(void);
                void RepaintGraphWindowSignal(void);
                void HideGraphWindowSignal(void);
        signals:
                void ShowGraphWindowSignal(void);
                void RepaintGraphWindowSignal(void);
                void HideGraphWindowSignal(void);
+               void ExitSignal(void);
 };
 };
+#endif // PROXGUI_QT
index 98f7880e3bc6d35116618f5085c36466ae31a9c9..d00af5ccb1ad9d75a4d9ec37b37ae1e99d34ec06 100644 (file)
@@ -102,7 +102,7 @@ static void *main_loop(void *targ) {
        struct receiver_arg rarg;
        char *cmd = NULL;
        pthread_t reader_thread;
        struct receiver_arg rarg;
        char *cmd = NULL;
        pthread_t reader_thread;
-  
+
        if (arg->usb_present == 1) {
                rarg.run = 1;
                pthread_create(&reader_thread, NULL, &uart_receiver, &rarg);
        if (arg->usb_present == 1) {
                rarg.run = 1;
                pthread_create(&reader_thread, NULL, &uart_receiver, &rarg);
@@ -175,13 +175,13 @@ static void *main_loop(void *targ) {
                rarg.run = 0;
                pthread_join(reader_thread, NULL);
        }
                rarg.run = 0;
                pthread_join(reader_thread, NULL);
        }
-
+       
+       ExitGraphics();
+       
        if (script_file) {
                fclose(script_file);
                script_file = NULL;
        }
        if (script_file) {
                fclose(script_file);
                script_file = NULL;
        }
-
-       ExitGraphics();
        pthread_exit(NULL);
        return NULL;
 }
        pthread_exit(NULL);
        return NULL;
 }
@@ -254,7 +254,7 @@ int main(int argc, char* argv[]) {
                .usb_present = 0,
                .script_cmds_file = NULL
        };
                .usb_present = 0,
                .script_cmds_file = NULL
        };
-       pthread_t main_loop_threat;
+       pthread_t main_loop_thread;
 
   
        sp = uart_open(argv[1]);
 
   
        sp = uart_open(argv[1]);
@@ -288,13 +288,16 @@ int main(int argc, char* argv[]) {
 
        // create a mutex to avoid interlacing print commands from our different threads
        pthread_mutex_init(&print_lock, NULL);
 
        // create a mutex to avoid interlacing print commands from our different threads
        pthread_mutex_init(&print_lock, NULL);
+       pthread_create(&main_loop_thread, NULL, &main_loop, &marg);
 
 
-       pthread_create(&main_loop_threat, NULL, &main_loop, &marg);
+       // build ui/graph forms on separate thread (killed on main_loop_thread);
        InitGraphics(argc, argv);
        InitGraphics(argc, argv);
-
        MainGraphics();
        MainGraphics();
+       //this won't return until ExitGraphics() is called
 
 
-       pthread_join(main_loop_threat, NULL);
+       //wait for thread to finish
+       pthread_join(main_loop_thread, NULL);
+       
 
        // Clean up the port
        if (offline == 0) {
 
        // Clean up the port
        if (offline == 0) {
index 5aaac17e9fd5835866337b6e646a24d851500726..4049033d60b01bac36cb1d3af191d784d00ac093 100644 (file)
@@ -12,6 +12,7 @@
 #define UI_H__
 
 #include <stdbool.h>
 #define UI_H__
 
 #include <stdbool.h>
+#include <stdint.h>
 
 void ShowGui(void);
 void HideGraphWindow(void);
 
 void ShowGui(void);
 void HideGraphWindow(void);
Impressum, Datenschutz