-
Если фронтенд не отправляет никаких запросов в течение 10 секунд, он автоматически отправляет
REQ,-1. -
Идентификатор
-1— это запрос на поддержание соединения и не привязан к какой-либо кнопке. -
Подчиненный модуль отвечает на него одним сообщением:
RESP,-1.
На фронтенде все кнопки, кроме fullscreen-кнопки в правом верхнем углу, отправляют запрос на slave через master.
Общий формат запроса:
- запрос:
REQ,<id>
Формат ответа зависит от id.
Обычный одиночный ответ:
RESP,<id>
Повторный ответ для специальных id:
- первый ответ:
RESP,<id>,0 - второй ответ:
RESP,<id>,1
Для всех кнопок в DOM добавлен CSS-класс вида req_id-<baseId>.
Для servo-кнопок реальный id дополняется номером сервопривода:
- базовый id:
20 - если выбран сервопривод
1, вslaveуходит20_1 - если выбран сервопривод
4, вslaveуходит20_4
Во фронтенде номер сервопривода берётся явно из servoOptions[].servoNumber, а не из текста кнопки.
Также для удобства на кнопки добавлен data-request-id, а на servo-кнопки ещё и data-servo-number.
master принимает ответ так:
- для обычных
idждёт один пакет отslave - для специальных
idждёт оба пакета в рамках одного HTTP-запроса - это нужно, чтобы второй ответ не перепутался со следующим нажатием кнопки
Повторный ответ есть у базовых id:
610111216172021222324
Если это servo-команда, повторный ответ работает тоже по базовому id.
Примеры:
20_1-> сначалаRESP,20_1,0, потомRESP,20_1,124_3-> сначалаRESP,24_3,0, потомRESP,24_3,1
Поведение сайта для повторного ответа:
- как только фронтенд получает первый ответ
RESP,<id>,0, поверх сайта появляется полупрозрачное серое окно - это окно блокирует управление интерфейсом
- как только фронтенд получает второй ответ
RESP,<id>,1, затемнение пропадает
| Кнопка | CSS-класс | Base id | Что реально отправляется | Ответ slave |
|---|---|---|---|---|
Вкладка Main |
req_id-0 |
0 |
0 |
RESP,0 |
Вкладка Kran |
req_id-1 |
1 |
1 |
RESP,1 |
Вкладка Lapa |
req_id-2 |
2 |
2 |
RESP,2 |
Вкладка Servo |
req_id-3 |
3 |
3 |
RESP,3 |
Вкладка Telemetry |
req_id-4 |
4 |
4 |
RESP,4 |
Вкладка Label |
req_id-5 |
5 |
5 |
RESP,5 |
| Кнопка старта автономного режима | req_id-6 |
6 |
6 |
RESP,6,0 -> RESP,6,1 |
Kran: режим Авто |
req_id-7 |
7 |
7 |
RESP,7 |
Kran: режим Ручной |
req_id-8 |
8 |
8 |
RESP,8 |
Kran: стрелка вверх |
req_id-9 |
9 |
9 |
RESP,9 |
Kran: стрелка вниз |
req_id-10 |
10 |
10 |
RESP,10,0 -> RESP,10,1 |
Kran: кнопка Исходное |
req_id-11 |
11 |
11 |
RESP,11,0 -> RESP,11,1 |
Kran: кнопка Выбросить |
req_id-12 |
12 |
12 |
RESP,12,0 -> RESP,12,1 |
Lapa: кнопка Лапа 1 |
req_id-13 |
13 |
13 |
RESP,13 |
Lapa: кнопка Лапа 2 |
req_id-14 |
14 |
14 |
RESP,14 |
Lapa: кнопка Лапа 3 |
req_id-15 |
15 |
15 |
RESP,15 |
Lapa: кнопка Захватить |
req_id-16 |
16 |
16 |
RESP,16,0 -> RESP,16,1 |
Lapa: кнопка Отпустить |
req_id-17 |
17 |
17 |
RESP,17,0 -> RESP,17,1 |
Servo: открыть/закрыть список сервоприводов |
req_id-18 |
18 |
18_<servoNumber> |
RESP,18_<servoNumber> |
Servo: выбрать сервопривод из списка |
req_id-19 |
19 |
19_<servoNumber> |
RESP,19_<servoNumber> |
Servo: кнопка A- |
req_id-20 |
20 |
20_<servoNumber> |
RESP,20_<servoNumber>,0 -> RESP,20_<servoNumber>,1 |
Servo: кнопка A+ |
req_id-21 |
21 |
21_<servoNumber> |
RESP,21_<servoNumber>,0 -> RESP,21_<servoNumber>,1 |
Servo: кнопка Возврат в 0 |
req_id-22 |
22 |
22_<servoNumber> |
RESP,22_<servoNumber>,0 -> RESP,22_<servoNumber>,1 |
Servo: кнопка Задать 0 с текущего положения |
req_id-23 |
23 |
23_<servoNumber> |
RESP,23_<servoNumber>,0 -> RESP,23_<servoNumber>,1 |
Servo: кнопка Задать конечную позицию с текущего положения |
req_id-24 |
24 |
24_<servoNumber> |
RESP,24_<servoNumber>,0 -> RESP,24_<servoNumber>,1 |
Servo: кнопка Отправить |
req_id-25 |
25 |
25_<servoNumber> |
RESP,25_<servoNumber> |
Telemetry: открыть/закрыть список |
req_id-26 |
26 |
26 |
RESP,26 |
Telemetry: пункт Общая информация |
req_id-27 |
27 |
27 |
RESP,27 |
Telemetry: пункт Колесная база |
req_id-28 |
28 |
28 |
RESP,28 |
Telemetry: пункт Подъемник |
req_id-29 |
29 |
29 |
RESP,29 |
На slave второй ответ для специальных id сейчас отправляется через 2000 ms.
Эта задержка задаётся константой REPEATED_RESPONSE_DELAY_MS в atMega/src/main.cpp.
Fullscreen-кнопка в правом верхнем углу:
- не имеет
req_id-* - не отправляет запросов на
slave - только переключает режим полного экрана браузера