private static void IntegrationTest()
{
	TunerFactoryConnectionManager tunerConnectionManager = TunerFactoryConnectionManager.GetInstance();
    ITunerFactory tunerFactory = tunerConnectionManager.GetTunerFactoryById(2);
    RemoteStreamReaderTunerFactory remoteTunerFactory = (RemoteStreamReaderTunerFactory)tunerFactory;
    remoteTunerFactory.Hostname = "tetsuro";
    remoteTunerFactory.Port = 6970;
    IStreamReader streamReader = remoteTunerFactory.CreateStreamReader();
    streamReader.CheckForDVBExEx((x, y, z) => Console.WriteLine("{0}, {1}, {2}", x, y, z.ToString()));
    if (!streamReader.StartDvbEx(2))
    {
        streamReader.Dispose();
        return;
    }
    DiSEqC_Opcode baseDiseqc = DiSEqC_Opcode.DISEQC_HIGH_NIBBLE | DiSEqC_Opcode.DISEQC_OPTION_A | DiSEqC_Opcode.DISEQC_POSITION_A;
    DiSEqC_Opcode lh = baseDiseqc | DiSEqC_Opcode.DISEQC_LOW_BAND | DiSEqC_Opcode.DISEQC_HORIZONTAL;
    int lof1 = 9750 * 1000;
	int lof2 = 10600 * 1000;
	int lofSw = 11700 * 1000;
	int startFreq = 10700 * 1000;
	int endFreq = 12750 * 1000;
	int step = 1000;

	streamReader.SendDiSEqC(2, lh);
	streamReader.SetChannel(11494000, 22000000, 0, VITERBIRATE_TYPE.VR_2_3, lof1, lof2, lofSw);
	SearchResult sr = default(SearchResult);
	streamReader.BLScanEx(11494000, 5000, 0, lof1, lof2, lofSw, 1000, STD_TYPE.STD_DVBS2, ref sr);

	sbyte[] buffer = new sbyte[200];
	IqChartData iq = IqChartData.Create();
	while (!iq.IsComplete)
	{
		if (!streamReader.IQScan(0, buffer, 100))
			throw new Exception("iq scan failed");
		iq.PushPacket(buffer);
	}

	FileStream fs = File.OpenWrite("iq.bin");
	iq.SaveTo(fs);
	fs.Flush(true);
    fs.Close();

	streamReader.StopDVB();
	streamReader.Dispose();
}