Придумайте и задайте название проекта и версию. Нажмите кнопку «Update»
CID – это 4-буквенный идентификатор, который должен быть уникальным для каждой команды. CID не чувствителен к регистру, поэтому «MYID» и «myId» – это один и тот же идентификатор.
Name – это имя команды (такое же имя будет у функции вызова этой команды, а также будет включено в имена типов данных, связанных с этой командой). Рекомендуется писать имя команды в snake_case, иначе могут возникнуть проблемы при сборке.
После добавления команды нажмите Edit и добавьте описание команды на русском и английском языках в полях english и russian блока «Edit command properties». Ниже на странице задайте параметры, описанные в пунктах 2.3, 2.4, 2.5.
Name – имя аргумента. После генерации проекта к аргументам можно будет обращаться как к полям структуры по их именам. Рекомендуется писать имена аргументов в CamelCase, иначе могут возникнуть проблемы при сборке.
Length – длина массива. Если оставить это поле пустым, то аргумент будет обычной переменой. Если в поле Length указать число, то данный аргумент будет представлять собой массив из Length элементов.
Суммарная длина всех аргументов команды не должна превышать 250 байт.
Обработка команд производится с учётом их размера в байтах. Поэтому для обеспечения обратной совместимости с последующими версиями протокола необходимо, чтобы размер команды оставался постоянным. Для этого рекомендуется обеспечить запас по размеру команды путём добавления массива reserved.
Пример:
typedef struct
{
uint8_t foo;
uint8_t reserved[41];
}
my_command_v1;
// sizeof(my_command_v1) = 1 + 41 = 42
typedef struct
{
uint8_t foo;
uint8_t bar[3];
uint8_t reserved[38];
}
my_command_v1;
// sizeof(my_command_v2) = 1 + 3 + 38 = 42 = sizeof(my_command_v1)
Для этого нужно нажать на кнопку Edit рядом с соответствующим аргументом в списке и ввести описание в полях.
В случае, если какой-то из аргументов будет представлять собой некоторый набор флагов, или же просто требуется определить универсальный набор констант для прошивки микроконтроллера и программы для ПК, каждому из аргументов можно создать набор констант, которые будут зафиксированы в виде макроопределений в соответствующих заголовочных файлах.
Константы могут быть определены только для скалярных типов аргументов.
Имена констант рекомендуется писать в SCREAMING_SNAKE_CASE, иначе могут возникнуть проблемы при сборке.
Для этого нажмите кнопку Edit рядом с соответствующей константой и введите описание в полях.
AID – это 3-буквенный идентификатор, который должен быть уникальным для каждого аксессора. AID также не должен пересекаться с идентификаторами команд в формате G<AID> и S<AID>. То есть нельзя создавать аксессор с идентификатором «MID», если уже определена команда с идентификатором «GMID» или «SMID». AID не чувствителен к регистру, поэтому «MID» и «mId» – это один и тот же идентификатор.
Name – это имя аксессора (такое же имя будет у функции вызова этого аксессора, а также будет включено в имена типов данных, связанных с этим аксессором). Рекомендуется писать имя команды в snake_case, иначе могут возникнуть проблемы при сборке.
Если аксессор создаётся только для того, чтобы обеспечить существование хотя бы одного аксессора в проекте, в поле Name рекомендуется задать имя «dummy».
После добавления аксессора нажмите Edit и добавьте описание аксессора на русском и английском языках в полях english и russian блока «Edit accessor properties».
Важно! для корректной работы аксессор должен содержать хотя бы один аргумент
Процесс добавления аргументов аксессоров аналогичен добавлению аргументов команд.
Константы аргументов аксессоров аналогичны константам аргументов команд.
Все сущности: команды, аксессоры, проект – поддерживают дополнительные опции в формате «ключ=значение», задаваемые в окне «Extra Options». Задаются такие пары через запятую: «ключ1=значение1, ключ2=значение2, ...». Эти дополнительные опции влияют на последующую генерацию прошивок, веб-страницы, библиотеки и так далее. Если генератор знает, как использовать переданный ключ и значение, то он его использует. Неизвестные ключи он игнорирует. Таким образом, можно добавлять свои ключи и дописывать их поддержку в нужных генераторах, чтобы кастомизировать uRPC.
На данный момент поддерживаются следующие ключи: «is_service_command» и «is_test».
В случае известных ключей uRPC помечает команды соотевтсвующим тегом-картинкой, как на скриншоте ниже.
В этом примере команду stop настроили с двумя ключами: «is_test=True» и «is_service_command=True».
Чтобы снабдить свой ключ тэгом-изображением, необходимо создать изображение с именем
<tag-name>.png
, положить его в директорию uRPC\frontend\static\tags\
. После этого
все команды с настройкой «<tag-name>=True» будут помечены вашим тэгом-изображением.
Сервисные команды – это команды, которые используются при производстве и обслуживании устройств, но не
должны запускаться пользователем. Часто при необдуманном использовании таких команд можно что-то сломать.
Примеры: установка ключа шифрования, установка каких-нибудь калибровок... Также к сервисным командам можно
отнести команды, которые пользователь просто не должен запускать: установка серийного номера, переход в
бутлоадер...
Чтобы отличить сервисные команды от обычных используется комбинация «ключ-значение» - «is_service_command=True».
uRPC позволяет нажатием кнопки «Remove» убрать из протокола все сервисные команды.
Этим ключом вы можете помечать тестовые функции.
Чтобы сгенерировать исходный код, нужно перейти на главную страницу проекта. Это можно сделать, кликнув по ссылке Home слева вверху.
Для генерации кода проекта выполните три шага:
Алгоритм генерации прошивки описан в главе «Прошивка».
На панели справа в разделе Firmware из выпадающего списка выбрать микроконтроллер
и нажать Generate.
Сохранить архив с кодом.
Алгоритм генерации библиотеки описан в главе «Библиотека».
На панели справа в разделе Library нажать Generate.
Сохранить архив с кодом.
На панели справа в разделе Project нажмите Save.
Сохраните JSON-файл.