]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - client/proxmark3.c
fix WaitForResponse (without timeout)
[proxmark3-svn] / client / proxmark3.c
index 6587bcff6508a1fe6ff05d568a3cead7d22f6557..fb17d13d13ce94501a35cb3f14145504ce6b5868 100644 (file)
@@ -9,6 +9,8 @@
 // Main binary
 //-----------------------------------------------------------------------------
 
 // Main binary
 //-----------------------------------------------------------------------------
 
+#include "proxmark3.h"
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <readline/readline.h>
 #include <readline/history.h>
 
 #include <readline/readline.h>
 #include <readline/history.h>
 
-#include "proxmark3.h"
 #include "util_posix.h"
 #include "proxgui.h"
 #include "cmdmain.h"
 #include "util_posix.h"
 #include "proxgui.h"
 #include "cmdmain.h"
-#include "uart.h"
 #include "ui.h"
 #include "util.h"
 #include "cmdparser.h"
 #include "cmdhw.h"
 #include "whereami.h"
 #include "ui.h"
 #include "util.h"
 #include "cmdparser.h"
 #include "cmdhw.h"
 #include "whereami.h"
-
+#include "comms.h"
+#include "uart.h"
 
 void
 #ifdef __has_attribute
 
 void
 #ifdef __has_attribute
@@ -36,24 +37,19 @@ __attribute__((force_align_arg_pointer))
 #endif
 #endif
 main_loop(char *script_cmds_file, char *script_cmd, bool usb_present) {
 #endif
 #endif
 main_loop(char *script_cmds_file, char *script_cmd, bool usb_present) {
-       receiver_arg conn;
        char *cmd = NULL;
        char *cmd = NULL;
-       pthread_t reader_thread;
        bool execCommand = (script_cmd != NULL);
        bool stdinOnPipe = !isatty(STDIN_FILENO);
 
        bool execCommand = (script_cmd != NULL);
        bool stdinOnPipe = !isatty(STDIN_FILENO);
 
-       memset(&conn, 0, sizeof(receiver_arg));
-
        if (usb_present) {
        if (usb_present) {
-               conn.run = true;
                SetOffline(false);
                SetOffline(false);
-               pthread_create(&reader_thread, NULL, &uart_receiver, &conn);
                // cache Version information now:
                CmdVersion(NULL);
        } else {
                SetOffline(true);
        }
 
                // cache Version information now:
                CmdVersion(NULL);
        } else {
                SetOffline(true);
        }
 
+
        // file with script
        FILE *script_file = NULL;
        char script_cmd_buf[256] = {0};  // iceman, needs lua script the same file_path_buffer as the rest
        // file with script
        FILE *script_file = NULL;
        char script_cmd_buf[256] = {0};  // iceman, needs lua script the same file_path_buffer as the rest
@@ -137,11 +133,6 @@ main_loop(char *script_cmds_file, char *script_cmd, bool usb_present) {
        }
 
        write_history(".history");
        }
 
        write_history(".history");
-  
-       if (usb_present) {
-               conn.run = false;
-               pthread_join(reader_thread, NULL);
-       }
        
        if (script_file) {
                fclose(script_file);
        
        if (script_file) {
                fclose(script_file);
@@ -293,33 +284,9 @@ int main(int argc, char* argv[]) {
        
        // set global variables
        set_my_executable_path();
        
        // set global variables
        set_my_executable_path();
-       
-       // open uart
-       if (!waitCOMPort) {
-               sp = uart_open(argv[1]);
-       } else {
-               printf("Waiting for Proxmark to appear on %s ", argv[1]);
-               fflush(stdout);
-               int openCount = 0;
-               do {
-                       sp = uart_open(argv[1]);
-                       msleep(1000);
-                       printf(".");
-                       fflush(stdout);
-               } while(++openCount < 20 && (sp == INVALID_SERIAL_PORT || sp == CLAIMED_SERIAL_PORT));
-               printf("\n");
-       }
 
 
-       // check result of uart opening
-       if (sp == INVALID_SERIAL_PORT) {
-               printf("ERROR: invalid serial port\n");
-               usb_present = false;
-       } else if (sp == CLAIMED_SERIAL_PORT) {
-               printf("ERROR: serial port is claimed by another process\n");
-               usb_present = false;
-       } else {
-               usb_present = true;
-       }
+       // try to open USB connection to Proxmark
+       usb_present = OpenProxmark(argv[1], waitCOMPort, 20);
 
 #ifdef HAVE_GUI
 #ifdef _WIN32
 
 #ifdef HAVE_GUI
 #ifdef _WIN32
@@ -342,9 +309,11 @@ int main(int argc, char* argv[]) {
        main_loop(script_cmds_file, script_cmd, usb_present);
 #endif 
 
        main_loop(script_cmds_file, script_cmd, usb_present);
 #endif 
 
-       // Clean up the port
+       // Switch off field and clean up the port
        if (usb_present) {
        if (usb_present) {
-               uart_close(sp);
+               UsbCommand c = {CMD_FPGA_MAJOR_MODE_OFF};
+               SendCommand(&c);
+               CloseProxmark();
        }
 
        exit(0);
        }
 
        exit(0);
Impressum, Datenschutz