Connect TunerDescrambler and DescramblerClient

Test: make
Bug: 174095851
Change-Id: I039f92cf6135ae7b0f67d6cd97fe0d95edef26be
diff --git a/media/jni/tuner/DescramblerClient.cpp b/media/jni/tuner/DescramblerClient.cpp
index 979beea..c9bacda 100644
--- a/media/jni/tuner/DescramblerClient.cpp
+++ b/media/jni/tuner/DescramblerClient.cpp
@@ -27,13 +27,12 @@
 
 /////////////// DescramblerClient ///////////////////////
 
-// TODO: pending aidl interface
-DescramblerClient::DescramblerClient() {
-    //mTunerDescrambler = tunerDescrambler;
+DescramblerClient::DescramblerClient(shared_ptr<ITunerDescrambler> tunerDescrambler) {
+    mTunerDescrambler = tunerDescrambler;
 }
 
 DescramblerClient::~DescramblerClient() {
-    //mTunerDescrambler = NULL;
+    mTunerDescrambler = NULL;
     mDescrambler = NULL;
 }
 
@@ -47,7 +46,10 @@
         return Result::INVALID_ARGUMENT;
     }
 
-    // TODO: pending aidl interface
+    if (mTunerDescrambler != NULL) {
+        Status s = mTunerDescrambler->setDemuxSource(demuxClient->getAidlDemux());
+        return ClientHelper::getServiceSpecificErrorCode(s);
+    }
 
     if (mDescrambler != NULL) {
         return mDescrambler->setDemuxSource(demuxClient->getId());
@@ -57,7 +59,10 @@
 }
 
 Result DescramblerClient::setKeyToken(vector<uint8_t> keyToken) {
-    // TODO: pending aidl interface
+    if (mTunerDescrambler != NULL) {
+        Status s = mTunerDescrambler->setKeyToken(keyToken);
+        return ClientHelper::getServiceSpecificErrorCode(s);
+    }
 
     if (mDescrambler != NULL) {
         return mDescrambler->setKeyToken(keyToken);
@@ -67,7 +72,11 @@
 }
 
 Result DescramblerClient::addPid(DemuxPid pid, sp<FilterClient> optionalSourceFilter) {
-    // TODO: pending aidl interface
+    if (mTunerDescrambler != NULL) {
+        Status s = mTunerDescrambler->addPid(
+                getAidlDemuxPid(pid), optionalSourceFilter->getAidlFilter());
+        return ClientHelper::getServiceSpecificErrorCode(s);
+    }
 
     if (mDescrambler != NULL) {
         return mDescrambler->addPid(pid, optionalSourceFilter->getHalFilter());
@@ -76,16 +85,24 @@
     return Result::INVALID_STATE;}
 
 Result DescramblerClient::removePid(DemuxPid pid, sp<FilterClient> optionalSourceFilter) {
-    // TODO: pending aidl interface
-
-    if (mDescrambler != NULL) {
-        return mDescrambler->addPid(pid, optionalSourceFilter->getHalFilter());
+    if (mTunerDescrambler != NULL) {
+        Status s = mTunerDescrambler->removePid(
+                getAidlDemuxPid(pid), optionalSourceFilter->getAidlFilter());
+        return ClientHelper::getServiceSpecificErrorCode(s);
     }
 
-    return Result::INVALID_STATE;}
+    if (mDescrambler != NULL) {
+        return mDescrambler->removePid(pid, optionalSourceFilter->getHalFilter());
+    }
+
+    return Result::INVALID_STATE;
+}
 
 Result DescramblerClient::close() {
-    // TODO: pending aidl interface
+    if (mTunerDescrambler != NULL) {
+        Status s = mTunerDescrambler->close();
+        return ClientHelper::getServiceSpecificErrorCode(s);
+    }
 
     if (mDescrambler != NULL) {
         return mDescrambler->close();
@@ -95,4 +112,16 @@
 
 /////////////// DescramblerClient Helper Methods ///////////////////////
 
+TunerDemuxPid DescramblerClient::getAidlDemuxPid(DemuxPid& pid) {
+    TunerDemuxPid aidlPid;
+    switch (pid.getDiscriminator()) {
+        case DemuxPid::hidl_discriminator::tPid:
+            aidlPid.set<TunerDemuxPid::tPid>((int)pid.tPid());
+            break;
+        case DemuxPid::hidl_discriminator::mmtpPid:
+            aidlPid.set<TunerDemuxPid::mmtpPid>((int)pid.mmtpPid());
+            break;
+    }
+    return aidlPid;
+}
 }  // namespace android