Логические уровни взаимодействия с устройством. Терминология.
От: Аноним  
Дата: 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) Команды. Различные структуры данных, содержащие осмысленные значения.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.