New spyserver source

This commit is contained in:
Ryzerth
2021-07-19 04:52:13 +02:00
parent 8d3557268f
commit 79e2747aed
9 changed files with 470 additions and 489 deletions

View File

@@ -1,6 +1,10 @@
/*
SPY Server protocol structures and constants
Copyright (C) 2017 Youssef Touil youssef@live.com
Corrections by Ryzerth.
*/
@@ -19,170 +23,126 @@ Copyright (C) 2017 Youssef Touil youssef@live.com
#define SPYSERVER_MIN_FFT_DB_RANGE (10)
#define SPYSERVER_MAX_FFT_DB_OFFSET (100)
enum DeviceType
{
DEVICE_INVALID = 0,
DEVICE_AIRSPY_ONE = 1,
DEVICE_AIRSPY_HF = 2,
DEVICE_RTLSDR = 3,
enum SpyServerDeviceType {
SPYSERVER_DEVICE_INVALID = 0,
SPYSERVER_DEVICE_AIRSPY_ONE = 1,
SPYSERVER_DEVICE_AIRSPY_HF = 2,
SPYSERVER_DEVICE_RTLSDR = 3,
};
enum CommandType
{
CMD_HELLO = 0,
CMD_GET_SETTING = 1,
CMD_SET_SETTING = 2,
CMD_PING = 3,
enum SpyServerCommandType {
SPYSERVER_CMD_HELLO = 0,
SPYSERVER_CMD_SET_SETTING = 2,
SPYSERVER_CMD_PING = 3,
};
enum SettingType
{
SETTING_STREAMING_MODE = 0,
SETTING_STREAMING_ENABLED = 1,
SETTING_GAIN = 2,
enum SpyServerSettingType {
SPYSERVER_SETTING_STREAMING_MODE = 0,
SPYSERVER_SETTING_STREAMING_ENABLED = 1,
SPYSERVER_SETTING_GAIN = 2,
SETTING_IQ_FORMAT = 100, // 0x64
SETTING_IQ_FREQUENCY = 101, // 0x65
SETTING_IQ_DECIMATION = 102, // 0x66
SETTING_IQ_DIGITAL_GAIN = 103, // 0x67
SPYSERVER_SETTING_IQ_FORMAT = 100, // 0x64
SPYSERVER_SETTING_IQ_FREQUENCY = 101, // 0x65
SPYSERVER_SETTING_IQ_DECIMATION = 102, // 0x66
SPYSERVER_SETTING_IQ_DIGITAL_GAIN = 103, // 0x67
SETTING_FFT_FORMAT = 200, // 0xc8
SETTING_FFT_FREQUENCY = 201, // 0xc9
SETTING_FFT_DECIMATION = 202, // 0xca
SETTING_FFT_DB_OFFSET = 203, // 0xcb
SETTING_FFT_DB_RANGE = 204, // 0xcc
SETTING_FFT_DISPLAY_PIXELS = 205, // 0xcd
SPYSERVER_SETTING_FFT_FORMAT = 200, // 0xc8
SPYSERVER_SETTING_FFT_FREQUENCY = 201, // 0xc9
SPYSERVER_SETTING_FFT_DECIMATION = 202, // 0xca
SPYSERVER_SETTING_FFT_DB_OFFSET = 203, // 0xcb
SPYSERVER_SETTING_FFT_DB_RANGE = 204, // 0xcc
SPYSERVER_SETTING_FFT_DISPLAY_PIXELS = 205, // 0xcd
};
enum StreamType
{
STREAM_TYPE_STATUS = 0,
STREAM_TYPE_IQ = 1,
STREAM_TYPE_AF = 2,
STREAM_TYPE_FFT = 4,
enum SpyServerStreamType {
SPYSERVER_STREAM_TYPE_STATUS = 0,
SPYSERVER_STREAM_TYPE_IQ = 1,
SPYSERVER_STREAM_TYPE_AF = 2,
SPYSERVER_STREAM_TYPE_FFT = 4,
};
enum StreamingMode
{
STREAM_MODE_IQ_ONLY = STREAM_TYPE_IQ, // 0x01
STREAM_MODE_AF_ONLY = STREAM_TYPE_AF, // 0x02
STREAM_MODE_FFT_ONLY = STREAM_TYPE_FFT, // 0x04
STREAM_MODE_FFT_IQ = STREAM_TYPE_FFT | STREAM_TYPE_IQ, // 0x05
STREAM_MODE_FFT_AF = STREAM_TYPE_FFT | STREAM_TYPE_AF, // 0x06
enum SpyServerStreamingMode {
SPYSERVER_STREAM_MODE_IQ_ONLY = SPYSERVER_STREAM_TYPE_IQ, // 0x01
SPYSERVER_STREAM_MODE_AF_ONLY = SPYSERVER_STREAM_TYPE_AF, // 0x02
SPYSERVER_STREAM_MODE_FFT_ONLY = SPYSERVER_STREAM_TYPE_FFT, // 0x04
SPYSERVER_STREAM_MODE_FFT_IQ = SPYSERVER_STREAM_TYPE_FFT | SPYSERVER_STREAM_TYPE_IQ, // 0x05
SPYSERVER_STREAM_MODE_FFT_AF = SPYSERVER_STREAM_TYPE_FFT | SPYSERVER_STREAM_TYPE_AF, // 0x06
};
enum StreamFormat
{
STREAM_FORMAT_INVALID = 0,
STREAM_FORMAT_UINT8 = 1,
STREAM_FORMAT_INT16 = 2,
STREAM_FORMAT_INT24 = 3,
STREAM_FORMAT_FLOAT = 4,
STREAM_FORMAT_DINT4 = 5,
enum SpyServerStreamFormat {
SPYSERVER_STREAM_FORMAT_INVALID = 0,
SPYSERVER_STREAM_FORMAT_UINT8 = 1,
SPYSERVER_STREAM_FORMAT_INT16 = 2,
SPYSERVER_STREAM_FORMAT_INT24 = 3,
SPYSERVER_STREAM_FORMAT_FLOAT = 4,
SPYSERVER_STREAM_FORMAT_DINT4 = 5,
};
enum MessageType
{
MSG_TYPE_DEVICE_INFO = 0,
MSG_TYPE_CLIENT_SYNC = 1,
MSG_TYPE_PONG = 2,
MSG_TYPE_READ_SETTING = 3,
enum SpyServerMessageType {
SPYSERVER_MSG_TYPE_DEVICE_INFO = 0,
SPYSERVER_MSG_TYPE_CLIENT_SYNC = 1,
SPYSERVER_MSG_TYPE_PONG = 2,
SPYSERVER_MSG_TYPE_READ_SETTING = 3,
MSG_TYPE_UINT8_IQ = 100, // 0x64
MSG_TYPE_INT16_IQ = 101, // 0x65
MSG_TYPE_INT24_IQ = 102, // 0x66
MSG_TYPE_FLOAT_IQ = 103, // 0x67
SPYSERVER_MSG_TYPE_UINT8_IQ = 100, // 0x64
SPYSERVER_MSG_TYPE_INT16_IQ = 101, // 0x65
SPYSERVER_MSG_TYPE_INT24_IQ = 102, // 0x66
SPYSERVER_MSG_TYPE_FLOAT_IQ = 103, // 0x67
MSG_TYPE_UINT8_AF = 200, // 0xc8
MSG_TYPE_INT16_AF = 201, // 0xc9
MSG_TYPE_INT24_AF = 202, // 0xca
MSG_TYPE_FLOAT_AF = 203, // 0xcb
SPYSERVER_MSG_TYPE_UINT8_AF = 200, // 0xc8
SPYSERVER_MSG_TYPE_INT16_AF = 201, // 0xc9
SPYSERVER_MSG_TYPE_INT24_AF = 202, // 0xca
SPYSERVER_MSG_TYPE_FLOAT_AF = 203, // 0xcb
MSG_TYPE_DINT4_FFT = 300, //0x12C
MSG_TYPE_UINT8_FFT = 301, //0x12D
SPYSERVER_MSG_TYPE_DINT4_FFT = 300, //0x12C
SPYSERVER_MSG_TYPE_UINT8_FFT = 301, //0x12D
};
#ifdef _WIN32
#define __attribute__(x)
#pragma pack(push, 1)
#endif
struct SpyServerClientHandshake {
uint32_t ProtocolVersion;
};
struct ClientHandshake
{
uint32_t ProtocolVersion;
// SDR# doesn't seem to send this
//uint32_t ClientNameLength;
}__attribute__((packed));
struct SpyServerCommandHeader {
uint32_t CommandType;
uint32_t BodySize;
};
struct CommandHeader
{
uint32_t CommandType;
uint32_t BodySize;
}__attribute__((packed));
struct SpyServerSettingTarget {
uint32_t Setting;
uint32_t Value;
};
struct SettingTarget
{
// Again, not used
//uint32_t StreamType;
uint32_t SettingType;
}__attribute__((packed));
struct SpyServerMessageHeader {
uint32_t ProtocolID;
uint32_t MessageType;
uint32_t StreamType;
uint32_t SequenceNumber;
uint32_t BodySize;
};
struct MessageHeader
{
uint32_t ProtocolID;
uint32_t MessageType;
uint32_t StreamType;
uint32_t SequenceNumber;
uint32_t BodySize;
}__attribute__((packed));
struct SpyServerDeviceInfo {
uint32_t DeviceType;
uint32_t DeviceSerial;
uint32_t MaximumSampleRate;
uint32_t MaximumBandwidth;
uint32_t DecimationStageCount;
uint32_t GainStageCount;
uint32_t MaximumGainIndex;
uint32_t MinimumFrequency;
uint32_t MaximumFrequency;
uint32_t Resolution;
uint32_t MinimumIQDecimation;
uint32_t ForcedIQFormat;
};
struct DeviceInfo
{
uint32_t DeviceType;
uint32_t DeviceSerial;
uint32_t MaximumSampleRate;
uint32_t MaximumBandwidth;
uint32_t DecimationStageCount;
uint32_t GainStageCount;
uint32_t MaximumGainIndex;
uint32_t MinimumFrequency;
uint32_t MaximumFrequency;
uint32_t Resolution;
uint32_t MinimumIQDecimation;
uint32_t ForcedIQFormat;
}__attribute__((packed));
struct ClientSync
{
uint32_t CanControl;
uint32_t Gain;
uint32_t DeviceCenterFrequency;
uint32_t IQCenterFrequency;
uint32_t FFTCenterFrequency;
uint32_t MinimumIQCenterFrequency;
uint32_t MaximumIQCenterFrequency;
uint32_t MinimumFFTCenterFrequency;
uint32_t MaximumFFTCenterFrequency;
}__attribute__((packed));
struct ComplexInt16
{
int16_t real;
int16_t imag;
}__attribute__((packed));
struct ComplexUInt8
{
uint8_t real;
uint8_t imag;
}__attribute__((packed));
#ifdef _WIN32
#pragma pack(pop)
#endif
enum ParserPhase {
AcquiringHeader,
ReadingData
struct SpyServerClientSync {
uint32_t CanControl;
uint32_t Gain;
uint32_t DeviceCenterFrequency;
uint32_t IQCenterFrequency;
uint32_t FFTCenterFrequency;
uint32_t MinimumIQCenterFrequency;
uint32_t MaximumIQCenterFrequency;
uint32_t MinimumFFTCenterFrequency;
uint32_t MaximumFFTCenterFrequency;
};