exit(0);
return 0;
}
+/**
+ * @brief This method should be called when sending a new command to the pm3. In case any old
+ * responses from previous commands are stored in the buffer, a call to this method should clear them.
+ * A better method could have been to have explicit command-ACKS, so we can know which ACK goes to which
+ * operation. Right now we'll just have to live with this.
+ */
+void clearCommandBuffer()
+{
+ //This is a very simple operation
+ cmd_tail = cmd_head;
+}
+
+/**
+ * @brief storeCommand stores a USB command in a circular buffer
+ * @param UC
+ */
+void storeCommand(UsbCommand *command)
+{
+ if( ( cmd_head+1) % CMD_BUFFER_SIZE == cmd_tail)
+ {
+ //If these two are equal, we're about to overwrite in the
+ // circular buffer.
+ PrintAndLog("WARNING: Command buffer about to overwrite command! This needs to be fixed!");
+ }
+ //Store the command at the 'head' location
+ UsbCommand* destination = &cmdBuffer[cmd_head];
+ memcpy(destination, command, sizeof(UsbCommand));
+
+ cmd_head = (cmd_head +1) % CMD_BUFFER_SIZE; //increment head and wrap
+
+}
+/**
+ * @brief getCommand gets a command from an internal circular buffer.
+ * @param response location to write command
+ * @return 1 if response was returned, 0 if nothing has been received
+ */
+int getCommand(UsbCommand* response)
+{
+ //If head == tail, there's nothing to read, or if we just got initialized
+ if(cmd_head == cmd_tail){
+ return 0;
+ }
+ //Pick out the next unread command
+ UsbCommand* last_unread = &cmdBuffer[cmd_tail];
+ memcpy(response, last_unread, sizeof(UsbCommand));
+ //Increment tail - this is a circular buffer, so modulo buffer size
+ cmd_tail = (cmd_tail +1 ) % CMD_BUFFER_SIZE;
+
+ return 1;
+
+}
+
/**
* Waits for a certain response type. This method waits for a maximum of
* ms_timeout milliseconds for a specified response command.
}
-/**
- * @brief This method should be called when sending a new command to the pm3. In case any old
- * responses from previous commands are stored in the buffer, a call to this method should clear them.
- * A better method could have been to have explicit command-ACKS, so we can know which ACK goes to which
- * operation. Right now we'll just have to live with this.
- */
-void clearCommandBuffer()
-{
- //This is a very simple operation
- cmd_tail = cmd_head;
-}
-
-/**
- * @brief storeCommand stores a USB command in a circular buffer
- * @param UC
- */
-void storeCommand(UsbCommand *command)
-{
- if( ( cmd_head+1) % CMD_BUFFER_SIZE == cmd_tail)
- {
- //If these two are equal, we're about to overwrite in the
- // circular buffer.
- PrintAndLog("WARNING: Command buffer about to overwrite command! This needs to be fixed!");
- }
- //Store the command at the 'head' location
- UsbCommand* destination = &cmdBuffer[cmd_head];
- memcpy(destination, command, sizeof(UsbCommand));
-
- cmd_head = (cmd_head +1) % CMD_BUFFER_SIZE; //increment head and wrap
-
-}
-/**
- * @brief getCommand gets a command from an internal circular buffer.
- * @param response location to write command
- * @return 1 if response was returned, 0 if nothing has been received
- */
-int getCommand(UsbCommand* response)
-{
- //If head == tail, there's nothing to read, or if we just got initialized
- if(cmd_head == cmd_tail){
- return 0;
- }
- //Pick out the next unread command
- UsbCommand* last_unread = &cmdBuffer[cmd_tail];
- memcpy(response, last_unread, sizeof(UsbCommand));
- //Increment tail - this is a circular buffer, so modulo buffer size
- cmd_tail = (cmd_tail +1 ) % CMD_BUFFER_SIZE;
-
- return 1;
-
-}
int CmdHelp(const char * Cmd)
{
PrintAndLog("This is a feature to run Lua-scripts. You can place lua-scripts within the scripts/-folder. ");
+ return 0;
}
/**
if (dp != NULL)
{
- while (ep = readdir (dp))
+ while ((ep = readdir (dp)) != NULL)
{
if(ep->d_name != NULL && str_ends_with(ep->d_name, ".lua"))
PrintAndLog("%-16s %s", ep->d_name, "A script file");
//-- remove the global environment table from the stack
lua_pop(L, 1);
- return 1;
}
/**
* Utility to check the ending of a string (used to check file suffix)
// get the top of the stack as the error and pop it off
const char * str = lua_tostring(lua_state, lua_gettop(lua_state));
lua_pop(lua_state, 1);
- printf(str);
+ puts(str);
}
//luaL_dofile(lua_state, buf);
// close the Lua state
lua_close(lua_state);
printf("\n-----Finished\n");
+ return 0;
}
}
// UsbCommand c = (*data);
- SendCommand(data);
+ SendCommand((UsbCommand* )data);
return 0; // no return values
}
/**
if(WaitForResponseTimeout(cmd, &response, ms_timeout))
{
//Push it as a string
- lua_pushlstring(L,&response,sizeof(UsbCommand));
+ lua_pushlstring(L,(const char *)&response,sizeof(UsbCommand));
return 1;// return 1 to signal one return value
}else{
return 1;// one return value
}
}
-static int l_nonce2key(lua_State *L){ return CmdHF14AMfRdSc(luaL_checkstring(L, 1));}
-static int l_PrintAndLog(lua_State *L){ return CmdHF14AMfDump(luaL_checkstring(L, 1));}
+//static int l_nonce2key(lua_State *L){ return CmdHF14AMfRdSc(luaL_checkstring(L, 1));}
+//static int l_PrintAndLog(lua_State *L){ return CmdHF14AMfDump(luaL_checkstring(L, 1));}
static int l_clearCommandBuffer(lua_State *L){
clearCommandBuffer();
+ return 0;
}
/**
* @brief l_foobar is a dummy function to test lua-integration with
printf("Arguments discarded, stack now contains %d elements", lua_gettop(L));
UsbCommand response = {CMD_MIFARE_READBL, {1337, 1338, 1339}};
printf("Now returning a UsbCommand as a string");
- lua_pushlstring(L,&response,sizeof(UsbCommand));
+ lua_pushlstring(L,(const char *)&response,sizeof(UsbCommand));
return 1;
}
static const luaL_Reg libs[] = {
{"SendCommand", l_SendCommand},
{"WaitForResponseTimeout", l_WaitForResponseTimeout},
- {"nonce2key", l_nonce2key},
- {"PrintAndLog", l_PrintAndLog},
+ //{"nonce2key", l_nonce2key},
+ //{"PrintAndLog", l_PrintAndLog},
{"foobar", l_foobar},
{"ukbhit", l_ukbhit},
{"clearCommandBuffer", l_clearCommandBuffer},