X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/6658905f18a1eebc148836f26c731dea9c1377dc..17465c9edd8e350baabda98c92fc9a0284df9631:/linux/proxmark3.c?ds=inline

diff --git a/linux/proxmark3.c b/linux/proxmark3.c
index 5a3d6f2d..2839db93 100644
--- a/linux/proxmark3.c
+++ b/linux/proxmark3.c
@@ -18,6 +18,10 @@ struct usb_receiver_arg {
 	int run;
 };
 
+struct main_loop_arg {
+	int usb_present;
+};
+
 static void *usb_receiver(void *targ) {
 	struct usb_receiver_arg *arg = (struct usb_receiver_arg*)targ;
 	UsbCommand cmdbuf;
@@ -40,6 +44,7 @@ static void *usb_receiver(void *targ) {
 
 static void *main_loop(void *targ)
 {
+	struct main_loop_arg *arg = (struct main_loop_arg*)targ;
 	char *cmd = NULL;
 
 	while(1) {
@@ -47,11 +52,14 @@ static void *main_loop(void *targ)
 		pthread_t reader_thread;
 
 		rarg.run=1;
-		pthread_create(&reader_thread, NULL, &usb_receiver, &rarg);
-
+		if (arg->usb_present == 1) {
+			pthread_create(&reader_thread, NULL, &usb_receiver, &rarg);
+		}
 		cmd = readline(PROXPROMPT);
 		rarg.run=0;
-		pthread_join(reader_thread, NULL);
+		if (arg->usb_present == 1) {
+			pthread_join(reader_thread, NULL);
+		}
 
 		if (cmd) {
 			if (cmd[0] != 0x00) {
@@ -71,21 +79,28 @@ static void *main_loop(void *targ)
 
 int main(int argc, char **argv)
 {
+	struct main_loop_arg marg;
 	pthread_t main_loop_t;
 	usb_init();
 
 	if (!(devh = OpenProxmark(1))) {
 		fprintf(stderr,"PROXMARK3: NOT FOUND!\n");
-		exit(1);
+		marg.usb_present = 0;
+		offline = 1;
+	} else {
+		marg.usb_present = 1;
+		offline = 0;
 	}
 
-	pthread_create(&main_loop_t, NULL, &main_loop, NULL);
+	pthread_create(&main_loop_t, NULL, &main_loop, &marg);
 	InitGraphics(argc, argv);
 
 	MainGraphics();
 
 	pthread_join(main_loop_t, NULL);
 
-	CloseProxmark();
+	if (marg.usb_present == 1) {
+		CloseProxmark();
+	}
 	return 0;
 }