Придумать и задать название проекта, версию и нажать Update
CID – это 4-буквенный идентификатор, который должен быть уникальным для каждой команды. CID не чувствителен к регистру, поэтому MYID и myId – это один и тот же идентификатор.
Name – это имя команды (такое же имя будет у функции вызова этой команды, а также будет включено в имена типов данных, связанных с этой командой). Рекомендуется писать имя команды в snake_case, иначе могут возникнуть проблемы при сборке.
После добавления команды нажать Edit и добавить описание команды на русском и английском языках в блоке Edit command properties в полях english и russian.
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, иначе могут возникнуть проблемы при сборке.
Чтобы добавить аксессоры, нужно перейти на главную страницу проекта. Это можно сделать, кликнув по ссылке Home слева вверху.
AID – это 3-буквенный идентификатор, который должен быть уникальным для каждого аксессора.
AID также не должен пересекаться с идентификаторами команд в формате G<AID> и S<AID>. То есть нельзя создавать аксессор с идентификатором MID, если уже определена команда с идентификатором GMID или SMID.
AID не чувствителен к регистру, поэтому MID и mId – это один и тот же идентификатор.
Name – это имя аксессора (такое же имя будет у функции вызова этого аксессора, а также будет включено в имена типов данных, связанных с этим аксессором). Рекомендуется писать имя команды в snake_case, иначе могут возникнуть проблемы при сборке.
Если аксессор создаётся только для того, чтобы обеспечить существование хотя бы одного аксессора в проекте, в поле Name рекомендуется задать имя dummy.
После добавления аксессора нажать Edit и добавить описание аксессора на русском и английском языках в блоке Edit accessor properties в полях english и russian.
Важно! для корректной работы аксессор должен содержать хотя бы один аргумент
Процесс добавления аргументов аксессоров аналогичен добавлению аргументов команд.
Константы аргументов аксессоров аналогичны константам аргументов команд.
Все сущности: команды, аксессоры, проект, - поддерживают дополнительные опции в формате ключ=значение. Задаются такие пары через запятую: ключ1=значение1, ключ2=значение2, ... Эти дополнительные опции влияют на последующую генерацию прошивок, веб-страницы, библиотеки и так далее. Если генератор знает как использовать переданный ключ и значение, то он его использует. Неизвестные ключи он игнорирует. Таким образом, можно добавлять свои ключи и дописывать их поддержку в нужных генераторах, чтобы кастомизировать uRPC.
На данный момент поддерживаются следующие ключи:
Тэги это способ визульно пометить определённые команды и аксессоры маленькой картинкой. Это используется и для читающего список команд инженера, и для избирательного учёта тэгов в генераторах. Приведём примеры. Тэг Secret можно создать, чтобы помечать команды протокола, которые не должны попадать в генераторы документации, но должны попадать в прошивку. Это могут быть отладочные команды, которые при неумелом использовании могут сломать устройство. Тэг Important можно использовать, чтобы в интерфейсе отладчика выделять кнопки и числовые поля цветом. Также можно использовать его в генераторе документации и выделять цветом нужные поля там.
Чтобы создать тэг нужно придумать его название "some_name" и в опции команды или аксессора добавить some_name=True, а затем создать в папке tags изображение в формате png с именем совпадающем с some_name. Например сейчас создан тэг, is_service_command=True, а в папке tags лежит файл is_service_command.png. Также создан файл is_test.png, поэтому команду или аксессор можно пометить дополнительной опцией is_test=True. Чтобы поставить оба тэга нужно записать в опции is_test=True, is_service_command=True
Чтобы сгенерировать исходный код, нужно перейти на главную страницу проекта. Это можно сделать, кликнув по ссылке Home слева вверху.
На панели справа в разделе Firmware из выпадающего списка выбрать микроконтроллер и нажать Generate.
Сохранить архив с кодом.
На панели справа в разделе Library нажать Generate.
Сохранить архив с кодом.
На панели справа в разделе Project нажать Save.
Сохранить JSON-файл.