Логические уровни взаимодействия с устройством. Терминология.
От: Аноним  
Дата: 11.02.13 22:30
Оценка:
Добрый день! Я первый раз пишу программу, работающую с внешним устройством, подключенным через порт COM или USB. По мере развития программы, все четче проявляются три логических уровня взаимодействия с устройством (см. ниже).
Сейчас в исходниках полный бардак. Например, слово Raw используется в именах и 1-го и 2-го уровня, а сообщения 2-го уровня называются то Message, то Frame, то Packet. Пришла пора навести в исходниках порядок, четче разнести уровни по разным файлам, функциям, классам. Перейти к единой термонологии, дать функциям и классам более осмысленные имена. И вот с именами туго.
Подскажите, пожалуйста, как правильно называются эти три уровня? Как называются данные на каждом уровне? Меня больше интересуют английские названия.



Уровень 1) Сырые массивы байт, принятые (посланные) через порт. Каждый массив — это данные, принятые одним вызовом функции read().

Эти массивы представляют собой последовательность сообщений. Сообщение начинается символом STX (02h), заканчивается символом ETX(03h). Внутри сообщения лежат данные, возможно, разбавленные escape-символами DLE (10h), и, возможно, защищенные CRC.
Сообщения не обязаны сответствовать массивам с уровня 1. Один массив может содержать несколько сообщений. Или наоборот, одно сообщение может простираться на несколько массивов.

Итак, скленваем массивы уровня 1, разбиваем на сообщения, удаляем спецсимволы, проверяем CRC и получаем

Уровень 2) Сообщения. В сущности, это тоже массивы байт, но уже очищенные от мусора и сгруппированные.

Сообщения могут быть разных типов. Чаще всего, первый байт — это идентификатор команды, а последующие байты — это параметры, специфичные для каждой команды.
Итак, разбираем каждое сообщение уровня 2, выделяем идентификатор команды, параметры. Многобайтные параметры переворачиваем, если нужно, в соответствие с endianness. И складываем все это в структуры данных, специфичные для каждой команды. Получаем

Уровень 3) Команды. Различные структуры данных, содержащие осмысленные значения.
Re: Логические уровни взаимодействия с устройством. Терминология.
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 12.02.13 06:11
Оценка: 9 (2) +1
Здравствуйте, Аноним, Вы писали:

А>

А>Уровень 1) Сырые массивы байт, принятые (посланные) через порт. Каждый массив — это данные, принятые одним вызовом функции read().

Просто какие-то порции байт с потока.

А>Эти массивы представляют собой последовательность сообщений. Сообщение начинается символом STX (02h), заканчивается символом ETX(03h). Внутри сообщения лежат данные, возможно, разбавленные escape-символами DLE (10h), и, возможно, защищенные CRC.


Вот то, что Вы тут назвали сообщениями — это кадры (frames). В OSI это уровень 2.

А после того, как снять с них всякие STX, ETX, CRC и эскейпинги с помощью DLE, то, что останется — пакеты (packets).

А>Уровень 2) Сообщения. В сущности, это тоже массивы байт, но уже очищенные от мусора и сгруппированные.


Насколько я понял описание, это уже пакеты.

А>Сообщения могут быть разных типов. Чаще всего, первый байт — это идентификатор команды, а последующие байты — это параметры, специфичные для каждой команды.

А>Итак, разбираем каждое сообщение уровня 2, выделяем идентификатор команды, параметры. Многобайтные параметры переворачиваем, если нужно, в соответствие с endianness. И складываем все это в структуры данных, специфичные для каждой команды. Получаем

А>Уровень 3) Команды. Различные структуры данных, содержащие осмысленные значения.


Это уже ваша внутренняя сущность, её можно назвать как хочется. Сообщения, команды, события, и так далее.
Но удобнее всего — сообщения (messages).
The God is real, unless declared integer.
Re: Логические уровни взаимодействия с устройством. Терминология.
От: CanisLupus  
Дата: 12.02.13 10:29
Оценка:
Если по модели OSI, то

1) — Frame (Кадр)
2) — Packet (Пакет)
3) — Datagram?

Еще можно провести аналогию с лексическим/синтаксическим анализом.
Переход от 1-го уровня ко 2-му в чем-то аналогичен лексическому анализу, поэтому его можно назвать Scanning, а данные 2-го уровня можно назвать Lexem или Token.

А переход от 2-го уровня ко 3-му аналогичен синтаксическому анализу и его можно назвать Parsing.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.