feyris-tan ef86554f9a Import
2025-05-12 22:09:16 +02:00

112 lines
3.2 KiB
C#

using skyscraper5.Skyscraper.IO.CrazycatStreamReader;
using skyscraper5.Skyscraper.IO.RemoteStreamReader;
using System.Net;
class Program
{
public static void Main(string[] args)
{
new Program().Run();
}
private int? dvbDeviceToUse;
private void CheckForDvbCallback(int index, string name, STD_TYPE type)
{
if (type == STD_TYPE.STD_DVBS || type == STD_TYPE.STD_DVBS2)
{
dvbDeviceToUse = index;
}
}
private void Run()
{
// See https://aka.ms/new-console-template for more information
RemoteStreamReaderClient client = new RemoteStreamReaderClient(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 6970));
if (!client.CheckForDVBExEx(CheckForDvbCallback))
{
Console.WriteLine("no devices");
client.Dispose();
return;
}
if (!client.StartDvbEx(dvbDeviceToUse.Value))
{
Console.WriteLine("failed to start");
client.Dispose();
return;
}
if (!client.SetChannel(11221000, 30000000, 1, VITERBIRATE_TYPE.VR_5_6, 9750000, 106000000, 117000000))
{
Console.WriteLine("set channel failed");
client.Dispose();
return;
}
SearchResult searchResult = new SearchResult();
if (!client.SignalInfo(ref searchResult))
{
Console.WriteLine("signal info failed");
client.Dispose();
return;
}
bool pPresent = true, pLock = true;
int pRFLevel = Int32.MaxValue;
float pSNR = float.NaN;
float pBER = float.NaN;
sbyte[] iq = new sbyte[8];
char[][] buf = new char[Console.WindowWidth][];
for (int i = 0; i < buf.Length; i++)
{
buf[i] = new char[Console.WindowHeight];
Array.Fill(buf[i], (char)0x21);
}
for (int t = 0; t < 9001; t++)
{
if (!client.GetSignalExEx(ref pPresent, ref pLock, ref pRFLevel, ref pSNR, ref pBER))
{
Console.WriteLine("get signal ex ex failed");
client.Dispose();
return;
}
if (!client.IQScan(0, iq, 4))
{
Console.WriteLine("iq scan failed");
client.Dispose();
return;
}
Console.CursorLeft = 0;
Console.CursorTop = 0;
Console.Write("RF = {0}, SNR = {1}, BER = {2} ", pRFLevel, pSNR, pBER);
for (int i = 0; i < iq.Length; i += 2)
{
double x = iq[i + 0] + sbyte.MaxValue;
double y = iq[i + 1] + sbyte.MaxValue;
double xScale = (double)255 / (double)Console.WindowWidth;
double yScale = (double)255 / (double)Console.WindowHeight;
x /= xScale;
y /= yScale;
int finalX = (int)x;
int finalY = (int)y;
Console.CursorTop = (int)y;
Console.CursorLeft = (int)x;
Console.Write(buf[finalX][finalY]++);
}
Thread.Sleep(100);
}
client.StopDVB();
client.Dispose();
}
}