mirror of
https://github.com/intrepidcs/libicsneo.git
synced 2026-08-05 01:18:36 +02:00
Added icsneo_isMessagePollingEnabled(), removed polling check from transmitting, and disabled error reporting on device destruction
This commit is contained in:
@@ -21,6 +21,7 @@ namespace icsneo {
|
||||
class Device {
|
||||
public:
|
||||
virtual ~Device() {
|
||||
destructing = true;
|
||||
disableMessagePolling();
|
||||
close();
|
||||
}
|
||||
@@ -51,6 +52,7 @@ public:
|
||||
// Message polling related functions
|
||||
void enableMessagePolling();
|
||||
bool disableMessagePolling();
|
||||
bool isMessagePollingEnabled() { return messagePollingCallbackID != 0; };
|
||||
std::vector<std::shared_ptr<Message>> getMessages();
|
||||
bool getMessages(std::vector<std::shared_ptr<Message>>& container, size_t limit = 0, std::chrono::milliseconds timeout = std::chrono::milliseconds(0));
|
||||
size_t getCurrentMessageCount() { return pollingContainer.size_approx(); }
|
||||
@@ -114,7 +116,10 @@ protected:
|
||||
}
|
||||
|
||||
virtual device_errorhandler_t makeErrorHandler() {
|
||||
return [this](APIError::ErrorType type) { ErrorManager::GetInstance().add(type, this); };
|
||||
return [this](APIError::ErrorType type) {
|
||||
if(!destructing)
|
||||
ErrorManager::GetInstance().add(type, this);
|
||||
};
|
||||
}
|
||||
|
||||
template<typename Transport>
|
||||
@@ -169,6 +174,8 @@ private:
|
||||
size_t pollingMessageLimit = 20000;
|
||||
moodycamel::BlockingConcurrentQueue<std::shared_ptr<Message>> pollingContainer;
|
||||
void enforcePollingMessageLimit();
|
||||
|
||||
bool destructing = false;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -195,6 +195,8 @@ extern bool DLLExport icsneo_enableMessagePolling(const neodevice_t* device);
|
||||
*/
|
||||
extern bool DLLExport icsneo_disableMessagePolling(const neodevice_t* device);
|
||||
|
||||
extern bool DLLExport icsneo_isMessagePollingEnabled(const neodevice_t* device);
|
||||
|
||||
/**
|
||||
* \brief Read out messages which have been recieved
|
||||
* \param[in] device A pointer to the neodevice_t structure specifying the device to operate on.
|
||||
@@ -696,6 +698,9 @@ fn_icsneo_enableMessagePolling icsneo_enableMessagePolling;
|
||||
typedef bool(*fn_icsneo_disableMessagePolling)(const neodevice_t* device);
|
||||
fn_icsneo_disableMessagePolling icsneo_disableMessagePolling;
|
||||
|
||||
typedef bool(*fn_icsneo_isMessagePollingEnabled)(const neodevice_t* device);
|
||||
fn_icsneo_isMessagePollingEnabled icsneo_isMessagePollingEnabled;
|
||||
|
||||
typedef bool(*fn_icsneo_getMessages)(const neodevice_t* device, neomessage_t* messages, size_t* items, uint64_t timeout);
|
||||
fn_icsneo_getMessages icsneo_getMessages;
|
||||
|
||||
@@ -804,6 +809,7 @@ int icsneo_init() {
|
||||
ICSNEO_IMPORTASSERT(icsneo_isOnline);
|
||||
ICSNEO_IMPORTASSERT(icsneo_enableMessagePolling);
|
||||
ICSNEO_IMPORTASSERT(icsneo_disableMessagePolling);
|
||||
ICSNEO_IMPORTASSERT(icsneo_isMessagePollingEnabled);
|
||||
ICSNEO_IMPORTASSERT(icsneo_getMessages);
|
||||
ICSNEO_IMPORTASSERT(icsneo_getPollingMessageLimit);
|
||||
ICSNEO_IMPORTASSERT(icsneo_setPollingMessageLimit);
|
||||
|
||||
Reference in New Issue
Block a user