From: Pawel Andruszkiewicz
Date: Tue, 10 Feb 2015 09:09:01 +0000 (+0100)
Subject: [FMRadio] Major C++ code refactoring.
X-Git-Tag: submit/tizen_tv/20150603.064601~1^2~429
X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5ed78c5b30ac8b791858d6a778edbc2fa0da6afd;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git
[FMRadio] Major C++ code refactoring.
Change-Id: I75d87366fbca2ea297decd7eba8bbc1d8e483643
---
diff --git a/src/radio/radio_extension.cc b/src/radio/radio_extension.cc
index ae9f6eeb..664873e4 100644
--- a/src/radio/radio_extension.cc
+++ b/src/radio/radio_extension.cc
@@ -20,8 +20,9 @@ RadioExtension::RadioExtension() {
LoggerD("RadioExtension()");
}
-RadioExtension::~RadioExtension() {}
+RadioExtension::~RadioExtension() {
+}
common::Instance* RadioExtension::CreateInstance() {
- return &extension::radio::RadioInstance::getInstance();
+ return &extension::radio::RadioInstance::getInstance();
}
diff --git a/src/radio/radio_extension.h b/src/radio/radio_extension.h
index 6d468311..265376f2 100644
--- a/src/radio/radio_extension.h
+++ b/src/radio/radio_extension.h
@@ -7,14 +7,13 @@
#include "common/extension.h"
-class RadioExtension : public common::Extension
-{
- public:
- RadioExtension();
- virtual ~RadioExtension();
+class RadioExtension : public common::Extension {
+ public:
+ RadioExtension();
+ virtual ~RadioExtension();
- private:
- virtual common::Instance* CreateInstance();
+ private:
+ virtual common::Instance* CreateInstance();
};
#endif //RADIO_RADIO_EXTENSION_H_
diff --git a/src/radio/radio_instance.cc b/src/radio/radio_instance.cc
index d02b6011..6e2aa428 100644
--- a/src/radio/radio_instance.cc
+++ b/src/radio/radio_instance.cc
@@ -6,170 +6,170 @@
#include
-#include "common/picojson.h"
+#include
+
#include "common/logger.h"
#include "common/platform_exception.h"
-#include
+#include "radio/radio_manager.h"
namespace extension {
namespace radio {
- using namespace common;
- using namespace extension::radio;
-
- RadioInstance::RadioInstance() {
- using namespace std::placeholders;
- #define REGISTER_SYNC(c,x) \
- RegisterSyncHandler(c, std::bind(&RadioInstance::x, this, _1, _2));
- REGISTER_SYNC("FMRadio_Start", Start);
- REGISTER_SYNC("FMRadio_Stop", Stop);
- REGISTER_SYNC("FMRadio_SetFMRadioInterruptedListener", SetFMRadioInterruptedListener);
- REGISTER_SYNC("FMRadio_UnsetFMRadioInterruptedListener", UnsetFMRadioInterruptedListener);
- REGISTER_SYNC("FMRadio_SetAntennaChangeListener", SetAntennaChangeListener);
- REGISTER_SYNC("FMRadio_UnsetAntennaChangeListener", UnsetAntennaChangeListener);
- REGISTER_SYNC("FMRadio_FrequencyGetter", FrequencyGetter);
- REGISTER_SYNC("FMRadio_SignalStrengthGetter", SignalStrengthGetter);
- REGISTER_SYNC("FMRadio_IsAntennaConnectedGetter", AntennaGetter);
- REGISTER_SYNC("FMRadio_RadioStateGetter", StateGetter);
- REGISTER_SYNC("FMRadio_MuteSetter", MuteSetter);
- REGISTER_SYNC("FMRadio_MuteGetter", MuteGetter);
- #undef REGISTER_SYNC
- #define REGISTER_ASYNC(c,x) \
- RegisterHandler(c, std::bind(&RadioInstance::x, this, _1, _2));
- REGISTER_ASYNC("FMRadio_SeekUp", SeekUp);
- REGISTER_ASYNC("FMRadio_SeekDown", SeekDown);
- REGISTER_ASYNC("FMRadio_ScanStart", ScanStart);
- REGISTER_ASYNC("FMRadio_ScanStop", ScanStop);
- #undef REGISTER_ASYNC
-
- LoggerD("RadioInstance()");
- }
-
- RadioInstance::~RadioInstance() {
- }
-
- RadioInstance& RadioInstance::getInstance() {
- static RadioInstance instance;
- return instance;
- }
-
- void RadioInstance::MuteGetter(const picojson::value& args,
- picojson::object& out)
- {
- bool mute = FMRadioManager::GetInstance(0)->MuteGetter();
- ReportSuccess(picojson::value(mute),out);
- }
-
- void RadioInstance::MuteSetter(const picojson::value& args,
- picojson::object& out)
- {
- FMRadioManager::GetInstance(0)->MuteSetter(args);
- }
-
- void RadioInstance::AntennaGetter(const picojson::value& args,
- picojson::object& out)
- {
- LoggerD(".cc AntennaGetter()");
- bool Antenna = FMRadioManager::GetInstance(0)->AntennaGetter();
- ReportSuccess(picojson::value(Antenna),out);
- }
-
- void RadioInstance::StateGetter(const picojson::value& args,
- picojson::object& out)
- {
- LoggerD(".cc StateGetter()");
- std::string state = FMRadioManager::GetInstance(0)->StateGetter();
- ReportSuccess(picojson::value(state),out);
- }
-
- void RadioInstance::FrequencyGetter(const picojson::value& args,
- picojson::object& out)
- {
- LoggerD(".cc FrequencyGetter()");
- double freq = FMRadioManager::GetInstance(0)->FrequencyGetter();
- ReportSuccess(picojson::value(freq),out);
- }
-
- void RadioInstance::SignalStrengthGetter(const picojson::value& args,
- picojson::object& out)
- {
- LoggerD(".cc SignalStrengthGetter()");
- double strength = FMRadioManager::GetInstance(0)->SignalStrengthGetter();
- ReportSuccess(picojson::value(strength),out);
- }
-
- void RadioInstance::InstanceReportSuccess(picojson::object& out) {
- LoggerD(".cc InstanceReportSuccess()");
- }
-
- void RadioInstance::SeekUp(const picojson::value& args,
- picojson::object& out) {
- LoggerD(".cc SeekUp()");
- FMRadioManager::GetInstance(0)->SeekUp(args);
- }
-
- void RadioInstance::SeekDown(const picojson::value& args,
- picojson::object& out) {
- LoggerD(".cc SeekDown()");
- FMRadioManager::GetInstance(0)->SeekDown(args);
- }
-
- void RadioInstance::Start(const picojson::value& args,
- picojson::object& out) {
- try{
- LoggerD(".cc RadioInstance::Start()");
- FMRadioManager::GetInstance()->Start(args.get("frequency").get());
- }
- catch(const PlatformException& e){
- ReportError(e,out);
- }
- }
-
- void RadioInstance::Stop(const picojson::value& args,
- picojson::object& out) {
- try{
- LoggerD(".cc Stop()");
- FMRadioManager::GetInstance()->Stop();
- }
- catch(const PlatformException& e){
- ReportError(e,out);
- }
- }
-
- void RadioInstance::ScanStart(const picojson::value& args,
- picojson::object& out) {
- FMRadioManager::GetInstance(0)->ScanStart(args);
- }
-
- void RadioInstance::ScanStop(const picojson::value& args,
- picojson::object& out) {
- FMRadioManager::GetInstance(0)->ScanStop(args);
- }
-
- void RadioInstance::SetFMRadioInterruptedListener(const picojson::value& args,
- picojson::object& out) {
- LoggerD(".cc SetFMRadioInterruptedListener()");
- FMRadioManager::GetInstance(0)->SetFMRadioInterruptedListener();
- }
-
- void RadioInstance::UnsetFMRadioInterruptedListener(const picojson::value& args,
- picojson::object& out) {
- LoggerD(".cc UnsetFMRadioInterruptedListener()");
- FMRadioManager::GetInstance(0)->UnsetFMRadioInterruptedListener();
- }
-
- void RadioInstance::SetAntennaChangeListener(const picojson::value& args,
- picojson::object& out) {
- LoggerD(".cc SetAntennaChangeListener()");
- FMRadioManager::GetInstance(0)->SetAntennaChangeListener();
- }
-
- void RadioInstance::UnsetAntennaChangeListener(const picojson::value& args,
- picojson::object& out) {
- LoggerD(".cc UnsetAntennaChangeListener()");
- FMRadioManager::GetInstance(0)->UnsetAntennaChangeListener();
- }
+using namespace common;
+using namespace extension::radio;
+
+RadioInstance::RadioInstance() {
+ using namespace std::placeholders;
+ #define REGISTER_SYNC(c,x) \
+ RegisterSyncHandler(c, std::bind(&RadioInstance::x, this, _1, _2));
+ REGISTER_SYNC("FMRadio_Start", Start);
+ REGISTER_SYNC("FMRadio_Stop", Stop);
+ REGISTER_SYNC("FMRadio_SetFMRadioInterruptedListener", SetFMRadioInterruptedListener);
+ REGISTER_SYNC("FMRadio_UnsetFMRadioInterruptedListener", UnsetFMRadioInterruptedListener);
+ REGISTER_SYNC("FMRadio_SetAntennaChangeListener", SetAntennaChangeListener);
+ REGISTER_SYNC("FMRadio_UnsetAntennaChangeListener", UnsetAntennaChangeListener);
+ REGISTER_SYNC("FMRadio_FrequencyGetter", FrequencyGetter);
+ REGISTER_SYNC("FMRadio_SignalStrengthGetter", SignalStrengthGetter);
+ REGISTER_SYNC("FMRadio_IsAntennaConnectedGetter", AntennaGetter);
+ REGISTER_SYNC("FMRadio_RadioStateGetter", StateGetter);
+ REGISTER_SYNC("FMRadio_MuteSetter", MuteSetter);
+ REGISTER_SYNC("FMRadio_MuteGetter", MuteGetter);
+ #undef REGISTER_SYNC
+ #define REGISTER_ASYNC(c,x) \
+ RegisterHandler(c, std::bind(&RadioInstance::x, this, _1, _2));
+ REGISTER_ASYNC("FMRadio_SeekUp", SeekUp);
+ REGISTER_ASYNC("FMRadio_SeekDown", SeekDown);
+ REGISTER_ASYNC("FMRadio_ScanStart", ScanStart);
+ REGISTER_ASYNC("FMRadio_ScanStop", ScanStop);
+ #undef REGISTER_ASYNC
+
+ LoggerD("RadioInstance()");
+}
+
+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);
+}
+
+void RadioInstance::MuteSetter(const picojson::value& args,
+ picojson::object& out) {
+ LoggerD("Enter");
+ FMRadioManager::GetInstance()->SetMute(args.get("mute").get());
+ ReportSuccess(out);
+}
+
+void RadioInstance::AntennaGetter(const picojson::value& args,
+ picojson::object& out) {
+ LoggerD("Enter");
+ ReportSuccess(picojson::value(FMRadioManager::GetInstance()->HasAntenna()),
+ out);
+}
+
+void RadioInstance::StateGetter(const picojson::value& args,
+ picojson::object& out) {
+ LoggerD("Enter");
+ ReportSuccess(picojson::value(FMRadioManager::GetInstance()->GetState()),
+ out);
+}
+
+void RadioInstance::FrequencyGetter(const picojson::value& args,
+ picojson::object& out) {
+ LoggerD("Enter");
+ ReportSuccess(picojson::value(FMRadioManager::GetInstance()->GetFrequency()),
+ out);
+}
+
+void RadioInstance::SignalStrengthGetter(const picojson::value& args,
+ picojson::object& out) {
+ LoggerD("Enter");
+ ReportSuccess(picojson::value(FMRadioManager::GetInstance()->GetSignalStrength()),
+ out);
+}
+
+void RadioInstance::SeekUp(const picojson::value& args, picojson::object& out) {
+ LoggerD("Enter");
+ FMRadioManager::GetInstance()->SeekUp(args.get("callbackId").get());
+ ReportSuccess(out);
+}
+
+void RadioInstance::SeekDown(const picojson::value& args,
+ picojson::object& out) {
+ LoggerD("Enter");
+ FMRadioManager::GetInstance()->SeekDown(args.get("callbackId").get());
+ ReportSuccess(out);
+}
+void RadioInstance::Start(const picojson::value& args, picojson::object& out) {
+ LoggerD("Enter");
+ try {
+ FMRadioManager::GetInstance()->Start(args.get("frequency").get());
+ ReportSuccess(out);
+ } catch (const PlatformException& e) {
+ ReportError(e, out);
+ }
}
+
+void RadioInstance::Stop(const picojson::value& args, picojson::object& out) {
+ LoggerD("Enter");
+ try {
+ FMRadioManager::GetInstance()->Stop();
+ ReportSuccess(out);
+ } catch (const PlatformException& e) {
+ ReportError(e, out);
+ }
+}
+
+void RadioInstance::ScanStart(const picojson::value& args,
+ picojson::object& out) {
+ LoggerD("Enter");
+ FMRadioManager::GetInstance()->ScanStart(args.get("callbackId").get());
+ ReportSuccess(out);
+}
+
+void RadioInstance::ScanStop(const picojson::value& args,
+ picojson::object& out) {
+ LoggerD("Enter");
+ FMRadioManager::GetInstance()->ScanStop(args.get("callbackId").get());
+ ReportSuccess(out);
}
+
+void RadioInstance::SetFMRadioInterruptedListener(const picojson::value& args,
+ picojson::object& out) {
+ LoggerD("Enter");
+ FMRadioManager::GetInstance()->SetFMRadioInterruptedListener();
+ ReportSuccess(out);
+}
+
+void RadioInstance::UnsetFMRadioInterruptedListener(const picojson::value& args,
+ picojson::object& out) {
+ LoggerD("Enter");
+ FMRadioManager::GetInstance()->UnsetFMRadioInterruptedListener();
+ ReportSuccess(out);
+}
+
+void RadioInstance::SetAntennaChangeListener(const picojson::value& args,
+ picojson::object& out) {
+ LoggerD("Enter");
+ FMRadioManager::GetInstance()->SetAntennaChangeListener();
+ ReportSuccess(out);
+}
+
+void RadioInstance::UnsetAntennaChangeListener(const picojson::value& args,
+ picojson::object& out) {
+ LoggerD("Enter");
+ FMRadioManager::GetInstance()->UnsetAntennaChangeListener();
+ ReportSuccess(out);
+}
+
+} // namespace radio
+} // namespace extension
diff --git a/src/radio/radio_instance.h b/src/radio/radio_instance.h
index fef4d201..448f11c1 100644
--- a/src/radio/radio_instance.h
+++ b/src/radio/radio_instance.h
@@ -6,30 +6,25 @@
#define RADIO_RADIO_INSTANCE_H_
#include "common/extension.h"
-#include "radio_manager.h"
#include "common/picojson.h"
namespace extension {
namespace radio {
-class RadioInstance
- : public common::ParsedInstance
- {
+class RadioInstance : public common::ParsedInstance {
public:
RadioInstance();
virtual ~RadioInstance();
static RadioInstance& getInstance();
- void InstanceReportSuccess(picojson::object& out);
-
private:
- void MuteGetter(const picojson::value& args,picojson::object& out);
- void MuteSetter(const picojson::value& args,picojson::object& out);
- void FrequencyGetter(const picojson::value& args,picojson::object& out);
- void SignalStrengthGetter(const picojson::value& args,picojson::object& out);
- void AntennaGetter(const picojson::value& args,picojson::object& out);
- void StateGetter(const picojson::value& args,picojson::object& out);
+ void MuteGetter(const picojson::value& args, picojson::object& out);
+ void MuteSetter(const picojson::value& args, picojson::object& out);
+ void FrequencyGetter(const picojson::value& args, picojson::object& out);
+ void SignalStrengthGetter(const picojson::value& args, picojson::object& out);
+ void AntennaGetter(const picojson::value& args, picojson::object& out);
+ void StateGetter(const picojson::value& args, picojson::object& out);
void SeekUp(const picojson::value& args, picojson::object& out);
void SeekDown(const picojson::value& args, picojson::object& out);
void ScanStart(const picojson::value& args, picojson::object& out);
@@ -42,7 +37,7 @@ class RadioInstance
void UnsetAntennaChangeListener(const picojson::value& args, picojson::object& out);
};
-}
-}
+} // namespace radio
+} // namespace extension
#endif
diff --git a/src/radio/radio_manager.cc b/src/radio/radio_manager.cc
index c7de995a..3f0f4601 100755
--- a/src/radio/radio_manager.cc
+++ b/src/radio/radio_manager.cc
@@ -21,518 +21,458 @@ using namespace std;
namespace extension {
namespace radio {
-char* state_array[] = { "READY", "PLAYING", "SCANNING" ,""};
+namespace {
+
+const char* RADIO_STATE_ERROR = "ERROR";
+std::map radio_state = {
+ { RADIO_STATE_READY, "READY" },
+ { RADIO_STATE_PLAYING, "PLAYING" },
+ { RADIO_STATE_SCANNING, "SCANNING" },
+};
static const double FREQ_LOWER = 87.5;
-static void createEventSuccess(picojson::object& obj,double callbackId)
-{
- obj.insert(std::make_pair("callbackId", callbackId));
- obj.insert(std::make_pair("status", picojson::value("success")));
+static void AddCallbackID(double callbackId, picojson::object* obj) {
+ obj->insert(std::make_pair("callbackId", callbackId));
+}
+
+static void PostResultSuccess(double callbackId, picojson::value* event) {
+ auto& obj = event->get();
+
+ tools::ReportSuccess(obj);
+ AddCallbackID(callbackId, &obj);
- picojson::value event = picojson::value(obj);
- RadioInstance::getInstance().PostMessage(event.serialize().c_str());
+ RadioInstance::getInstance().PostMessage(event->serialize().c_str());
}
-static void createEventSuccess(double callbackId)
-{
- picojson::value event = picojson::value(picojson::object());
- picojson::object& obj = event.get();
+static void PostResultSuccess(double callbackId) {
+ picojson::value event{picojson::object()};
- createEventSuccess(obj,callbackId);
+ PostResultSuccess(callbackId, &event);
}
+static void PostResultFailure(double callbackId, const PlatformException& ex) {
+ picojson::value event{picojson::object()};
+ auto& obj = event.get();
-static void createEventFail(double callbackId,const PlatformException& ex)
-{
+ tools::ReportError(ex, obj);
+ AddCallbackID(callbackId, &obj);
- picojson::value event = picojson::value(picojson::object());
- picojson::object& obj = event.get();
+ RadioInstance::getInstance().PostMessage(event.serialize().c_str());
+}
- obj.insert(std::make_pair("error", ex.ToJSON()));
- obj.insert(std::make_pair("callbackId", callbackId));
- obj.insert(std::make_pair("status", picojson::value("error")));
+PlatformException GetException(const std::string& str, int err) {
+ LoggerD("Enter");
- RadioInstance::getInstance().PostMessage(event.serialize().c_str());
- }
+ string message = str + " : " + to_string(err);
-int FMRadioManager::Create()
-{
- if (radio_instance == NULL)
- {
- int err = radio_create(&radio_instance);
- if(err){
- LoggerE("radio_create %d",err);
- radio_instance=NULL;
- }
- return err;
- }
- return 0;
-}
+ switch (err) {
+ case RADIO_ERROR_INVALID_PARAMETER:
+ return InvalidValuesException(message);
-bool FMRadioManager::MuteGetter()
-{
- bool muted = false;
- int err = radio_is_muted (radio_instance, &muted);
- if (RADIO_ERROR_NONE != err) {
- LoggerE("radio_is_muted %d",err);
- }
- return muted;
-}
+ case RADIO_ERROR_INVALID_STATE:
+ return InvalidStateException(message);
-void FMRadioManager::MuteSetter(const picojson::value& args)
-{
- bool mute = args.get("mute").get();
+ case RADIO_ERROR_NOT_SUPPORTED:
+ return ServiceNotAvailableException(message);
- int err = radio_set_mute (radio_instance, mute);
- if (err)
- {
- LoggerE("radio_set_mute %d",err);
- }
+ default:
+ return UnknownException(message);
+ }
}
-bool FMRadioManager::AntennaGetter()
-{
- bool connected = false;
- int err = runtime_info_get_value_bool (RUNTIME_INFO_KEY_AUDIO_JACK_CONNECTED , &connected);
+void CheckError(const std::string& str, int err) {
+ LoggerE("%s() error %d", str.c_str(), err);
- if (err)
- {
- return false;
- }
- return connected;
+ switch (err) {
+ case RADIO_ERROR_NONE:
+ break;
+
+ default:
+ throw GetException(str, err);
+ break;
+ }
+}
+
+string TranslateInterruptedCode(int code) {
+ LoggerD("Enter");
+#define STRINGIFY(c) case c: return #c
+ switch (code) {
+ STRINGIFY(RADIO_INTERRUPTED_BY_MEDIA);
+ STRINGIFY(RADIO_INTERRUPTED_BY_CALL);
+ STRINGIFY(RADIO_INTERRUPTED_BY_EARJACK_UNPLUG);
+ STRINGIFY(RADIO_INTERRUPTED_BY_RESOURCE_CONFLICT);
+ STRINGIFY(RADIO_INTERRUPTED_BY_ALARM);
+ STRINGIFY(RADIO_INTERRUPTED_BY_EMERGENCY);
+ STRINGIFY(RADIO_INTERRUPTED_BY_RESUMABLE_MEDIA);
+ STRINGIFY(RADIO_INTERRUPTED_BY_NOTIFICATION);
+ default: return "UNKNOWN_INTERRUPTED_ERROR_CODE";
+ }
+#undef STRINGIFY
}
+int TokHz(double frequency) {
+ return static_cast(frequency * 1000.0);
+}
+double ToMHz(int frequency) {
+ return static_cast(frequency) / 1000.0;
+}
-char* FMRadioManager::StateGetter()
-{
- LoggerD("FMRadioManager::FrequencyGetter()");
+void RadioSeekCallback(int frequency, void* user_data) {
+ LoggerD("Enter");
- radio_state_e state;
+ double* id = static_cast(user_data);
- int err = radio_get_state (radio_instance, &state);
- if (err)
- {
- return state_array[3]; // returns ""
- }
+ try {
+ FMRadioManager::GetInstance()->SetFrequency(ToMHz(frequency));
+ PostResultSuccess(*id);
+ } catch (const PlatformException& ex) {
+ PostResultFailure(*id, ex);
+ }
- return state_array[static_cast(state)];
+ delete id;
}
-double FMRadioManager::FrequencyGetter()
-{
- int freq;
- LoggerD("FMRadioManager::FrequencyGetter()");
- int err = radio_get_frequency(radio_instance,&freq);
+struct ScanData {
+ double callback_id_;
+ std::vector frequencies_;
+};
- if (RADIO_ERROR_NONE != err)
- {
- LoggerE("radio_get_frequency() error %d",err);
- return FREQ_LOWER;
- }
- return static_cast(freq/1000);
+void ScanStartCallback(int frequency, void* user_data) {
+ LoggerD("Enter");
+
+ ScanData* data = static_cast(user_data);
+ data->frequencies_.push_back(frequency);
+
+ picojson::value event{picojson::object()};
+ auto& obj = event.get();
+ obj.insert(std::make_pair("frequency", picojson::value(ToMHz(frequency))));
+ obj.insert(std::make_pair("listenerId", "FMRadio_Onfrequencyfound"));
+ RadioInstance::getInstance().PostMessage(event.serialize().c_str());
}
-double FMRadioManager::SignalStrengthGetter()
-{
- int stren;
+void ScanCompleteCallback(void* user_data) {
+ LoggerD("Enter");
- LoggerD("FMRadioManager::SignalStrengthGetter()");
- int err = radio_get_signal_strength(radio_instance,&stren);
- if (RADIO_ERROR_NONE != err)
- {
- LoggerE("radio_get_signal_strength()");
- return 0;
- }
+ ScanData* data = static_cast(user_data);
- return static_cast(stren);
-}
+ picojson::value event{picojson::object()};
+ auto& obj = event.get();
+ obj.insert(std::make_pair("name", picojson::value("onfinished")));
-FMRadioManager::FMRadioManager() : radio_instance(NULL)
-{
- LoggerD("FMRadioManager::FMRadioManager()");
+ picojson::array frequencies;
+ for (auto frequency : data->frequencies_) {
+ frequencies.push_back(picojson::value(ToMHz(frequency)));
+ }
+
+ obj.insert(std::make_pair("frequencies", picojson::value(frequencies)));
+ PostResultSuccess(data->callback_id_, &event);
+
+ delete data;
}
-FMRadioManager::~FMRadioManager()
-{
+void ScanStopCallback(void *user_data) {
+ LoggerD("Enter");
+ double* callback_id = static_cast(user_data);
- LoggerD("FMRadioManager::~FMRadioManager()");
- int err = radio_destroy(radio_instance);
- LoggerD("radio_destroy() error %d",err);
+ PostResultSuccess(*callback_id);
+ delete callback_id;
}
-FMRadioManager* FMRadioManager::GetInstance(bool safe)
-{
+void RadioInterruptedCallback(radio_interrupted_code_e code, void *user_data) {
+ LoggerD("Enter");
- static FMRadioManager instance;
+ picojson::value event{picojson::object()};
+ auto& obj = event.get();
- int err=instance.Create();
- if(safe)
- {
- CheckErr("radio_create",err);
- }
- LoggerD("FMRadioManager::GetInstance()");
+ obj.insert(std::make_pair("listenerId", "FMRadio_Interrupted"));
- return &instance;
+ if (code == RADIO_INTERRUPTED_COMPLETED) {
+ obj.insert(
+ std::make_pair("action", picojson::value("oninterruptfinished")));
+ } else {
+ obj.insert(std::make_pair("action", picojson::value("oninterrupted")));
+ obj.insert(std::make_pair("reason", TranslateInterruptedCode(code)));
+ }
+
+ RadioInstance::getInstance().PostMessage(event.serialize().c_str());
}
-void FMRadioManager::CheckErr(string str,int err)
-{
- LoggerE("%s() error %d",str.c_str(),err);
+void RadioAntennaCallback(runtime_info_key_e key, void* user_data) {
+ LoggerD("Enter");
- if(RADIO_ERROR_NONE == err)
- {
- return;
- }
- else if (RADIO_ERROR_INVALID_PARAMETER == err)
- {
- throw common::InvalidValuesException(str);
- }
- else if(RADIO_ERROR_INVALID_STATE == err)
- {
- throw common::InvalidStateException(str);
- }
- else if(RADIO_ERROR_SOUND_POLICY == err)
- {
- throw common::UnknownException(str);
- }
- else if(RADIO_ERROR_NOT_SUPPORTED == err)
- {
- throw common::ServiceNotAvailableException(str);
- }
- else
- {
- throw common::UnknownException(str);
- }
+ bool connected = false;
+ const auto err = runtime_info_get_value_bool(key, &connected);
+ if (RADIO_ERROR_NONE != err) {
+ LoggerE("runtime_info_get_value_bool() failed: %d", err);
+ }
+
+ picojson::value event{picojson::object()};
+ auto& obj = event.get();
+ obj.insert(std::make_pair("connected", picojson::value(connected)));
+ obj.insert(std::make_pair("listenerId", "FMRadio_Antenna"));
+
+ RadioInstance::getInstance().PostMessage(event.serialize().c_str());
}
-void FMRadioManager::Start(double freq)
-{
- LoggerD("FMRadioManager::Start(%f)",freq);
+} // namespace
- int err = radio_set_frequency (radio_instance, freq*1000);
- CheckErr("radio_set_frequency",err);
+bool FMRadioManager::IsMuted() {
+ LoggerD("Enter");
- err= radio_start(radio_instance);
- CheckErr("radio_start",err);
-}
+ bool muted = false;
+ const auto err = radio_is_muted(radio_instance_, &muted);
-void FMRadioManager::Stop()
-{
- int err= radio_stop(radio_instance);
- CheckErr("radio_stop",err);
+ if (RADIO_ERROR_NONE != err) {
+ LoggerE("radio_is_muted() failed: %d", err);
+ }
+
+ return muted;
}
-PlatformException FMRadioManager::GetException(char * name,int err)
-{
+void FMRadioManager::SetMute(bool mute) {
+ LoggerD("Enter");
- string buff=string(name);
- buff+=" : ";
- buff+=to_string(err);
+ const auto err = radio_set_mute(radio_instance_, mute);
- if(RADIO_ERROR_INVALID_PARAMETER == err)
- {
- return InvalidValuesException(buff);
- }
- else if(RADIO_ERROR_INVALID_OPERATION == err)
- {
- return UnknownException(buff);
- }
- else if(RADIO_ERROR_INVALID_STATE == err)
- {
- return InvalidStateException(buff);
- }
-
- else if(RADIO_ERROR_SOUND_POLICY == err)
- {
- return UnknownException(buff);
- }
- else if(RADIO_ERROR_PERMISSION_DENIED == err)
- {
- return UnknownException(buff);
- }
- else if(RADIO_ERROR_OUT_OF_MEMORY == err)
- {
- return UnknownException(buff);
- }
- else
- {
- return UnknownException(buff);
- }
+ if (RADIO_ERROR_NONE != err) {
+ LoggerE("radio_set_mute() failed: %d", err);
+ }
}
-void FMRadioManager::RadioSeekCB(int frequency, void *user_data)
-{
- double * id = static_cast(user_data);
+bool FMRadioManager::HasAntenna() {
+ LoggerD("Enter");
- int err = radio_set_frequency(*(FMRadioManager::GetInstance(0)->GetRadioInstance()),frequency);
+ bool connected = false;
+ const auto err = runtime_info_get_value_bool(RUNTIME_INFO_KEY_AUDIO_JACK_CONNECTED,
+ &connected);
- if (RADIO_ERROR_NONE != err)
- {
- createEventFail(*id,GetException("radio_set_frequency",err));
- }
- else
- {
- createEventSuccess(*id);
- }
+ if (RUNTIME_INFO_ERROR_NONE != err) {
+ LoggerE("runtime_info_get_value_bool() failed: %d", err);
+ }
- delete id;
+ return connected;
}
-radio_h* FMRadioManager::GetRadioInstance()
-{
- return &radio_instance;
-}
+const char* FMRadioManager::GetState() {
+ LoggerD("Enter");
-void FMRadioManager::SeekUp(const picojson::value& args){
+ radio_state_e state;
- double * callbackId = new double(args.get("callbackId").get());
+ const auto err = radio_get_state(radio_instance_, &state);
- int err = radio_seek_up (radio_instance,RadioSeekCB,static_cast(callbackId));
+ if (RADIO_ERROR_NONE != err) {
+ LoggerE("radio_get_state() failed: %d", err);
+ return RADIO_STATE_ERROR;
+ }
- if(RADIO_ERROR_NONE != err)
- {
+ const auto s = radio_state.find(state);
- delete callbackId;
- createEventFail(*callbackId,GetException("radio_set_frequency",err));
- }
+ if (radio_state.end() != s) {
+ return s->second;
+ } else {
+ LoggerE("Unknown state: %d", state);
+ return RADIO_STATE_ERROR;
+ }
}
-void FMRadioManager::SeekDown(const picojson::value& args){
+void FMRadioManager::SetFrequency(double frequency) {
+ LoggerD("Enter");
- double * callbackId = new double(args.get("callbackId").get());
+ auto err = radio_set_frequency(radio_instance_, TokHz(frequency));
+ CheckError("radio_set_frequency", err);
+}
- int err = radio_seek_down (radio_instance,RadioSeekCB,static_cast(callbackId));
+double FMRadioManager::GetFrequency() {
+ LoggerD("Enter");
- if(RADIO_ERROR_NONE != err)
- {
+ int frequency = 0;
+ const auto err = radio_get_frequency(radio_instance_, &frequency);
- delete callbackId;
- createEventFail(*callbackId,GetException("radio_set_frequency",err));
- }
+ if (RADIO_ERROR_NONE != err) {
+ LoggerE("radio_get_frequency() failed: %d", err);
+ return FREQ_LOWER;
+ } else {
+ return ToMHz(frequency);
+ }
}
-void FMRadioManager::ScanStartCB(int frequency, void *user_data)
-{
- std::vector * freqs = FMRadioManager::GetInstance()->GetFreqs();
- freqs->push_back(static_cast(frequency));
+double FMRadioManager::GetSignalStrength() {
+ LoggerD("Enter");
- picojson::value event = picojson::value(picojson::object());
- picojson::object& obj = event.get();
- obj.insert(std::make_pair("frequency", picojson::value(static_cast(frequency))));
- obj.insert(std::make_pair("listenerId", "FMRadio_Onfrequencyfound"));
- RadioInstance::getInstance().PostMessage(event.serialize().c_str());
+ int strength = 0;
+ const auto err = radio_get_signal_strength(radio_instance_, &strength);
+ if (RADIO_ERROR_NONE != err) {
+ LoggerE("radio_get_signal_strength() failed: %d", err);
+ return 0;
+ } else {
+ return strength;
+ }
}
-void FMRadioManager::ScanStopCB(void *user_data)
-{
- createEventSuccess( *(static_cast(user_data)));
- delete static_cast(user_data);
+FMRadioManager::FMRadioManager()
+ : radio_instance_(nullptr) {
+ LoggerD("Enter");
-}
+ const auto err = radio_create(&radio_instance_);
-std::vector * FMRadioManager::GetFreqs()
-{
- return &freqs;
+ if (RADIO_ERROR_NONE != err) {
+ LoggerE("radio_create() failed: %d", err);
+ radio_instance_ = nullptr;
+ }
}
-void FMRadioManager::ScanCompleteCB(void *user_data)
-{
- double * id= static_cast(user_data);
-
- std::vector * freqs = FMRadioManager::GetInstance()->GetFreqs();
+FMRadioManager::~FMRadioManager() {
+ LoggerD("Enter");
- picojson::value event = picojson::value(picojson::object());
- picojson::object& obj = event.get();
- obj.insert(std::make_pair("name", picojson::value("onfinished")));
+ if (radio_instance_) {
+ const auto err = radio_destroy(radio_instance_);
- std::vector vect = std::vector ();
- for (std::vector::iterator it = freqs->begin() ; it != freqs->end(); ++it)
- {
- vect.push_back(picojson::value(*it));
+ if (RADIO_ERROR_NONE != err) {
+ LoggerE("radio_destroy() failed: %d", err);
}
- obj.insert(std::make_pair("frequencies", picojson::value(vect)));
- createEventSuccess(obj,*id);
-
- delete id;
+ radio_instance_ = nullptr;
+ }
}
+FMRadioManager* FMRadioManager::GetInstance() {
+ LoggerD("Enter");
+ static FMRadioManager instance;
+ return &instance;
+}
-void FMRadioManager::ScanStart(const picojson::value& args)
-{
- LoggerD("FMRadioManager::ScanStart()");
-
- double *callbackId = new double(args.get("callbackId").get());
+void FMRadioManager::Start(double frequency) {
+ LoggerD("Enter, frequency: %f", frequency);
- freqs = std::vector();
+ SetFrequency(frequency);
- int err =radio_set_scan_completed_cb(radio_instance,ScanCompleteCB,callbackId);
- if(err)
- {
- createEventFail(*callbackId,GetException("radio_set_scan_completed_cb %d",err));
- delete callbackId;
- return;
- }
+ auto err = radio_start(radio_instance_);
+ CheckError("radio_start", err);
+}
- err = radio_scan_start (radio_instance, ScanStartCB, NULL);
- if(err)
- {
- radio_unset_scan_completed_cb(radio_instance);
- createEventFail(*callbackId,GetException("radio_scan_start %d",err));
- delete callbackId;
- }
+void FMRadioManager::Stop() {
+ LoggerD("Enter");
+ const auto err = radio_stop(radio_instance_);
+ CheckError("radio_stop", err);
}
-void FMRadioManager::ScanStop(const picojson::value& args){
- LoggerD("FMRadioManager::ScanStop()");
- double* callbackId = new double(args.get("callbackId").get());
+void FMRadioManager::SeekUp(double callback_id) {
+ LoggerD("Enter");
- int ret = radio_unset_scan_completed_cb(radio_instance);
- if(ret)
- {
- createEventFail(*callbackId,GetException("radio_unset_scan_completed_cb %d",ret));
- delete callbackId;
- return;
- }
+ double* user_data = new double(callback_id);
- ret = radio_scan_stop (radio_instance, ScanStopCB, callbackId);
- if(ret)
- {
- createEventFail(*callbackId,GetException("radio_scan_stop %d",ret));
- delete callbackId;
- }
+ const auto err = radio_seek_up(radio_instance_, RadioSeekCallback, user_data);
+ if (RADIO_ERROR_NONE != err) {
+ delete user_data;
+ PostResultFailure(*user_data, GetException("radio_seek_up", err));
+ }
}
-string FMRadioManager::TranslateCode(int code)
-{
- if (RADIO_INTERRUPTED_BY_MEDIA == code)
- {
- return string("RADIO_INTERRUPTED_BY_MEDIA");
- }
- else if(RADIO_INTERRUPTED_BY_RESUMABLE_MEDIA == code)
- {
- return string("RADIO_INTERRUPTED_BY_RESUMABLE_MEDIA");
- }
- else if(RADIO_INTERRUPTED_BY_CALL == code)
- {
- return string("RADIO_INTERRUPTED_BY_CALL");
- }
- else if(RADIO_INTERRUPTED_BY_EARJACK_UNPLUG == code)
- {
- return string("RADIO_INTERRUPTED_BY_EARJACK_UNPLUG");
- }
- else if(RADIO_INTERRUPTED_BY_RESOURCE_CONFLICT == code)
- {
- return string("RADIO_INTERRUPTED_BY_RESOURCE_CONFLICT");
- }
- else if(RADIO_INTERRUPTED_BY_ALARM == code)
- {
- return string("RADIO_INTERRUPTED_BY_ALARM");
- }
- else if(RADIO_INTERRUPTED_BY_EMERGENCY == code)
- {
- return string("RADIO_INTERRUPTED_BY_EMERGENCY");
- }
- else if(RADIO_INTERRUPTED_BY_MEDIA == code)
- {
- return string("RADIO_INTERRUPTED_BY_RESUMABLE_MEDIA");
- }
- else if(RADIO_INTERRUPTED_BY_NOTIFICATION == code)
- {
- return string("RADIO_INTERRUPTED_BY_NOTIFICATION");
- }
-}
+void FMRadioManager::SeekDown(double callback_id) {
+ LoggerD("Enter");
-void FMRadioManager::RadioInterruptedCB(radio_interrupted_code_e code, void *user_data)
-{
+ double* user_data = new double(callback_id);
- if(code == RADIO_INTERRUPTED_COMPLETED )
- {
- picojson::value event = picojson::value(picojson::object());
- picojson::object& obj = event.get();
- obj.insert(std::make_pair("action", picojson::value("oninterruptfinished")));
- obj.insert(std::make_pair("listenerId", "FMRadio_Interrupted"));
- RadioInstance::getInstance().PostMessage(event.serialize().c_str());
- }
- else
- {
- picojson::value event = picojson::value(picojson::object());
- picojson::object& obj = event.get();
- obj.insert(std::make_pair("action", picojson::value("oninterrupted")));
+ const auto err = radio_seek_down(radio_instance_, RadioSeekCallback, user_data);
- obj.insert(std::make_pair("reason", TranslateCode(code)));
+ if (RADIO_ERROR_NONE != err) {
+ delete user_data;
+ PostResultFailure(*user_data, GetException("radio_seek_down", err));
+ }
+}
- obj.insert(std::make_pair("listenerId", "FMRadio_Interrupted"));
- RadioInstance::getInstance().PostMessage(event.serialize().c_str());
- }
+void FMRadioManager::ScanStart(double callback_id) {
+ LoggerD("Enter");
-}
+ ScanData* user_data = new ScanData();
+ user_data->callback_id_ = callback_id;
-void FMRadioManager::SetFMRadioInterruptedListener(){
- LoggerD("FMRadioManager::SetFMRadioInterruptedListener()");
- int err = radio_set_interrupted_cb (radio_instance, RadioInterruptedCB, NULL);
- if(RADIO_ERROR_NONE != err)
- {
- CheckErr("radio_set_interrupted_cb",err);
- }
-}
-void FMRadioManager::UnsetFMRadioInterruptedListener(){
- LoggerD("FMRadioManager::UnsetFMRadioInterruptedListener()");
- int err = radio_unset_interrupted_cb(radio_instance);
- if(RADIO_ERROR_NONE != err)
- {
- CheckErr("radio_unset_interrupted_cb",err);
- }
+ auto err = radio_set_scan_completed_cb(radio_instance_, ScanCompleteCallback,
+ user_data);
+ if (RADIO_ERROR_NONE != err) {
+ PostResultFailure(callback_id,
+ GetException("radio_set_scan_completed_cb", err));
+ delete user_data;
+ return;
+ }
+
+ err = radio_scan_start(radio_instance_, ScanStartCallback, user_data);
+ if (RADIO_ERROR_NONE != err) {
+ radio_unset_scan_completed_cb(radio_instance_);
+ PostResultFailure(callback_id, GetException("radio_scan_start", err));
+ delete user_data;
+ }
}
-void FMRadioManager::RadioAntennaCB(runtime_info_key_e key, void *user_data)
-{
- LoggerD("FMRadioManager::RadioAntennaCB()");
+void FMRadioManager::ScanStop(double callback_id) {
+ LoggerD("Enter");
- bool connected=false;
- int err = runtime_info_get_value_bool (key, &connected);
- if(RADIO_ERROR_NONE != err)
- {
- LoggerE("FMRadioManager::RadioAntennaCB() runtime_info_get_value_bool %d",err);
- }
+ double* user_data = new double(callback_id);
- picojson::value event = picojson::value(picojson::object());
- picojson::object& obj = event.get();
+ auto err = radio_unset_scan_completed_cb(radio_instance_);
+ if (RADIO_ERROR_NONE != err) {
+ PostResultFailure(*user_data,
+ GetException("radio_unset_scan_completed_cb", err));
+ delete user_data;
+ return;
+ }
- obj.insert(std::make_pair("connected", picojson::value(connected)));
+ err = radio_scan_stop(radio_instance_, ScanStopCallback, user_data);
+ if (RADIO_ERROR_NONE != err) {
+ PostResultFailure(*user_data, GetException("radio_scan_stop", err));
+ delete user_data;
+ }
+}
- obj.insert(std::make_pair("listenerId", "FMRadio_Antenna"));
- RadioInstance::getInstance().PostMessage(event.serialize().c_str());
+void FMRadioManager::SetFMRadioInterruptedListener() {
+ LoggerD("Enter");
+ const auto err = radio_set_interrupted_cb(radio_instance_,
+ RadioInterruptedCallback,
+ nullptr);
+ if (RADIO_ERROR_NONE != err) {
+ CheckError("radio_set_interrupted_cb", err);
+ }
}
-void FMRadioManager::SetAntennaChangeListener(){
- LoggerD("FMRadioManager::SetAntennaChangeListener()");
- int err = runtime_info_set_changed_cb (RUNTIME_INFO_KEY_AUDIO_JACK_CONNECTED ,
- RadioAntennaCB, NULL);
- if(RADIO_ERROR_NONE != err)
- {
- CheckErr("runtime_info_set_changed_cb",err);
- }
+void FMRadioManager::UnsetFMRadioInterruptedListener() {
+ LoggerD("Enter");
+ const auto err = radio_unset_interrupted_cb(radio_instance_);
+ if (RADIO_ERROR_NONE != err) {
+ CheckError("radio_unset_interrupted_cb", err);
+ }
}
-void FMRadioManager::UnsetAntennaChangeListener(){
- LoggerD("FMRadioManager::UnsetAntennaChangeListener()");
- int err = runtime_info_unset_changed_cb (RUNTIME_INFO_KEY_AUDIO_JACK_CONNECTED);
- if(RADIO_ERROR_NONE != err)
- {
- CheckErr("runtime_info_unset_changed_cb",err);
- }
+void FMRadioManager::SetAntennaChangeListener() {
+ LoggerD("Enter");
+
+ const auto err = runtime_info_set_changed_cb(
+ RUNTIME_INFO_KEY_AUDIO_JACK_CONNECTED,
+ RadioAntennaCallback,
+ nullptr);
+ if (RADIO_ERROR_NONE != err) {
+ CheckError("runtime_info_set_changed_cb", err);
+ }
}
-} // namespace
+void FMRadioManager::UnsetAntennaChangeListener() {
+ LoggerD("Enter");
+
+ const auto err = runtime_info_unset_changed_cb(
+ RUNTIME_INFO_KEY_AUDIO_JACK_CONNECTED);
+ if (RADIO_ERROR_NONE != err) {
+ CheckError("runtime_info_unset_changed_cb", err);
+ }
+}
+
+} // namespace radio
} // namespace extension
diff --git a/src/radio/radio_manager.h b/src/radio/radio_manager.h
index 3d1a644c..05aaff5e 100755
--- a/src/radio/radio_manager.h
+++ b/src/radio/radio_manager.h
@@ -5,14 +5,15 @@
#ifndef FMRADIO_FMRADIO_MANAGER_H_
#define FMRADIO_FMRADIO_MANAGER_H_
-#include
#include
-#include
-#include "common/picojson.h"
-#include "common/platform_exception.h"
+#include
#include
-#include
+
#include
+#include
+
+#include "common/picojson.h"
+#include "common/platform_exception.h"
#include "radio_instance.h"
@@ -20,52 +21,36 @@ namespace extension {
namespace radio {
class FMRadioManager {
-public:
-
- static FMRadioManager* GetInstance(bool safe = true);
-
- radio_h * GetRadioInstance();
- std::vector * GetFreqs();
-
- void Start(double freq);
- void Stop();
- void SeekUp(const picojson::value& args);
- void SeekDown(const picojson::value& args);
- void ScanStart(const picojson::value& args);
- void ScanStop(const picojson::value& args);
- void SetFMRadioInterruptedListener();
- void UnsetFMRadioInterruptedListener();
- void SetAntennaChangeListener();
- void UnsetAntennaChangeListener();
-
- bool MuteGetter();
- void MuteSetter(const picojson::value& args);
- double FrequencyGetter();
- double SignalStrengthGetter();
- bool AntennaGetter();
- char* StateGetter();
-
-private:
- std::vector freqs;
- radio_h radio_instance;
-
- static std::string TranslateCode(int err);
- static void RadioAntennaCB(runtime_info_key_e key, void *user_data);
- static void RadioInterruptedCB(radio_interrupted_code_e code, void *user_data);
- static common::PlatformException GetException(char * name,int err);
- static void RadioSeekCB(int frequency, void *user_data);
- static void CheckErr(std::string str,int err);
- static void ScanStartCB(int frequency, void *user_data);
- static void ScanStopCB(void *user_data);
- static void ScanCompleteCB(void *user_data);
- int Create();
- FMRadioManager();
- ~FMRadioManager();
-
+ public:
+ static FMRadioManager* GetInstance();
+
+ void Start(double freq);
+ void Stop();
+ void SeekUp(double callback_id);
+ void SeekDown(double callback_id);
+ void ScanStart(double callback_id);
+ void ScanStop(double callback_id);
+ void SetFMRadioInterruptedListener();
+ void UnsetFMRadioInterruptedListener();
+ void SetAntennaChangeListener();
+ void UnsetAntennaChangeListener();
+
+ bool IsMuted();
+ void SetMute(bool mute);
+ void SetFrequency(double frequency);
+ double GetFrequency();
+ double GetSignalStrength();
+ bool HasAntenna();
+ const char* GetState();
+
+ private:
+ FMRadioManager();
+ ~FMRadioManager();
+
+ radio_h radio_instance_;
};
-} // namespace
+} // namespace radio
} // namespace extension
#endif // RADIO_RADIO_MANAGER_H_
-