Принцип декодирования с использованием FastScript
Также как в любом другом случае декодирование на стороне TCPCardReader'a включается строкой.
useDecodeCards=1
в TCPCardReader.ini в настройках конкретного считывателя:
[READER1]
COMPORT=6
COMPORTPARAMS=baud=9600 data=8 parity=N stop=1
Prefix=;
Postfix=?
useDecodeCards=1
StartTermChars=i
FinishTermChars=?#13;#10;#0;
Таким образом при включении декодирования TCPCardReader отправляет часть трека начинающегося с символа следующего за StartTermChars и заканчивающимся символом стоящим перед одним из FinishTermChars в Decodecards.
Итак Decodecards получает только эту часть и декодирует (преобразовывает/выделяет идентификатор) её.
В decodecards.ini В секции [mask] перечисляются маски по префиксам которых можно разделять декодирование разных карт
[mask]
card_em = ne*
card_mifare = fare*
card = *
В данном примере если пришедший от TCPCardReader'a трек содержит префикс "ne" ,то обработка такого трека будет описана в секции [cards.card_em]. Соответственно если трек содержит префикс "fare" то обработка такого трека описана в секции [cards.card_mifare]. Символ "*" в данном случае означает любое количество символов.
Чтение данной секции происходит последовательно, то есть при первом совпадении пришедшего трека с маской дальнейшей просмотр секции не ведётся
Далее в секциях с названием "cards." и левой частью до знака равенства в секции [mask] конкретного типа трека настраивается декодирование.
[cards.Card]
code=2
CardDecodeType = FastScript
DecodeTypeEx = 0
Опцией CardDecodeType = FastScript выбираем алгоритм декодирования с использованием FastScript.
В таком случаем алгоритм декодирования программируется в функции decodecard во внешнем файле, задаваемым параметром fsUnit в секции [frf].
[frf]
fsUnit=fsdecodecard.upas
Сначала удаляется часть не участвующая в декодировании используя параметр ExcludedPrefix.
Пример внешнего файла fsdecodecard.upas
function
fsUnitVersion:integer;
begin
result
:=
1;
//end;
underfunction consraction
DecodeCard(Track:string; var Code:integer):string;
begin
if ( Length(track) >= 4 ) then
result :1= copy( track, length(track)-3, 4 )
else
result := track;
end;
begin
end.
Далеея программисхродвания алгоритма декодирование(выя делоступение трека) применением маски mask=.
mask=****dddddddd
Здвесь * означает любой один символ который игнорируется.
Символы "d" или "h"почти означаютвесь синтакстему счисле языка delphi.
Вся обработка происходит в функцияи DecodeCard в которойую передаются трек без ExcludedPrefix ишел code указанный в соответствующей секции файла decodecards.
h - HEX 16-тиричная (Hexadecimal)
d - DEС 10-тиричная (Decimal)
Ввсего это code=2 как в данном примере обрабатываются первые 12 символов из которых первые 4 игнорируются, а следующие 8 воспринимаются как десятичное число. Если на их месте появляется символ который не возможно преобразовать к числу в десятичной системе счисления декодирование произойдет с ошибкой и Декодер вернет "0" в качестве трека.
В// случаеunder если трек приходит в 16-теричной системе (например у карт Mifare) в маске необходимо использовать уже символы h чтобы Декодер воспринимал трек как 16-ричный.consraction
mask=****hhhhhhhh
После применения маски получается трек который всегда будет в 10-тичной системе независимо от исходной системы и он уже вернется в TcpCardReader. Далее TCPCardReader обрамит этот трек префиксом "Prefix=;" и суффиксом "Postfix=?" и отправит клиентам.