Loading tv/tuner/1.1/default/Frontend.cpp +212 −18 Original line number Diff line number Diff line Loading @@ -196,10 +196,40 @@ Return<void> Frontend::getStatus(const hidl_vec<FrontendStatusType>& statusTypes } case FrontendStatusType::MODULATION: { FrontendModulationStatus modulationStatus; modulationStatus.isdbs(FrontendIsdbsModulation::MOD_BPSK); // value = 1 << 1 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: { status.inversion(FrontendDvbcSpectralInversion::NORMAL); break; Loading Loading @@ -282,17 +312,72 @@ Return<void> Frontend::getStatusExt1_1(const hidl_vec<V1_1::FrontendStatusTypeEx 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; 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: { vector<uint32_t> bers = {1}; status.bers(bers); Loading @@ -306,22 +391,88 @@ Return<void> Frontend::getStatusExt1_1(const hidl_vec<V1_1::FrontendStatusTypeEx } case V1_1::FrontendStatusTypeExt1_1::BANDWIDTH: { V1_1::FrontendBandwidth 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; 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 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: { status.uec(4); break; Loading @@ -332,11 +483,34 @@ Return<void> Frontend::getStatusExt1_1(const hidl_vec<V1_1::FrontendStatusTypeEx } case V1_1::FrontendStatusTypeExt1_1::INTERLEAVINGS: { V1_1::FrontendInterleaveMode interleave; interleave.atsc3(FrontendAtsc3TimeInterleaveMode::AUTO); 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: { vector<uint8_t> segments = {2, 3}; status.isdbtSegment(segments); Loading @@ -349,10 +523,30 @@ Return<void> Frontend::getStatusExt1_1(const hidl_vec<V1_1::FrontendStatusTypeEx } case V1_1::FrontendStatusTypeExt1_1::ROLL_OFF: { V1_1::FrontendRollOff 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: { status.isMiso(true); break; Loading tv/tuner/1.1/default/Tuner.cpp +105 −17 Original line number Diff line number Diff line Loading @@ -33,38 +33,91 @@ namespace implementation { 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{ Loading @@ -77,14 +130,60 @@ Tuner::Tuner() { }; 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); Loading Loading @@ -160,17 +259,6 @@ Return<void> Tuner::getFrontendInfo(FrontendId frontendId, getFrontendInfo_cb _h 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(), Loading @@ -180,7 +268,7 @@ Return<void> Tuner::getFrontendInfo(FrontendId frontendId, getFrontendInfo_cb _h .maxSymbolRate = 1145, .acquireRange = 30, .exclusiveGroupId = 57, .statusCaps = statusCaps, .statusCaps = mFrontendStatusCaps[frontendId], .frontendCaps = mFrontendCaps[frontendId], }; Loading tv/tuner/1.1/default/Tuner.h +1 −0 Original line number Diff line number Diff line Loading @@ -79,6 +79,7 @@ class Tuner : public ITuner { // 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; Loading Loading
tv/tuner/1.1/default/Frontend.cpp +212 −18 Original line number Diff line number Diff line Loading @@ -196,10 +196,40 @@ Return<void> Frontend::getStatus(const hidl_vec<FrontendStatusType>& statusTypes } case FrontendStatusType::MODULATION: { FrontendModulationStatus modulationStatus; modulationStatus.isdbs(FrontendIsdbsModulation::MOD_BPSK); // value = 1 << 1 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: { status.inversion(FrontendDvbcSpectralInversion::NORMAL); break; Loading Loading @@ -282,17 +312,72 @@ Return<void> Frontend::getStatusExt1_1(const hidl_vec<V1_1::FrontendStatusTypeEx 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; 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: { vector<uint32_t> bers = {1}; status.bers(bers); Loading @@ -306,22 +391,88 @@ Return<void> Frontend::getStatusExt1_1(const hidl_vec<V1_1::FrontendStatusTypeEx } case V1_1::FrontendStatusTypeExt1_1::BANDWIDTH: { V1_1::FrontendBandwidth 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; 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 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: { status.uec(4); break; Loading @@ -332,11 +483,34 @@ Return<void> Frontend::getStatusExt1_1(const hidl_vec<V1_1::FrontendStatusTypeEx } case V1_1::FrontendStatusTypeExt1_1::INTERLEAVINGS: { V1_1::FrontendInterleaveMode interleave; interleave.atsc3(FrontendAtsc3TimeInterleaveMode::AUTO); 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: { vector<uint8_t> segments = {2, 3}; status.isdbtSegment(segments); Loading @@ -349,10 +523,30 @@ Return<void> Frontend::getStatusExt1_1(const hidl_vec<V1_1::FrontendStatusTypeEx } case V1_1::FrontendStatusTypeExt1_1::ROLL_OFF: { V1_1::FrontendRollOff 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: { status.isMiso(true); break; Loading
tv/tuner/1.1/default/Tuner.cpp +105 −17 Original line number Diff line number Diff line Loading @@ -33,38 +33,91 @@ namespace implementation { 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{ Loading @@ -77,14 +130,60 @@ Tuner::Tuner() { }; 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); Loading Loading @@ -160,17 +259,6 @@ Return<void> Tuner::getFrontendInfo(FrontendId frontendId, getFrontendInfo_cb _h 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(), Loading @@ -180,7 +268,7 @@ Return<void> Tuner::getFrontendInfo(FrontendId frontendId, getFrontendInfo_cb _h .maxSymbolRate = 1145, .acquireRange = 30, .exclusiveGroupId = 57, .statusCaps = statusCaps, .statusCaps = mFrontendStatusCaps[frontendId], .frontendCaps = mFrontendCaps[frontendId], }; Loading
tv/tuner/1.1/default/Tuner.h +1 −0 Original line number Diff line number Diff line Loading @@ -79,6 +79,7 @@ class Tuner : public ITuner { // 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; Loading