From 35809196e6ae4019a03f1dcf010d5c72b9fc76ea Mon Sep 17 00:00:00 2001 From: Dominik Rekawek Date: Sat, 20 Dec 2014 17:36:27 +0100 Subject: [PATCH] [FMRadio][Feature] Getters [Description] Getters for readonly atributes added JS: Frequency Signal Strength Connected State Cpp: Frequency Signal Strength [Validation] tizen.fmradio.frequency etc. Tested on Z910, working Change-Id: I4ecca1ead395e96792fa4646500bf42307286077 Signed-off-by: Dominik Rekawek --- src/radio/radio_api.js | 46 ++++++++++++++++++++++++++----------- src/radio/radio_instance.cc | 34 ++++++++++++++++++++++++++- src/radio/radio_instance.h | 4 ++++ src/radio/radio_manager.cc | 29 +++++++++++++++++++++++ src/radio/radio_manager.h | 3 +++ 5 files changed, 102 insertions(+), 14 deletions(-) diff --git a/src/radio/radio_api.js b/src/radio/radio_api.js index fc7a083e..e2b5ab9f 100644 --- a/src/radio/radio_api.js +++ b/src/radio/radio_api.js @@ -37,19 +37,22 @@ function FMRadioManager() { } }, 'signalStrength' : { - value : 'TEST', - writable : false, - enumerable : true + enumerable : true, + get : signalStrengthGetter, + set : function() { + } }, 'state' : { - value : 'READY', - writable : false, - enumerable : true + enumerable : true, + get : radioStateGetter, + set : function() { + } }, 'isAntennaConnected' : { - value : 'TEST', - writable : false, - enumerable : true + enumerable : true, + get : isAntennaConnectedGetter, + set : function() { + } }, 'mute' : { value : 'TEST', @@ -58,9 +61,25 @@ function FMRadioManager() { } }); + function radioStateGetter() { + var ret = native_.callSync('FMRadio_RadioStateGetter'); + return native_.getResultObject(ret); + } + + function isAntennaConnectedGetter() { + var ret = native_.callSync('FMRadio_IsAntennaConnectedGetter'); + return native_.getResultObject(ret); + } + + function signalStrengthGetter() { + var ret = native_.callSync('FMRadio_SignalStrengthGetter'); + return native_.getResultObject(ret); + } + function frequencyGetter() { - // TODO - return 1000; + + var ret = native_.callSync('FMRadio_FrequencyGetter'); + return native_.getResultObject(ret); } function frequencyUpperGetter() { @@ -108,8 +127,9 @@ FMRadioManager.prototype.start = function() { if (args.frequency) { if (args.frequency < this.frequencyLowerBound || args.frequency > this.frequencyUpperBound) - throw new tizen.WebAPIException( - tizen.WebAPIException.INVALID_VALUES_ERR); + throw new tizen.WebAPIException(0, + tizen.WebAPIException.INVALID_VALUES_ERR, + 'Frequency out of bounds'); } var result = native_.callSync('FMRadio_Start', { 'frequency' : args.frequency ? args.frequency diff --git a/src/radio/radio_instance.cc b/src/radio/radio_instance.cc index 1f87cd3b..cc32de43 100644 --- a/src/radio/radio_instance.cc +++ b/src/radio/radio_instance.cc @@ -28,6 +28,10 @@ namespace radio { 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", AntenaGetter); + REGISTER_SYNC("FMRadio_RadioStateGetter", StateGetter); #undef REGISTER_SYNC #define REGISTER_ASYNC(c,x) \ RegisterHandler(c, std::bind(&RadioInstance::x, this, _1, _2)); @@ -48,6 +52,30 @@ namespace radio { return instance; } + void RadioInstance::AntenaGetter(const picojson::value& args, + picojson::object& out){ + } + + void RadioInstance::StateGetter(const picojson::value& args, + picojson::object& out){ + } + + void RadioInstance::FrequencyGetter(const picojson::value& args, + picojson::object& out) + { + LoggerD(".cc FrequencyGetter()"); + double freq = FMRadioManager::GetInstance()->FrequencyGetter(); + ReportSuccess(picojson::value(freq),out); + } + + void RadioInstance::SignalStrengthGetter(const picojson::value& args, + picojson::object& out) + { + LoggerD(".cc SignalStrengthGetter()"); + double strength = FMRadioManager::GetInstance()->SignalStrengthGetter(); + ReportSuccess(picojson::value(strength),out); + } + void RadioInstance::InstanceReportSuccess(picojson::object& out) { LoggerD(".cc InstanceReportSuccess()"); } @@ -71,15 +99,19 @@ namespace radio { FMRadioManager::GetInstance()->Start(args.get("frequency").get()); } catch(const PlatformException& e){ - LoggerE(".cc RadioInstance::Start() CATCH"); 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, diff --git a/src/radio/radio_instance.h b/src/radio/radio_instance.h index da06e728..84559934 100644 --- a/src/radio/radio_instance.h +++ b/src/radio/radio_instance.h @@ -24,6 +24,10 @@ class RadioInstance void InstanceReportSuccess(picojson::object& out); private: + void FrequencyGetter(const picojson::value& args,picojson::object& out); + void SignalStrengthGetter(const picojson::value& args,picojson::object& out); + void AntenaGetter(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); diff --git a/src/radio/radio_manager.cc b/src/radio/radio_manager.cc index 334d5f7d..8327c0e2 100755 --- a/src/radio/radio_manager.cc +++ b/src/radio/radio_manager.cc @@ -23,6 +23,8 @@ using namespace std; namespace extension { namespace radio { +static const double FREQ_LOWER = 87.5; + typedef struct RadioSeekCBstruct_ { double cbid; @@ -74,6 +76,33 @@ int FMRadioManager::Create() return 0; } +double FMRadioManager::FrequencyGetter() +{ + int freq; + LoggerD("FMRadioManager::FrequencyGetter()"); + int err = radio_get_frequency(radio_instance,&freq); + + if (RADIO_ERROR_NONE != err) + { + LoggerE("radio_get_frequency() error %d",err); + return FREQ_LOWER; + } + return static_cast(freq/1000); +} +double FMRadioManager::SignalStrengthGetter() +{ + int stren; + + LoggerD("FMRadioManager::SignalStrengthGetter()"); + int err = radio_get_signal_strength(radio_instance,&stren); + if (RADIO_ERROR_NONE != err) + { + LoggerE("radio_get_signal_strength()"); + return 0; + } + return static_cast(stren); +} + FMRadioManager::FMRadioManager() : radio_instance(NULL) { LoggerD("FMRadioManager::FMRadioManager()"); diff --git a/src/radio/radio_manager.h b/src/radio/radio_manager.h index 4305e2d5..f38dcbd0 100755 --- a/src/radio/radio_manager.h +++ b/src/radio/radio_manager.h @@ -34,6 +34,9 @@ public: void SetAntennaChangeListener(); void UnsetAntennaChangeListener(); + double FrequencyGetter(); + double SignalStrengthGetter(); + private: static common::PlatformException GetException(char * name,int err); -- 2.34.1