diff --git a/ResourceManager/README.md b/ResourceManager/README.md index 8dd5c0fd8b..1ab3d7b9be 100644 --- a/ResourceManager/README.md +++ b/ResourceManager/README.md @@ -9,6 +9,7 @@ curl --header "Content-Type: application/json" --request POST --data '{"jsonrpc":"2.0","id":"3","method": "org.rdk.ResourceManager.setAVBlocked", "params": {"appid":"Netflix-0", "blocked":true}}' http://127.0.0.1:9998/jsonrpc curl --header "Content-Type: application/json" --request POST --data '{"jsonrpc":"2.0","id":"3","method": "org.rdk.ResourceManager.getBlockedAVApplications"}' http://127.0.0.1:9998/jsonrpc curl --header "Content-Type: application/json" --request POST --data '{"jsonrpc":"2.0","id":"3","method": "org.rdk.ResourceManager.reserveTTSResource", "params": {"appid":"Netflix-0"}}' http://127.0.0.1:9998/jsonrpc +curl --header "Content-Type: application/json" --request POST --data '{"jsonrpc":"2.0","id":"3","method": "org.rdk.ResourceManager.reserveTTSResourceForApps", "params": {"appids":["Netflix-0","com.bskyb.epgui"]}}' http://127.0.0.1:9998/jsonrpc ``` ## Responses @@ -19,6 +20,8 @@ getBlockedAVApplications: {"jsonrpc":"2.0","id":3,"result":{"clients":["Netflix-0],"success":true}} reserveTTSResource: {"jsonrpc":"2.0","id":3,"result":{"success":true}} +reserveTTSResourceForApps: +{"jsonrpc":"2.0","id":3,"result":{"success":true}} ``` ## Events diff --git a/ResourceManager/ResourceManager.cpp b/ResourceManager/ResourceManager.cpp index 32a7566a7f..3f83f200ca 100644 --- a/ResourceManager/ResourceManager.cpp +++ b/ResourceManager/ResourceManager.cpp @@ -29,6 +29,8 @@ static std::string sThunderSecurityToken; const string WPEFramework::Plugin::ResourceManager::RESOURCE_MANAGER_METHOD_SET_AV_BLOCKED = "setAVBlocked"; const string WPEFramework::Plugin::ResourceManager::RESOURCE_MANAGER_METHOD_GET_BLOCKED_AV_APPLICATIONS = "getBlockedAVApplications"; const string WPEFramework::Plugin::ResourceManager::RESOURCE_MANAGER_METHOD_RESERVE_TTS_RESOURCE = "reserveTTSResource"; +const string WPEFramework::Plugin::ResourceManager::RESOURCE_MANAGER_METHOD_RESERVE_TTS_RESOURCE_FOR_APPS = "reserveTTSResourceForApps"; + namespace WPEFramework { namespace { @@ -55,6 +57,7 @@ namespace WPEFramework { Register(_T(RESOURCE_MANAGER_METHOD_SET_AV_BLOCKED), &ResourceManager::setAVBlockedWrapper, this); Register(_T(RESOURCE_MANAGER_METHOD_GET_BLOCKED_AV_APPLICATIONS), &ResourceManager::getBlockedAVApplicationsWrapper, this); Register(_T(RESOURCE_MANAGER_METHOD_RESERVE_TTS_RESOURCE), &ResourceManager::reserveTTSResourceWrapper, this); + Register(_T(RESOURCE_MANAGER_METHOD_RESERVE_TTS_RESOURCE_FOR_APPS), &ResourceManager::reserveTTSResourceWrapperForApps, this); mEssRMgr = nullptr; #ifdef ENABLE_ERM @@ -192,6 +195,39 @@ namespace WPEFramework { response["clients"]=appsList; returnResponse(status); } + + uint32_t ResourceManager::reserveTTSResourceWrapperForApps(const JsonObject ¶meters, JsonObject &response) + { + LOGINFOMETHOD(); + bool status = false; + + if ((parameters.HasLabel("appids")) && (false == mDisableReserveTTS)) + { + std::vector apps; + for (const auto& item : parameters["appIds"].Array()) { + apps.push_back(item.String()); + } + for (const auto& s : apps) std::cout << s << " "; std::cout << std::endl; + + status = reserveTTSResourceForApps(apps); + } + else + { + if (mDisableReserveTTS) + { + status = true; + response["message"] = "ReserveTTS RFC is disabled"; + } + else + { + std::string jsonstr; + parameters.ToString(jsonstr); + std::cout<<"ERROR: appids are required in "<< jsonstr << std::endl; + } + } + + returnResponse(status); + } uint32_t ResourceManager::reserveTTSResourceWrapper(const JsonObject ¶meters, JsonObject &response) { @@ -453,6 +489,42 @@ namespace WPEFramework { return (status); } + bool ResourceManager::reserveTTSResourceForApps(const std::vector& clients) + { + uint32_t ret = Core::ERROR_NONE; + bool status = false; + + JsonObject params; + JsonObject result; + JsonArray accessList; + + for (const auto& client : clients) { + JsonObject clientParam; + JsonArray clientList; + + clientList.Add(client); + clientParam.Set("method", "speak"); + clientParam["apps"] = clientList; + + accessList.Add(clientParam); + } + + params["accesslist"] = accessList; + + std::string jsonstr; + params.ToString(jsonstr); + std::cout<<"Resourcemanager : about to call setACL : "<< jsonstr << std::endl; + + ret = JSONRPCDirectLink(mCurrentService, "org.rdk.TextToSpeech").Invoke(20000, "setACL", params, result); + + status = ((Core::ERROR_NONE == ret) && (result.HasLabel("success")) && (result["success"].Boolean())); + + result.ToString(jsonstr); + std::cout<<"setACL response : "<< jsonstr << std::endl; + std::cout<<"setACL status : "< &appsList); + bool reserveTTSResourceForApps(const std::vector& clients); bool reserveTTSResource(const string& client); EssRMgr* mEssRMgr; diff --git a/ResourceManager/ResourceManager.json b/ResourceManager/ResourceManager.json index c6ebda99e7..f032cc17b6 100644 --- a/ResourceManager/ResourceManager.json +++ b/ResourceManager/ResourceManager.json @@ -68,6 +68,29 @@ ] } }, + "reserveTTSResourceForApps": { + "summary": "Reserves the Text To speech Resource for specified clients.", + "params": { + "type": "object", + "properties":{ + "appIds": { + "summary": "A list of application callsigns", + "type": "array", + "items": { + "type": "string", + "example": "xumo" + }, + "minItems": 1 + } + }, + "required": [ + "appIds" + ] + }, + "result": { + "$ref": "#/common/result" + } + }, "reserveTTSResource": { "summary": "Reserves the Text To speech Resource for specified client.", "params": {