diff options
author | Naveen Bobbili <nbobbili@amazon.com> | 2019-02-25 17:24:29 -0800 |
---|---|---|
committer | Naveen Bobbili <nbobbili@amazon.com> | 2019-02-25 20:55:05 -0800 |
commit | 9eb3a90df3681586b58146b47eea7f3848c348a0 (patch) | |
tree | 9c507e13c233fb649d04c6a45d152f7ec12185f8 /src/plugins/voiceagents | |
parent | 143363b9e864ea465c927057ce7214f124a984cb (diff) |
Refactored VSHL into vshl-core and vshl-capabilities.
vshl-core: This API is responsible for request arbitration. Verbs exposed are
1. startListening
2. cancelListening
3. subscribe
4. enumerateVoiceAgents
5. setDefaultVoiceAgent Used by applications to subscribe to dialog, connection and auth states of underlying low level voiceagent bindings. Used by applications to trigger voice recognition routine of the underlying low level voiceagent binding.
vshl-capabilities: This API exposes publish and subscribe methods for all the speech framework domains/capabilities. For eg. navigation, phonecontrol etc. This API is used by apps and low level voice agent binding to subscribe and publish these capability messages whenever applicable. The code for this is agl-service-voice-high-capabilities repository.
This specific commit is for vshl-core API.
Change-Id: I1101db19b57ee918482a178843641b088508ac5d
Signed-off-by: Naveen Bobbili <nbobbili@amazon.com>
Diffstat (limited to 'src/plugins/voiceagents')
10 files changed, 95 insertions, 73 deletions
diff --git a/src/plugins/voiceagents/VoiceAgentEventNames.h b/src/plugins/voiceagents/VoiceAgentEventNames.h index 4575528..92cc8dc 100644 --- a/src/plugins/voiceagents/VoiceAgentEventNames.h +++ b/src/plugins/voiceagents/VoiceAgentEventNames.h @@ -19,8 +19,7 @@ #include <string> using namespace std; - -namespace vshl { +namespace vshlcore { namespace voiceagents { static string VSHL_EVENT_AUTH_STATE_EVENT = "voice_authstate_event"; diff --git a/src/plugins/voiceagents/VoiceAgentsDataManager.h b/src/plugins/voiceagents/VoiceAgentsDataManager.h index a4c9143..a91d7eb 100644 --- a/src/plugins/voiceagents/VoiceAgentsDataManager.h +++ b/src/plugins/voiceagents/VoiceAgentsDataManager.h @@ -27,8 +27,7 @@ #include "interfaces/voiceagents/IVoiceAgentsChangeObserver.h" #include "voiceagents/include/VoiceAgent.h" #include "voiceagents/include/VoiceAgentEventsHandler.h" - -namespace vshl { +namespace vshlcore { namespace voiceagents { /* * This class implements the data model for voiceagents. @@ -39,8 +38,8 @@ class VoiceAgentsDataManager { public: // Create a VoiceAgentsDataManager. static std::unique_ptr<VoiceAgentsDataManager> create( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi); + shared_ptr<vshlcore::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::IAFBApi> afbApi); /** * Activates the list of voiceagents. @@ -84,22 +83,22 @@ public: bool removeVoiceAgent(const string& voiceAgentId); // Returns the set of all voice agents in @c VoiceAgentsDataManger cache - std::set<std::shared_ptr<vshl::common::interfaces::IVoiceAgent>> getAllVoiceAgents(); + std::set<std::shared_ptr<vshlcore::common::interfaces::IVoiceAgent>> getAllVoiceAgents(); // Returns the event filter that belongs to the core module. - shared_ptr<vshl::common::interfaces::IEventFilter> getEventFilter() const; + shared_ptr<vshlcore::common::interfaces::IEventFilter> getEventFilter() const; // Subscribe to an event coming from the voiceagent. bool subscribeToVshlEventFromVoiceAgent( - vshl::common::interfaces::IAFBRequest& request, + vshlcore::common::interfaces::IAFBRequest& request, const string eventName, const string voiceagentId); // Adds a new voiceagent change observer. - bool addVoiceAgentsChangeObserver(shared_ptr<vshl::common::interfaces::IVoiceAgentsChangeObserver> observer); + bool addVoiceAgentsChangeObserver(shared_ptr<vshlcore::common::interfaces::IVoiceAgentsChangeObserver> observer); // Removes the voiceagent change observer from the list. - bool removeVoiceAgentsChangeObserver(shared_ptr<vshl::common::interfaces::IVoiceAgentsChangeObserver> observer); + bool removeVoiceAgentsChangeObserver(shared_ptr<vshlcore::common::interfaces::IVoiceAgentsChangeObserver> observer); // Destructor ~VoiceAgentsDataManager(); @@ -107,14 +106,17 @@ public: private: // Constructor VoiceAgentsDataManager( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi); + shared_ptr<vshlcore::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::IAFBApi> afbApi); + + // Sets the voiceagent ID + bool sendVoiceAgentIdToVA(const shared_ptr<VoiceAgent>& voiceAgent); // Binding API reference - shared_ptr<vshl::common::interfaces::IAFBApi> mAfbApi; + shared_ptr<vshlcore::common::interfaces::IAFBApi> mAfbApi; // A list of all the voiceagent change observers - unordered_set<shared_ptr<vshl::common::interfaces::IVoiceAgentsChangeObserver>> mVoiceAgentChangeObservers; + unordered_set<shared_ptr<vshlcore::common::interfaces::IVoiceAgentsChangeObserver>> mVoiceAgentChangeObservers; // A map of voiceagents grouped by ID unordered_map<string, shared_ptr<VoiceAgent>> mVoiceAgents; @@ -126,7 +128,9 @@ private: string mDefaultVoiceAgentId; // Logger - shared_ptr<vshl::common::interfaces::ILogger> mLogger; + shared_ptr<vshlcore::common::interfaces::ILogger> mLogger; + + bool mAlreadyPeformedSubscriptions; }; } // namespace voiceagents diff --git a/src/plugins/voiceagents/VoiceAgentsDataManagerImpl.cpp b/src/plugins/voiceagents/VoiceAgentsDataManagerImpl.cpp index 626a7fc..00f57e3 100644 --- a/src/plugins/voiceagents/VoiceAgentsDataManagerImpl.cpp +++ b/src/plugins/voiceagents/VoiceAgentsDataManagerImpl.cpp @@ -16,29 +16,30 @@ #include "voiceagents/include/VoiceAgentEventsHandler.h" -static string TAG = "vshl::voiceagents::VoiceAgentsDataManager"; +static string VA_VERB_SETVOICEAGENTID = "setVoiceAgentId"; +static string TAG = "vshlcore::voiceagents::VoiceAgentsDataManager"; /** * Specifies the severity level of a log message */ -using Level = vshl::common::interfaces::ILogger::Level; - -namespace vshl { +using Level = vshlcore::common::interfaces::ILogger::Level; +namespace vshlcore { namespace voiceagents { std::unique_ptr<VoiceAgentsDataManager> VoiceAgentsDataManager::create( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi) { + shared_ptr<vshlcore::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::IAFBApi> afbApi) { return std::unique_ptr<VoiceAgentsDataManager>(new VoiceAgentsDataManager(logger, afbApi)); } // Constructor VoiceAgentsDataManager::VoiceAgentsDataManager( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi) : + shared_ptr<vshlcore::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::IAFBApi> afbApi) : mLogger(logger), mAfbApi(afbApi) { mVoiceAgentEventsHandler = VoiceAgentEventsHandler::create(mLogger, mAfbApi); + mAlreadyPeformedSubscriptions = false; } // Destructor @@ -178,6 +179,7 @@ bool VoiceAgentsDataManager::addNewVoiceAgent( } mVoiceAgents.insert(make_pair(voiceAgent->getId(), voiceAgent)); + sendVoiceAgentIdToVA(voiceAgent); // Notify the observers for (auto observer : mVoiceAgentChangeObservers) { @@ -218,8 +220,8 @@ bool VoiceAgentsDataManager::removeVoiceAgent(const string& voiceAgentId) { return true; } -std::set<std::shared_ptr<vshl::common::interfaces::IVoiceAgent>> VoiceAgentsDataManager::getAllVoiceAgents() { - std::set<std::shared_ptr<vshl::common::interfaces::IVoiceAgent>> voiceAgentsSet; +std::set<std::shared_ptr<vshlcore::common::interfaces::IVoiceAgent>> VoiceAgentsDataManager::getAllVoiceAgents() { + std::set<std::shared_ptr<vshlcore::common::interfaces::IVoiceAgent>> voiceAgentsSet; for (auto element : mVoiceAgents) { voiceAgentsSet.insert(element.second); } @@ -228,12 +230,12 @@ std::set<std::shared_ptr<vshl::common::interfaces::IVoiceAgent>> VoiceAgentsData } // Returns the event filter that belongs to the core module. -shared_ptr<vshl::common::interfaces::IEventFilter> VoiceAgentsDataManager::getEventFilter() const { +shared_ptr<vshlcore::common::interfaces::IEventFilter> VoiceAgentsDataManager::getEventFilter() const { return mVoiceAgentEventsHandler; } bool VoiceAgentsDataManager::subscribeToVshlEventFromVoiceAgent( - vshl::common::interfaces::IAFBRequest& request, + vshlcore::common::interfaces::IAFBRequest& request, const string eventName, const string voiceAgentId) { auto voiceAgentIt = mVoiceAgents.find(voiceAgentId); @@ -250,7 +252,7 @@ bool VoiceAgentsDataManager::subscribeToVshlEventFromVoiceAgent( } bool VoiceAgentsDataManager::addVoiceAgentsChangeObserver( - shared_ptr<vshl::common::interfaces::IVoiceAgentsChangeObserver> observer) { + shared_ptr<vshlcore::common::interfaces::IVoiceAgentsChangeObserver> observer) { if (!observer) { return false; } @@ -260,7 +262,7 @@ bool VoiceAgentsDataManager::addVoiceAgentsChangeObserver( } bool VoiceAgentsDataManager::removeVoiceAgentsChangeObserver( - shared_ptr<vshl::common::interfaces::IVoiceAgentsChangeObserver> observer) { + shared_ptr<vshlcore::common::interfaces::IVoiceAgentsChangeObserver> observer) { if (!observer) { return false; } @@ -268,5 +270,29 @@ bool VoiceAgentsDataManager::removeVoiceAgentsChangeObserver( mVoiceAgentChangeObservers.erase(observer); return true; } + +bool VoiceAgentsDataManager::sendVoiceAgentIdToVA(const shared_ptr<VoiceAgent>& voiceAgent) { + if (!mAfbApi) { + mLogger->log( + Level::ERROR, TAG, "Failed to call sendVoiceAgentIdToVA on voicegent: " + voiceAgent->getId() + ", No API."); + return false; + } + + json_object* argsJ = json_object_new_object(); + json_object* idJ = json_object_new_string(voiceAgent->getId().c_str()); + json_object_object_add(argsJ, "va_id", idJ); + + std::string error, info; + json_object* resultJ; + + int rc = mAfbApi->callSync(voiceAgent->getApi(), VA_VERB_SETVOICEAGENTID, argsJ, &resultJ, error, info); + + if (resultJ) { + free(resultJ); + } + + return true; +} + } // namespace voiceagents } // namespace vshl diff --git a/src/plugins/voiceagents/include/VoiceAgent.h b/src/plugins/voiceagents/include/VoiceAgent.h index 4dd55d4..684baf0 100644 --- a/src/plugins/voiceagents/include/VoiceAgent.h +++ b/src/plugins/voiceagents/include/VoiceAgent.h @@ -22,17 +22,16 @@ #include "interfaces/voiceagents/IVoiceAgent.h" using namespace std; - -namespace vshl { +namespace vshlcore { namespace voiceagents { /* * Default implementation of IVoiceAgent interface. */ -class VoiceAgent : public vshl::common::interfaces::IVoiceAgent { +class VoiceAgent : public vshlcore::common::interfaces::IVoiceAgent { public: // Creates @c VoiceAgent instance static shared_ptr<VoiceAgent> - create(shared_ptr<vshl::common::interfaces::ILogger> logger, const string &id, + create(shared_ptr<vshlcore::common::interfaces::ILogger> logger, const string &id, const string &name, const string &description, const string &api, const string &vendor, const string &activeWakeword, const bool isActive, @@ -55,14 +54,14 @@ public: private: // Constructor - VoiceAgent(shared_ptr<vshl::common::interfaces::ILogger> logger, + VoiceAgent(shared_ptr<vshlcore::common::interfaces::ILogger> logger, const string &id, const string &name, const string &description, const string &api, const string &vendor, const string &activeWakeword, const bool isActive, const shared_ptr<unordered_set<string>> wakewords); // Logger - shared_ptr<vshl::common::interfaces::ILogger> mLogger; + shared_ptr<vshlcore::common::interfaces::ILogger> mLogger; // Id string mId; diff --git a/src/plugins/voiceagents/include/VoiceAgentEventsHandler.h b/src/plugins/voiceagents/include/VoiceAgentEventsHandler.h index 3c1ca6c..00acfe1 100644 --- a/src/plugins/voiceagents/include/VoiceAgentEventsHandler.h +++ b/src/plugins/voiceagents/include/VoiceAgentEventsHandler.h @@ -26,8 +26,7 @@ #include "voiceagents/include/VoiceAgent.h" using namespace std; - -namespace vshl { +namespace vshlcore { namespace voiceagents { /* * This class is reponsible for handling agent specific events @@ -35,12 +34,12 @@ namespace voiceagents { * This class also listen to the incoming events from voice agents * and implements propagation to application layer. */ -class VoiceAgentEventsHandler : public vshl::common::interfaces::IEventFilter { +class VoiceAgentEventsHandler : public vshlcore::common::interfaces::IEventFilter { public: // Create a VREventFilter. static shared_ptr<VoiceAgentEventsHandler> create( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi); + shared_ptr<vshlcore::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::IAFBApi> afbApi); // Creates all the vshl events for a specific voiceagent id. // For e.g if voiceagent is VA-001 then a new vshl event @@ -53,7 +52,7 @@ public: // Subscribe to a vshl event corresponding to a voiceagent. bool subscribeToVshlEventFromVoiceAgent( - vshl::common::interfaces::IAFBRequest& request, + vshlcore::common::interfaces::IAFBRequest& request, const string eventName, const shared_ptr<VoiceAgent> voiceAgent); @@ -68,8 +67,8 @@ protected: private: // Constructor VoiceAgentEventsHandler( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi); + shared_ptr<vshlcore::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::IAFBApi> afbApi); // Helper method to generate the event name with voiceagent Id // concatenated. @@ -80,13 +79,13 @@ private: bool callSubscribeVerb(const shared_ptr<VoiceAgent> voiceAgent); // Binding API reference - shared_ptr<vshl::common::interfaces::IAFBApi> mAfbApi; + shared_ptr<vshlcore::common::interfaces::IAFBApi> mAfbApi; // A map of VSHL event ID to its Event object unordered_map<string, shared_ptr<common::interfaces::IAFBApi::IAFBEvent>> mEventsMap; // Logger - shared_ptr<vshl::common::interfaces::ILogger> mLogger; + shared_ptr<vshlcore::common::interfaces::ILogger> mLogger; }; } // namespace voiceagents diff --git a/src/plugins/voiceagents/src/VoiceAgentEventsHandler.cpp b/src/plugins/voiceagents/src/VoiceAgentEventsHandler.cpp index 4952721..3b55505 100644 --- a/src/plugins/voiceagents/src/VoiceAgentEventsHandler.cpp +++ b/src/plugins/voiceagents/src/VoiceAgentEventsHandler.cpp @@ -14,25 +14,24 @@ */ #include "voiceagents/include/VoiceAgentEventsHandler.h" -static string TAG = "vshl::voiceagents::VoiceAgentEventsHandler"; +static string TAG = "vshlcore::voiceagents::VoiceAgentEventsHandler"; static string VA_VERB_SUBSCRIBE = "subscribe"; -using Level = vshl::common::interfaces::ILogger::Level; -using namespace vshl::common::interfaces; - -namespace vshl { +using Level = vshlcore::common::interfaces::ILogger::Level; +using namespace vshlcore::common::interfaces; +namespace vshlcore { namespace voiceagents { shared_ptr<VoiceAgentEventsHandler> VoiceAgentEventsHandler::create( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi) { + shared_ptr<vshlcore::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::IAFBApi> afbApi) { auto eventFilter = std::shared_ptr<VoiceAgentEventsHandler>(new VoiceAgentEventsHandler(logger, afbApi)); return eventFilter; } VoiceAgentEventsHandler::VoiceAgentEventsHandler( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi) : + shared_ptr<vshlcore::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::IAFBApi> afbApi) : mAfbApi(afbApi), mLogger(logger) { } @@ -70,7 +69,7 @@ void VoiceAgentEventsHandler::removeVshlEventsForVoiceAgent(const string voiceAg } bool VoiceAgentEventsHandler::subscribeToVshlEventFromVoiceAgent( - vshl::common::interfaces::IAFBRequest& request, + vshlcore::common::interfaces::IAFBRequest& request, const string eventName, const shared_ptr<VoiceAgent> voiceAgent) { auto supportedEventsIt = find(VSHL_EVENTS.begin(), VSHL_EVENTS.end(), eventName); diff --git a/src/plugins/voiceagents/src/VoiceAgentImpl.cpp b/src/plugins/voiceagents/src/VoiceAgentImpl.cpp index f2ef8a1..39a92c4 100644 --- a/src/plugins/voiceagents/src/VoiceAgentImpl.cpp +++ b/src/plugins/voiceagents/src/VoiceAgentImpl.cpp @@ -16,18 +16,17 @@ #include "voiceagents/include/VoiceAgent.h" -static string TAG = "vshl::voiceagents::VoiceAgent"; +static string TAG = "vshlcore::voiceagents::VoiceAgent"; /** * Specifies the severity level of a log message */ -using Level = vshl::common::interfaces::ILogger::Level; - -namespace vshl { +using Level = vshlcore::common::interfaces::ILogger::Level; +namespace vshlcore { namespace voiceagents { // Creates @c VoiceAgent instance shared_ptr<VoiceAgent> VoiceAgent::create( - shared_ptr<vshl::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::ILogger> logger, const string& id, const string& name, const string& description, @@ -51,7 +50,7 @@ shared_ptr<VoiceAgent> VoiceAgent::create( } VoiceAgent::VoiceAgent( - shared_ptr<vshl::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::ILogger> logger, const string& id, const string& name, const string& description, diff --git a/src/plugins/voiceagents/test/VoiceAgentTest.cpp b/src/plugins/voiceagents/test/VoiceAgentTest.cpp index e5ad15e..9730182 100644 --- a/src/plugins/voiceagents/test/VoiceAgentTest.cpp +++ b/src/plugins/voiceagents/test/VoiceAgentTest.cpp @@ -20,10 +20,9 @@ #include "voiceagents/test/VoiceAgentsTestData.h" #include "test/common/ConsoleLogger.h" -using namespace vshl::voiceagents; -using namespace vshl::test::common; - -namespace vshl { +using namespace vshlcore::voiceagents; +using namespace vshlcore::test::common; +namespace vshlcore { namespace test { class VoiceAgentTest : public ::testing::Test { diff --git a/src/plugins/voiceagents/test/VoiceAgentsDataManagerTest.cpp b/src/plugins/voiceagents/test/VoiceAgentsDataManagerTest.cpp index 58c62ed..9f63c73 100644 --- a/src/plugins/voiceagents/test/VoiceAgentsDataManagerTest.cpp +++ b/src/plugins/voiceagents/test/VoiceAgentsDataManagerTest.cpp @@ -22,12 +22,11 @@ #include "test/mocks/VoiceAgentsChangeObserverMock.h" #include "voiceagents/test/VoiceAgentsTestData.h" -using namespace vshl::common::interfaces; -using namespace vshl::voiceagents; +using namespace vshlcore::common::interfaces; +using namespace vshlcore::voiceagents; -using namespace vshl::test::common; - -namespace vshl { +using namespace vshlcore::test::common; +namespace vshlcore { namespace test { class VoiceAgentDataManagerTest : public ::testing::Test { diff --git a/src/plugins/voiceagents/test/VoiceAgentsTestData.h b/src/plugins/voiceagents/test/VoiceAgentsTestData.h index ced068f..104123b 100644 --- a/src/plugins/voiceagents/test/VoiceAgentsTestData.h +++ b/src/plugins/voiceagents/test/VoiceAgentsTestData.h @@ -17,8 +17,7 @@ #include <string> #include <unordered_set> #include <vector> - -namespace vshl { +namespace vshlcore { namespace test { typedef std::shared_ptr<std::unordered_set<std::string>> WakeWords; |