SmartPipe

Проект в стадии производства опытной партии.

Описание


DSC 0005 1SmartPipe - это USB-Serial адаптер, с функцией форматирования и фильтрации данных.

Параметры:

Общие:

  • Питание от USB: 5В
  • Размеры, мм : 56 x 27 x 14

Интерфейсы:

  • Serial port (TX/RX/GND)
  • miniUSB

Виртуальные устройства:

  • virtual COM1/COM2
  • virtual Storage

 

 

 


 

rx tx pi2

Для отладки и тестирования применяються два способа анализа работы программы:

  • трассировка - пошаговый анализ  программы через отладчик;
  • логирование - сбор логов работы программы

Трасировка применяеться при анализе не больших программ или частей кода программы.

Логирование необходимо для анализа работы устройства как системы. Протоколирование рабочей сессии устройства, анализ взаимодействия с внешними системами, оценка временых характеристик, во всех этих случаях применение логирования остаеться единственным способом понять, что происходит с устройством. Однако и логирование не лишино недостатков - главный из них, это проблема определениея количества сообщений о состоянии программы - логов. Ведь если вы будете выводить мало логов, вы получите мало информации о состоянии программы, если будете выводить много логов, информации может быть тоже много, что сильно усложнит ее расшифровку и понимание. К тому же много логов - много "лишних" команд в програме, что может исказить поведение программы, иногда до неузнаваемости.
Для управления количеством логов в программе были созданны различные библиотеки логирования (например 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.

mode state

Конфигурация каналов

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 портами.

 pipe select

Тип входного потока

Поток данных, приходящих на входные порты 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 режим.