Проект в стадии производства опытной партии.
Описание
SmartPipe - это USB-Serial адаптер, с функцией форматирования и фильтрации данных.
Параметры:
Общие:
|
Интерфейсы:
|
Виртуальные устройства:
|
Для отладки и тестирования применяються два способа анализа работы программы:
- трассировка - пошаговый анализ программы через отладчик;
- логирование - сбор логов работы программы
Трасировка применяеться при анализе не больших программ или частей кода программы.
Логирование необходимо для анализа работы устройства как системы. Протоколирование рабочей сессии устройства, анализ взаимодействия с внешними системами, оценка временых характеристик, во всех этих случаях применение логирования остаеться единственным способом понять, что происходит с устройством. Однако и логирование не лишино недостатков - главный из них, это проблема определениея количества сообщений о состоянии программы - логов. Ведь если вы будете выводить мало логов, вы получите мало информации о состоянии программы, если будете выводить много логов, информации может быть тоже много, что сильно усложнит ее расшифровку и понимание. К тому же много логов - много "лишних" команд в програме, что может исказить поведение программы, иногда до неузнаваемости.
Для управления количеством логов в программе были созданны различные библиотеки логирования (например log4cxx), используя которые, можно настроить "уровни" логирования. Однако в процессе отладки, этих "уровней" бывает не достаточно, а настройка логера далеко не всегда тривиальная задача, неговоря уже о случаях, кода код написан не вами.
Для таких случаев неплохо иметь какой-либо внешний фильтр, который из всех пришедших логов выбирал бы только нужные, а остальные или не показвал или перенаправлял. К тому же на такой фильтр можно возложить функции отображения дополнительной информации (например вывод дампа времени), что уменьшит сообщения лога, а значит уменьшить его влияние на код.
Устройство SmartPipe объединяет в себе две функции:
- функцию USB-Serial адаптера для передачи сообщений логирования из тестового устройства в компьютер;
- функцию фильтра и форматирования сообщений логирования ;
SmartPipe позволяет изменять поток данных от тестового устройства в соответствии с правилами (Rule) пользователя. Правила описывают поведение устройства для определенных условий, при выполнении условия, выполняется список команд правила. Команды правила могут , как изменять конкретную строку, найденну по условию, так и изменять конфигурацию всего устройства.
SmartPipe имеет один UART интерфейс (uart1) для связи с тестируемым устройством и два virtual COM интерфейса (com1 , com2) для связи с компьютером . Эти интерфейсы могут быть организованны в двунапрвленные каналы обмена. Для фильтрации и форматирования данных в канале обмена, канал может быть подключен к подсистеме обработки Filter.
Filter "захватывает" каждую строку из канала обмена и сравнивает ее с шаблонами строк из списка правил(Rules) , при соответствии шаблона и строки выполняються команды правила.
Команды правила позволяют производить над "захваченными" строками различные операции: добавить символы в строку, изменить цвет символов, добавить дамп времени и т.д. (подробнее см.закладку Команды правил ) .
Логика работы устройства зависит от нескольких общих параметров:
- Конфигурация каналов устройства (PIPES) - описывает направления потоков данных в устройстве.
- Режима работы (MODE) - определяет поведение устройства
- Тип входного потока (ITYPE) - определяет способ обработки входных данных в устройстве.
Для хранения драйверов, документации и другой дополнительной информации, SmartPipe имеет встроеный диск (Storage), доступный в режиме "только для чтения".
Режимы работы
SmartPipe имеет три режима работы (MODE):
- DEFAULT MODE - устройство работает как стандартный UART-COM1 адаптер. В этот режим устройство переходит когда список правил(Rules) пуст ;
Кофигурация: MODE: DEFAULT PIPES: UART1 <-> COM1 ITYPE: CHAR.
- STREAM MODE - устройство работает со списком правил и выполняет команды правил.В этот режим устройство переходит когда список правил(Rules) не пуст ;
Кофигурация: MODE: STREAM PIPES: конфигурируеться в правилах ITYPE: конфигурируеться в правилах.
- COMMAND MODE - устройство работает в интерактивном режиме - передача данных в каналах обмена приостанавливаеться и заданный интерфейс подключаеться к командной оболочке (shell) устройства.
Кофигурация: MODE: COMMAND PIPES: отключенны ITYPE: CHAR.
Конфигурация каналов
SmartPipe может работать с внешними устройствами через три последовательных порта:
- UART1 - аппаратный Serial порт с тремя сигналми (RXD/TXD/GND) работающий по протоколу UART.
- COM1 - виртуальный Serial порт работающий по протоколу USB.
- COM2 - виртуальный Serial порт работающий по протоколу USB.
Для передачи и обработки данных эти порты могут быть "соединенны" между собой в каналы (pipes).
В устройстве сконфигурированны три канала, управляя которыми через правила, можно перенаправлять потоки данных.
- Канал direct - передает необработанные данные между UART1 и COM1 портами.
- Канал test - передает и обрабатывает данные между COM1 и COM2 портами, а также передает "эхо" в UART1 порте.
- Канал filter - передает и обрабатывает данные между UART1 и COM1 портами, а также передает необработанные данные между UART1 и COM2 портами.
Тип входного потока
Поток данных, приходящих на входные порты SmartPipe, может обрабатываться в двух разных режимах (ITYPE) :
- CHAR - режим посимвольного ввода, как только символ появляется на входе устройства он тут же пересылается по каналу на выход.
В этом режиме правила отключены. Режим удобен когда устройство работает как стандартный UART/USB адаптер.
- LINE - режим построчного ввода, данные со входа устройства обрабатываются и передаются на выход только при получении символа "Подача строки" LF(0x0A).
В этом режиме правила включены и будут применяться к входящим строкам. Режим удобен когда устройство работает c логами от устройств и может фильтровать и обрабатывать их.
Перекючение между ITYPE режимами происходит нажатием комбинации клавиш CTRL-Q/CTRL-W/Enter.
Формат правила
Формат правила:
[Label ]:[Template];;[command value [value]]; [command value]; [command];
- Label - метка области действия правила;
- Template - шаблон поиска строки (wildcard).Используються мета-символы:
- * - символ замены любой строки символов;
- ? - символ замены любого одиночного символа;
- \ - символ "экранирования " для символов ';' | '*' | '?' | '@' | '\'
- @ - символ пустой строки
- command - команда конфигурации или обработки найденной строки(см.закладку Команды правил );
- value - параметер для command ;
Поведение SmirtPipe описываеться набором правил. Каждое правило состоит из полей: имя группы (Label); шаблона (Template) и списка команд. Каждая входная строка проверяеться на совпадение с полем шаблона из правил. При совпадении строки и шаблона, выполняеться список команд правила.
Все правила храняться в устройстве в виде списка. Список правил текущей группы выполняються последовательно с "головы" списка, при этом входная строка после обработки в одном правиле поступает в вход следующего.
Все правила в устройстве разбиты на группы. Проверка соответсвия текущей строки шаблону правила производиться только для текущей группы правил. Это позволяет уменьшить количество операций проверки для каждой строки лога. Текущая группа правил может быть установленна командой begin . Если в правиле номер группы не указан то считается, что правило относиться к группе 0.
Поле шаблона правила - это стандартная строка wildcard поиска c символами-джокерами:
- символом * - для замены любой строки символов (например: *find*);
- символом ? - для замены любого одиночного символа (например: find?);
- символом @ - для обозначения пустой строки
- символом \ - для экранирования других символов-джокеров {*?\;@} например: find\*) ;
Строка шаблона не может начинаться и заканчиваться пробелами, если правило имеет пустую строка шаблона то такое правило выполняеться только раз при старте и может использоваться для конфигурации устройства.
Список команд (см.закладку Команды правил ) - это набор SmartPipe комманд, перечисленых через ';'.
Добавление правила в список.
Правило можно добавить в список с помощью следующих shell комманд (см.закладку Команды правил ) :
- add rule - добавляет правило rule в вершину списока;
- insert num rule - добавляет правило rule в num позицию списка;
- up [-i=pos] rule - заменят правило на позиции pos в списке на правило rule , без параметра -i происходит замена правила на позиции 0;
Удаление правил из списока.
Правила можно удалить из списока с помощью следующих shell комманд (см.закладку Команды правил ) :
- rm num - удаляет правило на позиции num в списке;
- eraseall - удаляет все правила из списка;
Kоманды правил
Параметр / тип |
Значения | Описание |
global | тип команды для конфигурации устройства | |
local | тип команда для форматирования строки | |
format_string | строка символов соответствующая шаблону из правила | |
unformat_string | строка символов несоответствующая шаблону из правила | |
string | набор символов | набор символов, заканчивающиеся пробелом или@ |
interface | uart1 / com1 / com2 | интерфейс устройства |
bool | 0 /1 | параметр состояния (выключить / включить) |
int | 0...255 | целочисленный параметр |
time | hh:mm:ss | параметр задания времени (часы : минуты : секунды) |
mode | single / inc |
режим работы со списком правил |
color | default / black / red / green / yellow / blue / magneta / cyan /white | параметр цвета символов (установка цвета символа работает для терминалов с поддержкой ESC-последовательностей) |
Команда | Параметры | Тип команды |
Описание команды |
enable | interface | global | разрешает передачу всех последующих unformat_string в interface. На все последующие format_string не влияет. |
disable | interface | global | запрещает передачу всех последующих unformat_string в interfaceю На все последующие format_string не влияет. |
settime | time | global | устанавливает время для устройства. |
resettime | global | сбрасывает время устройства в 00:00:00. | |
atime | bool | global | выключает/включает добавление времени в формате [чччч:мм:сс] ко всем последующим строкам. |
ltime | local | добавляет время в формате [чччч:мм:сс] к format_string. | |
aspace | int | global | добавляет int пробелов ко всем последующим строкам. |
lspace | int | local | добавляет int пробелов к format_string. |
acolor | color | global | меняет на color цвет символов для всех последующих строк. |
lcolor | color | local | меняет на color цвет символов для format_string. |
begin | int | global | меняет группу правил. |
format | string@string | local | добавляет string строки к format_string. |
direct |
global | отключет проверку всех правил. действует до перезагрузки или перехода в command mode. | |
test |
global | устанавливает соединение COM2->COM1, действует до перезагрузки или перехода в command mode. | |
disk | bool | global | выключает/включает встроенный диск(Storage) |
Команды shell
Командная оболочка shell предназначенна для конфигурации устройства в режиме работы COMMAND MODE.
Для перехода из STREAM/DEFAULT MODE в COMMAND MODE необходимо в терминальной программе, подключенной к интерфейсу, нажать последовательность клавиш "CTRL-Q/CTRL-S/Enter", после этого устройство переходит в COMMAND MODE и в терминале появиться строка приглашения ("sLog:").
Для обратного перехода из COMMAND MODE в STREAM/DEFAULT MODE необходимо вызвать shell команду exit.
Командная оболочка shell поддерживает следующие команды:
help [command] - выводит описание shell команды , если команда вызвана без параметра выводит краткое описание всех shell команд;
ver - выводит номер версии устройства;
list [-f] -выводит список правил, при применении ключа -f список выводиться ввиде набора up команд;
rule num - выводит подробное описание правила c номером num из списка;
add rule - добавляет правило rule в вершину списока;
insert num rule - добавляет правило rule в num позицию списка;
up [-i=pos] rule - заменят правило на позиции pos в списке на правило rule , без параметра -i происходит замена правила на позиции 0;
rm num - удаляет правило на позиции num в списке;
eraseall - удаляет все правила из списка;
exit - переводит устройство в STREAM/DEFAULT MODE режим.