aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-12-02 02:01:57 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-12-02 02:01:57 +0000
commit1aaf45b1ed01b13629c8406a1f73e23848f39d6f (patch)
tree91e642d06b689fcaa65928709cf1b4bec7e014cc
parent9e0d8cd6b798e028f355d4ded1d6b7d4e831ae4c (diff)
parent65710c0477f8b6f0416026ebc97a9c6dd096e719 (diff)
downloadgs-common-1aaf45b1ed01b13629c8406a1f73e23848f39d6f.tar.gz
Snap for 11169761 from 65710c0477f8b6f0416026ebc97a9c6dd096e719 to 24Q1-release
Change-Id: Ib7633a8bb474f1245b1138c19be34cb628545790
-rw-r--r--device.mk2
-rw-r--r--modem/Android.bp44
-rw-r--r--modem/OWNERS3
-rw-r--r--modem/android_property_manager/Android.bp9
-rw-r--r--modem/android_property_manager/fake/Android.bp23
-rw-r--r--modem/android_property_manager/fake/fake_android_property_manager.cpp80
-rw-r--r--modem/android_property_manager/fake/include/fake_android_property_manager.h54
-rw-r--r--modem/android_property_manager/impl/Android.bp18
-rw-r--r--modem/android_property_manager/impl/android_property_manager_impl.cpp29
-rw-r--r--modem/android_property_manager/impl/include/android_property_manager_impl.h25
-rw-r--r--modem/android_property_manager/include/android_property_manager.h (renamed from modem/include/android_property_manager.h)22
-rw-r--r--modem/clock_manager/Android.bp9
-rw-r--r--modem/clock_manager/fake/Android.bp15
-rw-r--r--modem/clock_manager/fake/include/fake_clock_manager.h21
-rw-r--r--modem/clock_manager/impl/Android.bp16
-rw-r--r--modem/clock_manager/impl/clock_manager_impl.cpp9
-rw-r--r--modem/clock_manager/impl/include/clock_manager_impl.h13
-rw-r--r--modem/clock_manager/include/clock_manager.h28
-rw-r--r--modem/dump_modemlog/Android.bp79
-rw-r--r--modem/dump_modemlog/dump_modem.sh (renamed from modem/dump_modem.sh)0
-rw-r--r--modem/dump_modemlog/dump_modemlog.cpp (renamed from modem/dump_modemlog.cpp)35
-rw-r--r--modem/dump_modemlog/dump_modemlog.mk5
-rw-r--r--modem/dump_modemlog/include/bugreport_constants.h33
-rw-r--r--modem/dump_modemlog/include/dumper.h (renamed from modem/include/dumper.h)7
-rw-r--r--modem/dump_modemlog/include/modem_log_dumper.h (renamed from modem/include/modem_log_dumper.h)6
-rw-r--r--modem/dump_modemlog/modem_log_dumper.cpp (renamed from modem/modem_log_dumper.cpp)14
-rw-r--r--modem/dump_modemlog/modem_log_dumper_test.cpp (renamed from modem/test/modem_log_dumper_test.cpp)15
-rw-r--r--modem/dump_modemlog/sepolicy/dump_modem.te (renamed from modem/sepolicy/dump_modem.te)0
-rw-r--r--modem/dump_modemlog/sepolicy/dump_modemlog.te (renamed from modem/sepolicy/dump_modemlog.te)0
-rw-r--r--modem/dump_modemlog/sepolicy/file.te (renamed from modem/sepolicy/file.te)0
-rw-r--r--modem/dump_modemlog/sepolicy/file_contexts (renamed from modem/sepolicy/file_contexts)0
-rw-r--r--modem/dump_modemlog/sepolicy/genfs_contexts (renamed from modem/sepolicy/genfs_contexts)0
-rw-r--r--modem/include/modem_log_constants.h56
-rw-r--r--modem/modem.mk6
-rw-r--r--modem/modem_log_constants/Android.bp9
-rw-r--r--modem/modem_log_constants/include/modem_log_constants.h35
-rw-r--r--modem/test/include/fake_android_property_manager.h77
37 files changed, 558 insertions, 239 deletions
diff --git a/device.mk b/device.mk
index 4787315..45b7da8 100644
--- a/device.mk
+++ b/device.mk
@@ -14,7 +14,9 @@
# limitations under the License.
#
+ifeq (,$(filter true, $(PRODUCT_WITHOUT_TTS_VOICE_PACKS)))
include device/google/gs-common/tts/voice_packs.mk
+endif
PRODUCT_SOONG_NAMESPACES += \
device/google/gs-common/powerstats
diff --git a/modem/Android.bp b/modem/Android.bp
deleted file mode 100644
index dbc1cac..0000000
--- a/modem/Android.bp
+++ /dev/null
@@ -1,44 +0,0 @@
-package {
- default_applicable_licenses: ["Android-Apache-2.0"],
-}
-
-sh_binary {
- name: "dump_modem.sh",
- src: "dump_modem.sh",
- vendor: true,
- sub_dir: "dump",
-}
-
-cc_defaults {
- name: "dump_modemlog_defaults",
- srcs: ["modem_log_dumper.cpp"],
- local_include_dirs: ["include"],
- shared_libs: ["liblog"],
-}
-
-cc_binary {
- name: "dump_modemlog",
- srcs: ["dump_modemlog.cpp"],
- cflags: [
- "-Wall",
- "-Wextra",
- "-Werror",
- ],
- shared_libs: [
- "libbase",
- "libdump",
- "liblog",
- ],
- defaults: ["dump_modemlog_defaults"],
- vendor: true,
- relative_install_path: "dump",
-}
-
-cc_test {
- name: "dump_modemlog_test",
- srcs: ["test/*.cpp"],
- defaults: ["dump_modemlog_defaults"],
- local_include_dirs: ["test/include"],
- static_libs: ["libgmock"],
- vendor: true,
-}
diff --git a/modem/OWNERS b/modem/OWNERS
new file mode 100644
index 0000000..4b70b88
--- /dev/null
+++ b/modem/OWNERS
@@ -0,0 +1,3 @@
+# Give ownership of code files to Apps and Services team.
+# SEPolicy files are intentionally ignored since they should be reviewed by the SEPolicy team.
+per-file *.bp,*.cpp,*.h,*.sh=kierancyphus@google.com,everrosales@google.com,nicoleytlee@google.com,alanblc@google.com
diff --git a/modem/android_property_manager/Android.bp b/modem/android_property_manager/Android.bp
new file mode 100644
index 0000000..af89aec
--- /dev/null
+++ b/modem/android_property_manager/Android.bp
@@ -0,0 +1,9 @@
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+cc_library {
+ name: "modem_android_property_manager",
+ export_include_dirs: [ "include" ],
+ vendor_available: true,
+}
diff --git a/modem/android_property_manager/fake/Android.bp b/modem/android_property_manager/fake/Android.bp
new file mode 100644
index 0000000..247b97c
--- /dev/null
+++ b/modem/android_property_manager/fake/Android.bp
@@ -0,0 +1,23 @@
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+// When `modem_android_property_manager_fake` is included statically, its
+// dependencies are not transitively included, so the target will also have to
+// include this default to restate them.
+cc_defaults {
+ name: "modem_android_property_manager_fake_defaults",
+ static_libs: [
+ "modem_android_property_manager",
+ "libbase",
+ "modem_log_constants",
+ ],
+}
+
+cc_library_static {
+ name: "modem_android_property_manager_fake",
+ export_include_dirs: [ "include" ],
+ srcs: [ "fake_android_property_manager.cpp" ],
+ defaults: [ "modem_android_property_manager_fake_defaults" ],
+ vendor_available: true,
+}
diff --git a/modem/android_property_manager/fake/fake_android_property_manager.cpp b/modem/android_property_manager/fake/fake_android_property_manager.cpp
new file mode 100644
index 0000000..d25d6da
--- /dev/null
+++ b/modem/android_property_manager/fake/fake_android_property_manager.cpp
@@ -0,0 +1,80 @@
+#include "fake_android_property_manager.h"
+
+#include <android-base/parseint.h>
+#include <android-base/result.h>
+
+#include <cerrno>
+#include <map>
+#include <string>
+
+#include "modem_log_constants.h"
+
+namespace pixel_modem {
+
+bool FakeAndroidPropertyManager::GetBoolProperty(const std::string& key,
+ bool default_value) {
+ auto value_result = GetProperty(key);
+ return value_result.ok() ? (*value_result) == kTruthString : default_value;
+}
+
+std::string FakeAndroidPropertyManager::GetProperty(
+ const std::string& key, const std::string& default_value) {
+ auto value_result = GetProperty(key);
+ return value_result.ok() ? *value_result : default_value;
+}
+
+int FakeAndroidPropertyManager::GetIntProperty(const std::string& key,
+ int default_value) {
+ int value = default_value;
+
+ auto property_result = GetProperty(key);
+ if (property_result.ok()) {
+ android::base::ParseInt<int>((*property_result).data(), &value);
+ }
+ return value;
+}
+
+/**
+ * This function needs to copy the behaviour of `modem_logging_control` to
+ * ensure that the right properties are being set in order.
+ *
+ * More specifically, this function will also set the
+ * `kModemLoggingStatusProperty` whenever `kModemLoggingEnabledProperty` is
+ * set to simulate modem logging stopping / starting.
+ */
+bool FakeAndroidPropertyManager::SetProperty(const std::string& key,
+ const std::string& value) {
+ if (key == logging::kModemLoggingEnabledProperty) {
+ property_map_[logging::kModemLoggingStatusProperty.data()] = value;
+
+ // need to track if modem logging has restarted or not
+ if (value == kFalseString) {
+ modem_logging_has_been_off_ = true;
+ }
+ if (modem_logging_has_been_off_ && (value == kTruthString)) {
+ modem_logging_has_restarted_ = true;
+ }
+ }
+ property_map_[key] = value;
+ return true;
+}
+
+/**
+ * @brief Gets android system property if present.
+ *
+ * @param[in] key Name of property.
+ *
+ * @return Status of get operation and value if successful.
+ * @retval EINVAL Key not present in map.
+ */
+android::base::Result<std::string> FakeAndroidPropertyManager::GetProperty(
+ const std::string& key) {
+ const auto it = property_map_.find(key);
+ if (it == property_map_.end()) {
+ return android::base::Error()
+ << "Property: " << key << " not found." << EINVAL;
+ }
+ return it->second;
+}
+
+} // namespace pixel_modem
diff --git a/modem/android_property_manager/fake/include/fake_android_property_manager.h b/modem/android_property_manager/fake/include/fake_android_property_manager.h
new file mode 100644
index 0000000..eeea5a0
--- /dev/null
+++ b/modem/android_property_manager/fake/include/fake_android_property_manager.h
@@ -0,0 +1,54 @@
+#pragma once
+
+#include <map>
+#include <string>
+
+#include "android-base/result.h"
+#include "android_property_manager.h"
+
+namespace pixel_modem {
+
+/**
+ * @brief Fake Implementation of AndroidPropertyManager that mocks some of the
+ * property changing behaviour from pixellogger's `modem_logging_control`.
+ */
+class FakeAndroidPropertyManager : public AndroidPropertyManager {
+ public:
+ bool GetBoolProperty(const std::string& key, bool default_value) override;
+
+ std::string GetProperty(const std::string& key,
+ const std::string& default_value) override;
+
+ int GetIntProperty(const std::string& key, int default_value) override;
+
+ /**
+ * This function needs to copy the behaviour of `modem_logging_control` to
+ * ensure that the right properties are being set in order.
+ *
+ * More specifically, this function will also set the
+ * `kModemLoggingStatusProperty` whenever `kModemLoggingEnabledProperty` is
+ * set to simulate modem logging stopping / starting.
+ */
+ bool SetProperty(const std::string& key, const std::string& value) override;
+
+ inline bool ModemLoggingHasRestarted() {
+ return modem_logging_has_restarted_;
+ }
+
+ private:
+ /**
+ * @brief Gets android system property if present.
+ *
+ * @param[in] key Name of property.
+ *
+ * @return Status of get operation and value if successful.
+ * @retval EINVAL Key not present in map.
+ */
+ android::base::Result<std::string> GetProperty(const std::string& key);
+
+ std::map<std::string, std::string> property_map_;
+ bool modem_logging_has_been_off_ = false;
+ bool modem_logging_has_restarted_ = false;
+};
+
+} // namespace pixel_modem
diff --git a/modem/android_property_manager/impl/Android.bp b/modem/android_property_manager/impl/Android.bp
new file mode 100644
index 0000000..2023e8f
--- /dev/null
+++ b/modem/android_property_manager/impl/Android.bp
@@ -0,0 +1,18 @@
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+modem_android_property_manager_impl_public_deps = [
+ "modem_android_property_manager",
+]
+
+cc_library_shared {
+ name: "modem_android_property_manager_impl",
+ export_include_dirs: [ "include" ],
+ srcs: [ "android_property_manager_impl.cpp" ],
+ shared_libs: modem_android_property_manager_impl_public_deps + [
+ "libbase",
+ ],
+ export_shared_lib_headers: modem_android_property_manager_impl_public_deps,
+ vendor_available: true,
+}
diff --git a/modem/android_property_manager/impl/android_property_manager_impl.cpp b/modem/android_property_manager/impl/android_property_manager_impl.cpp
new file mode 100644
index 0000000..b6b900a
--- /dev/null
+++ b/modem/android_property_manager/impl/android_property_manager_impl.cpp
@@ -0,0 +1,29 @@
+#include "android_property_manager_impl.h"
+
+#include <android-base/properties.h>
+
+#include <string>
+
+namespace pixel_modem {
+
+bool AndroidPropertyManagerImpl::GetBoolProperty(const std::string& key,
+ bool default_value) {
+ return android::base::GetBoolProperty(key, default_value);
+}
+
+std::string AndroidPropertyManagerImpl::GetProperty(
+ const std::string& key, const std::string& default_value) {
+ return android::base::GetProperty(key, default_value);
+}
+
+int AndroidPropertyManagerImpl::GetIntProperty(const std::string& key,
+ int default_value) {
+ return android::base::GetIntProperty(key, default_value);
+}
+
+bool AndroidPropertyManagerImpl::SetProperty(const std::string& key,
+ const std::string& value) {
+ return android::base::SetProperty(key, value);
+}
+
+} // namespace pixel_modem
diff --git a/modem/android_property_manager/impl/include/android_property_manager_impl.h b/modem/android_property_manager/impl/include/android_property_manager_impl.h
new file mode 100644
index 0000000..91cee25
--- /dev/null
+++ b/modem/android_property_manager/impl/include/android_property_manager_impl.h
@@ -0,0 +1,25 @@
+#pragma once
+
+#include <string>
+
+#include "android_property_manager.h"
+
+namespace pixel_modem {
+
+/**
+ * @brief Implementation of AndroidPropertyManager that directly forwards to
+ * android base methods.
+ */
+class AndroidPropertyManagerImpl : public AndroidPropertyManager {
+ public:
+ bool GetBoolProperty(const std::string& key, bool default_value) override;
+
+ std::string GetProperty(const std::string& key,
+ const std::string& default_value) override;
+
+ int GetIntProperty(const std::string& key, int default_value) override;
+
+ bool SetProperty(const std::string& key, const std::string& value) override;
+};
+
+} // namespace pixel_modem
diff --git a/modem/include/android_property_manager.h b/modem/android_property_manager/include/android_property_manager.h
index 7135d66..e41a28d 100644
--- a/modem/include/android_property_manager.h
+++ b/modem/android_property_manager/include/android_property_manager.h
@@ -1,9 +1,14 @@
+
#pragma once
#include <string>
+#include <string_view>
+
+namespace pixel_modem {
-namespace modem {
-namespace logging {
+// Used to set boolean parameters to true / false
+inline constexpr std::string_view kTruthString = "true";
+inline constexpr std::string_view kFalseString = "false";
/**
* @brief Interface for interacting with Android System Properties.
@@ -11,11 +16,12 @@ namespace logging {
class AndroidPropertyManager {
public:
virtual ~AndroidPropertyManager() = default;
- virtual bool GetBoolProperty(const std::string& key, bool default_value);
+ virtual bool GetBoolProperty(const std::string& key, bool default_value) = 0;
virtual std::string GetProperty(const std::string& key,
- const std::string& default_value);
- virtual int GetIntProperty(const std::string& key, int default_value);
- virtual void SetProperty(const std::string& key, const std::string& value);
+ const std::string& default_value) = 0;
+ virtual int GetIntProperty(const std::string& key, int default_value) = 0;
+ virtual bool SetProperty(const std::string& key,
+ const std::string& value) = 0;
};
-} // namespace logging
-} // namespace modem
+
+} // namespace pixel_modem
diff --git a/modem/clock_manager/Android.bp b/modem/clock_manager/Android.bp
new file mode 100644
index 0000000..98aff6f
--- /dev/null
+++ b/modem/clock_manager/Android.bp
@@ -0,0 +1,9 @@
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+cc_library {
+ name: "modem_clock_manager",
+ export_include_dirs: [ "include" ],
+ vendor_available: true,
+}
diff --git a/modem/clock_manager/fake/Android.bp b/modem/clock_manager/fake/Android.bp
new file mode 100644
index 0000000..eb16445
--- /dev/null
+++ b/modem/clock_manager/fake/Android.bp
@@ -0,0 +1,15 @@
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+cc_defaults {
+ name: "fake_modem_clock_manager_defaults",
+ shared_libs: [ "modem_clock_manager" ],
+}
+
+cc_library_static {
+ name: "fake_modem_clock_manager",
+ export_include_dirs: [ "include" ],
+ defaults: [ "fake_modem_clock_manager_defaults" ],
+ vendor_available: true,
+}
diff --git a/modem/clock_manager/fake/include/fake_clock_manager.h b/modem/clock_manager/fake/include/fake_clock_manager.h
new file mode 100644
index 0000000..8956777
--- /dev/null
+++ b/modem/clock_manager/fake/include/fake_clock_manager.h
@@ -0,0 +1,21 @@
+#include "clock_manager.h"
+
+namespace pixel_modem {
+
+/**
+ * @brief Fake implementation of clock manager that doesn't actually sleep.
+ *
+ * A lot of vendor code don't have return values and instead force the client
+ * codes to sleep for a specified period of time before checking some system
+ * properties. However, since unit tests don't rely on the real vendor
+ * implementations, these sleeps should be ignored and so a fake clock should be
+ * used.
+ *
+ * Since this definition is unlikely to change, it will be defined in the header
+ * and not an implementation file.
+ */
+struct FakeClockManager : public ClockManager {
+ void Sleep(size_t /*seconds*/) const override{};
+};
+
+} // namespace pixel_modem
diff --git a/modem/clock_manager/impl/Android.bp b/modem/clock_manager/impl/Android.bp
new file mode 100644
index 0000000..13f4cc6
--- /dev/null
+++ b/modem/clock_manager/impl/Android.bp
@@ -0,0 +1,16 @@
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+modem_clock_manager_impl_public_deps = [
+ "modem_clock_manager",
+]
+
+cc_library {
+ name: "modem_clock_manager_impl",
+ export_include_dirs: [ "include" ],
+ srcs: [ "clock_manager_impl.cpp" ],
+ shared_libs: modem_clock_manager_impl_public_deps,
+ export_shared_lib_headers: modem_clock_manager_impl_public_deps,
+ vendor_available: true,
+}
diff --git a/modem/clock_manager/impl/clock_manager_impl.cpp b/modem/clock_manager/impl/clock_manager_impl.cpp
new file mode 100644
index 0000000..dc61a63
--- /dev/null
+++ b/modem/clock_manager/impl/clock_manager_impl.cpp
@@ -0,0 +1,9 @@
+#include "clock_manager_impl.h"
+
+#include <unistd.h>
+
+namespace pixel_modem {
+
+void ClockManagerImpl::Sleep(size_t seconds) const { sleep(seconds); }
+
+} // namespace pixel_modem
diff --git a/modem/clock_manager/impl/include/clock_manager_impl.h b/modem/clock_manager/impl/include/clock_manager_impl.h
new file mode 100644
index 0000000..d626b98
--- /dev/null
+++ b/modem/clock_manager/impl/include/clock_manager_impl.h
@@ -0,0 +1,13 @@
+#pragma once
+
+#include <cstddef>
+
+#include "clock_manager.h"
+
+namespace pixel_modem {
+
+struct ClockManagerImpl : public ClockManager {
+ void Sleep(size_t seconds) const override;
+};
+
+} // namespace pixel_modem
diff --git a/modem/clock_manager/include/clock_manager.h b/modem/clock_manager/include/clock_manager.h
new file mode 100644
index 0000000..1db88c5
--- /dev/null
+++ b/modem/clock_manager/include/clock_manager.h
@@ -0,0 +1,28 @@
+#pragma once
+
+#include <cstddef>
+
+namespace pixel_modem {
+
+/**
+ * @brief Interface for time based operations.
+ *
+ * This interface was intentionally not called `Clock`, like the Java side
+ * counterpart since it's likely that clients would call the local variable
+ * `clock(_)`, which would clash with the C defined `clock` method.
+ */
+struct ClockManager {
+ virtual ~ClockManager() = default;
+
+ /**
+ * @brief Sleep the thread for a given number of seconds.
+ *
+ * @param seconds Minimum number of seconds to sleep for. Note, this is
+ * different than the Java android clock which accepts seconds. This was done
+ * because C++ developers are likely more familiar with the `sleep` command,
+ * which accepts seconds.
+ */
+ virtual void Sleep(size_t seconds) const = 0;
+};
+
+} // namespace pixel_modem
diff --git a/modem/dump_modemlog/Android.bp b/modem/dump_modemlog/Android.bp
new file mode 100644
index 0000000..aca7b20
--- /dev/null
+++ b/modem/dump_modemlog/Android.bp
@@ -0,0 +1,79 @@
+package {
+ default_applicable_licenses: [ "Android-Apache-2.0" ],
+}
+
+sh_binary {
+ name: "dump_modem.sh",
+ src: "dump_modem.sh",
+ vendor: true,
+ sub_dir: "dump",
+}
+
+// Modem Log Dumper
+
+modem_log_dumper_public_deps = [
+ "modem_android_property_manager",
+]
+
+// When `modem_log_dumper` is included statically, its dependencies are not
+// transitively included, so the target will also have to include this default
+// to restate them.
+cc_defaults {
+ name: "modem_log_dumper_defaults",
+ shared_libs: modem_log_dumper_public_deps + [
+ "libbase",
+ // liblog is not directly used by us, but it's a transitive dependency of libbase
+ "liblog",
+ "modem_log_constants",
+ ],
+}
+
+cc_library {
+ name: "modem_log_dumper",
+ srcs: [ "modem_log_dumper.cpp" ],
+ defaults: [ "modem_log_dumper_defaults" ],
+ export_shared_lib_headers: modem_log_dumper_public_deps,
+ export_include_dirs: [ "include" ],
+ vendor_available: true,
+}
+
+// dump_modemlog
+
+cc_binary {
+ name: "dump_modemlog",
+ srcs: [ "dump_modemlog.cpp" ],
+ cflags: [
+ "-Wall",
+ "-Wextra",
+ "-Werror",
+ ],
+ shared_libs: [
+ "libbase",
+ "libdump",
+ "liblog",
+ "modem_android_property_manager_impl",
+ "modem_log_dumper",
+ ],
+ vendor: true,
+ relative_install_path: "dump",
+}
+
+cc_test {
+ name: "dump_modemlog_test",
+ srcs: [ "modem_log_dumper_test.cpp" ],
+ defaults: [
+ "modem_log_dumper_defaults",
+ "modem_android_property_manager_fake_defaults",
+ ],
+ static_libs: [
+ "modem_android_property_manager",
+ "modem_android_property_manager_fake",
+ "modem_log_constants",
+ "modem_log_dumper",
+ "libgmock",
+ ],
+ vendor: true,
+ // Shared libs in vendor folder are guarded by SEPolicy, so tests need root
+ // access to run them.
+ require_root: true,
+}
diff --git a/modem/dump_modem.sh b/modem/dump_modemlog/dump_modem.sh
index d1a535d..d1a535d 100644
--- a/modem/dump_modem.sh
+++ b/modem/dump_modemlog/dump_modem.sh
diff --git a/modem/dump_modemlog.cpp b/modem/dump_modemlog/dump_modemlog.cpp
index 1b6b2e9..bed936c 100644
--- a/modem/dump_modemlog.cpp
+++ b/modem/dump_modemlog/dump_modemlog.cpp
@@ -16,33 +16,11 @@
#include <android-base/properties.h>
#include <dump/pixel_dump.h>
+#include "android_property_manager_impl.h"
#include "dumper.h"
#include "modem_log_dumper.h"
-namespace modem {
-namespace logging {
-
-/**
- * @brief Implementation of AndroidPropertyManager that directly forwards to
- * android base methods.
- */
-class AndroidPropertyManagerImpl : public AndroidPropertyManager {
- public:
- bool GetBoolProperty(const std::string& key, bool default_value) override {
- return android::base::GetBoolProperty(key, default_value);
- };
-
- std::string GetProperty(const std::string& key,
- const std::string& default_value) override {
- return android::base::GetProperty(key, default_value);
- };
- int GetIntProperty(const std::string& key, int default_value) override {
- return android::base::GetIntProperty(key, default_value);
- };
- void SetProperty(const std::string& key, const std::string& value) override {
- android::base::SetProperty(key, value);
- };
-};
+namespace pixel_modem::logging {
/**
* @brief Implementation of Dumper that directly forwards to their corresponding
@@ -59,13 +37,12 @@ class DumperImpl : public Dumper {
}
};
-} // namespace logging
-} // namespace modem
+} // namespace pixel_modem::logging
int main() {
- modem::logging::DumperImpl dumper_impl;
- modem::logging::AndroidPropertyManagerImpl android_property_manager_impl;
- modem::logging::ModemLogDumper modem_log_dumper(
+ pixel_modem::logging::DumperImpl dumper_impl;
+ pixel_modem::AndroidPropertyManagerImpl android_property_manager_impl;
+ pixel_modem::logging::ModemLogDumper modem_log_dumper(
dumper_impl, android_property_manager_impl);
modem_log_dumper.DumpModemLogs();
diff --git a/modem/dump_modemlog/dump_modemlog.mk b/modem/dump_modemlog/dump_modemlog.mk
new file mode 100644
index 0000000..5e91ab7
--- /dev/null
+++ b/modem/dump_modemlog/dump_modemlog.mk
@@ -0,0 +1,5 @@
+BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs-common/modem/dump_modemlog/sepolicy
+
+PRODUCT_PACKAGES += dump_modem.sh
+PRODUCT_PACKAGES += dump_modemlog
+
diff --git a/modem/dump_modemlog/include/bugreport_constants.h b/modem/dump_modemlog/include/bugreport_constants.h
new file mode 100644
index 0000000..25c800f
--- /dev/null
+++ b/modem/dump_modemlog/include/bugreport_constants.h
@@ -0,0 +1,33 @@
+#pragma once
+
+#include <string_view>
+
+#include "dumper.h"
+
+namespace pixel_modem::logging {
+
+inline constexpr std::string_view kBugreportPackingDirectory =
+ "/data/vendor/radio/logs/always-on/all_logs";
+
+inline constexpr LogDumpInfo kLogDumpInfo[] = {
+ {.src_dir = "/data/vendor/radio/extended_logs",
+ .dest_dir = kBugreportPackingDirectory,
+ .limit = 20,
+ .prefix = "extended_log_"},
+ {.src_dir = "/data/vendor/radio/sim/",
+ .dest_dir = kBugreportPackingDirectory,
+ .limit = 1,
+ .prefix = "sim_poweron_log_"},
+ {.src_dir = "data/vendor/radio/logs/history",
+ .dest_dir = kBugreportPackingDirectory,
+ .limit = 2,
+ .prefix = "Logging"}};
+
+constexpr FileCopyInfo kFileCopyInfo[] = {
+ {.src_dir = "/mnt/vendor/efs/nv_normal.bin",
+ .dest_dir = "/data/vendor/radio/logs/always-on/all_logs/nv_normal.bin"},
+ {.src_dir = "/mnt/vendor/efs/nv_protected.bin",
+ .dest_dir =
+ "/data/vendor/radio/logs/always-on/all_logs/nv_protected.bin"}};
+
+} // namespace pixel_modem::logging
diff --git a/modem/include/dumper.h b/modem/dump_modemlog/include/dumper.h
index 348e666..a9b96c6 100644
--- a/modem/include/dumper.h
+++ b/modem/dump_modemlog/include/dumper.h
@@ -3,8 +3,7 @@
#include <ostream>
#include <string_view>
-namespace modem {
-namespace logging {
+namespace pixel_modem::logging {
/**
* @brief Data object for information about dumpings logs.
@@ -67,5 +66,5 @@ class Dumper {
virtual void DumpLogs(const LogDumpInfo& log_dump_info);
virtual void CopyFile(const FileCopyInfo& file_copy_info);
};
-} // namespace logging
-} // namespace modem
+
+} // namespace pixel_modem::logging
diff --git a/modem/include/modem_log_dumper.h b/modem/dump_modemlog/include/modem_log_dumper.h
index 96911b0..1533217 100644
--- a/modem/include/modem_log_dumper.h
+++ b/modem/dump_modemlog/include/modem_log_dumper.h
@@ -3,8 +3,7 @@
#include "android_property_manager.h"
#include "dumper.h"
-namespace modem {
-namespace logging {
+namespace pixel_modem::logging {
/**
* @brief Responsible for dumping all relevant modem logs.
@@ -77,5 +76,4 @@ class ModemLogDumper {
AndroidPropertyManager& android_property_manager_;
};
-} // namespace logging
-} // namespace modem
+} // namespace pixel_modem::logging
diff --git a/modem/modem_log_dumper.cpp b/modem/dump_modemlog/modem_log_dumper.cpp
index fad8d29..127478e 100644
--- a/modem/modem_log_dumper.cpp
+++ b/modem/dump_modemlog/modem_log_dumper.cpp
@@ -2,11 +2,11 @@
#include <log/log.h>
+#include "bugreport_constants.h"
#include "dumper.h"
#include "modem_log_constants.h"
-namespace modem {
-namespace logging {
+namespace pixel_modem::logging {
void ModemLogDumper::DumpModemLogs() {
bool shouldRestartModemLogging =
@@ -15,7 +15,11 @@ void ModemLogDumper::DumpModemLogs() {
kModemLoggingNumberBugreportProperty.data(),
kDefaultBugreportNumberFiles);
- if (shouldRestartModemLogging) {
+ // Should always trigger `stopModemLogging`. This is because currently copying
+ // modem logs and stopping modem logging are entangled.
+ // TODO: b/289435256 - Always copy logs and return this to checking if logging
+ // is actively running.
+ if (allowedToStopModemLogging()) {
// If modem logging is running at time of bugreport, it needs to be stopped
// to ensure that the most recent logs are included in the bugreport. If
// this command fails, only older log files will be included, as seen in
@@ -76,5 +80,5 @@ void ModemLogDumper::startModemLogging() {
android_property_manager_.SetProperty(kModemLoggingEnabledProperty.data(),
"true");
}
-} // namespace logging
-} // namespace modem
+
+} // namespace pixel_modem::logging
diff --git a/modem/test/modem_log_dumper_test.cpp b/modem/dump_modemlog/modem_log_dumper_test.cpp
index a052d43..81bec8b 100644
--- a/modem/test/modem_log_dumper_test.cpp
+++ b/modem/dump_modemlog/modem_log_dumper_test.cpp
@@ -2,13 +2,15 @@
#include <string_view>
+#include "android_property_manager.h"
+#include "bugreport_constants.h"
#include "dumper.h"
#include "fake_android_property_manager.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
+#include "modem_log_constants.h"
-namespace modem {
-namespace logging {
+namespace pixel_modem::logging {
namespace {
using ::testing::Eq;
@@ -23,9 +25,8 @@ inline constexpr static LogDumpInfo kAlwaysOnLogDumpInfo = {
void StartModemLogging(
FakeAndroidPropertyManager& fake_android_property_manager) {
- fake_android_property_manager.SetProperty(
- kModemLoggingEnabledProperty.data(),
- FakeAndroidPropertyManager::kTruthString.data());
+ fake_android_property_manager.SetProperty(kModemLoggingEnabledProperty.data(),
+ kTruthString.data());
}
class MockDumper : public Dumper {
@@ -101,6 +102,6 @@ TEST_F(ModemLogDumperTest,
EXPECT_FALSE(fake_android_property_manager.ModemLoggingHasRestarted());
}
+
} // namespace
-} // namespace logging
-} // namespace modem
+} // namespace pixel_modem::logging
diff --git a/modem/sepolicy/dump_modem.te b/modem/dump_modemlog/sepolicy/dump_modem.te
index 2ffa351..2ffa351 100644
--- a/modem/sepolicy/dump_modem.te
+++ b/modem/dump_modemlog/sepolicy/dump_modem.te
diff --git a/modem/sepolicy/dump_modemlog.te b/modem/dump_modemlog/sepolicy/dump_modemlog.te
index b7082c9..b7082c9 100644
--- a/modem/sepolicy/dump_modemlog.te
+++ b/modem/dump_modemlog/sepolicy/dump_modemlog.te
diff --git a/modem/sepolicy/file.te b/modem/dump_modemlog/sepolicy/file.te
index 383480d..383480d 100644
--- a/modem/sepolicy/file.te
+++ b/modem/dump_modemlog/sepolicy/file.te
diff --git a/modem/sepolicy/file_contexts b/modem/dump_modemlog/sepolicy/file_contexts
index 29315e9..29315e9 100644
--- a/modem/sepolicy/file_contexts
+++ b/modem/dump_modemlog/sepolicy/file_contexts
diff --git a/modem/sepolicy/genfs_contexts b/modem/dump_modemlog/sepolicy/genfs_contexts
index 98a8fc5..98a8fc5 100644
--- a/modem/sepolicy/genfs_contexts
+++ b/modem/dump_modemlog/sepolicy/genfs_contexts
diff --git a/modem/include/modem_log_constants.h b/modem/include/modem_log_constants.h
deleted file mode 100644
index 29a0fa8..0000000
--- a/modem/include/modem_log_constants.h
+++ /dev/null
@@ -1,56 +0,0 @@
-#pragma once
-#include <string>
-
-#include "dumper.h"
-
-namespace modem {
-namespace logging {
-
-// Modem related Android System Properties
-
-// Controls triggering `modem_logging_start` and `modem_logging_stop`.
-inline constexpr static std::string_view kModemLoggingEnabledProperty =
- "vendor.sys.modem.logging.enable";
-// Signals the current modem logging state. This will be set to
-// `vendor.sys.modem.logging.enable` when `modem_log_start` or `modem_log_stop`
-// terminates.
-inline constexpr static std::string_view kModemLoggingStatusProperty =
- "vendor.sys.modem.logging.status";
-// Int which specifies how many files to include in the bugreport.
-inline constexpr static std::string_view kModemLoggingNumberBugreportProperty =
- "persist.vendor.sys.modem.logging.br_num";
-// Signals the current location that is being logged to. This can be used to
-// determine the logging type.
-inline constexpr static std::string_view kModemLoggingPathProperty =
- "vendor.sys.modem.logging.log_path";
-
-// Bugreport constants
-inline constexpr static int kDefaultBugreportNumberFiles = 100;
-inline constexpr static std::string_view kModemAlwaysOnLogDirectory =
- "/data/vendor/radio/logs/always-on";
-inline constexpr static std::string_view kModemLogPrefix = "sbuff_";
-inline constexpr static std::string_view kBugreportPackingDirectory =
- "/data/vendor/radio/logs/always-on/all_logs";
-
-inline constexpr static LogDumpInfo kLogDumpInfo[] = {
- {.src_dir = "/data/vendor/radio/extended_logs",
- .dest_dir = kBugreportPackingDirectory,
- .limit = 20,
- .prefix = "extended_log_"},
- {.src_dir = "/data/vendor/radio/sim/",
- .dest_dir = kBugreportPackingDirectory,
- .limit = 1,
- .prefix = "sim_poweron_log_"},
- {.src_dir = "data/vendor/radio/logs/history",
- .dest_dir = kBugreportPackingDirectory,
- .limit = 2,
- .prefix = "Logging"}};
-
-constexpr static FileCopyInfo kFileCopyInfo[] = {
- {.src_dir = "/mnt/vendor/efs/nv_normal.bin",
- .dest_dir = "/data/vendor/radio/logs/always-on/all_logs/nv_normal.bin"},
- {.src_dir = "/mnt/vendor/efs/nv_protected.bin",
- .dest_dir =
- "/data/vendor/radio/logs/always-on/all_logs/nv_protected.bin"}};
-} // namespace logging
-} // namespace modem
diff --git a/modem/modem.mk b/modem/modem.mk
index 10df7d4..d921e74 100644
--- a/modem/modem.mk
+++ b/modem/modem.mk
@@ -1,5 +1 @@
-BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs-common/modem/sepolicy
-
-PRODUCT_PACKAGES += dump_modem.sh
-PRODUCT_PACKAGES += dump_modemlog
-
+include device/google/gs-common/modem/dump_modemlog/dump_modemlog.mk
diff --git a/modem/modem_log_constants/Android.bp b/modem/modem_log_constants/Android.bp
new file mode 100644
index 0000000..f4e3177
--- /dev/null
+++ b/modem/modem_log_constants/Android.bp
@@ -0,0 +1,9 @@
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+cc_library {
+ name: "modem_log_constants",
+ export_include_dirs: [ "include" ],
+ vendor_available: true,
+}
diff --git a/modem/modem_log_constants/include/modem_log_constants.h b/modem/modem_log_constants/include/modem_log_constants.h
new file mode 100644
index 0000000..68004cf
--- /dev/null
+++ b/modem/modem_log_constants/include/modem_log_constants.h
@@ -0,0 +1,35 @@
+#pragma once
+
+#include <string_view>
+
+namespace pixel_modem::logging {
+
+// Modem related Android System Properties
+
+// Controls triggering `modem_logging_start` and `modem_logging_stop`.
+inline constexpr std::string_view kModemLoggingEnabledProperty =
+ "vendor.sys.modem.logging.enable";
+// Signals the current modem logging state. This will be set to
+// `vendor.sys.modem.logging.enable` when `modem_log_start` or `modem_log_stop`
+// terminates.
+inline constexpr std::string_view kModemLoggingStatusProperty =
+ "vendor.sys.modem.logging.status";
+// Int which specifies how many files to include in the bugreport.
+inline constexpr std::string_view kModemLoggingNumberBugreportProperty =
+ "persist.vendor.sys.modem.logging.br_num";
+// Signals the current location that is being logged to. This can be used to
+// determine the logging type.
+inline constexpr std::string_view kModemLoggingPathProperty =
+ "vendor.sys.modem.logging.log_path";
+inline constexpr std::string_view kModemLoggingLogCountProperty =
+ "vendor.sys.modem.logging.log_count";
+inline constexpr std::string_view kModemLoggingLogPath =
+ "vendor.sys.modem.logging.log_path";
+
+// Bugreport constants
+inline constexpr int kDefaultBugreportNumberFiles = 100;
+inline constexpr std::string_view kModemAlwaysOnLogDirectory =
+ "/data/vendor/radio/logs/always-on";
+inline constexpr std::string_view kModemLogPrefix = "sbuff_";
+
+} // namespace pixel_modem::logging
diff --git a/modem/test/include/fake_android_property_manager.h b/modem/test/include/fake_android_property_manager.h
deleted file mode 100644
index 79fd4f1..0000000
--- a/modem/test/include/fake_android_property_manager.h
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-#include <map>
-#include <string>
-#include <string_view>
-
-#include "android_property_manager.h"
-#include "modem_log_constants.h"
-
-namespace modem {
-namespace logging {
-
-/**
- * @brief Fake Implementation of AndroidPropertyManager that mocks some of the
- * property changing behaviour from pixellogger's `modem_logging_control`.
- */
-class FakeAndroidPropertyManager : public AndroidPropertyManager {
- public:
- inline constexpr static std::string_view kTruthString = "true";
- inline constexpr static std::string_view kFalseString = "false";
-
- bool GetBoolProperty(const std::string& key, bool default_value) override {
- return MapContainsKey(key)
- ? GetPropertyInternal(key) == kTruthString
- : default_value;
- };
-
- std::string GetProperty(const std::string& key,
- const std::string& default_value) override {
- return MapContainsKey(key) ? GetPropertyInternal(key) : default_value;
- ;
- };
-
- int GetIntProperty(const std::string& key, int default_value) override {
- return MapContainsKey(key) ? std::stoi(GetPropertyInternal(key))
- : default_value;
- };
-
- /**
- * This function needs to copy the behaviour of `modem_logging_control` to
- * ensure that the right properties are being set in order.
- *
- * More specifically, this function will also set the
- * `kModemLoggingStatusProperty` whenever `kModemLoggingEnabledProperty` is
- * set to simulate modem logging stopping / starting.
- */
- void SetProperty(const std::string& key, const std::string& value) override {
- if (key == kModemLoggingEnabledProperty) {
- property_map_[kModemLoggingStatusProperty.data()] = value;
-
- // need to track if modem logging has restarted or not
- if (value == kFalseString) {
- modem_logging_has_been_off_ = true;
- }
- if (modem_logging_has_been_off_ && (value == kTruthString)) {
- modem_logging_has_restarted_ = true;
- }
- }
- property_map_[key] = value;
- };
-
- bool ModemLoggingHasRestarted() { return modem_logging_has_restarted_; }
-
- private:
- bool MapContainsKey(const std::string& key) {
- return property_map_.find(key) != property_map_.end();
- }
- std::string GetPropertyInternal(const std::string& key) {
- return property_map_.find(key)->second;
- }
-
- std::map<std::string, std::string> property_map_;
- bool modem_logging_has_been_off_ = false;
- bool modem_logging_has_restarted_ = false;
-};
-} // namespace logging
-} // namespace modem