mirror of
https://github.com/intrepidcs/libicsneo.git
synced 2026-08-05 01:18:36 +02:00
Add error system
This commit is contained in:
+9
-21
@@ -122,13 +122,15 @@ void Device::enforcePollingMessageLimit() {
|
||||
while(pollingContainer.size_approx() > pollingMessageLimit) {
|
||||
std::shared_ptr<Message> throwAway;
|
||||
pollingContainer.try_dequeue(throwAway);
|
||||
// TODO Flag an error for the user!
|
||||
err(APIError::PollingMessageOverflow);
|
||||
}
|
||||
}
|
||||
|
||||
bool Device::open() {
|
||||
if(!com)
|
||||
if(!com) {
|
||||
err(APIError::Unknown);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!com->open())
|
||||
return false;
|
||||
@@ -141,13 +143,13 @@ bool Device::open() {
|
||||
break;
|
||||
}
|
||||
if(!serial) {
|
||||
std::cout << "Failed to get serial number in " << i << " tries" << std::endl;
|
||||
err(APIError::NoSerialNumber);
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string currentSerial = getNeoDevice().serial;
|
||||
if(currentSerial != serial->deviceSerial) {
|
||||
std::cout << "Found device had serial " << getNeoDevice().serial << " but connected device has serial " << serial->deviceSerial.c_str() << "!" << std::endl;
|
||||
err(APIError::IncorrectSerialNumber);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -166,8 +168,10 @@ bool Device::open() {
|
||||
}
|
||||
|
||||
bool Device::close() {
|
||||
if(!com)
|
||||
if(!com) {
|
||||
err(APIError::Unknown);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(internalHandlerCallbackID)
|
||||
com->removeMessageCallback(internalHandlerCallbackID);
|
||||
@@ -213,22 +217,6 @@ bool Device::transmit(std::vector<std::shared_ptr<Message>> messages) {
|
||||
return true;
|
||||
}
|
||||
|
||||
template<typename Transport, typename Settings>
|
||||
void Device::initialize() {
|
||||
auto transport = makeTransport<Transport>();
|
||||
setupTransport(transport.get());
|
||||
auto packetizer = makePacketizer();
|
||||
setupPacketizer(packetizer.get());
|
||||
auto encoder = makeEncoder(packetizer);
|
||||
setupEncoder(encoder.get());
|
||||
auto decoder = makeDecoder();
|
||||
setupDecoder(decoder.get());
|
||||
com = makeCommunication(std::move(transport), packetizer, std::move(encoder), std::move(decoder));
|
||||
setupCommunication(com.get());
|
||||
settings = makeSettings<Settings>(com);
|
||||
setupSettings(settings.get());
|
||||
}
|
||||
|
||||
void Device::handleInternalMessage(std::shared_ptr<Message> message) {
|
||||
switch(message->network.getNetID()) {
|
||||
case Network::NetID::Reset_Status:
|
||||
|
||||
@@ -43,16 +43,22 @@ uint16_t IDeviceSettings::CalculateGSChecksum(const std::vector<uint8_t>& settin
|
||||
}
|
||||
|
||||
bool IDeviceSettings::refresh(bool ignoreChecksum) {
|
||||
if(disabled)
|
||||
if(disabled) {
|
||||
err(APIError::SettingsNotAvailable);
|
||||
return false;
|
||||
}
|
||||
|
||||
std::vector<uint8_t> rxSettings;
|
||||
bool ret = com->getSettingsSync(rxSettings);
|
||||
if(!ret)
|
||||
if(!ret) {
|
||||
err(APIError::SettingsReadError);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(rxSettings.size() < 6) // We need to at least have the header of GLOBAL_SETTINGS
|
||||
if(rxSettings.size() < 6) { // We need to at least have the header of GLOBAL_SETTINGS
|
||||
err(APIError::SettingsReadError);
|
||||
return false;
|
||||
}
|
||||
|
||||
constexpr size_t gs_size = 3 * sizeof(uint16_t);
|
||||
size_t rxLen = rxSettings.size() - gs_size;
|
||||
@@ -63,17 +69,17 @@ bool IDeviceSettings::refresh(bool ignoreChecksum) {
|
||||
rxSettings.erase(rxSettings.begin(), rxSettings.begin() + gs_size);
|
||||
|
||||
if(gs_version != 5) {
|
||||
std::cout << "gs_version was " << gs_version << " instead of 5.\nPlease update your firmware." << std::endl;
|
||||
err(APIError::SettingsVersionError);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(rxLen != gs_len) {
|
||||
std::cout << "rxLen was " << rxLen << " and gs_len was " << gs_len << " while reading settings" << std::endl;
|
||||
err(APIError::SettingsLengthError);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!ignoreChecksum && gs_chksum != CalculateGSChecksum(rxSettings)) {
|
||||
std::cout << "Checksum mismatch while reading settings" << std::endl;
|
||||
err(APIError::SettingsChecksumError);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -81,7 +87,7 @@ bool IDeviceSettings::refresh(bool ignoreChecksum) {
|
||||
settingsLoaded = true;
|
||||
|
||||
if(settings.size() != structSize) {
|
||||
std::cout << "Settings size was " << settings.size() << " bytes but it should be " << structSize << " bytes for this device" << std::endl;
|
||||
err(APIError::SettingsLengthError);
|
||||
settingsLoaded = false;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user