]> git.zerfleddert.de Git - proxmark3-svn/blob - linux/proxmark3.c
Initial commit for the firmware. Used the 20090306_ela version as baseline.
[proxmark3-svn] / linux / proxmark3.c
1 #include <usb.h>
2 #include <stdio.h>
3 #include <unistd.h>
4 #include <stdlib.h>
5 #include <strings.h>
6 #include <string.h>
7 #include <errno.h>
8 #include <readline/readline.h>
9 #include <readline/history.h>
10 #include <pthread.h>
11
12 #include "translate.h"
13 #include "../winsrc/prox.h"
14 #include "proxmark3.h"
15 #include "proxgui.h"
16
17 struct usb_receiver_arg {
18 int run;
19 };
20
21 static void *usb_receiver(void *targ) {
22 struct usb_receiver_arg *arg = (struct usb_receiver_arg*)targ;
23 UsbCommand cmdbuf;
24
25 while(arg->run) {
26 if (ReceiveCommandP(&cmdbuf) > 0) {
27 int i;
28
29 for (i=0; i<strlen(PROXPROMPT); i++)
30 putchar(0x08);
31
32 UsbCommandReceived(&cmdbuf);
33 printf(PROXPROMPT);
34 fflush(NULL);
35 }
36 }
37
38 pthread_exit(NULL);
39 }
40
41 static void *main_loop(void *targ)
42 {
43 char *cmd = NULL;
44
45 while(1) {
46 struct usb_receiver_arg rarg;
47 pthread_t reader_thread;
48
49 rarg.run=1;
50 pthread_create(&reader_thread, NULL, &usb_receiver, &rarg);
51
52 cmd = readline(PROXPROMPT);
53 rarg.run=0;
54 pthread_join(reader_thread, NULL);
55
56 if (cmd) {
57 if (cmd[0] != 0x00) {
58 CommandReceived(cmd);
59 add_history(cmd);
60 }
61 free(cmd);
62 } else {
63 printf("\n");
64 break;
65 }
66 }
67
68 ExitGraphics();
69 pthread_exit(NULL);
70 }
71
72 int main(int argc, char **argv)
73 {
74 pthread_t main_loop_t;
75 usb_init();
76
77 if (!(devh = OpenProxmark(1))) {
78 fprintf(stderr,"PROXMARK3: NOT FOUND!\n");
79 exit(1);
80 }
81
82 pthread_create(&main_loop_t, NULL, &main_loop, NULL);
83 InitGraphics(argc, argv);
84
85 MainGraphics();
86
87 pthread_join(main_loop_t, NULL);
88
89 CloseProxmark();
90 return 0;
91 }
Impressum, Datenschutz