• О проекте
  • Создание проекта
  • Библиотека
  • Документация
  • Прошивка
  • Qt debugger
  • Python
  • C#
  • TANGO
  • Конвертер профилей
  • Создание проекта

    1. Общая конфигурация проекта
    2. Создание команд
      1. Определение команд
      2. Добавление описания команд
      3. Добавление аргументов запроса и ответа команды
      4. Добавление описания аргументов на русском и английском языках
      5. Добавление константы
      6. Добавление описания констант на русском и английском языках
    3. Добавление аксессоров
      1. Определение аксессоров
      2. Добавление описание аксессоров
      3. Добавление аргументов аксессора
      4. Добавление константы
    4. Добавление дополнительных опций
      1. Ключ is_service_command
      2. Ключ is_test
    5. Генерация исходного кода проекта
      1. Генерация исходного кода прошивки для микроконтроллера
      2. Генерация кода библиотеки
      3. Сохранение параметры проекта

    1. Общая конфигурация проекта

    Придумайте и задайте название проекта и версию. Нажмите кнопку «Update»


    2. Создание команд

    2.1. Определение команд

    CID – это 4-буквенный идентификатор, который должен быть уникальным для каждой команды. CID не чувствителен к регистру, поэтому «MYID» и «myId» – это один и тот же идентификатор.

    Name – это имя команды (такое же имя будет у функции вызова этой команды, а также будет включено в имена типов данных, связанных с этой командой). Рекомендуется писать имя команды в snake_case, иначе могут возникнуть проблемы при сборке.

    2.2. Добавление описания команд

    После добавления команды нажмите Edit и добавьте описание команды на русском и английском языках в полях english и russian блока «Edit command properties». Ниже на странице задайте параметры, описанные в пунктах 2.3, 2.4, 2.5.

    2.3. Добавление аргументов запроса и ответа команды

    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)
        

    2.4. Добавление описания аргументов на русском и английском языках

    Для этого нужно нажать на кнопку Edit рядом с соответствующим аргументом в списке и ввести описание в полях.

    2.5 Добавление константы

    В случае, если какой-то из аргументов будет представлять собой некоторый набор флагов, или же просто требуется определить универсальный набор констант для прошивки микроконтроллера и программы для ПК, каждому из аргументов можно создать набор констант, которые будут зафиксированы в виде макроопределений в соответствующих заголовочных файлах.

    Константы могут быть определены только для скалярных типов аргументов.

    Имена констант рекомендуется писать в SCREAMING_SNAKE_CASE, иначе могут возникнуть проблемы при сборке.

    2.6 Добавление описания констант на русском и английском языках

    Для этого нажмите кнопку Edit рядом с соответствующей константой и введите описание в полях.


    3. Добавление аксессоров

    3.1. Определение аксессоров

    В главном окне uRPC найдите раздел «Accessors»:

    AID – это 3-буквенный идентификатор, который должен быть уникальным для каждого аксессора. AID также не должен пересекаться с идентификаторами команд в формате G<AID> и S<AID>. То есть нельзя создавать аксессор с идентификатором «MID», если уже определена команда с идентификатором «GMID» или «SMID». AID не чувствителен к регистру, поэтому «MID» и «mId» – это один и тот же идентификатор.

    Name – это имя аксессора (такое же имя будет у функции вызова этого аксессора, а также будет включено в имена типов данных, связанных с этим аксессором). Рекомендуется писать имя команды в snake_case, иначе могут возникнуть проблемы при сборке.

    Если аксессор создаётся только для того, чтобы обеспечить существование хотя бы одного аксессора в проекте, в поле Name рекомендуется задать имя «dummy».

    3.2. Добавление описание аксессоров

    После добавления аксессора нажмите Edit и добавьте описание аксессора на русском и английском языках в полях english и russian блока «Edit accessor properties».

    3.3. Добавление аргументов аксессора

    Важно! для корректной работы аксессор должен содержать хотя бы один аргумент

    Процесс добавления аргументов аксессоров аналогичен добавлению аргументов команд.

    3.4. Добавление константы

    Константы аргументов аксессоров аналогичны константам аргументов команд.


    4. Добавление дополнительных опций

    Edit field for extra options

    Все сущности: команды, аксессоры, проект – поддерживают дополнительные опции в формате «ключ=значение», задаваемые в окне «Extra Options». Задаются такие пары через запятую: «ключ1=значение1, ключ2=значение2, ...». Эти дополнительные опции влияют на последующую генерацию прошивок, веб-страницы, библиотеки и так далее. Если генератор знает, как использовать переданный ключ и значение, то он его использует. Неизвестные ключи он игнорирует. Таким образом, можно добавлять свои ключи и дописывать их поддержку в нужных генераторах, чтобы кастомизировать uRPC.

    На данный момент поддерживаются следующие ключи: «is_service_command» и «is_test».

    Filled options with two tags

    В случае известных ключей uRPC помечает команды соотевтсвующим тегом-картинкой, как на скриншоте ниже.

    Two tags view in protocol web page

    В этом примере команду stop настроили с двумя ключами: «is_test=True» и «is_service_command=True».

    Чтобы снабдить свой ключ тэгом-изображением, необходимо создать изображение с именем <tag-name>.png, положить его в директорию uRPC\frontend\static\tags\. После этого все команды с настройкой «<tag-name>=True» будут помечены вашим тэгом-изображением.

    4.1. Ключ is_service_command

    Сервисные команды – это команды, которые используются при производстве и обслуживании устройств, но не должны запускаться пользователем. Часто при необдуманном использовании таких команд можно что-то сломать. Примеры: установка ключа шифрования, установка каких-нибудь калибровок... Также к сервисным командам можно отнести команды, которые пользователь просто не должен запускать: установка серийного номера, переход в бутлоадер...

    Чтобы отличить сервисные команды от обычных используется комбинация «ключ-значение» - «is_service_command=True».

    uRPC позволяет нажатием кнопки «Remove» убрать из протокола все сервисные команды.

    Remove button

    4.2 Ключ is_test

    Этим ключом вы можете помечать тестовые функции.


    5. Генерация исходного кода проекта

    Чтобы сгенерировать исходный код, нужно перейти на главную страницу проекта. Это можно сделать, кликнув по ссылке Home слева вверху.

    Для генерации кода проекта выполните три шага:

    5.1. Генерация исходного кода прошивки для микроконтроллера

    Алгоритм генерации прошивки описан в главе «Прошивка».

    На панели справа в разделе Firmware из выпадающего списка выбрать микроконтроллер и нажать Generate.
    Сохранить архив с кодом.

    5.2 Генерация кода библиотеки

    Алгоритм генерации библиотеки описан в главе «Библиотека».

    На панели справа в разделе Library нажать Generate.
    Сохранить архив с кодом.

    5.3 Сохранение параметры проекта

    На панели справа в разделе Project нажмите Save.
    Сохраните JSON-файл.