@@ -34,15 +34,6 @@ unsigned int current_command = CMD_UNKNOWN;
34
34
static int CmdHelp (const char * Cmd );
35
35
static int CmdQuit (const char * Cmd );
36
36
37
- //For storing command that are received from the device
38
- #define CMD_BUFFER_SIZE 50
39
- static UsbCommand cmdBuffer [CMD_BUFFER_SIZE ];
40
- //Points to the next empty position to write to
41
- static int cmd_head ;//Starts as 0
42
- //Points to the position of the last unread command
43
- static int cmd_tail ;//Starts as 0
44
- // to lock cmdBuffer operations from different threads
45
- static pthread_mutex_t cmdBufferMutex = PTHREAD_MUTEX_INITIALIZER ;
46
37
47
38
static command_t CommandTable [] =
48
39
{
@@ -61,6 +52,7 @@ command_t* getTopLevelCommandTable()
61
52
{
62
53
return CommandTable ;
63
54
}
55
+
64
56
int CmdHelp (const char * Cmd )
65
57
{
66
58
CmdsHelp (CommandTable );
@@ -72,113 +64,6 @@ int CmdQuit(const char *Cmd)
72
64
return 99 ;
73
65
}
74
66
75
- /**
76
- * @brief This method should be called when sending a new command to the pm3. In case any old
77
- * responses from previous commands are stored in the buffer, a call to this method should clear them.
78
- * A better method could have been to have explicit command-ACKS, so we can know which ACK goes to which
79
- * operation. Right now we'll just have to live with this.
80
- */
81
- void clearCommandBuffer ()
82
- {
83
- //This is a very simple operation
84
- pthread_mutex_lock (& cmdBufferMutex );
85
- cmd_tail = cmd_head ;
86
- pthread_mutex_unlock (& cmdBufferMutex );
87
- }
88
-
89
- /**
90
- * @brief storeCommand stores a USB command in a circular buffer
91
- * @param UC
92
- */
93
- void storeCommand (UsbCommand * command )
94
- {
95
- pthread_mutex_lock (& cmdBufferMutex );
96
- if ( ( cmd_head + 1 ) % CMD_BUFFER_SIZE == cmd_tail )
97
- {
98
- //If these two are equal, we're about to overwrite in the
99
- // circular buffer.
100
- PrintAndLog ("WARNING: Command buffer about to overwrite command! This needs to be fixed!" );
101
- }
102
- //Store the command at the 'head' location
103
- UsbCommand * destination = & cmdBuffer [cmd_head ];
104
- memcpy (destination , command , sizeof (UsbCommand ));
105
-
106
- cmd_head = (cmd_head + 1 ) % CMD_BUFFER_SIZE ; //increment head and wrap
107
- pthread_mutex_unlock (& cmdBufferMutex );
108
- }
109
-
110
-
111
- /**
112
- * @brief getCommand gets a command from an internal circular buffer.
113
- * @param response location to write command
114
- * @return 1 if response was returned, 0 if nothing has been received
115
- */
116
- int getCommand (UsbCommand * response )
117
- {
118
- pthread_mutex_lock (& cmdBufferMutex );
119
- //If head == tail, there's nothing to read, or if we just got initialized
120
- if (cmd_head == cmd_tail ){
121
- pthread_mutex_unlock (& cmdBufferMutex );
122
- return 0 ;
123
- }
124
- //Pick out the next unread command
125
- UsbCommand * last_unread = & cmdBuffer [cmd_tail ];
126
- memcpy (response , last_unread , sizeof (UsbCommand ));
127
- //Increment tail - this is a circular buffer, so modulo buffer size
128
- cmd_tail = (cmd_tail + 1 ) % CMD_BUFFER_SIZE ;
129
- pthread_mutex_unlock (& cmdBufferMutex );
130
- return 1 ;
131
- }
132
-
133
-
134
- /**
135
- * Waits for a certain response type. This method waits for a maximum of
136
- * ms_timeout milliseconds for a specified response command.
137
- *@brief WaitForResponseTimeout
138
- * @param cmd command to wait for
139
- * @param response struct to copy received command into.
140
- * @param ms_timeout
141
- * @return true if command was returned, otherwise false
142
- */
143
- bool WaitForResponseTimeoutW (uint32_t cmd , UsbCommand * response , size_t ms_timeout , bool show_warning ) {
144
-
145
- UsbCommand resp ;
146
-
147
- if (response == NULL ) {
148
- response = & resp ;
149
- }
150
-
151
- uint64_t start_time = msclock ();
152
-
153
- // Wait until the command is received
154
- while (true) {
155
- while (getCommand (response )) {
156
- if (response -> cmd == cmd ){
157
- return true;
158
- }
159
- }
160
- if (msclock () - start_time > ms_timeout ) {
161
- break ;
162
- }
163
- if (msclock () - start_time > 2000 && show_warning ) {
164
- PrintAndLog ("Waiting for a response from the proxmark..." );
165
- PrintAndLog ("You can cancel this operation by pressing the pm3 button" );
166
- show_warning = false;
167
- }
168
- }
169
- return false;
170
- }
171
-
172
-
173
- bool WaitForResponseTimeout (uint32_t cmd , UsbCommand * response , size_t ms_timeout ) {
174
- return WaitForResponseTimeoutW (cmd , response , ms_timeout , true);
175
- }
176
-
177
- bool WaitForResponse (uint32_t cmd , UsbCommand * response ) {
178
- return WaitForResponseTimeoutW (cmd , response , -1 , true);
179
- }
180
-
181
-
182
67
//-----------------------------------------------------------------------------
183
68
// Entry point into our code: called whenever the user types a command and
184
69
// then presses Enter, which the full command line that they typed.
@@ -187,38 +72,3 @@ int CommandReceived(char *Cmd) {
187
72
return CmdsParse (CommandTable , Cmd );
188
73
}
189
74
190
-
191
- //-----------------------------------------------------------------------------
192
- // Entry point into our code: called whenever we received a packet over USB
193
- // that we weren't necessarily expecting, for example a debug print.
194
- //-----------------------------------------------------------------------------
195
- void UsbCommandReceived (UsbCommand * UC )
196
- {
197
- switch (UC -> cmd ) {
198
- // First check if we are handling a debug message
199
- case CMD_DEBUG_PRINT_STRING : {
200
- char s [USB_CMD_DATA_SIZE + 1 ];
201
- memset (s , 0x00 , sizeof (s ));
202
- size_t len = MIN (UC -> arg [0 ],USB_CMD_DATA_SIZE );
203
- memcpy (s ,UC -> d .asBytes ,len );
204
- PrintAndLog ("#db# %s" , s );
205
- return ;
206
- } break ;
207
-
208
- case CMD_DEBUG_PRINT_INTEGERS : {
209
- PrintAndLog ("#db# %08x, %08x, %08x \r\n" , UC -> arg [0 ], UC -> arg [1 ], UC -> arg [2 ]);
210
- return ;
211
- } break ;
212
-
213
- case CMD_DOWNLOADED_RAW_ADC_SAMPLES_125K : {
214
- memcpy (sample_buf + (UC -> arg [0 ]),UC -> d .asBytes ,UC -> arg [1 ]);
215
- return ;
216
- } break ;
217
-
218
- default :
219
- storeCommand (UC );
220
- break ;
221
- }
222
-
223
- }
224
-
0 commit comments