Команды работы с данными BER-TLV

Команды данной категории предназначены для работы с файлами TLV-записей (TF) и контекстами директорий.

См. также раздел «Команды работы с правилами доступа»:

типы файлов (кроме случая специальных тэгов – см. описание команд):

DF (MF) BF FRF VRF CRF TF KF ARF
+ - - - - + - -

Команды имеют по 2 разновидности: с четным INS и нечетным INS.

В случае четного INS, тэг записи кодируется в P1:P2. В соответствии с форматом BER-TLV, P1:P2 принимают значения в диапазонах:

  • 00:40..00:FE – для однобайтовых тэгов.
  • 40:00..FFFF – для 2-х байтовых тэгов.


Если выбранная запись является шаблоном, она считывается полностью. Установка шаблона в качестве текущего контекста для дальнейшего считывания из него примитивных элементов данных не поддерживается из-за двусмысленности реализации.

 

В случае нечетного INS, P1:P2 – идентифицируют файл:

  • 00:00 – текущий файл
  • если старшие 11 бит =0, а младшие 5 бит образуют значение от 1 до 30, то младшие 5 бит – короткий идентификатор файла.
  • в остальных случаях, P1:P2 – полный идентификатор файла.


При этом ссылка на конкретную запись содержится в данных – см. описание команд.

 

 

9.3.1 GET DATA

Прочитать TLV-запись из файла TF или контекста директории.

Примечание. Если запись слишком велика для передачи в одной команде, она может быть прочитана в несколько приемов командами GET RESPONSE – не реализовано в v1.0

При использовании четного INS (INS=CA) несколько тэгов зарезервированы для получения специальной информации:

тэг значение
5F51 Answer-to-Reset
5F52 байты истории (historical bytes) ATR
00FF полностью считать контекст текущей директории
0000 полностью считать содержимое текущего TF

При использовании тэга 0000 текущим должен быть файл типа TF, а для остальных специальных тэгов – любой файл. При чтении зарезервированных тэгов текущий файл не меняется.

Байты истории ATR могут быть модифицированы командой PUT DATA на значение пользователя. В этом случае пользовательское значение хранится в контексте MF и считывается оттуда.

тип команды in/out (case 4)

формат команды:

CLA 00
INS CA или CB
P1:P2  
Lc размер данных
данные если INS=CA – ничего
если INS=CB – список запрашиваемых записей (см. ниже)
Le 0 или N
ответ Le=0 – запрошенные записи целиком или первые 256 байт от них
Le=N – первые N байт запрошенных записей

характерные статусы ошибок:

6700 Неправильная длина входных данных
6984 Данные команды имеют недопустимые значения
6A80 Данные команды имеют недопустимый формат
6A82 Файл не найден
6A86 Неправильные значения параметров P1/P2
6A88 Необходимые данные отсутствуют

Если INS четно, то поле данных запроса пусто, а назад возвращается содержание (поле V) запрошенной записи.

Если INS нечетно, в запросе передается список заголовков запрашиваемых записей, а в ответе – список (конкатенация) запрошенных записей в формате BER-TLV.

Список заголовков оформляется в виде BER-TLV записи и представляет собой одну из следующих конструкций, различаемых по тэгу:

конструкция тэг устройство запроса устройство ответа
список тэгов 5C Конкатенация тэгов запрашиваемых записей (без длин) список запрошенных записей в формате BER-TLV
список заголовков 5D Конкатенация пар TL запрашиваемых записей список усеченных записей в формате BER-TLV

Если в списке заголовков (тэг 5D) для какого либо входящего в него тэга указывается длина L=0, то соответствующая запись не усекается. Если длина L>0, то передается не больше L байт соответствующей записи.

Пусть в TF лежат следующие записи:

Tag Length Value
5F 21 01 11
7F 22 07 45 01 01 46 02 02 02
41 02 33 33

Запрос (список тэгов):
5C 05 5F21 7F22 41
Ответ:
5F21 01 11 7F22 07 45010146020202 41 02 3333

Запрос (список заголовков):
5D 08 5F21 05 7F22 00 41 01
Ответ:
5F21 01 11 7F22 07 45010146020202 41 01 33

 

 

9.3.2 PUT DATA

Занести TLV-запись в файл TF или контекст директории.

Если запись с таким тэгом уже присутствует, то она замещается новой записью при условии равенства длин. Если длина новой записи отличается, то возникает ошибка. Таким образом, в файле может быть только одна запись с определенным тэгом.

Чтобы заместить уже существующую запись, требуется право доступа на вид доступа UPDATE, а чтобы добавить новую запись – APPEND.

При использовании четного INS (INS=DA) тэг 5F52 зарезервирован для записи пользовательского значения байтов истории (historical bytes) ATR. В этом случае пользовательское значение записывается в контекст MF (длина байтов истории не должна превышать 15 байт). Текущий файл при выполнении этой команды с зарезервированным значением тэга может быть любым и не меняется после выполнения команды.

Чтобы иметь возможность менять байты истории на пользовательское значение, контекст MF должен создаваться достаточного размера для хранения самих байтов истории и Ber-TLV заголовка (3 байта).

Будучи единожды записаны, байты истории могут быть изменены на другое значение, но без изменения длины.

Запись байтов истории требует права на доступ по записи к контексту MF.

тип команды in (case 3)

формат команды:

CLA 00
INS DA или DB
P1:P2  
Lc размер данных
данные если INS=DA, содержание записи (поле V)
если INS=DB, список (конкатенация) записей в формате BER-TLV
Le -
ответ -

характерные статусы ошибок:

6700 Неправильная длина входных данных
6984 Данные команды имеют недопустимые значения
6A80 Данные команды имеют недопустимый формат
6A82 Файл не найден
6A86 Неправильные значения параметров P1/P2
6A88 Необходимые данные отсутствуют

Если в P1:P2 при INS=DA содержится тэг соответствующий шаблону, либо при INS=DB среди списка записей содержатся записи-шаблоны, то таковые помещаются в файл как единое целое без дальнейшего разбора на входящие в шаблон записи.

 

 

.