return mTypeMap[type];
}
+bool FeedbackMaps::isPatternSupportChecked(const feedback_pattern_e pattern,
+ const feedback_type_e type) {
+ return mSupportedMap.find(std::make_pair(pattern, type)) != mSupportedMap.end();
+}
+
+bool FeedbackMaps::isPatternSupported(const feedback_pattern_e pattern,
+ const feedback_type_e type) {
+ return mSupportedMap[std::make_pair(pattern, type)];
+}
+
+void FeedbackMaps::setPatternSupport(const feedback_pattern_e pattern, const feedback_type_e type,
+ const bool isSupported) {
+ mSupportedMap[std::make_pair(pattern, type)] = isSupported;
+}
+
FeedbackManager::FeedbackManager(std::shared_ptr<FeedbackMaps> maps)
: m_feedbackMapsPtr(maps)
{
}
}
-common::PlatformResult
-FeedbackManager::isPatternSupported(const std::string &pattern, const std::string &type, bool* patternStatus) {
+common::PlatformResult FeedbackManager::isPatternSupported(const std::string &pattern,
+ const std::string &type,
+ bool* patternStatus) {
LoggerD("Entered");
- int ret = feedback_is_supported_pattern(
- m_feedbackMapsPtr->getTypeFromMap(type),
- m_feedbackMapsPtr->getPatternFromMap(pattern),
- patternStatus
- );
- if(ret != FEEDBACK_ERROR_NONE) {
+ auto &pattern_e = m_feedbackMapsPtr->getPatternFromMap(pattern);
+ auto &type_e = m_feedbackMapsPtr->getTypeFromMap(type);
+ if (m_feedbackMapsPtr->isPatternSupportChecked(pattern_e, type_e)) {
+ *patternStatus = m_feedbackMapsPtr->isPatternSupported(pattern_e, type_e);
+ return PlatformResult(ErrorCode::NO_ERROR);
+ }
+ int ret = feedback_is_supported_pattern(type_e, pattern_e, patternStatus);
+ if (ret != FEEDBACK_ERROR_NONE) {
LoggerE("isPatternSupported failed: %d", ret);
return CodeToResult(ret, getFeedbackErrorMessage(ret).c_str());
- }
+ }
+ m_feedbackMapsPtr->setPatternSupport(pattern_e, type_e, *patternStatus);
return PlatformResult(ErrorCode::NO_ERROR);
}
common::PlatformResult FeedbackManager::play(const std::string &pattern, const std::string &type) {
LoggerD("Entered");
int ret = 0;
- if(type == "any") {
+ if (type == "any") {
ret = feedback_play(m_feedbackMapsPtr->getPatternFromMap(pattern));
} else {
- ret = feedback_play_type(m_feedbackMapsPtr->getTypeFromMap(type),
- m_feedbackMapsPtr->getPatternFromMap(pattern));
+ bool patternSupport = false;
+ auto result = isPatternSupported(pattern, type, &patternSupport);
+ if (!result) {
+ return result;
+ }
+ if (patternSupport) {
+ ret = feedback_play_type(m_feedbackMapsPtr->getTypeFromMap(type),
+ m_feedbackMapsPtr->getPatternFromMap(pattern));
+ } else {
+ return CodeToResult(FEEDBACK_ERROR_NOT_SUPPORTED, "Not supported device");
+ }
}
- if(ret != FEEDBACK_ERROR_NONE) {
+ if (ret != FEEDBACK_ERROR_NONE) {
LoggerE("play failed: %d", ret);
return CodeToResult(ret, getFeedbackErrorMessage(ret).c_str());
- }
+ }
return PlatformResult(ErrorCode::NO_ERROR);
}
using stringPatternMap = std::map<std::string, feedback_pattern_e>;
using stringTypeMap = std::map<std::string, feedback_type_e>;
+using supportedPatternsMap = std::map<std::pair<feedback_pattern_e, feedback_type_e>, bool>;
class FeedbackMaps {
public:
virtual ~FeedbackMaps();
feedback_pattern_e const & getPatternFromMap(const std::string& pattern);
feedback_type_e const & getTypeFromMap(const std::string& type);
+ bool isPatternSupportChecked(const feedback_pattern_e pattern, const feedback_type_e type);
+ bool isPatternSupported(const feedback_pattern_e pattern, const feedback_type_e type);
+ void setPatternSupport(const feedback_pattern_e pattern, const feedback_type_e type, const bool isSupported);
private:
stringTypeMap mTypeMap;
stringPatternMap mPatternMap;
+ supportedPatternsMap mSupportedMap;
};
class FeedbackManager {