2020-09-17 15:53:52 +08:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <cstdint>
|
|
|
|
#include "Protocol.hpp"
|
|
|
|
|
|
|
|
namespace HW {
|
|
|
|
|
2020-09-27 05:34:31 +08:00
|
|
|
static constexpr uint32_t ADCSamplerate = 800000;
|
2020-09-20 16:13:06 +08:00
|
|
|
static constexpr uint32_t IF1 = 60000000;
|
2020-09-17 21:51:20 +08:00
|
|
|
static constexpr uint32_t IF2 = 250000;
|
2020-09-20 16:13:06 +08:00
|
|
|
static constexpr uint32_t LO1_minFreq = 25000000;
|
|
|
|
static constexpr uint32_t MaxSamples = 130944;
|
2020-09-27 05:34:31 +08:00
|
|
|
static constexpr uint32_t MinSamples = 16;
|
2020-09-20 16:13:06 +08:00
|
|
|
static constexpr uint32_t PLLRef = 100000000;
|
2020-09-27 05:34:31 +08:00
|
|
|
static constexpr uint16_t MaxPoints = 4501;
|
|
|
|
|
|
|
|
static constexpr Protocol::DeviceLimits Limits = {
|
|
|
|
.minFreq = 1000000,
|
|
|
|
.maxFreq = 6000000000,
|
|
|
|
.minIFBW = ADCSamplerate / MaxSamples,
|
|
|
|
.maxIFBW = ADCSamplerate / MinSamples,
|
|
|
|
.maxPoints = MaxPoints,
|
|
|
|
.cdbm_min = -4000,
|
|
|
|
.cdbm_max = -1000,
|
|
|
|
.minRBW = (uint32_t) (ADCSamplerate * 2.23f / MaxSamples),
|
|
|
|
.maxRBW = (uint32_t) (ADCSamplerate * 2.23f / MinSamples),
|
|
|
|
};
|
2020-09-17 21:51:20 +08:00
|
|
|
|
2020-09-17 15:53:52 +08:00
|
|
|
enum class Mode {
|
|
|
|
Idle,
|
|
|
|
Manual,
|
|
|
|
VNA,
|
|
|
|
SA,
|
|
|
|
};
|
|
|
|
|
2020-09-17 21:51:20 +08:00
|
|
|
using WorkRequest = void (*)(void);
|
|
|
|
|
|
|
|
bool Init(WorkRequest wr);
|
2020-09-17 15:53:52 +08:00
|
|
|
void SetMode(Mode mode);
|
|
|
|
void SetIdle();
|
2020-09-17 21:51:20 +08:00
|
|
|
void Work();
|
2020-09-17 15:53:52 +08:00
|
|
|
|
|
|
|
bool GetTemps(uint8_t *source, uint8_t *lo);
|
|
|
|
void fillDeviceInfo(Protocol::DeviceInfo *info);
|
|
|
|
namespace Ref {
|
|
|
|
bool available();
|
|
|
|
// reference won't change until update is called
|
|
|
|
void set(Protocol::ReferenceSettings s);
|
|
|
|
void update();
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|