proxmark3/client/lualibs/commands.lua
pwpiwi fb9acd4588 Update/cleanup Makefiles (#265)
- add new target "make mfkey" to build mfkey32 and mfkey64
- include above when "make all"
- fix Qt detection for Kali Linux
- create and use dependency files when building client
- create client/lualibs/usb_cmd.lua from include/usb_cmd.h when building client
- add Windows *.exe files with "make tarbin"
- For the time being don't include Makefile.common in Makefile and client/Makefile
- set com3 as default flashing port for Windows (including mingw)
- remove static targets snooper and cli. Remove their sources as well.
2017-03-31 16:04:04 +02:00

75 lines
2.0 KiB
Lua

--[[
Handle Proxmark USB Commands
--]]
local _commands = require('usb_cmd')
local _reverse_lookup,k,v = {}
for k, v in pairs(_commands) do
_reverse_lookup[v] = k
end
_commands.tostring = function(command)
if(type(command) == 'number') then
return ("%s (%d)"):format(_reverse_lookup[command]or "ERROR UNDEFINED!", command)
end
return ("Error, numeric argument expected, got : %s"):format(tostring(command))
end
Command = {
new = function(self, o)
local o = o or {} -- create object if user does not provide one
setmetatable(o, self) -- DIY inheritance a'la javascript
self.__index = self
o.cmd = o.cmd or _commands.CMD_UNKNOWN
--o.arg1 = "test"
o.arg1 = o.arg1 or 0
o.arg2 = o.arg2 or 0
o.arg3 = o.arg3 or 0
local data = o.data or "0"
if(type(data) == 'string') then
-- We need to check if it is correct length, otherwise pad it
local len = string.len(data)
if(len < 1024) then
--Should be 1024 hex characters to represent 512 bytes of data
data = data .. string.rep("0",1024 - len )
end
if(len > 1024) then
-- OOps, a bit too much data here
print( ( "WARNING: data size too large, was %s chars, will be truncated "):format(len) )
--
data = data:sub(1,1024)
end
else
print(("WARNING; data was NOT a (hex-) string, but was %s"):format(type(data)))
end
o.data = data
return o
end,
parse = function (packet)
local count,cmd,arg1,arg2,arg3,data = bin.unpack('LLLLH512',packet)
return Command:new{cmd = cmd, arg1 = arg1, arg2 = arg2, arg3 = arg3, data = data}
end,
}
function Command:__tostring()
local output = ("%s\r\nargs : (%s, %s, %s)\r\ndata:\r\n%s\r\n"):format(
_commands.tostring(self.cmd),
tostring(self.arg1),
tostring(self.arg2),
tostring(self.arg3),
tostring(self.data))
return output
end
function Command:getBytes()
--If a hex-string has been used
local data = self.data
local cmd = self.cmd
local arg1, arg2, arg3 = self.arg1, self.arg2, self.arg3
return bin.pack("LLLLH",cmd, arg1, arg2, arg3, data);
end
return _commands