feat(setprotocol): define system payload schemas

This commit is contained in:
2026-09-01 11:47:08 +03:00
parent 19becd7b8c
commit 9b636a9f40
5 changed files with 279 additions and 3 deletions

View File

@@ -125,6 +125,66 @@ static void test_status(void)
CHECK(body[0] == 0xAAU && body[1] == 0x55U);
}
static void test_system_payloads(void)
{
static const uint8_t expected_info[] = {
0x01U, 0x00U, 0x34U, 0x12U, 0x02U, 0x00U, 0x01U, 0x00U,
0x04U, 0x00U, 0x03U, 0x00U, 0x44U, 0x33U, 0x22U, 0x11U,
0xEFU, 0xCDU, 0xABU, 0x89U, 0x67U, 0x45U, 0x23U, 0x01U,
0x06U, 0x53U, 0x45U, 0x54U, 0x2DU, 0x30U, 0x31U
};
static const uint8_t expected_capabilities[] = {
0x01U, 0x00U, 0x00U, 0x02U, 0x0AU, 0x00U, 0x00U, 0x00U,
0x0DU, 0x00U, 0x00U, 0x00U, 0x40U, 0x00U, 0x20U, 0x00U,
0x04U, 0x00U, 0x18U, 0x00U
};
static const uint8_t model[] = "SET-01";
setp_device_info_t info;
setp_device_info_t decoded_info;
setp_capabilities_t capabilities;
setp_capabilities_t decoded_capabilities;
uint8_t payload[SETP_MAX_PAYLOAD];
size_t length;
(void)memset(&info, 0, sizeof(info));
info.schema_version = SETP_DEVICE_INFO_SCHEMA_VERSION;
info.device_class = 0x1234U;
info.hardware_version = 0x00010002UL;
info.firmware_version = 0x00030004UL;
info.dictionary_version = 0x11223344UL;
info.serial_number = 0x0123456789ABCDEFULL;
info.model_length = 6U;
info.model = model;
length = setp_device_info_encode(&info, payload, sizeof(payload));
CHECK(length == sizeof(expected_info));
CHECK(memcmp(payload, expected_info, sizeof(expected_info)) == 0);
CHECK(setp_device_info_decode(payload, (uint16_t)length, &decoded_info));
CHECK(decoded_info.serial_number == info.serial_number);
CHECK(decoded_info.model_length == info.model_length);
CHECK(memcmp(decoded_info.model, model, sizeof(model) - 1U) == 0);
payload[24] = SETP_DEVICE_MODEL_MAX + 1U;
CHECK(!setp_device_info_decode(payload, (uint16_t)length, &decoded_info));
(void)memset(&capabilities, 0, sizeof(capabilities));
capabilities.schema_version = SETP_CAPABILITIES_SCHEMA_VERSION;
capabilities.max_payload = SETP_MAX_PAYLOAD;
capabilities.interface_mask = SETP_IFACE_MASK(SETP_IFACE_RS232)
| SETP_IFACE_MASK(SETP_IFACE_CAN);
capabilities.feature_flags = SETP_FEATURE_READ | SETP_FEATURE_CATALOG
| SETP_FEATURE_SUBSCRIBE;
capabilities.max_read_items = 64U;
capabilities.max_write_items = 32U;
capabilities.max_subscriptions = 4U;
capabilities.max_publish_items = 24U;
length = setp_capabilities_encode(&capabilities, payload, sizeof(payload));
CHECK(length == sizeof(expected_capabilities));
CHECK(memcmp(payload, expected_capabilities, sizeof(expected_capabilities)) == 0);
CHECK(setp_capabilities_decode(payload, (uint16_t)length,
&decoded_capabilities));
CHECK(decoded_capabilities.interface_mask == capabilities.interface_mask);
CHECK(decoded_capabilities.feature_flags == capabilities.feature_flags);
}
typedef struct {
setp_can_frame_t frames[96];
uint16_t count;
@@ -294,6 +354,7 @@ int main(void)
test_crc_and_reference_frame();
test_parser();
test_status();
test_system_payloads();
test_can_binding();
test_firmware();
test_telemetry();