libminradio: Add API to track SIM filesystem changes
Bug: 310710841
Test: VtsHalRadioTargetTest
Change-Id: I3f509b41752a382bb928a63338bc171f633acd24
diff --git a/radio/aidl/minradio/libminradio/include/libminradio/sim/Filesystem.h b/radio/aidl/minradio/libminradio/include/libminradio/sim/Filesystem.h
index 489d59b..4e7c5ee 100644
--- a/radio/aidl/minradio/libminradio/include/libminradio/sim/Filesystem.h
+++ b/radio/aidl/minradio/libminradio/include/libminradio/sim/Filesystem.h
@@ -19,6 +19,7 @@
#include <android-base/thread_annotations.h>
#include <map>
+#include <set>
#include <span>
namespace android::hardware::radio::minimal::sim {
@@ -38,6 +39,7 @@
private:
mutable std::mutex mFilesGuard;
std::map<Path, std::vector<uint8_t>> mFiles GUARDED_BY(mFilesGuard);
+ std::set<int32_t> mUpdates GUARDED_BY(mFilesGuard);
DISALLOW_COPY_AND_ASSIGN(Filesystem);
@@ -53,6 +55,8 @@
std::optional<std::string> readBch(const Path& path) const;
std::optional<Path> find(uint16_t fileId);
+
+ std::set<int32_t> fetchAndClearUpdates();
};
namespace paths {
diff --git a/radio/aidl/minradio/libminradio/sim/Filesystem.cpp b/radio/aidl/minradio/libminradio/sim/Filesystem.cpp
index 65c92b1..4be63f4 100644
--- a/radio/aidl/minradio/libminradio/sim/Filesystem.cpp
+++ b/radio/aidl/minradio/libminradio/sim/Filesystem.cpp
@@ -47,11 +47,13 @@
void Filesystem::write(const Path& path, FileView contents) {
std::unique_lock lck(mFilesGuard);
mFiles[path].assign(contents.begin(), contents.end()); // C++23: assign_range
+ mUpdates.insert(path.fileId);
}
void Filesystem::write(const Path& path, std::string_view contents) {
std::unique_lock lck(mFilesGuard);
mFiles[path].assign(contents.begin(), contents.end()); // C++23: assign_range
+ mUpdates.insert(path.fileId);
}
void Filesystem::write(const Path& path, std::vector<uint8_t>&& contents) {
@@ -84,6 +86,13 @@
return std::nullopt;
}
+std::set<int32_t> Filesystem::fetchAndClearUpdates() {
+ std::unique_lock lck(mFilesGuard);
+ std::set<int32_t> result;
+ std::swap(result, mUpdates);
+ return result;
+}
+
std::string Filesystem::Path::toString() const {
return std::format("{:s}/{:X}", pathId, fileId);
}