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(8) and ISO14A_CONNECT (1). However, we don't have a -- bitlib yet, so we'll do it manually, 1 & 8 == 9 -- ISO14A_NO_DISCONNECT = 2 ==> 11 print(string.len(rawdata)) local command = Command:new{cmd = cmds.CMD_READER_ISO_14443a, arg1 = 3, -- Connect (1) and don't disconnect (2) arg2 = 0-- string.len(rawdata), --data = rawdata } local mf_auth = Command:new{cmd = cmds.CMD_READER_ISO_14443a, arg1 = 6, -- Send raw arg2 = string.len(rawdata), data = rawdata} local quit = Command:new{cmd = cmds.CMD_READER_ISO_14443a, arg1 = 0, -- Nothing } 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) local answer = "" while answer ~='q' do local err = core.SendCommand(mf_auth:getBytes()) if err then print(err) return nil, err end local nonce = core.WaitForResponseTimeout(cmds.CMD_ACK,TIMEOUT) print("Nonce:") show(nonce) io.write("Write q to quit, hit any char to get a nonce ") io.flush() answer=io.read(1) end--]]