mirror of
https://github.com/intrepidcs/libicsneo.git
synced 2026-09-20 16:08:37 +02:00
Compare commits
5
Commits
7cca96dcfb
...
1.3.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5620c98eda | ||
|
|
c466d75dae | ||
|
|
d7fc7ffa47 | ||
|
|
70ad76771e | ||
|
|
87c10410e8 |
@@ -63,8 +63,8 @@ static constexpr const char* NO_SERIAL_NUMBER_12V = "Communication could not be
|
||||
static constexpr const char* NO_SERIAL_NUMBER = "Communication could not be established with the device. Perhaps it is not powered or requires a firmware update using Vehicle Spy.";
|
||||
static constexpr const char* INCORRECT_SERIAL_NUMBER = "The device did not return the expected serial number!";
|
||||
static constexpr const char* SETTINGS_READ = "The device settings could not be read.";
|
||||
static constexpr const char* SETTINGS_VERSION = "The settings version is incorrect, please update your firmware with neoVI Explorer.";
|
||||
static constexpr const char* SETTINGS_LENGTH = "The settings length is incorrect, please update your firmware with neoVI Explorer.";
|
||||
static constexpr const char* SETTINGS_VERSION = "The settings version is incorrect, please update your firmware with ICS Device Manager.";
|
||||
static constexpr const char* SETTINGS_LENGTH = "The settings length is incorrect, please update your firmware with ICS Device Manager.";
|
||||
static constexpr const char* SETTINGS_CHECKSUM = "The settings checksum is incorrect, attempting to set defaults may remedy this issue.";
|
||||
static constexpr const char* SETTINGS_NOT_AVAILABLE = "Settings are not available for this device.";
|
||||
static constexpr const char* SETTINGS_READONLY = "Settings are read-only for this device.";
|
||||
@@ -167,7 +167,6 @@ static constexpr const char* SERVD_POLL_ERROR = "Error polling on Servd socket";
|
||||
static constexpr const char* SERVD_NODATA_ERROR = "No data received from Servd";
|
||||
static constexpr const char* SERVD_JOIN_MULTICAST_ERROR = "Error joining Servd multicast group";
|
||||
static constexpr const char* SERVD_NOT_REACHABLE = "Could not reach Servd; ensure it is installed and running";
|
||||
static constexpr const char* SERVD_NO_DEVICES_FOUND = "Servd is running but no devices found";
|
||||
|
||||
// DXX
|
||||
static constexpr const char* DXX_ERROR_SYS = "System error, check errno/GetLastError()";
|
||||
@@ -442,8 +441,6 @@ const char* APIEvent::DescriptionForType(Type type) {
|
||||
return SERVD_JOIN_MULTICAST_ERROR;
|
||||
case Type::ServdNotReachable:
|
||||
return SERVD_NOT_REACHABLE;
|
||||
case Type::ServdNoDevicesFound:
|
||||
return SERVD_NO_DEVICES_FOUND;
|
||||
|
||||
// DXX
|
||||
case Type::DXXErrorSys:
|
||||
|
||||
@@ -127,7 +127,6 @@ void init_event(pybind11::module_& m) {
|
||||
.value("ServdNoDataError", APIEvent::Type::ServdNoDataError)
|
||||
.value("ServdJoinMulticastError", APIEvent::Type::ServdJoinMulticastError)
|
||||
.value("ServdNotReachable", APIEvent::Type::ServdNotReachable)
|
||||
.value("ServdNoDevicesFound", APIEvent::Type::ServdNoDevicesFound)
|
||||
.value("DXXErrorSys", APIEvent::Type::DXXErrorSys)
|
||||
.value("DXXErrorInt", APIEvent::Type::DXXErrorInt)
|
||||
.value("DXXErrorOverflow", APIEvent::Type::DXXErrorOverflow)
|
||||
|
||||
@@ -127,7 +127,7 @@ FlexRay Coldstart Configuration
|
||||
|
||||
To use the Coldstart example, ensure the following:
|
||||
|
||||
Set the Flexray network in neoVI Explorer to Coldstart.
|
||||
Set the Flexray network in ICS Device Manager to Coldstart.
|
||||
|
||||
No other nodes should be present on the network during testing.
|
||||
|
||||
|
||||
@@ -406,6 +406,9 @@ int main(int argc, char** argv) {
|
||||
|
||||
if(it == devices.end()) {
|
||||
std::cerr << "Could not find RAD-A2B." << std::endl;
|
||||
auto lastError = icsneo::GetLastError();
|
||||
if(lastError.getType() != icsneo::APIEvent::Type::NoErrorFound)
|
||||
std::cerr << lastError << std::endl;
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
|
||||
@@ -92,6 +92,9 @@ int main(int argc, const char** argv) {
|
||||
|
||||
if(!device) {
|
||||
std::cerr << "Device with serial " << serial << " not found" << std::endl;
|
||||
auto lastError = icsneo::GetLastError();
|
||||
if(lastError.getType() != icsneo::APIEvent::Type::NoErrorFound)
|
||||
std::cerr << lastError << std::endl;
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
@@ -99,6 +102,9 @@ int main(int argc, const char** argv) {
|
||||
auto devices = icsneo::FindAllDevices();
|
||||
if(devices.empty()) {
|
||||
std::cerr << "No devices found" << std::endl;
|
||||
auto lastError = icsneo::GetLastError();
|
||||
if(lastError.getType() != icsneo::APIEvent::Type::NoErrorFound)
|
||||
std::cerr << lastError << std::endl;
|
||||
return -1;
|
||||
}
|
||||
device = devices[0];
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
/*
|
||||
* App errors are responses from the device indicating internal runtime errors
|
||||
* NOTE: To trigger the app error in this example, disable the DW CAN 01 network on the device
|
||||
* (e.g. with neoVI Explorer)
|
||||
* (e.g. with ICS Device Manager)
|
||||
*/
|
||||
int main() {
|
||||
std::cout << "Running libicsneo " << icsneo::GetVersion() << std::endl;
|
||||
@@ -17,6 +17,13 @@ int main() {
|
||||
auto devices = icsneo::FindAllDevices();
|
||||
std::cout << "OK, " << devices.size() << " device" << (devices.size() == 1 ? "" : "s") << " found" << std::endl;
|
||||
|
||||
if(devices.empty()) {
|
||||
auto lastError = icsneo::GetLastError();
|
||||
if(lastError.getType() != icsneo::APIEvent::Type::NoErrorFound)
|
||||
std::cout << lastError << std::endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// List off the devices
|
||||
for(auto& device : devices)
|
||||
std::cout << '\t' << device->describe() << " @ Handle " << device->getNeoDevice().handle << std::endl;
|
||||
|
||||
@@ -33,6 +33,9 @@ int main(int argc, char** argv) {
|
||||
|
||||
if(it == devices.end()) {
|
||||
std::cout << "Failed to find device." << std::endl;
|
||||
auto lastError = icsneo::GetLastError();
|
||||
if(lastError.getType() != icsneo::APIEvent::Type::NoErrorFound)
|
||||
std::cout << lastError << std::endl;
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
|
||||
@@ -12,7 +12,9 @@ int main() {
|
||||
std::cout << "OK, " << devices.size() << " device" << (devices.size() == 1 ? "" : "s") << " found" << std::endl;
|
||||
|
||||
if(devices.empty()) {
|
||||
std::cout << "error: no devices found" << std::endl;
|
||||
auto lastError = icsneo::GetLastError();
|
||||
if(lastError.getType() != icsneo::APIEvent::Type::NoErrorFound)
|
||||
std::cout << lastError << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
@@ -138,6 +138,12 @@ std::vector<std::shared_ptr<icsneo::FlexRayMessage>> makeDummyFlexRayMessages(si
|
||||
|
||||
int main() {
|
||||
auto devices = icsneo::FindAllDevices();
|
||||
if(devices.empty()) {
|
||||
auto lastError = icsneo::GetLastError();
|
||||
if(lastError.getType() != icsneo::APIEvent::Type::NoErrorFound)
|
||||
std::cerr << lastError << std::endl;
|
||||
return -1;
|
||||
}
|
||||
std::shared_ptr<icsneo::Device> flexrayDevice = nullptr;
|
||||
for (auto&& device : devices) {
|
||||
if (device->getExtension("FlexRay")) {
|
||||
|
||||
@@ -15,6 +15,13 @@ int main() {
|
||||
// You now hold the shared_ptrs for these devices, you are considered to "own" these devices from a memory perspective
|
||||
std::cout << "OK, " << devices.size() << " device" << (devices.size() == 1 ? "" : "s") << " found" << std::endl;
|
||||
|
||||
if(devices.empty()) {
|
||||
auto lastError = icsneo::GetLastError();
|
||||
if(lastError.getType() != icsneo::APIEvent::Type::NoErrorFound)
|
||||
std::cout << lastError << std::endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// List off the devices
|
||||
for(auto& device : devices)
|
||||
std::cout << '\t' << device->describe() << " @ Handle " << device->getNeoDevice().handle << std::endl;
|
||||
|
||||
@@ -14,6 +14,13 @@ int main() {
|
||||
auto devices = icsneo::FindAllDevices(); // This is type std::vector<std::shared_ptr<icsneo::Device>>
|
||||
std::cout << "OK, " << devices.size() << " device" << (devices.size() == 1 ? "" : "s") << " found" << std::endl;
|
||||
|
||||
if(devices.empty()) {
|
||||
auto lastError = icsneo::GetLastError();
|
||||
if(lastError.getType() != icsneo::APIEvent::Type::NoErrorFound)
|
||||
std::cout << lastError << std::endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// List off the devices
|
||||
for(auto& device : devices)
|
||||
std::cout << '\t' << device->describe() << " @ Handle " << device->getNeoDevice().handle << std::endl;
|
||||
|
||||
@@ -9,8 +9,10 @@ int main(int, char**) {
|
||||
|
||||
auto devices = icsneo::FindAllDevices();
|
||||
|
||||
if(devices.size() == 0) {
|
||||
std::cout << "No device found" << std::endl;
|
||||
if(devices.empty()) {
|
||||
auto lastError = icsneo::GetLastError();
|
||||
if(lastError.getType() != icsneo::APIEvent::Type::NoErrorFound)
|
||||
std::cout << lastError << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
@@ -48,6 +48,13 @@ int main()
|
||||
// You now hold the shared_ptrs for these devices, you are considered to "own" these devices from a memory perspective
|
||||
std::cout << "OK, " << devices.size() << " device" << (devices.size() == 1 ? "" : "s") << " found" << std::endl;
|
||||
|
||||
if(devices.empty()) {
|
||||
auto lastError = icsneo::GetLastError();
|
||||
if(lastError.getType() != icsneo::APIEvent::Type::NoErrorFound)
|
||||
std::cout << lastError << std::endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// List off the devices
|
||||
for (auto &device : devices)
|
||||
std::cout << '\t' << device->describe() << " @ Handle " << device->getNeoDevice().handle << std::endl;
|
||||
|
||||
@@ -76,6 +76,13 @@ int main() {
|
||||
// You now hold the shared_ptrs for these devices, you are considered to "own" these devices from a memory perspective
|
||||
std::cout << "OK, " << devices.size() << " device" << (devices.size() == 1 ? "" : "s") << " found" << std::endl;
|
||||
|
||||
if(devices.empty()) {
|
||||
auto lastError = icsneo::GetLastError();
|
||||
if(lastError.getType() != icsneo::APIEvent::Type::NoErrorFound)
|
||||
std::cout << lastError << std::endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// List off the devices
|
||||
for(auto& device : devices)
|
||||
std::cout << '\t' << device->describe() << " @ Handle " << device->getNeoDevice().handle << std::endl;
|
||||
|
||||
@@ -22,6 +22,13 @@ int main() {
|
||||
// You now hold the shared_ptrs for these devices, you are considered to "own" these devices from a memory perspective
|
||||
std::cout << "OK, " << devices.size() << " device" << (devices.size() == 1 ? "" : "s") << " found" << std::endl;
|
||||
|
||||
if(devices.empty()) {
|
||||
auto lastError = icsneo::GetLastError();
|
||||
if(lastError.getType() != icsneo::APIEvent::Type::NoErrorFound)
|
||||
std::cout << lastError << std::endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// List off the devices
|
||||
for(auto& device : devices)
|
||||
std::cout << '\t' << device->describe() << " @ Handle " << device->getNeoDevice().handle << std::endl;
|
||||
@@ -339,7 +346,7 @@ int main() {
|
||||
if(val.has_value())
|
||||
std::cout << " - OK (" << val.value() << "V)" << std::endl;
|
||||
else
|
||||
std::cout << " - FAIL, it may need to be enabled in neoVI Explorer (" << icsneo::GetLastError() << ")" << std::endl;
|
||||
std::cout << " - FAIL, it may need to be enabled in ICS Device Manager (" << icsneo::GetLastError() << ")" << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -86,6 +86,9 @@ int main(int argc, const char** argv) {
|
||||
}
|
||||
if(!device) {
|
||||
std::cerr << "Failed to find device" << std::endl;
|
||||
auto lastError = icsneo::GetLastError();
|
||||
if(lastError.getType() != icsneo::APIEvent::Type::NoErrorFound)
|
||||
std::cerr << lastError << std::endl;
|
||||
std::cerr << usage;
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -216,8 +216,10 @@ int main() {
|
||||
auto devices = icsneo::FindAllDevices();
|
||||
std::cout << "OK, " << devices.size() << " device" << (devices.size() == 1 ? "" : "s") << " found" << std::endl;
|
||||
|
||||
if (devices.empty()) {
|
||||
std::cout << "No devices found!" << std::endl;
|
||||
if(devices.empty()) {
|
||||
auto lastError = icsneo::GetLastError();
|
||||
if(lastError.getType() != icsneo::APIEvent::Type::NoErrorFound)
|
||||
std::cout << lastError << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -260,8 +260,10 @@ int main() {
|
||||
auto devices = icsneo::FindAllDevices();
|
||||
std::cout << "OK, " << devices.size() << " device" << (devices.size() == 1 ? "" : "s") << " found" << std::endl;
|
||||
|
||||
if (devices.empty()) {
|
||||
std::cerr << "No devices found!" << std::endl;
|
||||
if(devices.empty()) {
|
||||
auto lastError = icsneo::GetLastError();
|
||||
if(lastError.getType() != icsneo::APIEvent::Type::NoErrorFound)
|
||||
std::cerr << lastError << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -106,7 +106,9 @@ int main(int argc, char* argv[]) {
|
||||
|
||||
auto devices = icsneo::FindAllDevices();
|
||||
if(devices.empty()) {
|
||||
std::cout << "error: no devices found" << std::endl;
|
||||
auto lastError = icsneo::GetLastError();
|
||||
if(lastError.getType() != icsneo::APIEvent::Type::NoErrorFound)
|
||||
std::cout << lastError << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
@@ -166,7 +166,6 @@ public:
|
||||
ServdNoDataError = ServdBindError + 9,
|
||||
ServdJoinMulticastError = ServdBindError + 10,
|
||||
ServdNotReachable = ServdBindError + 11,
|
||||
ServdNoDevicesFound = ServdBindError + 12,
|
||||
|
||||
// DXX
|
||||
DXXErrorSys = 0x6100,
|
||||
|
||||
@@ -190,6 +190,75 @@ public:
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
bool setPhyEnableFor(Network net, bool enable) override {
|
||||
auto cfg = getMutableStructurePointer<radgalaxy2_settings_t>();
|
||||
if(cfg == nullptr)
|
||||
return false;
|
||||
|
||||
if(net.getType() != Network::Type::Ethernet && net.getType() != Network::Type::AutomotiveEthernet) {
|
||||
report(APIEvent::Type::ParameterOutOfRange, APIEvent::Severity::Error);
|
||||
return false;
|
||||
}
|
||||
|
||||
auto coreMini = net.getCoreMini();
|
||||
if(!coreMini.has_value()) {
|
||||
report(APIEvent::Type::ParameterOutOfRange, APIEvent::Severity::Error);
|
||||
return false;
|
||||
}
|
||||
|
||||
const uint64_t networkID = static_cast<uint64_t>(coreMini.value());
|
||||
uint64_t bitfields[2] = {
|
||||
(uint64_t)cfg->network_enables | ((uint64_t)cfg->network_enables_2 << 16) |
|
||||
((uint64_t)cfg->network_enables_3 << 32) | ((uint64_t)cfg->network_enables_4 << 48),
|
||||
cfg->network_enables_5
|
||||
};
|
||||
|
||||
const bool success = enable ?
|
||||
SetNetworkEnabled(bitfields, 2, networkID) :
|
||||
ClearNetworkEnabled(bitfields, 2, networkID);
|
||||
|
||||
if(!success) {
|
||||
report(APIEvent::Type::ParameterOutOfRange, APIEvent::Severity::Error);
|
||||
return false;
|
||||
}
|
||||
|
||||
cfg->network_enables = static_cast<uint16_t>(bitfields[0]);
|
||||
cfg->network_enables_2 = static_cast<uint16_t>(bitfields[0] >> 16);
|
||||
cfg->network_enables_3 = static_cast<uint16_t>(bitfields[0] >> 32);
|
||||
cfg->network_enables_4 = static_cast<uint16_t>(bitfields[0] >> 48);
|
||||
cfg->network_enables_5 = bitfields[1];
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
std::optional<bool> getPhyEnableFor(Network net) const override {
|
||||
auto cfg = getStructurePointer<radgalaxy2_settings_t>();
|
||||
if(cfg == nullptr) {
|
||||
report(APIEvent::Type::SettingsReadError, APIEvent::Severity::Error);
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
if(net.getType() != Network::Type::Ethernet && net.getType() != Network::Type::AutomotiveEthernet) {
|
||||
report(APIEvent::Type::ParameterOutOfRange, APIEvent::Severity::Error);
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
auto coreMini = net.getCoreMini();
|
||||
if(!coreMini.has_value()) {
|
||||
report(APIEvent::Type::ParameterOutOfRange, APIEvent::Severity::Error);
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
const uint64_t networkID = static_cast<uint64_t>(coreMini.value());
|
||||
const uint64_t bitfields[2] = {
|
||||
(uint64_t)cfg->network_enables | ((uint64_t)cfg->network_enables_2 << 16) |
|
||||
((uint64_t)cfg->network_enables_3 << 32) | ((uint64_t)cfg->network_enables_4 << 48),
|
||||
cfg->network_enables_5
|
||||
};
|
||||
|
||||
return GetNetworkEnabled(bitfields, 2, networkID);
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -465,6 +465,64 @@ namespace icsneo
|
||||
return std::make_optional(t1sExt->multi_id[index]);
|
||||
}
|
||||
|
||||
bool setPhyEnableFor(Network net, bool enable) override {
|
||||
auto cfg = getMutableStructurePointer<radgigastar2_settings_t>();
|
||||
if(cfg == nullptr)
|
||||
return false;
|
||||
|
||||
if(net.getType() != Network::Type::Ethernet && net.getType() != Network::Type::AutomotiveEthernet) {
|
||||
report(APIEvent::Type::ParameterOutOfRange, APIEvent::Severity::Error);
|
||||
return false;
|
||||
}
|
||||
|
||||
auto coreMini = net.getCoreMini();
|
||||
if(!coreMini.has_value()) {
|
||||
report(APIEvent::Type::ParameterOutOfRange, APIEvent::Severity::Error);
|
||||
return false;
|
||||
}
|
||||
|
||||
const uint64_t networkID = static_cast<uint64_t>(coreMini.value());
|
||||
uint64_t bitfields[2] = { cfg->network_enables, cfg->network_enables_2 };
|
||||
|
||||
const bool success = enable ?
|
||||
SetNetworkEnabled(bitfields, 2, networkID) :
|
||||
ClearNetworkEnabled(bitfields, 2, networkID);
|
||||
|
||||
if(!success) {
|
||||
report(APIEvent::Type::ParameterOutOfRange, APIEvent::Severity::Error);
|
||||
return false;
|
||||
}
|
||||
|
||||
cfg->network_enables = bitfields[0];
|
||||
cfg->network_enables_2 = bitfields[1];
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
std::optional<bool> getPhyEnableFor(Network net) const override {
|
||||
auto cfg = getStructurePointer<radgigastar2_settings_t>();
|
||||
if(cfg == nullptr) {
|
||||
report(APIEvent::Type::SettingsReadError, APIEvent::Severity::Error);
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
if(net.getType() != Network::Type::Ethernet && net.getType() != Network::Type::AutomotiveEthernet) {
|
||||
report(APIEvent::Type::ParameterOutOfRange, APIEvent::Severity::Error);
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
auto coreMini = net.getCoreMini();
|
||||
if(!coreMini.has_value()) {
|
||||
report(APIEvent::Type::ParameterOutOfRange, APIEvent::Severity::Error);
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
const uint64_t networkID = static_cast<uint64_t>(coreMini.value());
|
||||
const uint64_t bitfields[2] = { cfg->network_enables, cfg->network_enables_2 };
|
||||
|
||||
return GetNetworkEnabled(bitfields, 2, networkID);
|
||||
}
|
||||
|
||||
bool setT1SMultiIDFor(Network net, uint8_t index, uint8_t id) override {
|
||||
ETHERNET10T1S_SETTINGS_EXT* t1sExt = getMutableT1SSettingsExtFor(net);
|
||||
if(t1sExt == nullptr)
|
||||
|
||||
@@ -67,15 +67,12 @@ void Servd::Find(std::vector<FoundDevice>& found) {
|
||||
EventManager::GetInstance().add(APIEvent::Type::ServdTransceiveError, APIEvent::Severity::Error);
|
||||
return;
|
||||
}
|
||||
const size_t preCount = found.size();
|
||||
bool parseError = false;
|
||||
const auto lines = split(response, '\n');
|
||||
for(auto&& line : lines) {
|
||||
const auto cols = split(line, ' ');
|
||||
if(cols.size() < 3) {
|
||||
if(!line.empty()) {
|
||||
EventManager::GetInstance().add(APIEvent::Type::ServdInvalidResponseError, APIEvent::Severity::Error);
|
||||
parseError = true;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
@@ -86,7 +83,6 @@ void Servd::Find(std::vector<FoundDevice>& found) {
|
||||
port = static_cast<uint16_t>(std::stoi(cols[2]));
|
||||
} catch (const std::exception&) {
|
||||
EventManager::GetInstance().add(APIEvent::Type::ServdInvalidResponseError, APIEvent::Severity::Error);
|
||||
parseError = true;
|
||||
continue;
|
||||
}
|
||||
Address address(ip.c_str(), port);
|
||||
@@ -96,9 +92,6 @@ void Servd::Find(std::vector<FoundDevice>& found) {
|
||||
return std::make_unique<Servd>(err, forDevice, address);
|
||||
};
|
||||
}
|
||||
if(!parseError && found.size() == preCount) {
|
||||
EventManager::GetInstance().add(APIEvent::Type::ServdNoDevicesFound, APIEvent::Severity::EventInfo);
|
||||
}
|
||||
}
|
||||
|
||||
Servd::Servd(const device_eventhandler_t& err, neodevice_t& forDevice, const Address& address) :
|
||||
|
||||
Reference in New Issue
Block a user