Some more tinkering with a generic 13.56MHz reader, still not finished

This commit is contained in:
martin.holst@gmail.com 2013-10-31 10:35:03 +00:00
commit e26df8425a
2 changed files with 48 additions and 24 deletions

View file

@ -1,10 +1,12 @@
[[ --[[
THIS IS WORK IN PROGREESS, very much not finished. THIS IS WORK IN PROGREESS, very much not finished.
This library utilises other libraries under the hood, but can be used as a generic reader for 13.56MHz tags. This library utilises other libraries under the hood, but can be used as a generic reader for 13.56MHz tags.
]] ]]
local reader14443A = require('read14a') local reader14443A = require('read14a')
local cmds = require('commands')
local TIMEOUT = 1000
local function sendToDevice(command, ignoreresponse) local function sendToDevice(command, ignoreresponse)
core.clearCommandBuffer() core.clearCommandBuffer()
@ -14,7 +16,6 @@ local function sendToDevice(command, ignoreresponse)
return nil, err return nil, err
end end
if ignoreresponse then return nil,nil end if ignoreresponse then return nil,nil end
local response = core.WaitForResponseTimeout(cmds.CMD_ACK,TIMEOUT) local response = core.WaitForResponseTimeout(cmds.CMD_ACK,TIMEOUT)
return response,nil return response,nil
end end
@ -36,17 +37,17 @@ local reader14443B = {
------------------------------------------------------- -------------------------------------------------------
local function errorString15693(number) local function errorString15693(number)
local errors = { local errors = {}
0x01 : "The command is not supported", errors[0x01] = "The command is not supported"
0x02 : "The command is not recognised", errors[0x02] = "The command is not recognised"
0x03 : "The option is not supported.", errors[0x03] = "The option is not supported."
0x0f : "Unknown error.", errors[0x0f] = "Unknown error."
0x10 : "The specified block is not available (doesnt exist).", errors[0x10] = "The specified block is not available (doesnt exist)."
0x11 : "The specified block is already -locked and thus cannot be locked again", errors[0x11] = "The specified block is already -locked and thus cannot be locked again"
0x12 : "The specified block is locked and its content cannot be changed.", errors[0x12] = "The specified block is locked and its content cannot be changed."
0x13 : "The specified block was not successfully programmed.", errors[0x13] = "The specified block was not successfully programmed."
0x14 : "The specified block was not successfully locked.", errors[0x14] = "The specified block was not successfully locked."
}
return errors[number] or "Reserved for Future Use or Custom command error." return errors[number] or "Reserved for Future Use or Custom command error."
end end
------------------------------------------------------- -------------------------------------------------------
@ -64,7 +65,7 @@ local function parse15693(data)
-- The following code is based on cmdhf15.c around line 666 (NoTB!) and onwards -- The following code is based on cmdhf15.c around line 666 (NoTB!) and onwards
if core.iso15693_crc(data, string.len(data)) ~= 0xF47 then if core.iso15693_crc(data, string.len(data)) ~= 0xF47 then
return nil, "CRC failed" return nil, "CRC failed"
else if data[1] % 2 == 1 then elseif data[1] % 2 == 1 then
-- Above is a poor-mans bit check: -- Above is a poor-mans bit check:
-- recv[0] & ISO15_RES_ERROR //(0x01) -- recv[0] & ISO15_RES_ERROR //(0x01)
local err = "Tag returned error %i: %s" local err = "Tag returned error %i: %s"
@ -97,7 +98,7 @@ end
------------------------------------------------------- -------------------------------------------------------
local function read15693() local function read15693()
[[ --[[
We start by trying this command: We start by trying this command:
@ -126,7 +127,7 @@ local function read15693()
proxmark3> proxmark3>
From which we obtain less information than the above one. From which we obtain less information than the above one.
]] --]]
local command, result, info, err, data local command, result, info, err, data
local data = "02" local data = "02"
@ -159,8 +160,6 @@ local function read15693()
return info return info
end end
}
local reader15693 = { local reader15693 = {
read = read15693 read = read15693
} }
@ -174,13 +173,20 @@ local reader15693 = {
-- @return if unsuccessfull : nil, error -- @return if unsuccessfull : nil, error
local function waitForTag() local function waitForTag()
print("Waiting for card... press any key to quit") print("Waiting for card... press any key to quit")
local readers = [reader14443A, reader14443B, readerISO15693] local readers = {reader14443A, reader14443B, reader15693}
local r local i = 0;
while not core.ukbhit() do while not core.ukbhit() do
for _, r in ipairs(readers) do i = (i % 3) +1
res, err = r.read() r = readers[i]
if res then return res end print("Reading with ",i)
res, err = r.read()
if res then return res end
print(err)
-- err means that there was no response from card -- err means that there was no response from card
end end
return nil, "Aborted by user" return nil, "Aborted by user"
end end
return {
waitForTag = waitForTag,
}

View file

@ -0,0 +1,18 @@
local reader = require('hf_reader')
local function main(args)
print("WORK IN PROGRESS - not expected to be functional yet")
info, err = reader.waitForTag()
if err then
print(err)
return
end
local k,v
print("Tag info")
for k,v in pairs(info) do
print(string.format(" %s : %s", tostring(k), tostring(v)))
end
return
end
main(args)