From 0c4beb3f8c61026353f3d4b11abd4101f6a95a23 Mon Sep 17 00:00:00 2001 From: roynatech2544 Date: Mon, 3 Oct 2022 10:38:54 +0000 Subject: [PATCH] universal7885: fm-hidl: Move to libfileio and libcachedclass --- .../hardware/fmradio/1.2/default/Android.bp | 1 + .../fmradio/1.2/default/CachedClass.h | 9 ++++++ .../hardware/fmradio/1.2/default/FMRadio.cpp | 29 +++++++++---------- 3 files changed, 23 insertions(+), 16 deletions(-) create mode 100644 universal7885-common/hidl-packages/parts/hardware/fmradio/1.2/default/CachedClass.h diff --git a/universal7885-common/hidl-packages/parts/hardware/fmradio/1.2/default/Android.bp b/universal7885-common/hidl-packages/parts/hardware/fmradio/1.2/default/Android.bp index 3f2fbae..11fee26 100644 --- a/universal7885-common/hidl-packages/parts/hardware/fmradio/1.2/default/Android.bp +++ b/universal7885-common/hidl-packages/parts/hardware/fmradio/1.2/default/Android.bp @@ -11,6 +11,7 @@ cc_binary { "libhidlbase", "libutils", "liblog", + "libfileio", "vendor.eureka.hardware.fmradio@1.0", "vendor.eureka.hardware.fmradio@1.1", "vendor.eureka.hardware.fmradio@1.2", diff --git a/universal7885-common/hidl-packages/parts/hardware/fmradio/1.2/default/CachedClass.h b/universal7885-common/hidl-packages/parts/hardware/fmradio/1.2/default/CachedClass.h new file mode 100644 index 0000000..96cea46 --- /dev/null +++ b/universal7885-common/hidl-packages/parts/hardware/fmradio/1.2/default/CachedClass.h @@ -0,0 +1,9 @@ +template static inline C *cachedClass(C *cached) { + if (cached != nullptr) { + return cached; + } + cached = new C(); + return cached; +} + +#define USE_CACHED(cache) ({ return cachedClass((cache)); }) diff --git a/universal7885-common/hidl-packages/parts/hardware/fmradio/1.2/default/FMRadio.cpp b/universal7885-common/hidl-packages/parts/hardware/fmradio/1.2/default/FMRadio.cpp index fecaa31..97c30d3 100644 --- a/universal7885-common/hidl-packages/parts/hardware/fmradio/1.2/default/FMRadio.cpp +++ b/universal7885-common/hidl-packages/parts/hardware/fmradio/1.2/default/FMRadio.cpp @@ -19,29 +19,31 @@ #include #include +#include +#include "CachedClass.h" + static int mChannelSpacing = 3; namespace vendor::eureka::hardware::fmradio::V1_2 { +static FMRadio *kCached = nullptr; + +constexpr const char* FM_FREQ_CTL = "/sys/devices/virtual/s610_radio/s610_radio/radio_freq_ctrl"; +constexpr const char* FM_FREQ_SEEK = "/sys/devices/virtual/s610_radio/s610_radio/radio_freq_seek"; + Return FMRadio::setManualFreq(float freq) { - std::ofstream file; - file.open("/sys/devices/virtual/s610_radio/s610_radio/radio_freq_ctrl"); - file << freq * 1000; - file.close(); + FileIO::writeline(FM_FREQ_CTL, freq * 1000); return Void(); } Return FMRadio::adjustFreqByStep(fmradio::V1_0::Direction dir) { - std::ofstream file; std::string value = ""; if (dir == V1_0::Direction::UP) { value = "1 " + std::to_string(mChannelSpacing * 10); } else if (dir == V1_0::Direction::DOWN) { value = "0 " + std::to_string(mChannelSpacing * 10); } - file.open("/sys/devices/virtual/s610_radio/s610_radio/radio_freq_seek"); - file << value; - file.close(); + FileIO::writeline(FM_FREQ_SEEK, value); return Void(); } Return FMRadio::isAvailable() { @@ -53,16 +55,11 @@ Return FMRadio::isAvailable() { } } Return FMRadio::setChannelSpacing(V1_2::Space space) { - mChannelSpacing = (int)space; + mChannelSpacing = static_cast(space); return Void(); } Return FMRadio::getFreqFromSysfs() { - std::ifstream file; - std::string value; - file.open("/sys/devices/virtual/s610_radio/s610_radio/radio_freq_ctrl"); - std::getline(file, value); - file.close(); - return std::stoi(value); + return FileIO::readline(FM_FREQ_CTL); } Return FMRadio::getChannelSpacing() { switch (mChannelSpacing) { @@ -80,5 +77,5 @@ Return FMRadio::getChannelSpacing() { return V1_2::Space::CHANNEL_SPACING_30HZ; } } -IFMRadio *FMRadio::getInstance(void) { return new FMRadio(); } +IFMRadio *FMRadio::getInstance(void) { USE_CACHED(kCached); } } // namespace vendor::eureka::hardware::fmradio::V1_2