/* // Copyright (c) 2014 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. */ #ifndef HDCP_CONTROL_H #define HDCP_CONTROL_H #include <IHdcpControl.h> #include <SimpleThread.h> namespace android { namespace intel { class HdcpControl : public IHdcpControl { public: HdcpControl(); virtual ~HdcpControl(); public: virtual bool startHdcp(); virtual bool startHdcpAsync(HdcpStatusCallback cb, void *userData); virtual bool stopHdcp(); protected: bool enableAuthentication(); bool disableAuthentication(); bool enableOverlay(); bool disableOverlay(); bool enableDisplayIED(); bool disableDisplayIED(); bool isHdcpSupported(); bool checkAuthenticated(); virtual bool preRunHdcp(); virtual bool postRunHdcp(); bool runHdcp(); inline void signalCompletion(); private: enum { HDCP_INLOOP_RETRY_NUMBER = 1, HDCP_INLOOP_RETRY_DELAY_US = 50000, HDCP_VERIFICATION_DELAY_MS = 2000, HDCP_ASYNC_START_DELAY_MS = 100, HDCP_AUTHENTICATION_SHORT_DELAY_MS = 200, HDCP_AUTHENTICATION_LONG_DELAY_MS = 2000, HDCP_AUTHENTICATION_TIMEOUT_MS = 5000, HDCP_RETRY_LIMIT = 10, }; enum { CALLBACK_PENDING, CALLBACK_AUTHENTICATED, CALLBACK_NOT_AUTHENTICATED, }; protected: HdcpStatusCallback mCallback; void *mUserData; int mCallbackState; Mutex mMutex; Condition mStoppedCondition; Condition mCompletedCondition; bool mWaitForCompletion; bool mStopped; bool mAuthenticated; int mActionDelay; // in milliseconds uint32_t mAuthRetryCount; private: DECLARE_THREAD(HdcpControlThread, HdcpControl); }; } // namespace intel } // namespace android #endif /* HDCP_CONTROL_H */