From 4df3eb3f739af80b6fdc8f737fc906d254ebd0b5 Mon Sep 17 00:00:00 2001 From: "martin.holst@gmail.com" Date: Thu, 4 Jul 2013 12:56:00 +0000 Subject: [PATCH] Attempt to use raw writing capabilities via scripting engine. Not functional yet --- client/commands.lua | 6 +++-- client/scripts/writeraw.lua | 46 +++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 client/scripts/writeraw.lua diff --git a/client/commands.lua b/client/commands.lua index e09adb36..bf2a8a1f 100644 --- a/client/commands.lua +++ b/client/commands.lua @@ -162,6 +162,10 @@ Command = { 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( @@ -181,6 +185,4 @@ function Command:getBytes() return bin.pack("LLLLH",cmd, arg1, arg2, arg3,data); end - - return _commands \ No newline at end of file diff --git a/client/scripts/writeraw.lua b/client/scripts/writeraw.lua new file mode 100644 index 00000000..25250864 --- /dev/null +++ b/client/scripts/writeraw.lua @@ -0,0 +1,46 @@ +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) -- 2.39.2