universal7885: fm-aidl: Move to V2 version

- Also sort out common sysfs path
- Also fix Android.bp formatting
This commit is contained in:
roynatech2544 2022-10-20 18:27:55 +09:00
commit 1c59e28be9
5 changed files with 66 additions and 37 deletions

View file

@ -2,7 +2,8 @@ cc_defaults {
name: "fm_aidl_defaults",
cflags: [
"-DTRACK_SIZE=30",
"-DSYSFS_SPACING=3",],
"-DSYSFS_SPACING=3",
],
}
cc_binary {
@ -22,7 +23,7 @@ cc_binary {
"libbinder_ndk",
"liblog",
"libfileio",
"vendor.eureka.hardware.fmradio-V1-ndk",
"vendor.eureka.hardware.fmradio-V2-ndk",
"vendor.eureka.hardware.audio_route-V1-ndk",
],
header_libs: ["libaudioclient_headers"],

View file

@ -41,9 +41,7 @@ namespace aidl::vendor::eureka::hardware::fmradio {
assert(fd > 0);
switch (type) {
case GetType::GET_TYPE_FM_FREQ:
int64_t freq;
fm_radio_slsi::get_frequency(fd, &freq);
*_aidl_return = freq;
fm_radio_slsi::get_frequency(fd, _aidl_return);
break;
case GetType::GET_TYPE_FM_UPPER_LIMIT:
*_aidl_return = fm_radio_slsi::get_upperband_limit(fd);
@ -55,13 +53,25 @@ namespace aidl::vendor::eureka::hardware::fmradio {
*_aidl_return = fm_radio_slsi::get_rmssi(fd);
break;
case GetType::GET_TYPE_FM_BEFORE_CHANNEL:
*_aidl_return = fm_radio_slsi::before_channel(fd);
if (index > 0) index -= 1;
fm_radio_slsi::set_frequency(fd, freqs_list[index]);
*_aidl_return = freqs_list[index];
break;
case GetType::GET_TYPE_FM_NEXT_CHANNEL:
*_aidl_return = fm_radio_slsi::next_channel(fd);
if (index < freqs_list.size() - 1) index += 1;
fm_radio_slsi::set_frequency(fd, freqs_list[index]);
*_aidl_return = freqs_list[index];
break;
case GetType::GET_TYPE_FM_SYSFS_IF:
NOT_SUPPORTED;
case GetType::GET_TYPE_FM_MUTEX_LOCKED:
if (lock.try_lock()){
*_aidl_return = false;
lock.unlock();
} else {
*_aidl_return = true;
}
break;
default:
break;
};
@ -96,19 +106,22 @@ namespace aidl::vendor::eureka::hardware::fmradio {
svc = audio_route::IAudioRoute::fromBinder(ndk::SpAIBinder(AServiceManager_waitForService("vendor.eureka.hardware.audio_route.IAudioRoute/default")));
svc->setParam(value ? "routing=2": "routing=8");
break;
case SetType::SET_TYPE_FM_SEARCH_START:
search_thread = std::thread([this] {
freqs_list = fm_radio_slsi::get_freqs(fd);
lock.unlock();
});
break;
default:
break;
};
lock.unlock();
if (type != SetType::SET_TYPE_FM_SEARCH_START) lock.unlock();
return ::ndk::ScopedAStatus::ok();
}
::ndk::ScopedAStatus FMDevControl::getFreqsList(std::vector<int> *_aidl_return){
RETURN_IF_FAILED_LOCK;
auto vec = fm_radio_slsi::get_freqs(fd);
for (auto i : vec)
_aidl_return->push_back(i);
*_aidl_return = freqs_list;
lock.unlock();
return ::ndk::ScopedAStatus::ok();
}

View file

@ -17,12 +17,15 @@
#include <aidl/vendor/eureka/hardware/fmradio/BnFMDevControl.h>
#include <mutex>
#include <thread>
namespace aidl::vendor::eureka::hardware::fmradio {
struct FMDevControl : public BnFMDevControl {
public:
FMDevControl() = default;
FMDevControl(void) {
index = 0;
}
// Methods from aidl::vendor::eureka::hardware::fmradio::IFMRadio follow.
::ndk::ScopedAStatus open(void) override;
::ndk::ScopedAStatus getValue(GetType type, int *_aidl_return) override;
@ -31,6 +34,9 @@ struct FMDevControl : public BnFMDevControl {
::ndk::ScopedAStatus close(void) override;
private:
int fd;
unsigned int index;
std::timed_mutex lock;
std::thread search_thread;
std::vector<int> freqs_list;
};
} // namespace aidl::vendor::eureka::hardware::fmradio

View file

@ -14,7 +14,7 @@
#include "FMSupport.h"
#include <iostream>
#include <algorithm>
#include <sys/stat.h>
#include <sys/types.h>
@ -26,10 +26,9 @@
namespace aidl::vendor::eureka::hardware::fmradio {
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";
#define FM_SYSFS_BASE "/sys/devices/virtual/s610_radio/s610_radio"
constexpr const char *FM_FREQ_CTL = FM_SYSFS_BASE "/radio_freq_ctrl";
constexpr const char *FM_FREQ_SEEK = FM_SYSFS_BASE "/radio_freq_seek";
::ndk::ScopedAStatus FMSupport::open(void) { NOT_SUPPORTED; }
@ -52,7 +51,15 @@ constexpr const char *FM_FREQ_SEEK =
*_aidl_return = FileIO::readline(FM_FREQ_CTL);
break;
case GetType::GET_TYPE_FM_SYSFS_IF:
*_aidl_return = access("/sys/devices/virtual/s610_radio/s610_radio/", F_OK);
*_aidl_return = access(FM_SYSFS_BASE, F_OK);
break;
case GetType::GET_TYPE_FM_MUTEX_LOCKED:
if (lock.try_lock()) {
*_aidl_return = false;
lock.unlock();
} else {
*_aidl_return = true;
}
break;
default:
break;
@ -73,31 +80,27 @@ constexpr const char *FM_FREQ_SEEK =
case SetType::SET_TYPE_FM_SEARCH_CANCEL:
case SetType::SET_TYPE_FM_SPEAKER_ROUTE:
NOT_SUPPORTED;
case SetType::SET_TYPE_FM_SEARCH_START:
search_thread = std::thread([this] {
for (int i = 0; i < TRACK_SIZE; i++) {
FileIO::writeline(FM_FREQ_SEEK, "1 " + std::to_string(SYSFS_SPACING * 10));
int freq = FileIO::readline(FM_FREQ_CTL);
if (std::find(freqs_list.begin(), freqs_list.end(), freq) != freqs_list.end()) continue;
freqs_list.push_back(freq);
}
lock.unlock();
});
break;
default:
break;
};
lock.unlock();
if (type != SetType::SET_TYPE_FM_SEARCH_START) lock.unlock();
return ::ndk::ScopedAStatus::ok();
}
static inline bool vector_contains(const std::vector<int> vec,
const int search) {
for (auto i : vec) {
if (i == search)
return true;
}
return false;
}
::ndk::ScopedAStatus FMSupport::getFreqsList(std::vector<int> *_aidl_return) {
RETURN_IF_FAILED_LOCK;
for (int i = 0; i < TRACK_SIZE; i++) {
FileIO::writeline(FM_FREQ_SEEK, "1 " + std::to_string(SYSFS_SPACING * 10));
int freq = FileIO::readline(FM_FREQ_CTL);
if (vector_contains(*_aidl_return, freq))
continue;
_aidl_return->push_back(freq);
}
*_aidl_return = freqs_list;
lock.unlock();
return ::ndk::ScopedAStatus::ok();
}

View file

@ -17,12 +17,15 @@
#include <aidl/vendor/eureka/hardware/fmradio/BnFMDevControl.h>
#include <mutex>
#include <thread>
namespace aidl::vendor::eureka::hardware::fmradio {
struct FMSupport : public BnFMDevControl {
public:
FMSupport() = default;
FMSupport(void) {
index = 0;
};
// Methods from aidl::vendor::eureka::hardware::fmradio::IFMRadio follow.
::ndk::ScopedAStatus open(void) override;
::ndk::ScopedAStatus getValue(GetType type, int *_aidl_return) override;
@ -31,5 +34,8 @@ public:
::ndk::ScopedAStatus close(void) override;
private:
std::timed_mutex lock;
std::thread search_thread;
std::vector<int> freqs_list;
int index;
};
} // namespace aidl::vendor::eureka::hardware::fmradio