Fixed bug in Float/Double I/O.
Some checks failed
🚀 Pack skyscraper8 / make-zip (push) Failing after 35s

This commit is contained in:
Fey 2026-05-09 17:52:15 +02:00
parent e79ef4b4e2
commit 6b83c4d198
4 changed files with 950 additions and 924 deletions

View File

@ -445,8 +445,8 @@ namespace skyscraper5.Skyscraper.IO.RemoteStreamReader
pPresent = TcpStream.ReadBoolean(); pPresent = TcpStream.ReadBoolean();
pLock = TcpStream.ReadBoolean(); pLock = TcpStream.ReadBoolean();
pRFLevel = TcpStream.ReadInt32BE(); pRFLevel = TcpStream.ReadInt32BE();
pSNR = TcpStream.ReadFloat(); pSNR = TcpStream.ReadFloatBE();
pBER = TcpStream.ReadFloat(); pBER = TcpStream.ReadFloatBE();
return true; return true;
case RemoteStreamReaderConstants.COMMAND_FAILED: case RemoteStreamReaderConstants.COMMAND_FAILED:
return false; return false;
@ -512,10 +512,10 @@ namespace skyscraper5.Skyscraper.IO.RemoteStreamReader
switch (result) switch (result)
{ {
case RemoteStreamReaderConstants.COMMAND_SUCCESSFUL: case RemoteStreamReaderConstants.COMMAND_SUCCESSFUL:
pRFLevel = NetworkStreamExtensions.ReadDouble(TcpStream); pRFLevel = NetworkStreamExtensions.ReadDoubleBE(TcpStream);
return true; return true;
case RemoteStreamReaderConstants.COMMAND_FAILED: case RemoteStreamReaderConstants.COMMAND_FAILED:
pRFLevel = NetworkStreamExtensions.ReadDouble(TcpStream); pRFLevel = NetworkStreamExtensions.ReadDoubleBE(TcpStream);
return false; return false;
default: default:
throw new NotImplementedException(result.ToString()); throw new NotImplementedException(result.ToString());
@ -831,7 +831,22 @@ namespace skyscraper5.Skyscraper.IO.RemoteStreamReader
public bool RFScan2(uint freq, STD_TYPE std, ref double pRFLevel) public bool RFScan2(uint freq, STD_TYPE std, ref double pRFLevel)
{ {
throw new NotImplementedException(); TcpStream.WriteUInt32BE((uint)RemoteStreamReaderConstants.REQUEST_RF_SCAN_2);
TcpStream.WriteUInt32BE(freq);
TcpStream.WriteInt32BE((int)std);
TcpStream.Flush();
RemoteStreamReaderConstants result = (RemoteStreamReaderConstants)TcpStream.ReadUInt32BE();
switch(result)
{
case RemoteStreamReaderConstants.COMMAND_SUCCESSFUL:
pRFLevel = TcpStream.ReadDoubleBE();
return true;
case RemoteStreamReaderConstants.COMMAND_FAILED:
return false;
default:
throw new NotImplementedException(result.ToString());
}
} }
public bool AirScan(int freq_start, int freq_stop, uint step, uint bandwidth, int std, IntPtr pSearchResult, ref int pTpNum, AirScanCallback lpFunc) public bool AirScan(int freq_start, int freq_stop, uint step, uint bandwidth, int std, IntPtr pSearchResult, ref int pTpNum, AirScanCallback lpFunc)

View File

@ -40,6 +40,7 @@
REQUEST_IQ_SCAN, REQUEST_IQ_SCAN,
REQUEST_GET_SIGNAL_EX_EX, REQUEST_GET_SIGNAL_EX_EX,
REQUEST_SKYSCRAPER_ENGINE_NAME, REQUEST_SKYSCRAPER_ENGINE_NAME,
REQUEST_SKYSCRAPER_ENGINE_VERSION REQUEST_SKYSCRAPER_ENGINE_VERSION,
REQUEST_RF_SCAN_2
} }
} }

View File

@ -190,7 +190,7 @@ namespace skyscraper5.Skyscraper.IO
return result; return result;
} }
public static double ReadDouble(this Stream stream) public static double ReadDoubleLE(this Stream stream)
{ {
byte[] buffer = new byte[8]; byte[] buffer = new byte[8];
if (stream.Read(buffer, 0, 8) != 8) if (stream.Read(buffer, 0, 8) != 8)
@ -200,6 +200,16 @@ namespace skyscraper5.Skyscraper.IO
return BitConverter.ToDouble(buffer, 0); return BitConverter.ToDouble(buffer, 0);
} }
public static double ReadDoubleBE(this Stream stream)
{
byte[] buffer = new byte[8];
if (stream.Read(buffer, 0, 8) != 8)
throw new EndOfStreamException();
if (BitConverter.IsLittleEndian)
Array.Reverse(buffer, 0, 8);
return BitConverter.ToDouble(buffer, 0);
}
public static void WriteUInt8(this Stream stream, byte value) public static void WriteUInt8(this Stream stream, byte value)
{ {
byte[] buffer = new byte[1]; byte[] buffer = new byte[1];

View File

@ -152,7 +152,7 @@ namespace skyscraper5.Skyscraper.Net.Sockets
return buffer[0]; return buffer[0];
} }
public static void WriteDouble(this NetworkStream stream, double value) public static void WriteDoubleBE(this NetworkStream stream, double value)
{ {
byte[] buffer = BitConverter.GetBytes(value); byte[] buffer = BitConverter.GetBytes(value);
if (BitConverter.IsLittleEndian) if (BitConverter.IsLittleEndian)
@ -160,7 +160,7 @@ namespace skyscraper5.Skyscraper.Net.Sockets
stream.Write(buffer, 0, 8); stream.Write(buffer, 0, 8);
} }
public static double ReadDouble(this NetworkStream stream) public static double ReadDoubleBE(this NetworkStream stream)
{ {
byte[] buffer = new byte[8]; byte[] buffer = new byte[8];
if (stream.Read(buffer,0,8) != 8) if (stream.Read(buffer,0,8) != 8)
@ -170,7 +170,7 @@ namespace skyscraper5.Skyscraper.Net.Sockets
return BitConverter.ToDouble(buffer, 0); return BitConverter.ToDouble(buffer, 0);
} }
public static void WriteFloat(this NetworkStream stream, float value) public static void WriteFloatBE(this NetworkStream stream, float value)
{ {
byte[] buffer = BitConverter.GetBytes(value); byte[] buffer = BitConverter.GetBytes(value);
if (BitConverter.IsLittleEndian) if (BitConverter.IsLittleEndian)
@ -178,7 +178,7 @@ namespace skyscraper5.Skyscraper.Net.Sockets
stream.Write(buffer, 0, 4); stream.Write(buffer, 0, 4);
} }
public static float ReadFloat(this NetworkStream stream) public static float ReadFloatBE(this NetworkStream stream)
{ {
byte[] buffer = new byte[4]; byte[] buffer = new byte[4];
if (stream.Read(buffer, 0, 4) != 4) if (stream.Read(buffer, 0, 4) != 4)