5.0 KiB
5.0 KiB
Спецификация 01: проект Monkey C, манифест, таргеты, сборка
Источники: module_reqs разд. 1 (единица 1, решения гейта 1.3 № 2/4), Ф-2.8, tech-req ОВ-7, указание владельца 2026-10-19 (мультитаргет). Единица 1 + 9 (сборка).
1. Структура проекта
3-app\5-watch\FenixDataField\
manifest.xml — тип datafield, UUID, minApiVersion, продукты
monkey.jungle — таргетная матрица (якорь fenix6x)
resources\
layouts\layout.xml — параметрический макет (спека 03)
strings\strings.xml — en (базовая) + ru (ПОДХОД/ОТДЫХ/зоны)
settings\settings.xml — properties (спека 04)
source\
FenixDataField.mc — класс поля: колбэки платформы, связка ядра
и отрисовки (спека 03 §4)
SetTracker.mc — ядро (спека 02)
RestTimer.mc — ядро (спека 02)
ZoneCalc.mc — ядро (спека 02)
Vibe.mc — паттерны вибраций + гистерезис (спека 04)
FieldSettings.mc — чтение/кламп properties (спека 04)
test\
ZoneCalcTest.mc — (:test)-функции Toybox.Test (спека 02 §5)
RestTimerTest.mc
SetTrackerTest.mc
bin\ — выход сборки (в .gitignore)
2. Манифест
- тип — data field (поле данных штатных активностей; элемент типа — по образцу SDK-сэмпла DataField; сверяется при установке SDK, шаг 3);
- UUID —
34f470ff-b5d1-4141-ad06-c483fa79a1f8(сгенерирован 2026-10-19, неизменен навсегда — идентификатор поля при обновлениях); - minApiVersion 2.1.0 — самый низкий API из используемого (Toybox.Test; остальное — 1.0.0–1.3.0), поле совместимо и со старыми CIQ-устройствами (мультичасовая инфраструктура);
- products —
fenix6x(якорь 280×280, CIQ ≤ 4.1.7); добавление модели = строка продукта + при необходимости свой макет (семейство квадратных MIP покрывается параметрическим — правка кода не требуется); - permissions — не запрашиваются: пульс приходит в
compute(Activity.Info), вибрация —Attention.vibrate, сеть полю не нужна (Ф-2.7); - языки — en (базовая) + ru.
Отображаемое имя поля — «Феникс» (ru) / «Phoenix» (en): под ним поле появляется в списке полей профиля «Силовая».
3. Сборка (решение 2 гейта 1.3 — toolchain)
- Connect IQ SDK (актуальная 9.2) устанавливается агентом в
C:\tools\connectiqпо прецеденту m09; JDK 21 уже установлен (C:\tools\jdk-21.0.12.1+1); - сборка — CLI
monkeycпо каждому таргету матрицы изmonkey.jungle; выход —.prgвbin\; - тесты — прогон
(:test)-функций инструментарием SDK (симулятор); точную команду фиксирует шаг 3 по установленному SDK (спеки фиксируют сами тест-кейсы, не команду); - смок в симуляторе — поле добавляется в профиль Strength, симулируются пульс/Lap (шаг 3);
- подпись для устройства — developer-ключ (генерация по инструкции Garmin, шаг 3), sideload на Fenix 6X — developer mode + Garmin Connect Mobile (инструкция — readme модуля, шаг 4).
Критерий готовности единицы: monkeyc собирает все таргеты матрицы
без ошибок; предупреждения — только обоснованно подавленные.
4. Тесты (готовность сборки)
- Сборка таргета fenix6x проходит без ошибок компиляции/линковки.
.prgпоявляется вbin\, размер разумный (< 200 КБ).- Добавление второго таргета в
monkey.jungle(любая модель семейства квадратных MIP) собирается без правок исходников — проверка мультитаргет-инварианта (инвариант 5) на CI-сборке агента.