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(
return bin.pack("LLLLH",cmd, arg1, arg2, arg3,data);
end
-
-
return _commands
\ No newline at end of file
--- /dev/null
+local cmds = require('commands')
+local desc =
+[[
+
+This script is a work in progress, not yet functional. It is an attempt to use the raw-writing
+capabilities already present within the devices
+
+]]
+
+print(desc)
+
+-- Some raw data
+local rawdata = "6000F57b" --mf_auth
+local TIMEOUT = 2000 -- Shouldn't take longer than 2 seconds
+
+function show(usbpacket)
+ if usbpacket then
+ local response = Command.parse(usbpacket)
+ print(response)
+ end
+end
+
+-- Want to do both connect and send raw, so we should AND the two commands
+-- ISO14A_COMMAND.ISO14A_RAW and ISO14A_CONNECT. However, we don't have a
+-- bitlib yet, so we'll do it manually, 1 & 8 == 9
+-- ISO14A_NO_DISCONNECT = 2
+
+print(string.len(rawdata))
+local command = Command:new{cmd = cmds.CMD_READER_ISO_14443a,
+ arg1 = 9,
+ arg2 = string.len(rawdata),
+ data = rawdata}
+core.clearCommandBuffer()
+print("Sending")
+print(command)
+local err = core.SendCommand(command:getBytes())
+if err then
+ print(err)
+ return nil, err
+end
+local cardselect = core.WaitForResponseTimeout(cmds.CMD_ACK,TIMEOUT)
+print("Card select:")
+show(cardselect)
+local response = core.WaitForResponseTimeout(cmds.CMD_ACK,TIMEOUT)
+print("Raw response:")
+show(response)