return hex\r
end,\r
\r
+ ------------ FILE WRITING (EML)\r
+ --- Writes an eml-file.\r
+ -- @param uid - the uid of the tag. Used in filename\r
+ -- @param blockData. Assumed to be on the format {'\0\1\2\3,'\b\e\e\f' ..., \r
+ -- that is, blockData[row] contains a string with the actual data, not ascii hex representation \r
+ -- return filename if all went well, \r
+ -- @reurn nil, error message if unsuccessfulls \r
+ WriteDumpFile = function(uid, blockData)\r
+ local destination = string.format("%s.eml", uid)\r
+ local file = io.open(destination, "w")\r
+ if file == nil then \r
+ return nil, string.format("Could not write to file %s", destination)\r
+ end\r
+ local rowlen = string.len(blockData[1])\r
+\r
+ for i,block in ipairs(blockData) do\r
+ if rowlen ~= string.len(block) then\r
+ prlog(string.format("WARNING: Dumpdata seems corrupted, line %d was not the same length as line 1",i))\r
+ end\r
+\r
+ local formatString = string.format("H%d", string.len(block))\r
+ local _,hex = bin.unpack(formatString,block)\r
+ file:write(hex.."\n")\r
+ end\r
+ file:close() \r
+ return destination\r
+ end,\r
+ \r
------------ string split function\r
Split = function( inSplitPattern, outResults )\r
if not outResults then\r
if #s == 0 then return nil end\r
if type(s) == 'string' then\r
local utils = require('utils')\r
- local ascii = utils.ConvertHexToAscii(s)\r
- local hashed = core.iso14443b_crc(ascii)\r
- return utils.ConvertAsciiToHex(hashed)\r
+ return utils.ConvertAsciiToHex(\r
+ core.iso14443b_crc(s)\r
+ )\r
end\r
return nil \r
end,\r
\r
- ------------ CRC-16 ccitt checksums\r
- -- Takes a hex string and calculates a crc16\r
+ ------------ CRC-8 Legic checksums\r
+ -- Takes a hex string and calculates a crc8\r
Crc8Legic = function(s)\r
if s == nil then return nil end\r
if #s == 0 then return nil end\r
return rev\r
end,\r
\r
- ConvertHexToAscii = function(s)\r
+ ConvertHexToAscii = function(s, useSafechars)\r
if s == nil then return '' end\r
if #s == 0 then return '' end\r
local t={}\r
for k in s:gmatch"(%x%x)" do\r
- table.insert(t, string.char(tonumber(k,16)))\r
+\r
+ local n = tonumber(k,16) \r
+ local c \r
+ if useSafechars and ( (n < 32) or (n == 127) ) then\r
+ c = '.';\r
+ else\r
+ c = string.char(n)\r
+ end\r
+ table.insert(t,c)\r
end\r
return table.concat(t) \r
end,\r
return n\r
end,\r
\r
+ -- a simple implementation of a sleep command. Thanks to Mosci\r
+ -- takes number of seconds to sleep\r
+ Sleep = function(n)\r
+ local clock = os.clock\r
+ local t0 = clock()\r
+ while clock() - t0 <= n do end\r
+ return nil \r
+ end,\r
+ \r
-- function convertStringToBytes(str)\r
-- local bytes = {}\r
-- local strLength = string.len(str)\r