X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fhomescreen.cpp;fp=src%2Fhomescreen.cpp;h=b3980b2b520a5da72eb8db66822e84abba62f979;hb=8f0e20df04e0e6826adc425519840b56d6169404;hp=56c1e7c4c5a68269ac068630d1da3303dc7e225d;hpb=b232f5d302f7466c818e157ce98eb0789d541a0c;p=apps%2Fagl-service-homescreen.git diff --git a/src/homescreen.cpp b/src/homescreen.cpp index 56c1e7c..b3980b2 100644 --- a/src/homescreen.cpp +++ b/src/homescreen.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include "hs-helper.h" #include "hs-clientmanager.h" #include "hs-appinfo.h" @@ -39,7 +40,8 @@ const char _keyId[] = "id"; struct hs_handshake { hs_handshake(int times, int sleep) : m_times(times), m_sleep(sleep) {} - int start(afb_api_t api) const; + int start(afb_api_t api); + void handshake_loop(afb_api_t api); enum HandshakeStatus { Handshake_Idle = 0, @@ -110,16 +112,32 @@ int on_handshake_event(afb_api_t api, const char *event, struct json_object *obj * - api : the api * * #### Return - * None * 0 : handshake success - * -1 : handshake fail + * other : handshake fail * */ -int hs_handshake::start(afb_api_t api) const +int hs_handshake::start(afb_api_t api) { AFB_NOTICE("start handshake with windowmanager."); - int ret = -1; setEventHook(sub_event.c_str(), on_handshake_event); + + std::thread th(&hs_handshake::handshake_loop, this, api); + th.detach(); + return 0; +} + +/** + * handshake loop + * + * #### Parameters + * - api : the api + * + * #### Return + * None + * + */ +void hs_handshake::handshake_loop(afb_api_t api) +{ int count = 0; do { // try to subscribe handshake event @@ -132,15 +150,14 @@ int hs_handshake::start(afb_api_t api) const // wait handshake event if(hs_handshake::hs_sts == hs_handshake::Handshake_Over) { - ret = 0; break; } ++count; usleep(m_sleep*1000); } while(count < m_times); - - return ret; + AFB_NOTICE("handshake over, count=%d.", count); + HS_AppRecover::instance()->startRecovery(api); } struct hs_instance { @@ -189,6 +206,13 @@ int hs_instance::init(afb_api_t api) return -1; } + if(app_recover == nullptr) { + AFB_ERROR("app_recover is nullptr."); + return -1; + } + app_recover->init(api); + app_recover->setRecoverMap(hs_config.getRecoverMap()); + const struct handshake_info *h = hs_config.getHandshakeInfo(); struct hs_handshake handshake(h->times, h->sleep); if(handshake.start(api) < 0) { @@ -196,13 +220,6 @@ int hs_instance::init(afb_api_t api) return -1; } - if(app_recover == nullptr) { - AFB_ERROR("app_recover is nullptr."); - return -1; - } - app_recover->init(api); - app_recover->startRecovery(api, hs_config.getRecoverMap()); - return 0; }