Add more Frontend Status Caps and frontend types in Tuner default impl
This helps the CTS to cover more Frontend JNI/java/client codes
Test: atest android.media.tv.tuner.cts
Bug: 181088182
Change-Id: I6fe079f7691cddaca6262345b10abc2145a5a6f3
diff --git a/tv/tuner/1.1/default/Frontend.cpp b/tv/tuner/1.1/default/Frontend.cpp
index 243891c..0f6784b 100644
--- a/tv/tuner/1.1/default/Frontend.cpp
+++ b/tv/tuner/1.1/default/Frontend.cpp
@@ -196,8 +196,38 @@
}
case FrontendStatusType::MODULATION: {
FrontendModulationStatus modulationStatus;
- modulationStatus.isdbs(FrontendIsdbsModulation::MOD_BPSK); // value = 1 << 1
- status.modulation(modulationStatus);
+ switch (mType) {
+ case FrontendType::ISDBS: {
+ modulationStatus.isdbs(
+ FrontendIsdbsModulation::MOD_BPSK); // value = 1 << 1
+ status.modulation(modulationStatus);
+ break;
+ }
+ case FrontendType::DVBC: {
+ modulationStatus.dvbc(FrontendDvbcModulation::MOD_16QAM); // value = 1 << 1
+ status.modulation(modulationStatus);
+ break;
+ }
+ case FrontendType::DVBS: {
+ modulationStatus.dvbs(FrontendDvbsModulation::MOD_QPSK); // value = 1 << 1
+ status.modulation(modulationStatus);
+ break;
+ }
+ case FrontendType::ISDBS3: {
+ modulationStatus.isdbs3(
+ FrontendIsdbs3Modulation::MOD_BPSK); // value = 1 << 1
+ status.modulation(modulationStatus);
+ break;
+ }
+ case FrontendType::ISDBT: {
+ modulationStatus.isdbt(
+ FrontendIsdbtModulation::MOD_DQPSK); // value = 1 << 1
+ status.modulation(modulationStatus);
+ break;
+ }
+ default:
+ break;
+ }
break;
}
case FrontendStatusType::SPECTRAL: {
@@ -282,15 +312,70 @@
V1_1::FrontendStatusTypeExt1_1 type = statusTypes[i];
V1_1::FrontendStatusExt1_1 status;
- // assign randomly selected values for testing.
- // TODO: assign status values according to the frontend type
switch (type) {
case V1_1::FrontendStatusTypeExt1_1::MODULATIONS: {
vector<V1_1::FrontendModulation> modulations;
V1_1::FrontendModulation modulation;
- modulation.isdbs(FrontendIsdbsModulation::MOD_BPSK); // value = 1 << 1
- modulations.push_back(modulation);
- status.modulations(modulations);
+ switch ((int)mType) {
+ case (int)FrontendType::ISDBS: {
+ modulation.isdbs(FrontendIsdbsModulation::MOD_BPSK); // value = 1 << 1
+ modulations.push_back(modulation);
+ status.modulations(modulations);
+ break;
+ }
+ case (int)FrontendType::DVBC: {
+ modulation.dvbc(FrontendDvbcModulation::MOD_16QAM); // value = 1 << 1
+ modulations.push_back(modulation);
+ status.modulations(modulations);
+ break;
+ }
+ case (int)FrontendType::DVBS: {
+ modulation.dvbs(FrontendDvbsModulation::MOD_QPSK); // value = 1 << 1
+ modulations.push_back(modulation);
+ status.modulations(modulations);
+ break;
+ }
+ case (int)FrontendType::DVBT: {
+ // value = 1 << 16
+ modulation.dvbt(V1_1::FrontendDvbtConstellation::CONSTELLATION_16QAM_R);
+ modulations.push_back(modulation);
+ status.modulations(modulations);
+ break;
+ }
+ case (int)FrontendType::ISDBS3: {
+ modulation.isdbs3(FrontendIsdbs3Modulation::MOD_BPSK); // value = 1 << 1
+ modulations.push_back(modulation);
+ status.modulations(modulations);
+ break;
+ }
+ case (int)FrontendType::ISDBT: {
+ modulation.isdbt(FrontendIsdbtModulation::MOD_DQPSK); // value = 1 << 1
+ modulations.push_back(modulation);
+ status.modulations(modulations);
+ break;
+ }
+ case (int)FrontendType::ATSC: {
+ modulation.atsc(FrontendAtscModulation::MOD_8VSB); // value = 1 << 2
+ modulations.push_back(modulation);
+ status.modulations(modulations);
+ break;
+ }
+ case (int)FrontendType::ATSC3: {
+ modulation.atsc3(FrontendAtsc3Modulation::MOD_QPSK); // value = 1 << 1
+ modulations.push_back(modulation);
+ status.modulations(modulations);
+ break;
+ }
+ case (int)V1_1::FrontendType::DTMB: {
+ // value = 1 << 1
+ modulation.dtmb(V1_1::FrontendDtmbModulation::CONSTELLATION_4QAM);
+ modulations.push_back(modulation);
+ status.modulations(modulations);
+ break;
+ }
+ default:
+ break;
+ }
break;
}
case V1_1::FrontendStatusTypeExt1_1::BERS: {
@@ -306,20 +391,86 @@
}
case V1_1::FrontendStatusTypeExt1_1::BANDWIDTH: {
V1_1::FrontendBandwidth bandwidth;
- bandwidth.dvbt(FrontendDvbtBandwidth::BANDWIDTH_8MHZ);
- status.bandwidth(bandwidth);
+ switch ((int)mType) {
+ case (int)FrontendType::DVBC: {
+ // value = 1 << 1
+ bandwidth.dvbc(V1_1::FrontendDvbcBandwidth::BANDWIDTH_6MHZ);
+ status.bandwidth(bandwidth);
+ break;
+ }
+ case (int)FrontendType::DVBT: {
+ // value = 1 << 1
+ bandwidth.dvbt(FrontendDvbtBandwidth::BANDWIDTH_8MHZ);
+ status.bandwidth(bandwidth);
+ break;
+ }
+ case (int)FrontendType::ISDBT: {
+ bandwidth.isdbt(FrontendIsdbtBandwidth::BANDWIDTH_8MHZ); // value = 1 << 1
+ status.bandwidth(bandwidth);
+ break;
+ }
+ case (int)FrontendType::ATSC3: {
+ bandwidth.atsc3(FrontendAtsc3Bandwidth::BANDWIDTH_6MHZ); // value = 1 << 1
+ status.bandwidth(bandwidth);
+ break;
+ }
+ case (int)V1_1::FrontendType::DTMB: {
+ // value = 1 << 1
+ bandwidth.dtmb(V1_1::FrontendDtmbBandwidth::BANDWIDTH_8MHZ);
+ status.bandwidth(bandwidth);
+ break;
+ }
+ default:
+ break;
+ }
break;
}
case V1_1::FrontendStatusTypeExt1_1::GUARD_INTERVAL: {
V1_1::FrontendGuardInterval interval;
- interval.dvbt(FrontendDvbtGuardInterval::INTERVAL_1_32); // value = 1 << 1
- status.interval(interval);
+ switch ((int)mType) {
+ case (int)FrontendType::DVBT: {
+ interval.dvbt(FrontendDvbtGuardInterval::INTERVAL_1_32); // value = 1 << 1
+ status.interval(interval);
+ break;
+ }
+ case (int)FrontendType::ISDBT: {
+ interval.isdbt(FrontendDvbtGuardInterval::INTERVAL_1_32); // value = 1 << 1
+ status.interval(interval);
+ break;
+ }
+ case (int)V1_1::FrontendType::DTMB: {
+ // value = 1 << 1
+ interval.dtmb(V1_1::FrontendDtmbGuardInterval::PN_420_VARIOUS);
+ status.interval(interval);
+ break;
+ }
+ default:
+ break;
+ }
break;
}
case V1_1::FrontendStatusTypeExt1_1::TRANSMISSION_MODE: {
V1_1::FrontendTransmissionMode transMode;
- transMode.dvbt(V1_1::FrontendDvbtTransmissionMode::AUTO); // value = 1 << 0
- status.transmissionMode(transMode);
+ switch ((int)mType) {
+ case (int)FrontendType::DVBT: {
+ // value = 1 << 8
+ transMode.dvbt(V1_1::FrontendDvbtTransmissionMode::MODE_16K_E);
+ status.transmissionMode(transMode);
+ break;
+ }
+ case (int)FrontendType::ISDBT: {
+ transMode.isdbt(FrontendIsdbtMode::MODE_1); // value = 1 << 1
+ status.transmissionMode(transMode);
+ break;
+ }
+ case (int)V1_1::FrontendType::DTMB: {
+ transMode.dtmb(V1_1::FrontendDtmbTransmissionMode::C1); // value = 1 << 1
+ status.transmissionMode(transMode);
+ break;
+ }
+ default:
+ break;
+ }
break;
}
case V1_1::FrontendStatusTypeExt1_1::UEC: {
@@ -332,9 +483,32 @@
}
case V1_1::FrontendStatusTypeExt1_1::INTERLEAVINGS: {
V1_1::FrontendInterleaveMode interleave;
- interleave.atsc3(FrontendAtsc3TimeInterleaveMode::AUTO);
- vector<V1_1::FrontendInterleaveMode> interleaving = {interleave};
- status.interleaving(interleaving);
+ switch ((int)mType) {
+ case (int)FrontendType::DVBC: {
+ // value = 1 << 1
+ interleave.dvbc(
+ V1_1::FrontendCableTimeInterleaveMode::INTERLEAVING_128_1_0);
+ vector<V1_1::FrontendInterleaveMode> interleaving = {interleave};
+ status.interleaving(interleaving);
+ break;
+ }
+ case (int)FrontendType::ATSC3: {
+ // value = 1 << 1
+ interleave.atsc3(FrontendAtsc3TimeInterleaveMode::CTI);
+ vector<V1_1::FrontendInterleaveMode> interleaving = {interleave};
+ status.interleaving(interleaving);
+ break;
+ }
+ case (int)V1_1::FrontendType::DTMB: {
+ // value = 1 << 1
+ interleave.dtmb(V1_1::FrontendDtmbTimeInterleaveMode::TIMER_INT_240);
+ vector<V1_1::FrontendInterleaveMode> interleaving = {interleave};
+ status.interleaving(interleaving);
+ break;
+ }
+ default:
+ break;
+ }
break;
}
case V1_1::FrontendStatusTypeExt1_1::ISDBT_SEGMENTS: {
@@ -349,8 +523,28 @@
}
case V1_1::FrontendStatusTypeExt1_1::ROLL_OFF: {
V1_1::FrontendRollOff rollOff;
- rollOff.isdbs(FrontendIsdbsRolloff::ROLLOFF_0_35);
- status.rollOff(rollOff);
+ switch (mType) {
+ case FrontendType::DVBS: {
+ // value = 1
+ rollOff.dvbs(FrontendDvbsRolloff::ROLLOFF_0_35);
+ status.rollOff(rollOff);
+ break;
+ }
+ case FrontendType::ISDBS: {
+ // value = 1
+ rollOff.isdbs(FrontendIsdbsRolloff::ROLLOFF_0_35);
+ status.rollOff(rollOff);
+ break;
+ }
+ case FrontendType::ISDBS3: {
+ // value = 1
+ rollOff.isdbs3(FrontendIsdbs3Rolloff::ROLLOFF_0_03);
+ status.rollOff(rollOff);
+ break;
+ }
+ default:
+ break;
+ }
break;
}
case V1_1::FrontendStatusTypeExt1_1::IS_MISO: {
diff --git a/tv/tuner/1.1/default/Tuner.cpp b/tv/tuner/1.1/default/Tuner.cpp
index 6cc9949..38b2a26 100644
--- a/tv/tuner/1.1/default/Tuner.cpp
+++ b/tv/tuner/1.1/default/Tuner.cpp
@@ -33,38 +33,91 @@
Tuner::Tuner() {
// Static Frontends array to maintain local frontends information
// Array index matches their FrontendId in the default impl
- mFrontendSize = 9;
+ mFrontendSize = 10;
mFrontends[0] = new Frontend(FrontendType::ISDBS, 0, this);
- mFrontends[1] = new Frontend(FrontendType::ATSC, 1, this);
+ mFrontends[1] = new Frontend(FrontendType::ATSC3, 1, this);
mFrontends[2] = new Frontend(FrontendType::DVBC, 2, this);
mFrontends[3] = new Frontend(FrontendType::DVBS, 3, this);
mFrontends[4] = new Frontend(FrontendType::DVBT, 4, this);
mFrontends[5] = new Frontend(FrontendType::ISDBT, 5, this);
mFrontends[6] = new Frontend(FrontendType::ANALOG, 6, this);
mFrontends[7] = new Frontend(FrontendType::ATSC, 7, this);
- mFrontends[8] =
- new Frontend(static_cast<V1_0::FrontendType>(V1_1::FrontendType::DTMB), 8, this);
+ mFrontends[8] = new Frontend(FrontendType::ISDBS3, 8, this);
+ mFrontends[9] =
+ new Frontend(static_cast<V1_0::FrontendType>(V1_1::FrontendType::DTMB), 9, this);
FrontendInfo::FrontendCapabilities caps;
+ vector<FrontendStatusType> statusCaps;
+
caps = FrontendInfo::FrontendCapabilities();
caps.isdbsCaps(FrontendIsdbsCapabilities());
mFrontendCaps[0] = caps;
+ statusCaps = {
+ FrontendStatusType::DEMOD_LOCK,
+ FrontendStatusType::SNR,
+ FrontendStatusType::FEC,
+ FrontendStatusType::MODULATION,
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::MODULATIONS),
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::ROLL_OFF),
+ };
+ mFrontendStatusCaps[0] = statusCaps;
caps = FrontendInfo::FrontendCapabilities();
- caps.atscCaps(FrontendAtscCapabilities());
+ caps.atsc3Caps(FrontendAtsc3Capabilities());
mFrontendCaps[1] = caps;
+ statusCaps = {
+ FrontendStatusType::BER,
+ FrontendStatusType::PER,
+ FrontendStatusType::ATSC3_PLP_INFO,
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::MODULATIONS),
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::BERS),
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::INTERLEAVINGS),
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::BANDWIDTH),
+ };
+ mFrontendStatusCaps[1] = statusCaps;
caps = FrontendInfo::FrontendCapabilities();
caps.dvbcCaps(FrontendDvbcCapabilities());
mFrontendCaps[2] = caps;
+ statusCaps = {
+ FrontendStatusType::PRE_BER,
+ FrontendStatusType::SIGNAL_QUALITY,
+ FrontendStatusType::MODULATION,
+ FrontendStatusType::SPECTRAL,
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::MODULATIONS),
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::CODERATES),
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::INTERLEAVINGS),
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::BANDWIDTH),
+ };
+ mFrontendStatusCaps[2] = statusCaps;
caps = FrontendInfo::FrontendCapabilities();
caps.dvbsCaps(FrontendDvbsCapabilities());
mFrontendCaps[3] = caps;
+ statusCaps = {
+ FrontendStatusType::SIGNAL_STRENGTH,
+ FrontendStatusType::SYMBOL_RATE,
+ FrontendStatusType::MODULATION,
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::MODULATIONS),
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::ROLL_OFF),
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::IS_MISO),
+ };
+ mFrontendStatusCaps[3] = statusCaps;
caps = FrontendInfo::FrontendCapabilities();
caps.dvbtCaps(FrontendDvbtCapabilities());
mFrontendCaps[4] = caps;
+ statusCaps = {
+ FrontendStatusType::EWBS,
+ FrontendStatusType::PLP_ID,
+ FrontendStatusType::HIERARCHY,
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::MODULATIONS),
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::BANDWIDTH),
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::GUARD_INTERVAL),
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::TRANSMISSION_MODE),
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::T2_SYSTEM_ID),
+ };
+ mFrontendStatusCaps[4] = statusCaps;
caps = FrontendInfo::FrontendCapabilities();
FrontendIsdbtCapabilities isdbtCaps{
@@ -77,14 +130,60 @@
};
caps.isdbtCaps(isdbtCaps);
mFrontendCaps[5] = caps;
+ statusCaps = {
+ FrontendStatusType::AGC,
+ FrontendStatusType::LNA,
+ FrontendStatusType::MODULATION,
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::MODULATIONS),
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::BANDWIDTH),
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::GUARD_INTERVAL),
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::TRANSMISSION_MODE),
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::ISDBT_SEGMENTS),
+ };
+ mFrontendStatusCaps[5] = statusCaps;
caps = FrontendInfo::FrontendCapabilities();
caps.analogCaps(FrontendAnalogCapabilities());
mFrontendCaps[6] = caps;
+ statusCaps = {
+ FrontendStatusType::LAYER_ERROR,
+ FrontendStatusType::MER,
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::UEC),
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::TS_DATA_RATES),
+ };
+ mFrontendStatusCaps[6] = statusCaps;
caps = FrontendInfo::FrontendCapabilities();
caps.atscCaps(FrontendAtscCapabilities());
mFrontendCaps[7] = caps;
+ statusCaps = {
+ FrontendStatusType::FREQ_OFFSET,
+ FrontendStatusType::RF_LOCK,
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::MODULATIONS),
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::IS_LINEAR),
+ };
+ mFrontendStatusCaps[7] = statusCaps;
+
+ caps = FrontendInfo::FrontendCapabilities();
+ caps.isdbs3Caps(FrontendIsdbs3Capabilities());
+ mFrontendCaps[8] = caps;
+ statusCaps = {
+ FrontendStatusType::DEMOD_LOCK,
+ FrontendStatusType::MODULATION,
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::MODULATIONS),
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::ROLL_OFF),
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::IS_SHORT_FRAMES),
+ };
+ mFrontendStatusCaps[8] = statusCaps;
+
+ statusCaps = {
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::MODULATIONS),
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::INTERLEAVINGS),
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::BANDWIDTH),
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::GUARD_INTERVAL),
+ static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::TRANSMISSION_MODE),
+ };
+ mFrontendStatusCaps[9] = statusCaps;
mLnbs.resize(2);
mLnbs[0] = new Lnb(0);
@@ -160,17 +259,6 @@
return Void();
}
- vector<FrontendStatusType> statusCaps = {
- FrontendStatusType::DEMOD_LOCK,
- FrontendStatusType::SNR,
- FrontendStatusType::FEC,
- FrontendStatusType::MODULATION,
- FrontendStatusType::PLP_ID,
- FrontendStatusType::LAYER_ERROR,
- FrontendStatusType::ATSC3_PLP_INFO,
- static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::MODULATIONS),
- static_cast<FrontendStatusType>(V1_1::FrontendStatusTypeExt1_1::ROLL_OFF),
- };
// assign randomly selected values for testing.
info = {
.type = mFrontends[frontendId]->getFrontendType(),
@@ -180,7 +268,7 @@
.maxSymbolRate = 1145,
.acquireRange = 30,
.exclusiveGroupId = 57,
- .statusCaps = statusCaps,
+ .statusCaps = mFrontendStatusCaps[frontendId],
.frontendCaps = mFrontendCaps[frontendId],
};
diff --git a/tv/tuner/1.1/default/Tuner.h b/tv/tuner/1.1/default/Tuner.h
index fda3636..97bc995 100644
--- a/tv/tuner/1.1/default/Tuner.h
+++ b/tv/tuner/1.1/default/Tuner.h
@@ -79,6 +79,7 @@
// Static mFrontends array to maintain local frontends information
map<uint32_t, sp<Frontend>> mFrontends;
map<uint32_t, FrontendInfo::FrontendCapabilities> mFrontendCaps;
+ map<uint32_t, vector<FrontendStatusType>> mFrontendStatusCaps;
V1_1::FrontendDtmbCapabilities mDtmbCaps;
map<uint32_t, uint32_t> mFrontendToDemux;
map<uint32_t, sp<Demux>> mDemuxes;