Коммуникационные пакеты
Протокол поддерживает четыре основных типа пакетов для обмена с платой.
Запросы (псевдокод интерфейса):
GetInfo() -> optional<InfoPacketType>
GetVersion() -> optional<VersionPacketType>
GetUID() -> optional<UIDPacketType>
GetRFID() -> optional<RFIDNumberType>
GetRFIDData() -> optional<RFIDDataPacketType>
Restart() -> optional<BootAnswerType>
Типы пакетов
1. InfoPacketType
Содержит:
- BoardStatus status — состояние платы: IDLE(0), CALIBRATION(1), ERROR(2), READY(3), WORK(4);
- ErrorFlags errors — флаги ошибок:
- Calibration (1<<0)
- Motor (1<<1)
- RFID (1<<2)
- RFID_NoCard (1<<3)
- RFID_BadCard (1<<4)
- InvalidTime
- ShelfLifeExceeded
- UsageTimeExceeded
- RFIDNumberType rfid — номер RFID метки упаковки.
2. VersionPacketType
Содержит:
- version_major — основной номер версии платы (целое неотрицательное число)
- version_minor — дополнительный номер версии (целое неотрицательное число)
3. UIDPacketType
Содержит:
- uid — уникальный идентификатор платы, 12 байт в HEX (например, 0x000102030405060708090a0b)
4. RFIDDataPacketType
Полная структура данных с упаковки/устройства:
- MagicWord magicWord (ожидаемый 0xCCAA)
- LacteId lacteId
- LacteSn lacteSn — серийник пачки
- ProductVolume productVolume
- ProdDate prodDate — Unix timestamp
- ProductShelfLife shelfLife — резерв
- UsageTime usageTime
- McuUid mcuUid — серийник платы
- MachineSn machineSn — серийник устройства
- ActivationTime activationTime
- MilkCounter milkCounter
- TimeCounter timeCounter
4. BootAnswerType
Согласие на перезагрузку на перезагрузку.