local getopt = require('getopt')
local lib14b = require('read14b')
local utils = require('utils')
+local iso7816 = require('7816_error')
example = "script runs 14b raw commands to query a CAPLYPSO tag"
author = "Iceman, 2016"
local r = Command.parse(result)
local len = r.arg2 * 2
r.data = string.sub(r.data, 0, len);
+ print('GOT:', r.data)
if r.arg1 == 0 then
return r, nil
end
local function calypso_apdu_status(apdu)
-- last two is CRC
-- next two is APDU status bytes.
- local sw = apdu:sub( #apdu-7, #apdu-4)
- print ('SW', sw )
- -- if 0x9000 OK
- if sw == '9000' then return 1 end
- return 0
+ local status = false
+ local mess = 'FAIL'
+ local sw = apdu:sub( #apdu-7, #apdu-4)
+ desc, err = iso7816.tostring(sw)
+ print ('SW', sw, desc, err )
+
+ status = ( sw == '9000' )
+
+ return status
end
local _calypso_cmds = {
- ["1.Select ICC file"] = "02 94 a4 08 00 04 3f 00 00 02",
- ["2.ICC"] = "02 94 b2 01 04 1d",
- ["3.Select EnvHol file"]= '02 94 a4 08 00 04 20 00 20 01',
- ["4.EnvHol1"] = '02 94 b2 01 04 1d',
- ["5.Select EvLog file"] = '02 94 a4 08 00 04 20 00 20 10',
- ["6.EvLog1"] = '06 00b2 0104 1d',
- ["7.EvLog2"] = '06 00b2 0204 1d',
- ["8.EvLog3"] = '06 00b2 0304 1d',
- -- ["Select ConList file"]= '42 01 04 0a 00a4 0800 04 2000 2050',
- -- ["ConList"] = '42 01 06 06 00b2 0104 1d',
- -- ["Select Contra file"]= '42 01 08 0a 00a4 0800 04 2000 2020',
- -- ["Contra1"] = '42 01 0a 06 00b2 0104 1d',
- -- ["Contra2"] = '42 01 0c 06 00b2 0204 1d',
- -- ["Contra3"] = '42 01 0e 06 00b2 0304 1d',
- -- ["Contra4"] = '42 01 00 06 00b2 0404 1d',
- -- ["Select Counter file"]= '42 01 02 0a 00a4 0800 04 2000 2069',
- -- ["Counter"] = '42 01 04 06 00b2 0104 1d',
- -- ["Select SpecEv file"]= '42 01 06 0a 00a4 08 0004 2000 2040',
- -- ["SpecEv1"] = '42 01 08 06 00b2 0104 1d',
+ ["01.Select ICC file"] = '0294 a4 00 0002 3f00',
+ --["01.Select ICC file"] = '0294 a4 080004 3f00 0002',
+ ["02.ICC"] = '0294 b2 01 041d',
+ ["03.Select EnvHol file"] = '0294 a4 080004 2000 2001',
+ ["04.EnvHol1"] = '0294 b2 01 041d',
+ ["05.Select EvLog file"] = '0294 a4 080004 2000 2010',
+ ["06.EvLog1"] = '0294 b2 01 041d',
+ ["07.EvLog2"] = '0294 b2 02 041d',
+ ["08.EvLog3"] = '0294 b2 03 041d',
+ ["09.Select ConList file"] ='0294 a4 080004 2000 2050',
+ ["10.ConList"] = '0294 b2 01 041d',
+ ["11.Select Contra file"] = '0294 a4 080004 2000 2020',
+ ["12.Contra1"] = '0294 b2 01 041d',
+ ["13.Contra2"] = '0294 b2 02 041d',
+ ["14.Contra3"] = '0294 b2 03 041d',
+ ["15.Contra4"] = '0294 b2 04 041d',
+ ["16.Select Counter file"]= '0294 a4 080004 2000 2069',
+ ["17.Counter"] = '0294 b2 01 041d',
+ ["18.Select SpecEv file"]= '0294 a4 080004 2000 2040',
+ ["19.SpecEv1"] = '0294 b2 01 041d',
}
---
--for i = 1,10 do
--result, err = calypso_send_cmd_raw('0294a40800043f000002',false) --select ICC file
for i, apdu in spairs(_calypso_cmds) do
+ print('>>', i )
apdu = apdu:gsub("%s+","")
result, err = calypso_send_cmd_raw(apdu , false)
if result then
calypso_apdu_status(result.data)
- print( result.data )
+ print('<<', result.data )
+ else
+ print('<< no answer')
end
end
calypso_switch_off_field()