408 lines
9.7 KiB
C#
408 lines
9.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using log4net;
|
|
using skyscraper5.Skyscraper.IO;
|
|
using skyscraper5.Skyscraper.IO.CrazycatStreamReader;
|
|
|
|
namespace skyscraper8.Skyscraper.FrequencyListGenerator
|
|
{
|
|
public class CoopBlindscanStreamReaderProxy : IStreamReader
|
|
{
|
|
private static ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name);
|
|
|
|
private readonly IStreamReader _proxiedStreamReader;
|
|
private readonly int _blindScanTuner;
|
|
private readonly int _setFilterTuner;
|
|
|
|
private int currentlySelectedTuner;
|
|
private uint lastDiseqcType;
|
|
private DiSEqC_Opcode lastDiseqcOpcode;
|
|
public CoopBlindscanStreamReaderProxy(IStreamReader proxiedStreamReader, int blindScanTuner, int setFilterTuner)
|
|
{
|
|
_proxiedStreamReader = proxiedStreamReader;
|
|
_blindScanTuner = blindScanTuner;
|
|
_setFilterTuner = setFilterTuner;
|
|
currentlySelectedTuner = -1;
|
|
lastDiseqcType = UInt32.MaxValue;
|
|
|
|
if (logger == null)
|
|
{
|
|
logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name);
|
|
logger.Debug("We'll be using two tuners for this operation.");
|
|
}
|
|
}
|
|
|
|
private bool SwitchTuner(int targetTuner)
|
|
{
|
|
if (targetTuner == currentlySelectedTuner)
|
|
return true;
|
|
|
|
if (logger == null)
|
|
logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name);
|
|
logger.Info(String.Format("Switching tuner to #{0}", targetTuner));
|
|
if (currentlySelectedTuner != -1)
|
|
{
|
|
if (!_proxiedStreamReader.StopDVB())
|
|
return false;
|
|
}
|
|
|
|
if (!_proxiedStreamReader.StartDvbEx(targetTuner))
|
|
return false;
|
|
|
|
if (lastDiseqcType != uint.MaxValue)
|
|
{
|
|
if (!_proxiedStreamReader.SendDiSEqC(lastDiseqcType, lastDiseqcOpcode))
|
|
return false;
|
|
}
|
|
|
|
currentlySelectedTuner = targetTuner;
|
|
return true;
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool CheckForDVB()
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool CheckForDVBEx(DvbEnumCallback func)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool CheckForDVBExEx(DvbEnumCallbackEx func)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool StartDVB()
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool StartDvbEx(int index)
|
|
{
|
|
bool result = _proxiedStreamReader.StartDvbEx(index);
|
|
if (result)
|
|
{
|
|
currentlySelectedTuner = index;
|
|
}
|
|
else
|
|
{
|
|
currentlySelectedTuner = -1;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
public bool StopDVB()
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool GetTunerType(ref STD_TYPE type)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool SendDiSEqC(uint diseqcType, DiSEqC_Opcode data)
|
|
{
|
|
bool result = _proxiedStreamReader.SendDiSEqC(diseqcType, data);
|
|
if (result)
|
|
{
|
|
lastDiseqcType = diseqcType;
|
|
lastDiseqcOpcode = data;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
public bool SendDiseqCmd(byte[] buffer, int length)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool SendDiseqCmdEx(nint pCmd, int length, nint reply, int replyLength)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool SetChannel(int freq, int symbrate, int pol, VITERBIRATE_TYPE fec, int lof1, int lof2, int lofsw)
|
|
{
|
|
if (!SwitchTuner(_setFilterTuner))
|
|
return false;
|
|
|
|
if (!_proxiedStreamReader.SetChannel(freq, symbrate, pol, fec, lof1, lof2, lofsw))
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
public bool SetChannelEx(int freq, int symbrate, int pol, VITERBIRATE_TYPE fec, int lof1, int lof2, int lofsw, MOD_TYPE mod)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool SetChannelExEx(int freq, int symbrate, int pol, VITERBIRATE_TYPE fec, int lof1, int lof2, int lofsw, MOD_TYPE mod,
|
|
int inv, int pilot, ROLLOFF_TYPE rolloff)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool SetFilter(int pid, StdcallDvbCallback func, int callbackType, int size, ref nint lpFilterNum)
|
|
{
|
|
if (!SwitchTuner(_setFilterTuner))
|
|
return false;
|
|
|
|
if (!_proxiedStreamReader.SetFilter(pid, func, callbackType, size, ref lpFilterNum))
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
public bool SetFilterEx(int pid, StdcallDvbCallbackEx lpFunc, int callbackType, int size, ref nint lpFilterNum)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool SetBitFilter(int pid, nint filterData, nint filterMask, byte filterLength, StdcallDvbCallback lpFunc,
|
|
ref nint lpFilterNum)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool SetRemoteControl(int irtype, short devAddr, StdcallDvbCallback func, ref nint lpFilterNum)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool DelFilter(nint filterNum)
|
|
{
|
|
return _proxiedStreamReader.DelFilter(filterNum);
|
|
}
|
|
|
|
public bool GetSignal(ref int pStrength, ref int pQuality)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool GetSignalStrength(ref float pStrength, ref float pQuality)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool GetSignalEx(ref float pSNR, ref float pBER)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool GetSignalExEx(ref bool pPresent, ref bool pLock, ref int pRFLevel, ref float pSNR, ref float pBER)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool Statistic(int[] pStat)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool GetMAC(byte[] pMac)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public Caps GetCaps()
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool RFScan(int freq, int pol, int lof1, int lof2, int lofsw, out double pRFLevel)
|
|
{
|
|
pRFLevel = double.NaN;
|
|
|
|
if (!SwitchTuner(_blindScanTuner))
|
|
return false;
|
|
|
|
if (!_proxiedStreamReader.RFScan(freq, pol, lof1, lof2, lofsw, out pRFLevel))
|
|
return false;
|
|
return true;
|
|
}
|
|
|
|
public bool FFTInit()
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool FFTScan(int freq, int pol, int lof1, int lof2, int lofsw, uint range, byte mode, byte nb_acc, nint pTab,
|
|
nint pBegin, nint pNum)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool BLScan(int freq, int freq_range, int pol, int lof1, int lof2, int lofsw, int minsr,
|
|
ref SearchResult pSearchResult)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool BLScanEx(int freq, int freq_range, int pol, int lof1, int lof2, int lofsw, int minsr, STD_TYPE std,
|
|
ref SearchResult pSearchResult)
|
|
{
|
|
if (!SwitchTuner(_setFilterTuner))
|
|
return false;
|
|
|
|
if (!_proxiedStreamReader.BLScanEx(freq, freq_range, pol, lof1, lof2, lofsw, minsr, std, ref pSearchResult))
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
public bool BLScan2(int freq_start, int freq_stop, int pol, int lof1, int lof2, int lofsw, nint pSearchResult, ref int pTpNum,
|
|
BlScanCallback lpFunc)
|
|
{
|
|
if (!SwitchTuner(_blindScanTuner))
|
|
return false;
|
|
|
|
if (!_proxiedStreamReader.BLScan2(freq_start, freq_stop, pol, lof1, lof2, lofsw, pSearchResult, ref pTpNum,
|
|
lpFunc))
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
public bool SignalInfo(ref SearchResult pSearchResult)
|
|
{
|
|
if (!SwitchTuner(_setFilterTuner))
|
|
return false;
|
|
|
|
if (!_proxiedStreamReader.SignalInfo(ref pSearchResult))
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
public bool IQScan(uint input, sbyte[] pIQ, uint num)
|
|
{
|
|
if (!SwitchTuner(_setFilterTuner))
|
|
return false;
|
|
|
|
if (!_proxiedStreamReader.IQScan(input, pIQ, num))
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
public bool IQScan2(uint point, short[] pIQ, uint num)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool IQScan2Range(byte input, ref ushort pMinPoint, ref ushort pMaxPoint)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool CIRScanRange(bool bHiRes, ref ushort pMinCnum, ref ushort pMaxCnum, ref int pMinDelayNs, ref int pMaxDelayNs)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool CIRScan(bool bHiRes, int[] pPowers, int[] pDelays)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool CarRange(ref ushort pMinCnum, ref ushort pMaxCnum)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool CarEsNo(ref ushort cnum, ref double pEsNo)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool MISSel(bool bEnable, byte misFilter, byte misFilterMask)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool PLSSel(byte plsMode, uint code)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool PLSGet(byte pMode, ref uint pCode)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool ModSel(ref S2Mode ps2Modes, uint num)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool ModInv(uint WaitMs, ref S2Mode pS2Modes, ref uint pNum)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool SetChannel2(uint freq, uint bandwidth)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool SetChannel2Ex(uint freq, uint bandwidth, STD_TYPE std, int stream)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool SetChannel2ExEx(uint freq, uint bandwidth, uint symbrate, STD_TYPE std, int stream)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool SignalInfo2(ref SearchResult2 si2)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool RFScan2(uint freq, STD_TYPE std, ref double pRFLevel)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool AirScan(int freq_start, int freq_stop, uint step, uint bandwidth, int std, nint pSearchResult, ref int pTpNum,
|
|
AirScanCallback lpFunc)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool GetEEPROM(byte[] buffer, int offset, int len)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public bool SetEEPROM(byte[] buffer, int offset, int len)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public Version GetEngineVersion()
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public string GetEngineName()
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
}
|
|
}
|