feat(setprotocol): define system payload schemas
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user