diff --git a/communication/packet/scriptstatuspacket.cpp b/communication/packet/scriptstatuspacket.cpp index e94f7f7..64c2fd8 100644 --- a/communication/packet/scriptstatuspacket.cpp +++ b/communication/packet/scriptstatuspacket.cpp @@ -11,6 +11,7 @@ std::shared_ptr ScriptStatus::DecodeToMessage(const std::ve auto msg = std::make_shared(); const auto& decoded = *reinterpret_cast(bytestream.data()); msg->isCoreminiRunning = decoded.status.isRunning; + msg->isEncrypted = decoded.status.isEncrypted; msg->sectorOverflows = decoded.sectorOverflows; msg->numRemainingSectorBuffers = decoded.numRemainingSectorBuffers; msg->lastSector = decoded.lastSector; diff --git a/device/device.cpp b/device/device.cpp index 17864d1..f97f18d 100644 --- a/device/device.cpp +++ b/device/device.cpp @@ -1187,6 +1187,13 @@ void Device::scriptStatusThreadBody() lk.lock(); } + if(updateScriptStatusValue(ScriptStatus::IsEncrypted, resp->isEncrypted)) + { + lk.unlock(); + notifyScriptStatusCallback(ScriptStatus::IsEncrypted, resp->isEncrypted); + lk.lock(); + } + if(updateScriptStatusValue(ScriptStatus::SectorOverflow, resp->sectorOverflows)) { lk.unlock(); diff --git a/include/icsneo/communication/message/scriptstatusmessage.h b/include/icsneo/communication/message/scriptstatusmessage.h index 17e072f..0fc334b 100644 --- a/include/icsneo/communication/message/scriptstatusmessage.h +++ b/include/icsneo/communication/message/scriptstatusmessage.h @@ -13,6 +13,7 @@ class ScriptStatusMessage : public Message { public: ScriptStatusMessage() : Message( Message::Type::ScriptStatus ) {} + bool isEncrypted = false; bool isCoreminiRunning = false; uint32_t sectorOverflows = 0; uint32_t numRemainingSectorBuffers = 0; diff --git a/include/icsneo/device/device.h b/include/icsneo/device/device.h index 5b0d74a..9c2eec1 100644 --- a/include/icsneo/device/device.h +++ b/include/icsneo/device/device.h @@ -363,7 +363,8 @@ public: DiagnosticErrorCode = 12, DiagnosticErrorCodeCount = 13, MaxCoreMiniSize = 14, - Logging = 16, + Logging = 15, + IsEncrypted = 16, }; typedef std::function< void(uint64_t value) > ScriptStatusCallback; @@ -379,6 +380,12 @@ public: NODISCARD("If the Lifetime is not held, the callback will be immediately removed") Lifetime addCoreMiniRunningCallback(ScriptStatusCallback cb) { return addScriptStatusCallback(ScriptStatus::CoreMiniRunning, std::move(cb)); } + /** + * Add a callback to be called when the VSSAL script encryption mode changes + */ + NODISCARD("If the Lifetime is not held, the callback will be immediately removed") + Lifetime addEncryptedModeCallback(ScriptStatusCallback cb) { return addScriptStatusCallback(ScriptStatus::IsEncrypted, std::move(cb)); } + /** * Add a callback to be called when the number of times a sector was dropped due to lack of space * in firmware's filesystem buffer changes