fixed messages
parent
fde2f670b5
commit
63fd8c2f3a
|
|
@ -2,14 +2,20 @@
|
||||||
#include <icsneo/device/device.h>
|
#include <icsneo/device/device.h>
|
||||||
#include "icsneo/device/devicefinder.h"
|
#include "icsneo/device/devicefinder.h"
|
||||||
|
|
||||||
|
#include "icsneo/communication/message/message.h"
|
||||||
|
#include "icsneo/communication/message/canmessage.h"
|
||||||
|
#include "icsneo/communication/message/linmessage.h"
|
||||||
|
#include "icsneo/communication/message/ethernetmessage.h"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <deque>
|
#include <vector>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
using namespace icsneo;
|
using namespace icsneo;
|
||||||
|
|
||||||
typedef struct icsneo_device_t {
|
typedef struct icsneo_device_t {
|
||||||
std::shared_ptr<Device> device;
|
std::shared_ptr<Device> device;
|
||||||
|
std::vector<std::shared_ptr<icsneo_message_t>> messages;
|
||||||
|
|
||||||
icsneo_open_options_t options;
|
icsneo_open_options_t options;
|
||||||
} icsneo_device_t;
|
} icsneo_device_t;
|
||||||
|
|
@ -19,8 +25,7 @@ typedef struct icsneo_message_t {
|
||||||
} icsneo_message_t;
|
} icsneo_message_t;
|
||||||
|
|
||||||
|
|
||||||
static std::deque<std::shared_ptr<icsneo_device_t>> g_devices;
|
static std::vector<std::shared_ptr<icsneo_device_t>> g_devices;
|
||||||
static std::deque<std::shared_ptr<icsneo_message_t>> g_messages;
|
|
||||||
|
|
||||||
ICSNEO_API icsneo_error_t icsneo_error_code(icsneo_error_t error_code, const char* value, uint32_t* value_length) {
|
ICSNEO_API icsneo_error_t icsneo_error_code(icsneo_error_t error_code, const char* value, uint32_t* value_length) {
|
||||||
if (!value || !value_length) {
|
if (!value || !value_length) {
|
||||||
|
|
@ -180,6 +185,8 @@ ICSNEO_API icsneo_error_t icsneo_close(icsneo_device_t* device) {
|
||||||
return icsneo_error_success;
|
return icsneo_error_success;
|
||||||
}
|
}
|
||||||
dev->close();
|
dev->close();
|
||||||
|
// Clear out old messages
|
||||||
|
device->messages.clear();
|
||||||
return icsneo_error_success;
|
return icsneo_error_success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -343,37 +350,46 @@ ICSNEO_API icsneo_error_t icsneo_get_messages(icsneo_device_t* device, icsneo_me
|
||||||
*messages_count = min_size;
|
*messages_count = min_size;
|
||||||
|
|
||||||
// Copy the messages into our global message container
|
// Copy the messages into our global message container
|
||||||
g_messages.clear();
|
device->messages.clear();
|
||||||
for (auto& message : queried_messages) {
|
for (auto& message : queried_messages) {
|
||||||
auto message_t = std::make_shared<icsneo_message_t>();
|
auto message_t = std::make_shared<icsneo_message_t>();
|
||||||
message_t->message = message;
|
message_t->message = message;
|
||||||
g_messages.push_back(message_t);
|
device->messages.push_back(message_t);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy the messages into the output array
|
// Copy the messages into the output array
|
||||||
for (uint32_t i = 0; i < min_size; i++) {
|
for (uint32_t i = 0; i < min_size; i++) {
|
||||||
messages[i] = g_messages[i].get();
|
messages[i] = device->messages[i].get();
|
||||||
}
|
}
|
||||||
|
|
||||||
return icsneo_error_success;
|
return icsneo_error_success;
|
||||||
}
|
}
|
||||||
|
|
||||||
ICSNEO_API icsneo_error_t icsneo_is_message_valid(icsneo_message_t* message, bool* is_valid) {
|
ICSNEO_API icsneo_error_t icsneo_is_message_valid(icsneo_device_t* device, icsneo_message_t* message, bool* is_valid) {
|
||||||
if (!message || !is_valid) {
|
if (!message || !is_valid) {
|
||||||
return icsneo_error_invalid_parameters;
|
return icsneo_error_invalid_parameters;
|
||||||
}
|
}
|
||||||
*is_valid = std::find_if(g_messages.begin(), g_messages.end(), [&](const auto& msg) {
|
*is_valid = std::find_if(device->messages.begin(), device->messages.end(), [&](const auto& msg) {
|
||||||
return msg->message == message->message;
|
return msg->message == message->message;
|
||||||
}) == g_messages.end();
|
}) == device->messages.end();
|
||||||
|
|
||||||
return icsneo_error_success;
|
return icsneo_error_success;
|
||||||
}
|
}
|
||||||
|
|
||||||
ICSNEO_API icsneo_error_t icsneo_message_get_type(icsneo_message_t* message, uint32_t* type) {
|
ICSNEO_API icsneo_error_t icsneo_message_get_type(icsneo_device_t* device, icsneo_message_t* message, uint32_t* type) {
|
||||||
if (!message || !type) {
|
if (!message || !type) {
|
||||||
return icsneo_error_invalid_parameters;
|
return icsneo_error_invalid_parameters;
|
||||||
}
|
}
|
||||||
*type = (uint32_t)message->message->type;
|
// TODO: Fix this in the core so we actually get the message type from the message
|
||||||
|
if (dynamic_cast<CANMessage*>(message->message.get())) {
|
||||||
|
return 100;
|
||||||
|
} else if (dynamic_cast<LINMessage*>(message->message.get())) {
|
||||||
|
return 200;
|
||||||
|
} else if (dynamic_cast<EthernetMessage*>(message->message.get())) {
|
||||||
|
return 300;
|
||||||
|
} else {
|
||||||
|
return 999;
|
||||||
|
}
|
||||||
|
|
||||||
return icsneo_error_success;
|
return icsneo_error_success;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -100,6 +100,7 @@ int main(int argc, char* argv[]) {
|
||||||
|
|
||||||
icsneo_message_t* messages[20000] = {0};
|
icsneo_message_t* messages[20000] = {0};
|
||||||
uint32_t message_count = 20000;
|
uint32_t message_count = 20000;
|
||||||
|
printf("Getting messages from device with timeout of 3000ms on %s...\n", description);
|
||||||
res = icsneo_get_messages(device, messages, &message_count, 3000);
|
res = icsneo_get_messages(device, messages, &message_count, 3000);
|
||||||
if (res != icsneo_error_success) {
|
if (res != icsneo_error_success) {
|
||||||
return print_error_code("Failed to get messages from device", res);
|
return print_error_code("Failed to get messages from device", res);
|
||||||
|
|
@ -109,7 +110,7 @@ int main(int argc, char* argv[]) {
|
||||||
for (uint32_t i = 0; i < message_count; i++) {
|
for (uint32_t i = 0; i < message_count; i++) {
|
||||||
icsneo_message_t* message = messages[i];
|
icsneo_message_t* message = messages[i];
|
||||||
uint32_t type = 0;
|
uint32_t type = 0;
|
||||||
res = icsneo_message_get_type(message, &type);
|
res = icsneo_message_get_type(device, message, &type);
|
||||||
if (res != icsneo_error_success) {
|
if (res != icsneo_error_success) {
|
||||||
return print_error_code("Failed to get message type", res);
|
return print_error_code("Failed to get message type", res);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -278,14 +278,15 @@ ICSNEO_API icsneo_error_t icsneo_get_messages(icsneo_device_t* device, icsneo_me
|
||||||
|
|
||||||
/** @brief Check if a message is valid
|
/** @brief Check if a message is valid
|
||||||
*
|
*
|
||||||
|
* @param[in] icsneo_device_t* device The device to check against.
|
||||||
* @param[in] icsneo_message_t* message The message to check.
|
* @param[in] icsneo_message_t* message The message to check.
|
||||||
* @param[out] bool* is_valid Pointer to a bool to copy the validity of the message into.
|
* @param[out] bool* is_valid Pointer to a bool to copy the validity of the message into.
|
||||||
*
|
*
|
||||||
* @return icsneo_error_t icsneo_error_success if successful, icsneo_error_invalid_parameters otherwise.
|
* @return icsneo_error_t icsneo_error_success if successful, icsneo_error_invalid_parameters otherwise.
|
||||||
*/
|
*/
|
||||||
ICSNEO_API icsneo_error_t icsneo_is_message_valid(icsneo_message_t* message, bool* is_valid);
|
ICSNEO_API icsneo_error_t icsneo_is_message_valid(icsneo_device_t* device, icsneo_message_t* message, bool* is_valid);
|
||||||
|
|
||||||
ICSNEO_API icsneo_error_t icsneo_message_get_type(icsneo_message_t* message, uint32_t* type);
|
ICSNEO_API icsneo_error_t icsneo_message_get_type(icsneo_device_t* device, icsneo_message_t* message, uint32_t* type);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue