#include "common/logger.h"
-#include "radio/radio_manager.h"
-
namespace extension {
namespace radio {
using namespace common;
using namespace extension::radio;
-RadioInstance::RadioInstance() {
+RadioInstance::RadioInstance()
+ : manager_(*this) {
using std::placeholders::_1;
using std::placeholders::_2;
RadioInstance::~RadioInstance() {
}
-RadioInstance& RadioInstance::getInstance() {
- static RadioInstance instance;
- return instance;
-}
-
void RadioInstance::MuteGetter(const picojson::value& args,
picojson::object& out) {
LoggerD("Enter");
- ReportSuccess(picojson::value(FMRadioManager::GetInstance()->IsMuted()), out);
+ ReportSuccess(picojson::value(manager_.IsMuted()), out);
}
void RadioInstance::MuteSetter(const picojson::value& args,
picojson::object& out) {
LoggerD("Enter");
- FMRadioManager::GetInstance()->SetMute(args.get("mute").get<bool>());
+ manager_.SetMute(args.get("mute").get<bool>());
ReportSuccess(out);
}
void RadioInstance::AntennaGetter(const picojson::value& args,
picojson::object& out) {
LoggerD("Enter");
- ReportSuccess(picojson::value(FMRadioManager::GetInstance()->HasAntenna()),
- out);
+ ReportSuccess(picojson::value(manager_.HasAntenna()), out);
}
void RadioInstance::StateGetter(const picojson::value& args,
picojson::object& out) {
LoggerD("Enter");
- ReportSuccess(picojson::value(FMRadioManager::GetInstance()->GetState()),
- out);
+ ReportSuccess(picojson::value(manager_.GetState()), out);
}
void RadioInstance::FrequencyGetter(const picojson::value& args,
picojson::object& out) {
LoggerD("Enter");
- ReportSuccess(picojson::value(FMRadioManager::GetInstance()->GetFrequency()),
- out);
+ ReportSuccess(picojson::value(manager_.GetFrequency()), out);
}
void RadioInstance::SignalStrengthGetter(const picojson::value& args,
picojson::object& out) {
LoggerD("Enter");
- ReportSuccess(picojson::value(FMRadioManager::GetInstance()->GetSignalStrength()),
- out);
+ ReportSuccess(picojson::value(manager_.GetSignalStrength()), out);
}
void RadioInstance::SeekUp(const picojson::value& args, picojson::object& out) {
LoggerD("Enter");
- FMRadioManager::GetInstance()->SeekUp(args.get("callbackId").get<double>());
+ manager_.SeekUp(args.get("callbackId").get<double>());
ReportSuccess(out);
}
void RadioInstance::SeekDown(const picojson::value& args,
picojson::object& out) {
LoggerD("Enter");
- FMRadioManager::GetInstance()->SeekDown(args.get("callbackId").get<double>());
+ manager_.SeekDown(args.get("callbackId").get<double>());
ReportSuccess(out);
}
void RadioInstance::Start(const picojson::value& args, picojson::object& out) {
LoggerD("Enter");
- PlatformResult result = FMRadioManager::GetInstance()->Start(args.get("frequency").get<double>());
+ PlatformResult result = manager_.Start(args.get("frequency").get<double>());
if (result) {
ReportSuccess(out);
void RadioInstance::Stop(const picojson::value& args, picojson::object& out) {
LoggerD("Enter");
- PlatformResult result = FMRadioManager::GetInstance()->Stop();
+ PlatformResult result = manager_.Stop();
if (result) {
ReportSuccess(out);
void RadioInstance::ScanStart(const picojson::value& args,
picojson::object& out) {
LoggerD("Enter");
- FMRadioManager::GetInstance()->ScanStart(args.get("callbackId").get<double>());
+ manager_.ScanStart(args.get("callbackId").get<double>());
ReportSuccess(out);
}
void RadioInstance::ScanStop(const picojson::value& args,
picojson::object& out) {
LoggerD("Enter");
- FMRadioManager::GetInstance()->ScanStop(args.get("callbackId").get<double>());
+ manager_.ScanStop(args.get("callbackId").get<double>());
ReportSuccess(out);
}
picojson::object& out) {
LoggerD("Enter");
- PlatformResult result = FMRadioManager::GetInstance()->SetFMRadioInterruptedListener();
+ PlatformResult result = manager_.SetFMRadioInterruptedListener();
if (result) {
ReportSuccess(out);
picojson::object& out) {
LoggerD("Enter");
- PlatformResult result = FMRadioManager::GetInstance()->UnsetFMRadioInterruptedListener();
+ PlatformResult result = manager_.UnsetFMRadioInterruptedListener();
if (result) {
ReportSuccess(out);
picojson::object& out) {
LoggerD("Enter");
- PlatformResult result = FMRadioManager::GetInstance()->SetAntennaChangeListener();
+ PlatformResult result = manager_.SetAntennaChangeListener();
if (result) {
ReportSuccess(out);
picojson::object& out) {
LoggerD("Enter");
- PlatformResult result = FMRadioManager::GetInstance()->UnsetAntennaChangeListener();
+ PlatformResult result = manager_.UnsetAntennaChangeListener();
if (result) {
ReportSuccess(out);
#include "common/logger.h"
#include "common/extension.h"
+#include "radio/radio_instance.h"
+
using namespace common;
using namespace std;
obj->insert(std::make_pair("callbackId", picojson::value(callbackId)));
}
-static void PostResultSuccess(double callbackId, picojson::value* event) {
- auto& obj = event->get<picojson::object>();
-
- tools::ReportSuccess(obj);
- AddCallbackID(callbackId, &obj);
-
- RadioInstance::getInstance().PostMessage(event->serialize().c_str());
-}
-
-static void PostResultSuccess(double callbackId) {
- picojson::value event{picojson::object()};
-
- PostResultSuccess(callbackId, &event);
-}
-
-static void PostResultFailure(double callbackId, const PlatformResult& result) {
- picojson::value event{picojson::object()};
- auto& obj = event.get<picojson::object>();
-
- tools::ReportError(result, &obj);
- AddCallbackID(callbackId, &obj);
-
- RadioInstance::getInstance().PostMessage(event.serialize().c_str());
-}
-
PlatformResult GetPlatformResult(const std::string& str, int err) {
LoggerD("Enter");
return static_cast<double>(frequency) / 1000.0;
}
+struct RadioData {
+ explicit RadioData(FMRadioManager& manager)
+ : manager_(manager),
+ callback_id_(0.0) {
+ }
+
+ FMRadioManager& manager_;
+ double callback_id_;
+};
+
+struct RadioScanData : public RadioData {
+ using RadioData::RadioData;
+ std::vector<int> frequencies_;
+};
+
void RadioSeekCallback(int frequency, void* user_data) {
LoggerD("Enter");
- double* id = static_cast<double*>(user_data);
+ RadioData* data = static_cast<RadioData*>(user_data);
+ PlatformResult result = data->manager_.SetFrequency(ToMHz(frequency));
- PlatformResult result = FMRadioManager::GetInstance()->SetFrequency(ToMHz(frequency));
if (result) {
- PostResultSuccess(*id);
+ data->manager_.PostResultSuccess(data->callback_id_);
} else {
- PostResultFailure(*id, result);
+ data->manager_.PostResultFailure(data->callback_id_, result);
}
- delete id;
+ delete data;
}
-struct ScanData {
- double callback_id_;
- std::vector<int> frequencies_;
-};
-
void ScanStartCallback(int frequency, void* user_data) {
LoggerD("Enter");
- ScanData* data = static_cast<ScanData*>(user_data);
+ RadioScanData* data = static_cast<RadioScanData*>(user_data);
data->frequencies_.push_back(frequency);
picojson::value event{picojson::object()};
auto& obj = event.get<picojson::object>();
obj.insert(std::make_pair("frequency", picojson::value(ToMHz(frequency))));
obj.insert(std::make_pair("listenerId", picojson::value("FMRadio_Onfrequencyfound")));
- RadioInstance::getInstance().PostMessage(event.serialize().c_str());
+ data->manager_.PostMessage(event.serialize());
}
void ScanCompleteCallback(void* user_data) {
LoggerD("Enter");
- ScanData* data = static_cast<ScanData*>(user_data);
+ RadioScanData* data = static_cast<RadioScanData*>(user_data);
picojson::value event{picojson::object()};
auto& obj = event.get<picojson::object>();
}
obj.insert(std::make_pair("frequencies", picojson::value(frequencies)));
- PostResultSuccess(data->callback_id_, &event);
+ data->manager_.PostResultSuccess(data->callback_id_, &event);
delete data;
}
void ScanStopCallback(void *user_data) {
LoggerD("Enter");
- double* callback_id = static_cast<double*>(user_data);
+ RadioData* data = static_cast<RadioData*>(user_data);
- PostResultSuccess(*callback_id);
- delete callback_id;
+ data->manager_.PostResultSuccess(data->callback_id_);
+ delete data;
}
void RadioInterruptedCallback(radio_interrupted_code_e code, void *user_data) {
obj.insert(std::make_pair("reason", picojson::value(TranslateInterruptedCode(code))));
}
- RadioInstance::getInstance().PostMessage(event.serialize().c_str());
+ FMRadioManager* manager = static_cast<FMRadioManager*>(user_data);
+ manager->PostMessage(event.serialize());
}
obj.insert(std::make_pair("connected", picojson::value(connected)));
obj.insert(std::make_pair("listenerId", picojson::value("FMRadio_Antenna")));
- RadioInstance::getInstance().PostMessage(event.serialize().c_str());
+ FMRadioManager* manager = static_cast<FMRadioManager*>(user_data);
+ manager->PostMessage(event.serialize());
}
} // namespace
}
}
-FMRadioManager::FMRadioManager()
- : radio_instance_(nullptr) {
+FMRadioManager::FMRadioManager(RadioInstance& instance)
+ : instance_(instance),
+ radio_instance_(nullptr) {
LoggerD("Enter");
const auto err = radio_create(&radio_instance_);
}
}
-FMRadioManager* FMRadioManager::GetInstance() {
- LoggerD("Enter");
-
- static FMRadioManager instance;
- return &instance;
-}
-
PlatformResult FMRadioManager::Start(double frequency) {
LoggerD("Enter, frequency: %f", frequency);
void FMRadioManager::SeekUp(double callback_id) {
LoggerD("Enter");
- double* user_data = new double(callback_id);
+ RadioData* user_data = new RadioData(*this);
+ user_data->callback_id_ = callback_id;
const auto err = radio_seek_up(radio_instance_, RadioSeekCallback, user_data);
void FMRadioManager::SeekDown(double callback_id) {
LoggerD("Enter");
- double* user_data = new double(callback_id);
+ RadioData* user_data = new RadioData(*this);
+ user_data->callback_id_ = callback_id;
const auto err = radio_seek_down(radio_instance_, RadioSeekCallback, user_data);
void FMRadioManager::ScanStart(double callback_id) {
LoggerD("Enter");
- ScanData* user_data = new ScanData();
+ RadioScanData* user_data = new RadioScanData(*this);
user_data->callback_id_ = callback_id;
auto err = radio_set_scan_completed_cb(radio_instance_, ScanCompleteCallback,
void FMRadioManager::ScanStop(double callback_id) {
LoggerD("Enter");
- double* user_data = new double(callback_id);
+ RadioScanData* user_data = new RadioScanData(*this);
+ user_data->callback_id_ = callback_id;
auto err = radio_unset_scan_completed_cb(radio_instance_);
if (RADIO_ERROR_NONE != err) {
const auto err = radio_set_interrupted_cb(radio_instance_,
RadioInterruptedCallback,
- nullptr);
+ this);
return CheckError("radio_set_interrupted_cb", err);
}
const auto err = runtime_info_set_changed_cb(
RUNTIME_INFO_KEY_AUDIO_JACK_CONNECTED,
RadioAntennaCallback,
- nullptr);
+ this);
return CheckError("runtime_info_set_changed_cb", err);
}
return CheckError("runtime_info_unset_changed_cb", err);
}
+void FMRadioManager::PostMessage(const std::string& msg) const {
+ instance_.PostMessage(msg.c_str());
+}
+
+void FMRadioManager::PostResultSuccess(double callbackId, picojson::value* event) const {
+ auto& obj = event->get<picojson::object>();
+
+ tools::ReportSuccess(obj);
+ AddCallbackID(callbackId, &obj);
+
+ PostMessage(event->serialize());
+}
+
+void FMRadioManager::PostResultSuccess(double callbackId) const {
+ picojson::value event{picojson::object()};
+
+ PostResultSuccess(callbackId, &event);
+}
+
+void FMRadioManager::PostResultFailure(double callbackId, const PlatformResult& result) const {
+ picojson::value event{picojson::object()};
+ auto& obj = event.get<picojson::object>();
+
+ tools::ReportError(result, &obj);
+ AddCallbackID(callbackId, &obj);
+
+ PostMessage(event.serialize());
+}
+
} // namespace radio
} // namespace extension