Home | History | Annotate | Download | only in common
      1 /*
      2 // Copyright(c)2014 IntelCorporation
      3 //
      4 // LicensedundertheApacheLicense,Version2.0(the"License");
      5 // youmaynotusethisfileexceptincompliancewiththeLicense.
      6 // YoumayobtainacopyoftheLicenseat
      7 //
      8 // http://www.apache.org/licenses/LICENSE-2.0
      9 //
     10 // Unlessrequiredbyapplicablelaworagreedtoinwriting,software
     11 // distributedundertheLicenseisdistributedonan"ASIS"BASIS,
     12 // WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.
     13 // SeetheLicenseforthespecificlanguagegoverningpermissionsand
     14 // limitationsundertheLicense.
     15 */
     16 #ifndef HDCP_CONTROL_H
     17 #define HDCP_CONTROL_H
     18 
     19 #include <IHdcpControl.h>
     20 #include <common/base/SimpleThread.h>
     21 
     22 namespace android {
     23 namespace intel {
     24 
     25 class HdcpControl : public IHdcpControl {
     26 public:
     27     HdcpControl();
     28     virtual ~HdcpControl();
     29 
     30 public:
     31     virtual bool startHdcp();
     32     virtual bool startHdcpAsync(HdcpStatusCallback cb, void *userData);
     33     virtual bool stopHdcp();
     34 
     35 protected:
     36     bool enableAuthentication();
     37     bool disableAuthentication();
     38     bool enableOverlay();
     39     bool disableOverlay();
     40     bool enableDisplayIED();
     41     bool disableDisplayIED();
     42     bool isHdcpSupported();
     43     bool checkAuthenticated();
     44     virtual bool preRunHdcp();
     45     virtual bool postRunHdcp();
     46     bool runHdcp();
     47     inline void signalCompletion();
     48 
     49 private:
     50     enum {
     51         HDCP_INLOOP_RETRY_NUMBER = 1,
     52         HDCP_INLOOP_RETRY_DELAY_US = 50000,
     53         HDCP_VERIFICATION_DELAY_MS = 2000,
     54         HDCP_ASYNC_START_DELAY_MS = 100,
     55         HDCP_AUTHENTICATION_SHORT_DELAY_MS = 200,
     56         HDCP_AUTHENTICATION_LONG_DELAY_MS = 2000,
     57         HDCP_AUTHENTICATION_TIMEOUT_MS = 5000,
     58         HDCP_RETRY_LIMIT = 10,
     59     };
     60 
     61     enum {
     62         CALLBACK_PENDING,
     63         CALLBACK_AUTHENTICATED,
     64         CALLBACK_NOT_AUTHENTICATED,
     65     };
     66 
     67 protected:
     68     HdcpStatusCallback mCallback;
     69     void *mUserData;
     70     int mCallbackState;
     71     Mutex mMutex;
     72     Condition mStoppedCondition;
     73     Condition mCompletedCondition;
     74     bool mWaitForCompletion;
     75     bool mStopped;
     76     bool mAuthenticated;
     77     int mActionDelay;  // in milliseconds
     78     uint32_t mAuthRetryCount;
     79     bool mEnableAuthenticationLog;
     80 
     81 private:
     82     DECLARE_THREAD(HdcpControlThread, HdcpControl);
     83 };
     84 
     85 } // namespace intel
     86 } // namespace android
     87 
     88 #endif /* HDCP_CONTROL_H */
     89