From 4df3eb3f739af80b6fdc8f737fc906d254ebd0b5 Mon Sep 17 00:00:00 2001
From: "martin.holst@gmail.com"
 <martin.holst@gmail.com@ef4ab9da-24cd-11de-8aaa-f3a34680c41f>
Date: Thu, 4 Jul 2013 12:56:00 +0000
Subject: [PATCH 1/1] 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.5