Поток событий — это спецификация формата файла. Он задуман как стандарт хранения потоков событий и может использоваться для передачи событий между электронными устройствами. Спецификация включает систему управления версиями, позволяющую осуществлять массовые изменения при сохранении обратной совместимости. Рекомендуемое расширение файлов потока событий — .es .
Для байта b
b[0]
обозначает младший бит (младший значащий бит), а b[7]
обозначает старший бит (старший значащий бит).
Каждый файл потока событий начинается с заголовка длиной 15 байт:
Позиция | Содержание |
---|---|
Байты от 0 до 11 | 0x45 0x76 0x65 0x6e 0x74 0x20 0x53 0x74 0x72 0x65 0x61 0x6d ( поток событий в кодировке ASCII) |
Байт 12 | Основная версия |
Байт 13 | Меньшая версия |
Байт 14 | Патч-версия |
Нумерация версий соответствует соглашению о семантическом управлении версиями. Байты с 15 по конец зависят от версии. Описание содержания приведено ниже.
Файл может представлять пять типов потоков: общие события, события DVS, события ATIS, события асинхронного и модульного отображения и цветовые события. Тип хранится в байте 15:
Байт 15 | Тип потока |
---|---|
0x00 | Общие события |
0x01 | Мероприятия ДВС |
0x02 | Мероприятия АТИС |
0x03 | Асинхронное и модульное отображение событий |
0x04 | Цветные события |
Байты с 16 по конец могут быть любыми: сброса , переполнения , байта 0 , байта размера и байта данных . Возможный порядок этих байтов задается конечным автоматом:
Байты кодируют следующие данные:
Имя байта | MSB | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | младший бит |
---|---|---|---|---|---|---|---|---|
перезагрузить | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
переполнение | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
байт 0 | t[7] | t[6] | t[5] | t[4] | t[3] | t[2] | t[1] | t[0] |
размер байта | s[6] | s[5] | s[4] | s[3] | s[2] | s[1] | s[0] | is_last |
байт данных | d[7] | d[6] | d[5] | d[4] | d[3] | d[2] | d[1] | d[0] |
сброс — это специальный байт, вставляемый, когда это считается необходимым для исправления ошибок конечного автомата, возникающих из-за битовых ошибок.
t кодирует время, прошедшее с момента предыдущего события, в микросекундах и не может быть 0b11111110
или 0b11111111
. Если это время равно или больше 0b11111110
микросекунд, перед событием вставляется один или несколько байтов переполнения . Фактическое время, прошедшее с момента последнего события, можно вычислить как метку времени текущего события плюс 0b11111110
микросекунд, умноженную на количество байтов переполнения .
Полезная нагрузка данных каждого события начинается с одного или нескольких байтов размера, которые кодируют количество байтов данных, которые необходимо прочитать. Число n
байтов данных для чтения определяется выражением:
n = ∑ (s_i) << (7 * i)
где s_i, i ∈ [0, k - 1]
обозначает (i + 1)-е значение s
, а k
- количество байтов размера. Минимальное количество байтов размера зависит от количества байтов данных. События одного и того же потока могут иметь разное количество байтов данных и разное количество байтов размера. Для n
байтов данных требуется не менее Γlb(n + 1) / 7⅂
байтов размера, где Γ…⅂
— это ячейковая функция, а lb(…)
— двоичный логарифм. Приложениям или устройствам, генерирующим общие события, рекомендуется использовать это минимальное число, хотя спецификация потока событий допускает большее количество байтов размера.
is_last
равен 0
для последнего байта размера перед байтами данных и 1
в противном случае.
d
кодирует данные, предоставленные пользователем.
Байты с 16 по 19 кодируют ширину и высоту датчика:
Имя байта | MSB | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | младший бит |
---|---|---|---|---|---|---|---|---|
байт 16 | w[7] | w[6] | w[5] | w[4] | w[3] | w[2] | w[1] | w[0] |
байт 17 | w[15] | w[14] | w[13] | w[12] | w[11] | w[10] | w[9] | w[8] |
байт 18 | h[7] | h[6] | h[5] | h[4] | h[3] | h[2] | h[1] | h[0] |
байт 19 | h[15] | h[14] | h[13] | h[12] | h[11] | h[10] | h[9] | h[8] |
w
(соответственно h
) кодирует ширину датчика (соответственно высоту). Координата события x (соответственно y) должна находиться в целочисленном диапазоне [0, w - 1]
(соответственно [0, h - 1]
).
Байты с 20 по конец могут быть любыми: сброс , переполнение , байт 0 , байт 1 , байт 2 , байт 3 и байт 4 . Возможный порядок этих байтов задается конечным автоматом:
Байты кодируют следующие данные:
Имя байта | MSB | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | младший бит |
---|---|---|---|---|---|---|---|---|
перезагрузить | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
переполнение | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
байт 0 | t[6] | t[5] | t[4] | t[3] | t[2] | t[1] | t[0] | is_increase |
байт 1 | x[7] | x[6] | x[5] | x[4] | x[3] | x[2] | x[1] | x[0] |
байт 2 | x[15] | x[14] | x[13] | x[12] | x[11] | x[10] | x[9] | x[8] |
байт 3 | y[7] | y[6] | y[5] | y[4] | y[3] | y[2] | y[1] | y[0] |
байт 4 | y[15] | y[14] | y[13] | y[12] | y[11] | y[10] | y[9] | y[8] |
сброс — это специальное событие, добавляемое, когда это считается необходимым для исправления ошибок конечного автомата, возникающих из-за битовых ошибок. Байты сброса следует вставлять по пять за раз, чтобы хотя бы один байт был прочитан в состоянии ожидания .
t
кодирует время, прошедшее с момента предыдущего события, в микросекундах и не может быть 0b1111111
. Если это время равно или больше 0b1111111
микросекунд, перед событием вставляется один или несколько байтов переполнения . Фактическое время, прошедшее с момента последнего события, можно вычислить как метку времени текущего события плюс 0b1111111
микросекунд, умноженную на количество байтов переполнения .
is_increase
равен 1
для событий незначительного увеличения и 0
в противном случае.
x
и y
кодируют координаты пикселей, связанные с событием.
Байты с 16 по 19 кодируют ширину и высоту датчика:
Имя байта | MSB | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | младший бит |
---|---|---|---|---|---|---|---|---|
байт 16 | w[7] | w[6] | w[5] | w[4] | w[3] | w[2] | w[1] | w[0] |
байт 17 | w[15] | w[14] | w[13] | w[12] | w[11] | w[10] | w[9] | w[8] |
байт 18 | h[7] | h[6] | h[5] | h[4] | h[3] | h[2] | h[1] | h[0] |
байт 19 | h[15] | h[14] | h[13] | h[12] | h[11] | h[10] | h[9] | h[8] |
w
(соответственно h
) кодирует ширину датчика (соответственно высоту). Координата события x (соответственно y) должна находиться в целочисленном диапазоне [0, w - 1]
(соответственно [0, h - 1]
).
Байты с 20 по конец могут быть любыми: сброс , переполнение , байт 0 , байт 1 , байт 2 , байт 3 и байт 4 . Возможный порядок этих байтов задается конечным автоматом:
Байты кодируют следующие данные:
Имя байта | MSB | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | младший бит |
---|---|---|---|---|---|---|---|---|
перезагрузить | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
переполнение | 1 | 1 | 1 | 1 | 1 | 1 | overflow[1] | overflow[0] |
байт 0 | t[5] | t[4] | t[3] | t[2] | t[1] | t[0] | polarity | is_tc |
байт 1 | x[7] | x[6] | x[5] | x[4] | x[3] | x[2] | x[1] | x[0] |
байт 2 | x[15] | x[14] | x[13] | x[12] | x[11] | x[10] | x[9] | x[8] |
байт 3 | y[7] | y[6] | y[5] | y[4] | y[3] | y[2] | y[1] | y[0] |
байт 4 | y[15] | y[14] | y[13] | y[12] | y[11] | y[10] | y[9] | y[8] |
сброс — это специальное событие, добавляемое, когда это считается необходимым для исправления ошибок конечного автомата, возникающих из-за битовых ошибок. Байты сброса следует вставлять по пять за раз, чтобы хотя бы один байт был прочитан в состоянии ожидания .
t
кодирует время, прошедшее с момента предыдущего события, в микросекундах и не может быть 0b111111
. Если это время равно или больше 0b111111
микросекунд, перед событием вставляется один или несколько байтов переполнения . Фактическое время, прошедшее с момента последнего события, можно вычислить как метку времени текущего события плюс 0b111111
микросекунд, умноженную на число, закодированное параметрами overflow[0]
, overflow[1]
для каждого события переполнения .
is_tc
равен 0
для события DVS и 1
для пересечения порога (половина измерения воздействия). polarity
хранит is_increase
для события DVS и is_second
для пересечения порога.
x
и y
кодируют координаты пикселей, связанные с событием.
Байты с 16 по конец могут быть любыми: сброс , переполнение , байт 0 , байт 1 , байт 2 и байт_3 . Возможный порядок этих байтов задается конечным автоматом:
Байты кодируют следующие данные:
Имя байта | MSB | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | младший бит |
---|---|---|---|---|---|---|---|---|
перезагрузить | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
переполнение | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
байт 0 | t[7] | t[6] | t[5] | t[4] | t[3] | t[2] | t[1] | t[0] |
байт 1 | x[7] | x[6] | x[5] | x[4] | x[3] | x[2] | x[1] | x[0] |
байт 2 | y[7] | y[6] | y[5] | y[4] | y[3] | y[2] | y[1] | y[0] |
байт 3 | s[7] | s[6] | s[5] | s[4] | s[3] | s[2] | s[1] | s[0] |
сброс — это специальное событие, добавляемое, когда это считается необходимым для исправления ошибок конечного автомата, возникающих из-за битовых ошибок. Байты сброса следует вставлять по четыре за раз, чтобы хотя бы один байт был прочитан в состоянии ожидания .
t
кодирует время, прошедшее с момента предыдущего события, в микросекундах и не может быть 0b11111110
или 0b11111111
. Если это время равно или больше 0b11111110
микросекунд, перед событием вставляется один или несколько байтов переполнения . Фактическое время, прошедшее с момента последнего события, можно вычислить как метку времени текущего события плюс 0b11111110
микросекунд, умноженную на количество байтов переполнения .
x
и y
кодируют координаты пикселей, связанные с событием.
s
кодирует текущий этап пирамиды. Вне дисплея его значение должно быть 0b00000000
(подробности см. в документации по асинхронному и модульному дисплею).
Байты с 16 по 19 кодируют ширину и высоту датчика:
Имя байта | MSB | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | младший бит |
---|---|---|---|---|---|---|---|---|
байт 16 | w[7] | w[6] | w[5] | w[4] | w[3] | w[2] | w[1] | w[0] |
байт 17 | w[15] | w[14] | w[13] | w[12] | w[11] | w[10] | w[9] | w[8] |
байт 18 | h[7] | h[6] | h[5] | h[4] | h[3] | h[2] | h[1] | h[0] |
байт 19 | h[15] | h[14] | h[13] | h[12] | h[11] | h[10] | h[9] | h[8] |
w
(соответственно h
) кодирует ширину датчика (соответственно высоту). Координата события x (соответственно y) должна находиться в целочисленном диапазоне [0, w - 1]
(соответственно [0, h - 1]
).
Байты с 20 по конец могут быть любыми: сброс , переполнение , байт 0 , байт 1 , байт 2 , байт 3 , байт 4 , байт 5 , байт 6 и байт 7 . Возможный порядок этих байтов задается конечным автоматом:
Байты кодируют следующие данные:
Имя байта | MSB | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | младший бит |
---|---|---|---|---|---|---|---|---|
перезагрузить | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
переполнение | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
байт 0 | t[7] | t[6] | t[5] | t[4] | t[3] | t[2] | t[1] | t[0] |
байт 1 | x[7] | x[6] | x[5] | x[4] | x[3] | x[2] | x[1] | x[0] |
байт 2 | x[15] | x[14] | x[13] | x[12] | x[11] | x[10] | x[9] | x[8] |
байт 3 | y[7] | y[6] | y[5] | y[4] | y[3] | y[2] | y[1] | y[0] |
байт 4 | y[15] | y[14] | y[13] | y[12] | y[11] | y[10] | y[9] | y[8] |
байт 5 | r[7] | r[6] | r[5] | r[4] | r[3] | r[2] | r[1] | r[0] |
байт 6 | g[7] | g[6] | g[5] | g[4] | g[3] | g[2] | g[1] | g[0] |
байт 7 | b[7] | b[6] | b[5] | b[4] | b[3] | b[2] | b[1] | b[0] |
сброс — это специальное событие, добавляемое, когда это считается необходимым для исправления ошибок конечного автомата, возникающих из-за битовых ошибок. Байты сброса следует вставлять по высоте за раз, чтобы хотя бы один байт был прочитан в состоянии ожидания .
t
кодирует время, прошедшее с момента предыдущего события, в микросекундах и не может быть 0b11111110
или 0b11111111
. Если это время равно или больше 0b11111110
микросекунд, перед событием вставляется один или несколько байтов переполнения . Фактическое время, прошедшее с момента последнего события, можно вычислить как метку времени текущего события плюс 0b11111110
микросекунд, умноженную на количество байтов переполнения .
x
и y
кодируют координаты пикселей, связанные с событием.
r
, g
и b
кодируют компоненты красного, зеленого и синего цвета.
Лицензионные права и ограничения см. в файле LICENSE (GNU GPLv3).