updated example to use msg type and bus type functions

David Rebbe 2024-12-04 00:33:14 -05:00
parent a7738f192f
commit 360610c0ac
1 changed files with 42 additions and 11 deletions

View File

@ -46,6 +46,21 @@ int print_error_code(const char* message, icsneo_error_t error) {
return (int)error;
}
/**
* @brief Processes a list of messages from a device.
*
* This function iterates over a given array of messages received from a specified device.
* For each message in the array, it retrieves and prints the message type and bus type.
* If an error occurs while retrieving these details, an error message is printed.
*
* @param device A pointer to the icsneo_device_t structure representing the device.
* @param messages An array of pointers to icsneo_message_t structures containing the messages to process.
* @param messages_count The number of messages in the messages array.
*
* @return An icsneo_error_t value indicating success or failure of the message processing.
*/
int process_messages(icsneo_device_t* device, icsneo_message_t** messages, uint32_t messages_count);
int main(int argc, char* argv[]) {
(void)argc;
(void)argv;
@ -95,9 +110,10 @@ int main(int argc, char* argv[]) {
return print_error_code("Failed to open device", res);
};
// Wait for the bus to collect some messages, requires an active bus to get messages
printf("Waiting 1 second for messages...\n");
sleep_ms(1000);
// Get the messages
icsneo_message_t* messages[20000] = {0};
uint32_t message_count = 20000;
printf("Getting messages from device with timeout of 3000ms on %s...\n", description);
@ -105,17 +121,12 @@ int main(int argc, char* argv[]) {
if (res != icsneo_error_success) {
return print_error_code("Failed to get messages from device", res);
};
printf("Received %u messages\n", message_count);
for (uint32_t i = 0; i < message_count; i++) {
icsneo_message_t* message = messages[i];
uint32_t type = 0;
res = icsneo_message_get_type(device, message, &type);
if (res != icsneo_error_success) {
return print_error_code("Failed to get message type", res);
}
printf("%d Message type: %u\n", i, type);
// Process the messages
res = process_messages(device, messages, message_count);
if (res != icsneo_error_success) {
return print_error_code("Failed to process messages", res);
}
printf("Closing device: %s...\n", description);
res = icsneo_close(device);
if (res != icsneo_error_success) {
@ -125,3 +136,23 @@ int main(int argc, char* argv[]) {
return 0;
}
int process_messages(icsneo_device_t* device, icsneo_message_t** messages, uint32_t messages_count) {
printf("Received %u messages\n", messages_count);
// Print the type and bus type of each message
for (uint32_t i = 0; i < messages_count; i++) {
icsneo_message_t* message = messages[i];
icsneo_msg_type_t msg_type = 0;
icsneo_error_t res = icsneo_message_get_type(device, message, &msg_type);
if (res != icsneo_error_success) {
return print_error_code("Failed to get message type", res);
}
icsneo_msg_bus_type_t bus_type = 0;
res = icsneo_message_get_bus_type(device, message, &bus_type);
if (res != icsneo_error_success) {
return print_error_code("Failed to get message bus type", res);
}
printf("%d Message type: %u bus type: %u\n", i, msg_type, bus_type);
}
return icsneo_error_success;
}