From: Youngjae Shin Date: Wed, 6 Nov 2019 02:59:24 +0000 (+0900) Subject: add wifi changed callback functions X-Git-Tag: submit/tizen/20200406.072014~27 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=cb78071f0332ab5c26aa1549ebad88293da6c3a5;p=platform%2Fcore%2Fsystem%2Fmodes-plugins.git add wifi changed callback functions --- diff --git a/unittests/mode/tizen_Quick-Panel_mode.xml b/unittests/mode/tizen_Quick-Panel_mode.xml index 836d74e..0773ef0 100644 --- a/unittests/mode/tizen_Quick-Panel_mode.xml +++ b/unittests/mode/tizen_Quick-Panel_mode.xml @@ -1,6 +1,7 @@ + on 1 1 1 diff --git a/wifi/WifiAction.cpp b/wifi/WifiAction.cpp index b81dc0c..f70c00b 100644 --- a/wifi/WifiAction.cpp +++ b/wifi/WifiAction.cpp @@ -24,10 +24,14 @@ MODES_NAMESPACE_USE; WifiAction::WifiAction(const std::string &name) : PluginAction(name), handle(NULL) { + int ret = wifi_manager_initialize(&handle); + if (ret != WIFI_MANAGER_ERROR_NONE) + ERR("wifi_manager_initialize() Fail(%d)", ret); } WifiAction::~WifiAction() { + wifi_manager_deinitialize(handle); } const std::string& WifiAction::strErr(int err) diff --git a/wifi/WifiActionPower.cpp b/wifi/WifiActionPower.cpp index 4b4b2e8..b4731d3 100644 --- a/wifi/WifiActionPower.cpp +++ b/wifi/WifiActionPower.cpp @@ -23,28 +23,9 @@ MODES_NAMESPACE_USE; const std::string WifiActionPower::NAME = "power"; -WifiActionPower::WifiActionPower(wifi_manager_h wifiHandle) - : WifiAction(NAME), oldVal(false) +WifiActionPower::WifiActionPower() + : WifiAction(NAME), cb(NULL), cbData(NULL), oldVal(false) { - handle = wifiHandle; -} - -void WifiActionPower::activateCB(wifi_manager_error_e result, void *user_data) -{ - INFO("wifi Activated"); - if (WIFI_MANAGER_ERROR_NONE != result) { - const std::string &errStr = ((WifiActionPower*)user_data)->strErr(result); - ERR("activateCB() Fail(%d, %s)", result, errStr.c_str()); - } -} - -void WifiActionPower::deactivateCB(wifi_manager_error_e result, void *user_data) -{ - INFO("wifi Deactivated"); - if (WIFI_MANAGER_ERROR_NONE != result) { - const std::string &errStr = ((WifiActionPower*)user_data)->strErr(result); - ERR("deactivateCB() Fail(%d, %s)", result, errStr.c_str()); - } } int WifiActionPower::set(bool val) @@ -93,3 +74,79 @@ int WifiActionPower::parse(const std::string &archive) return MODES_ERROR_NONE; } + +int WifiActionPower::setChangedCallback(valueChangedCB callback, void *userData) +{ + RETV_IF(NULL == callback, MODES_ERROR_INVALID_PARAMETER); + + int ret = wifi_manager_set_device_state_changed_cb(handle, wifiStateChangedCB, this); + if (WIFI_MANAGER_ERROR_NONE != ret) { + ERR("wifi_manager_set_device_state_changed_cb() Fail(%s)", strErr(ret).c_str()); + return MODES_ERROR_SYSTEM; + } + + cb = callback; + cbData = userData; + + DBG("WifiActionPower setChangedCallback() Success"); + return MODES_ERROR_NONE; +} +int WifiActionPower::unSetChangedCallback(valueChangedCB callback, void *userData) +{ + RETV_IF(NULL == callback, MODES_ERROR_INVALID_PARAMETER); + + int ret = wifi_manager_unset_device_state_changed_cb(handle); + if (WIFI_MANAGER_ERROR_NONE != ret) { + ERR("wifi_manager_unset_device_state_changed_cb() Fail(%s)", strErr(ret).c_str()); + return MODES_ERROR_SYSTEM; + } + + cb = NULL; + cbData = NULL; + + DBG("WifiActionPower unSetChangedCallback() Success"); + return MODES_ERROR_NONE; +} + +void WifiActionPower::activateCB(wifi_manager_error_e result, void *user_data) +{ + INFO("wifi Activated"); + if (WIFI_MANAGER_ERROR_NONE != result) { + const std::string &errStr = ((WifiActionPower*)user_data)->strErr(result); + ERR("activateCB() Fail(%d, %s)", result, errStr.c_str()); + } +} + +void WifiActionPower::deactivateCB(wifi_manager_error_e result, void *user_data) +{ + INFO("wifi Deactivated"); + if (WIFI_MANAGER_ERROR_NONE != result) { + const std::string &errStr = ((WifiActionPower*)user_data)->strErr(result); + ERR("deactivateCB() Fail(%d, %s)", result, errStr.c_str()); + } +} + +void WifiActionPower::wifiStateChangedCB(wifi_manager_device_state_e state, void *user_data) +{ + WifiActionPower *action = (WifiActionPower*)user_data; + + RET_IF(NULL == user_data); + + bool changedVal = action->oldVal; + if (state == WIFI_MANAGER_DEVICE_STATE_ACTIVATED) + changedVal = true; + else if (state == WIFI_MANAGER_DEVICE_STATE_DEACTIVATED) + changedVal = false; + else + ERR("Unknown state(%d)", state); + + INFO("state:%d", state); + + if (changedVal != action->oldVal) { + valueChangedCB cb = action->cb; + void *cbData = action->cbData; + //TODO: revise after revising the modes(because of piAction free) + action->unSetChangedCallback(action->cb, action->cbData); + cb(cbData); + } +} diff --git a/wifi/WifiActionPower.h b/wifi/WifiActionPower.h index 63fb3ff..9cc77ed 100644 --- a/wifi/WifiActionPower.h +++ b/wifi/WifiActionPower.h @@ -23,15 +23,21 @@ MODES_NAMESPACE_BEGIN class WifiActionPower : public WifiAction { public: static const std::string NAME; - WifiActionPower(wifi_manager_h handle); + WifiActionPower(); int set(bool val) override; int undo() override; std::string serialize() override; int parse(const std::string &archive) override; + int setChangedCallback(valueChangedCB callback, void *userData); + int unSetChangedCallback(valueChangedCB callback, void *userData); + + valueChangedCB cb; + void *cbData; private: static void activateCB(wifi_manager_error_e result, void *user_data); static void deactivateCB(wifi_manager_error_e result, void *user_data); + static void wifiStateChangedCB(wifi_manager_device_state_e state, void * user_data); bool oldVal; }; diff --git a/wifi/WifiFactory.cpp b/wifi/WifiFactory.cpp index 53b0234..cf637e5 100644 --- a/wifi/WifiFactory.cpp +++ b/wifi/WifiFactory.cpp @@ -22,21 +22,10 @@ MODES_NAMESPACE_USE; WifiFactory::WifiFactory() - : handle(NULL) { actionMap[WifiActionPower::NAME] = POWER; - - int ret = wifi_manager_initialize(&handle); - if (ret != WIFI_MANAGER_ERROR_NONE) - ERR("wifi_manager_initialize() Fail(%d)", ret); } -WifiFactory::~WifiFactory() -{ - wifi_manager_deinitialize(handle); -} - - WifiAction* WifiFactory::createAction(const std::string &key) { auto search = actionMap.find(key); @@ -47,7 +36,7 @@ WifiAction* WifiFactory::createAction(const std::string &key) switch (search->second) { case POWER: - WifiActionPower *wifiActionPower = new WifiActionPower(handle); + WifiActionPower *wifiActionPower = new WifiActionPower(); return wifiActionPower; break; } diff --git a/wifi/WifiFactory.h b/wifi/WifiFactory.h index 11acb47..259305f 100644 --- a/wifi/WifiFactory.h +++ b/wifi/WifiFactory.h @@ -24,7 +24,7 @@ MODES_NAMESPACE_BEGIN class WifiFactory { public: WifiFactory(); - ~WifiFactory(); + ~WifiFactory() = default; WifiAction *createAction(const std::string &key); void destroyAction(WifiAction *action); @@ -34,7 +34,6 @@ private: }; std::map actionMap; - wifi_manager_h handle; }; MODES_NAMESPACE_END diff --git a/wifi/WifiPlugin.cpp b/wifi/WifiPlugin.cpp index 26572c4..78ce07a 100644 --- a/wifi/WifiPlugin.cpp +++ b/wifi/WifiPlugin.cpp @@ -92,4 +92,3 @@ PluginAction* WifiPlugin::getUndoAction(const std::string &key, const std::strin return action; } -