mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-11-11 02:46:12 -05:00
commit
5b05b13c5d
@ -148,7 +148,7 @@ static int runQtApplication(int argc, char* argv[], qtwebapp::LoggerWithFile *lo
|
||||
#endif
|
||||
|
||||
#ifdef ANDROID
|
||||
// Default sized sliders can be hard to move using touch GUIs, so increase szie
|
||||
// Default sized sliders can be hard to move using touch GUIs, so increase size
|
||||
// FIXME: How can we do a double border around the handle, as Fusion style seems to use?
|
||||
// Dialog borders are hard to see as is (perhaps as Android doesn't have a title bar), so use same color as for MDI
|
||||
qApp->setStyleSheet("QSlider {min-height: 20px; } "
|
||||
@ -189,7 +189,7 @@ static int runQtApplication(int argc, char* argv[], qtwebapp::LoggerWithFile *lo
|
||||
{
|
||||
// Disable log on console, so we can more easily see device list
|
||||
logger->setConsoleMinMessageLevel(QtFatalMsg);
|
||||
// Don't pass logger to MainWindow, otherwise it can reenable log output
|
||||
// Don't pass logger to MainWindow, otherwise it can re-enable log output
|
||||
logger = nullptr;
|
||||
}
|
||||
|
||||
@ -217,7 +217,7 @@ int main(int argc, char* argv[])
|
||||
// Request OpenGL 3.3 context, needed for glspectrum and 3D Map feature
|
||||
// Note that Mac only supports CoreProfile, so any deprecated OpenGL 2 features
|
||||
// will not work. Because of this, we have two versions of the shaders:
|
||||
// OpenGL 2 versions for compatiblity with older drivers and OpenGL 3.3
|
||||
// OpenGL 2 versions for compatibility with older drivers and OpenGL 3.3
|
||||
// versions for newer drivers
|
||||
#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
|
||||
QGLFormat fmt;
|
||||
|
@ -100,7 +100,7 @@ static int runQtApplication(int argc, char* argv[], qtwebapp::LoggerWithFile *lo
|
||||
{
|
||||
// Disable log on console, so we can more easily see device list
|
||||
logger->setConsoleMinMessageLevel(QtFatalMsg);
|
||||
// Don't pass logger to MainServer, otherwise it can reenable log output
|
||||
// Don't pass logger to MainServer, otherwise it can re-enable log output
|
||||
logger = nullptr;
|
||||
}
|
||||
|
||||
|
@ -40,7 +40,7 @@ bool DeviceUSRPParams::open(const QString &deviceStr, bool channelNumOnly)
|
||||
qDebug() << "DeviceUSRPParams::open: m_nbRxChannels: " << m_nbRxChannels << " m_nbTxChannels: " << m_nbTxChannels;
|
||||
|
||||
// Speed up program initialisation, by not getting all properties
|
||||
// If we could find out number of channles without ::make ing the device
|
||||
// If we could find out number of channels without ::make ing the device
|
||||
// that would be even better
|
||||
if (!channelNumOnly)
|
||||
{
|
||||
|
@ -81,7 +81,7 @@ void fcdClose(hid_device *phd);
|
||||
FCD_MODE_ENUM fcdGetMode(hid_device *phd);
|
||||
|
||||
/** \brief Get FCD firmware version as string.
|
||||
* \param str The returned vesion number as a 0 terminated string (must be pre-allocated)
|
||||
* \param str The returned version number as a 0 terminated string (must be pre-allocated)
|
||||
* \return The current FCD mode.
|
||||
* \sa FCD_MODE_ENUM
|
||||
*/
|
||||
@ -183,7 +183,7 @@ FCD_MODE_ENUM fcdBlWriteFirmware(hid_device *phd, char *pc, int64_t n64Size);
|
||||
/** \brief Verify firmware in FCd flash.
|
||||
* \param pc Pointer to firmware data to verify against.
|
||||
* \param n64Size Size of the data in pc.
|
||||
* \return The FCD_MODE_BL if verification was succesful.
|
||||
* \return The FCD_MODE_BL if verification was successful.
|
||||
*
|
||||
* This function verifies the firmware currently in the FCd flash against the firmware
|
||||
* image pointed to by pc. The function return FCD_MODE_BL if the verification is OK and
|
||||
|
@ -652,7 +652,7 @@ void FT8::go(int npasses)
|
||||
// in fractions of bins in off and hz.
|
||||
//
|
||||
|
||||
// just do this once, re-use for every fractional fft_shift
|
||||
// just do this once, reuse for every fractional fft_shift
|
||||
// and down_v7_f() to 200 sps.
|
||||
std::vector<std::complex<float>> bins = fftEngine_->one_fft(
|
||||
samples_, 0, samples_.size());
|
||||
@ -2273,7 +2273,7 @@ std::vector<float> FT8::extract_bits(const std::vector<int> &syms, const std::ve
|
||||
return bits;
|
||||
}
|
||||
|
||||
// decode successive pairs of symbols. exploits the likelyhood
|
||||
// decode successive pairs of symbols. exploits the likelihood
|
||||
// that they have the same phase, by summing the complex
|
||||
// correlations for each possible pair and using the max.
|
||||
void FT8::soft_decode_pairs(
|
||||
@ -2573,7 +2573,7 @@ void FT8::soft_decode_triples(
|
||||
}
|
||||
|
||||
//
|
||||
// given log likelyhood for each bit, try LDPC and OSD decoders.
|
||||
// given log likelihood for each bit, try LDPC and OSD decoders.
|
||||
// on success, puts corrected 174 bits into a174[].
|
||||
//
|
||||
int FT8::decode(const float ll174[], int a174[], FT8Params& _params, int use_osd, std::string &comment)
|
||||
|
@ -264,14 +264,14 @@ public:
|
||||
|
||||
FT8Params& getParams() { return params; }
|
||||
//
|
||||
// given log likelyhood for each bit, try LDPC and OSD decoders.
|
||||
// given log likelihood for each bit, try LDPC and OSD decoders.
|
||||
// on success, puts corrected 174 bits into a174[].
|
||||
//
|
||||
static int decode(const float ll174[], int a174[], FT8Params& params, int use_osd, std::string &comment);
|
||||
// encode a 77 bit message into a 174 bit payload
|
||||
// adds the 14 bit CRC to obtain 91 bits
|
||||
// apply (174, 91) generator mastrix to obtain the 83 parity bits
|
||||
// append the 83 bits to the 91 bits messag e+ crc to obbain the 174 bit payload
|
||||
// append the 83 bits to the 91 bits message e+ crc to obtain the 174 bit payload
|
||||
static void encode(int a174[], int s77[]);
|
||||
|
||||
//
|
||||
@ -490,7 +490,7 @@ private:
|
||||
// scaled by str.
|
||||
//
|
||||
std::vector<float> extract_bits(const std::vector<int> &syms, const std::vector<float> str);
|
||||
// decode successive pairs of symbols. exploits the likelyhood
|
||||
// decode successive pairs of symbols. exploits the likelihood
|
||||
// that they have the same phase, by summing the complex
|
||||
// correlations for each possible pair and using the max.
|
||||
void soft_decode_pairs(
|
||||
|
@ -36,7 +36,7 @@ public:
|
||||
static int osd_decode(float codeword[174], int depth, int out[91], int *out_depth);
|
||||
};
|
||||
|
||||
} // namepsace FT8
|
||||
} // namespace FT8
|
||||
|
||||
#endif // osd_h
|
||||
|
||||
|
@ -388,7 +388,7 @@ std::string Packing::unpack_5(int a77[], std::string& call1str, std::string& cal
|
||||
hashes_mu.unlock();
|
||||
call2str = std::string(ocall);
|
||||
|
||||
// mext bit is alway for R
|
||||
// mext bit is always for R
|
||||
int i = 12+ 22 +1;
|
||||
// r3
|
||||
int rst = un64(a77, i, 3);
|
||||
|
@ -249,7 +249,7 @@ void HttpConnectionHandler::read()
|
||||
}
|
||||
|
||||
// In case of HTTP 1.0 protocol add the Connection:close header.
|
||||
// This ensures that the HttpResponse does not activate chunked mode, which is not spported by HTTP 1.0.
|
||||
// This ensures that the HttpResponse does not activate chunked mode, which is not supported by HTTP 1.0.
|
||||
else
|
||||
{
|
||||
bool http1_0=QString::compare(currentRequest->getVersion(),"HTTP/1.0",Qt::CaseInsensitive)==0;
|
||||
|
@ -19,7 +19,7 @@ HttpListener::HttpListener(QSettings* settings, HttpRequestHandler* requestHandl
|
||||
pool = 0;
|
||||
this->settings = settings;
|
||||
this->requestHandler = requestHandler;
|
||||
// Reqister type of socketDescriptor for signal/slot handling
|
||||
// Register type of socketDescriptor for signal/slot handling
|
||||
qRegisterMetaType<tSocketDescriptor>("tSocketDescriptor");
|
||||
// Start listening
|
||||
listen();
|
||||
@ -33,7 +33,7 @@ HttpListener::HttpListener(const HttpListenerSettings& settings, HttpRequestHand
|
||||
this->settings = 0;
|
||||
listenerSettings = settings;
|
||||
this->requestHandler = requestHandler;
|
||||
// Reqister type of socketDescriptor for signal/slot handling
|
||||
// Register type of socketDescriptor for signal/slot handling
|
||||
qRegisterMetaType<tSocketDescriptor>("tSocketDescriptor");
|
||||
// Start listening
|
||||
listen();
|
||||
|
@ -73,7 +73,7 @@ public:
|
||||
virtual ~HttpListener();
|
||||
|
||||
/**
|
||||
Restart listeing after close().
|
||||
Restart listening after close().
|
||||
*/
|
||||
void listen();
|
||||
|
||||
@ -108,7 +108,7 @@ private:
|
||||
/** Configuration settings for the HTTP server as a structure */
|
||||
HttpListenerSettings listenerSettings;
|
||||
|
||||
/** Point to the reuqest handler which processes all HTTP requests */
|
||||
/** Point to the request handler which processes all HTTP requests */
|
||||
HttpRequestHandler* requestHandler;
|
||||
|
||||
/** Pool of connection handlers */
|
||||
|
@ -425,7 +425,7 @@ void HttpRequest::parseMultiPartFile()
|
||||
while (!tempFile->atEnd() && !finished && !tempFile->error())
|
||||
{
|
||||
#ifdef SUPERVERBOSE
|
||||
qDebug("HttpRequest::parseMultiPartFile: reading multpart headers");
|
||||
qDebug("HttpRequest::parseMultiPartFile: reading multipart headers");
|
||||
#endif
|
||||
QByteArray fieldName;
|
||||
QByteArray fileName;
|
||||
@ -464,7 +464,7 @@ void HttpRequest::parseMultiPartFile()
|
||||
}
|
||||
|
||||
#ifdef SUPERVERBOSE
|
||||
qDebug("HttpRequest::parseMultiPartFile: reading multpart data");
|
||||
qDebug("HttpRequest::parseMultiPartFile: reading multipart data");
|
||||
#endif
|
||||
QTemporaryFile* uploadedFile=0;
|
||||
QByteArray fieldValue;
|
||||
|
@ -26,7 +26,7 @@ namespace qtwebapp {
|
||||
from a TCP socket and provides getters for the individual parts
|
||||
of the request.
|
||||
<p>
|
||||
The follwing config settings are required:
|
||||
The following config settings are required:
|
||||
<code><pre>
|
||||
maxRequestSize=16000
|
||||
maxMultiPartSize=1000000
|
||||
@ -73,7 +73,7 @@ public:
|
||||
void readFromSocket(QTcpSocket* socket);
|
||||
|
||||
/**
|
||||
Get the status of this reqeust.
|
||||
Get the status of this request.
|
||||
@see RequestStatus
|
||||
*/
|
||||
RequestStatus getStatus() const;
|
||||
|
@ -48,7 +48,7 @@ namespace qtwebapp {
|
||||
|
||||
@see set() describes how to set logger variables
|
||||
@see LogMessage for a description of the message decoration.
|
||||
@see Logger for a descrition of the buffer.
|
||||
@see Logger for a description of the buffer.
|
||||
*/
|
||||
|
||||
class LOGGING_API FileLogger : public Logger {
|
||||
|
@ -66,7 +66,7 @@ public:
|
||||
Constructor.
|
||||
@param msgFormat Format of the decoration, e.g. "{timestamp} {type} thread={thread}: {msg}"
|
||||
@param timestampFormat Format of timestamp, e.g. "yyyy-MM-dd HH:mm:ss.zzz"
|
||||
@param minLevel Minimum severity that genertes an output (0=debug, 1=warning, 2=critical, 3=fatal).
|
||||
@param minLevel Minimum severity that generates an output (0=debug, 1=warning, 2=critical, 3=fatal).
|
||||
@param bufferSize Size of the backtrace buffer, number of messages per thread. 0=disabled.
|
||||
@param parent Parent object
|
||||
@see LogMessage for a description of the message decoration.
|
||||
|
@ -38,7 +38,7 @@ namespace modemm17 {
|
||||
// 0.001661182944400927, 0.002699564567597445, 0.0031468394550958484, 0.0029364388513841593, 0.0
|
||||
// };
|
||||
|
||||
// Generated using scikit-commpy N = 150, aplha = 0.5, Ts = 1/4800 s, Fs = 48000 Hz
|
||||
// Generated using scikit-commpy N = 150, alpha = 0.5, Ts = 1/4800 s, Fs = 48000 Hz
|
||||
const std::array<float, 150> M17Demodulator::rrc_taps = std::array<float, 150>{
|
||||
-8.434122e-04, +3.898184e-04, +1.628891e-03, +2.576674e-03, +2.987740e-03,
|
||||
+2.729505e-03, +1.820181e-03, +4.333001e-04, -1.134215e-03, -2.525029e-03,
|
||||
|
@ -50,7 +50,7 @@ const std::array<uint8_t, 2> M17Modulator::EOT_SYNC = {0x55, 0x5D}; // ?
|
||||
// 0.001661182944400927, 0.002699564567597445, 0.0031468394550958484, 0.0029364388513841593, 0.0 // 150
|
||||
// };
|
||||
|
||||
// Generated using scikit-commpy N = 150, aplha = 0.5, Ts = 1/4800 s, Fs = 48000 Hz
|
||||
// Generated using scikit-commpy N = 150, alpha = 0.5, Ts = 1/4800 s, Fs = 48000 Hz
|
||||
/*
|
||||
import sys
|
||||
import commpy.filters
|
||||
|
@ -71,7 +71,7 @@ public:
|
||||
|
||||
/**
|
||||
* Construct the DFT with an array of frequencies. These frequencies
|
||||
* should be less than @tparam SampleRate / 2 and a mulitple of
|
||||
* should be less than @tparam SampleRate / 2 and a multiple of
|
||||
* @tparam SampleRate / @tparam N. No validation is performed on
|
||||
* these frequencies passed to the constructor.
|
||||
*/
|
||||
|
@ -32,7 +32,7 @@ public:
|
||||
/// \brief Set all data (yaw, alt, height)
|
||||
///
|
||||
/// \param azPos - forward (positive angles side relative to antennas direction) azimuth (in degrees)
|
||||
/// \param azNeg - reverse (negatve angles side relative to antennas direction) azimuth (in degrees)
|
||||
/// \param azNeg - reverse (negative angles side relative to antennas direction) azimuth (in degrees)
|
||||
/// \param azAnt - antennas azimuth from 1 (connected to stream 0) to 2 (connected to stream 1)
|
||||
///
|
||||
void setData(double azPos, double azNeg, double azAnt) {
|
||||
|
@ -126,7 +126,7 @@ bool ADSBDemodBaseband::handleMessage(const Message& cmd)
|
||||
QMutexLocker mutexLocker(&m_mutex);
|
||||
DSPSignalNotification& notif = (DSPSignalNotification&) cmd;
|
||||
qDebug() << "ADSBDemodBaseband::handleMessage: DSPSignalNotification: basebandSampleRate: " << notif.getSampleRate();
|
||||
m_sampleFifo.setSize(SampleSinkFifo::getSizePolicy(8*notif.getSampleRate())); // Need a large FIFO otherwise we get overflows - revist after better upsampling
|
||||
m_sampleFifo.setSize(SampleSinkFifo::getSizePolicy(8*notif.getSampleRate())); // Need a large FIFO otherwise we get overflows - revisit after better upsampling
|
||||
m_channelizer->setBasebandSampleRate(notif.getSampleRate());
|
||||
m_sink.applyChannelSettings(m_channelizer->getChannelSampleRate(), m_channelizer->getChannelFrequencyOffset());
|
||||
|
||||
|
@ -1231,7 +1231,7 @@ void ADSBDemodGUI::callsignToFlight(Aircraft *aircraft)
|
||||
if (!aircraft->m_callsign.isEmpty())
|
||||
{
|
||||
QRegularExpression flightNoExp("^[A-Z]{2,3}[0-9]{1,4}$");
|
||||
// Airlines line BA add a single charater suffix that can be stripped
|
||||
// Airlines line BA add a single character suffix that can be stripped
|
||||
// If the suffix is two characters, then it typically means a digit
|
||||
// has been replaced which I don't know how to guess
|
||||
// E.g Easyjet might use callsign EZY67JQ for flight EZY6267
|
||||
@ -1424,7 +1424,7 @@ void ADSBDemodGUI::handleADSB(
|
||||
|
||||
if (wasOnSurface != aircraft->m_onSurface)
|
||||
{
|
||||
// Can't mix CPR values used on surface and those that are airbourne
|
||||
// Can't mix CPR values used on surface and those that are airborne
|
||||
aircraft->m_cprValid[0] = false;
|
||||
aircraft->m_cprValid[1] = false;
|
||||
}
|
||||
@ -1516,7 +1516,7 @@ void ADSBDemodGUI::handleADSB(
|
||||
}
|
||||
else if (((tc >= 9) && (tc <= 18)) || ((tc >= 20) && (tc <= 22)))
|
||||
{
|
||||
// Airbourne position (9-18 baro, 20-22 GNSS)
|
||||
// Airborne position (9-18 baro, 20-22 GNSS)
|
||||
int alt = ((data[5] & 0xff) << 4) | ((data[6] >> 4) & 0xf); // Altitude
|
||||
int q = (alt & 0x10) != 0;
|
||||
int n = ((alt >> 1) & 0x7f0) | (alt & 0xf); // Remove Q-bit
|
||||
@ -1631,9 +1631,9 @@ void ADSBDemodGUI::handleADSB(
|
||||
else
|
||||
{
|
||||
// Local decode using a single aircraft position + location of receiver
|
||||
// Only valid if airbourne within 180nm/333km (C.2.6.4) or 45nm for surface
|
||||
// Only valid if airborne within 180nm/333km (C.2.6.4) or 45nm for surface
|
||||
|
||||
// Caclulate latitude
|
||||
// Calculate latitude
|
||||
const double maxDeg = aircraft->m_onSurface ? 90.0 : 360.0;
|
||||
const double dLatEven = maxDeg/60.0;
|
||||
const double dLatOdd = maxDeg/59.0;
|
||||
@ -1643,7 +1643,7 @@ void ADSBDemodGUI::handleADSB(
|
||||
int j = std::floor(m_azEl.getLocationSpherical().m_latitude/dLat) + std::floor(modulus(m_azEl.getLocationSpherical().m_latitude, dLat)/dLat - aircraft->m_cprLat[f] + 0.5);
|
||||
latitude = dLat * (j + aircraft->m_cprLat[f]);
|
||||
|
||||
// Caclulate longitude
|
||||
// Calculate longitude
|
||||
double dLong;
|
||||
int latNL = cprNL(latitude);
|
||||
if (f == 0)
|
||||
@ -1678,7 +1678,7 @@ void ADSBDemodGUI::handleADSB(
|
||||
}
|
||||
else if (tc == 19)
|
||||
{
|
||||
// Airbourne velocity - BDS 0,9
|
||||
// Airborne velocity - BDS 0,9
|
||||
int st = data[4] & 0x7; // Subtype
|
||||
if ((st == 1) || (st == 2))
|
||||
{
|
||||
@ -1874,7 +1874,7 @@ void ADSBDemodGUI::handleADSB(
|
||||
|
||||
if (resetAnimation)
|
||||
{
|
||||
// Wait until after model has changed before reseting
|
||||
// Wait until after model has changed before resetting
|
||||
// otherwise animation might play on old model
|
||||
aircraft->m_gearDown = false;
|
||||
aircraft->m_flaps = 0.0;
|
||||
@ -1924,7 +1924,7 @@ void ADSBDemodGUI::decodeModeS(const QByteArray data, int df, Aircraft *aircraft
|
||||
}
|
||||
if (wasOnSurface != aircraft->m_onSurface)
|
||||
{
|
||||
// Can't mix CPR values used on surface and those that are airbourne
|
||||
// Can't mix CPR values used on surface and those that are airborne
|
||||
aircraft->m_cprValid[0] = false;
|
||||
aircraft->m_cprValid[1] = false;
|
||||
}
|
||||
@ -1985,7 +1985,7 @@ void ADSBDemodGUI::decodeModeS(const QByteArray data, int df, Aircraft *aircraft
|
||||
|
||||
void ADSBDemodGUI::decodeCommB(const QByteArray data, const QDateTime dateTime, int df, Aircraft *aircraft, bool &updatedCallsign)
|
||||
{
|
||||
// We only see downlink messages, so do not know the data format, so have to decode all posibilities
|
||||
// We only see downlink messages, so do not know the data format, so have to decode all possibilities
|
||||
// and then see which have legal values and values that are consistent with ADS-B data
|
||||
|
||||
// All IFR aircraft should support ELS (Elementary Surveillance) which includes BDS 1,0 1,7 2,0 3,0
|
||||
@ -2247,7 +2247,7 @@ void ADSBDemodGUI::decodeCommB(const QByteArray data, const QDateTime dateTime,
|
||||
int windSpeedFix = ((data[4] & 0x7) << 6) | ((data[5] >> 2) & 0x3f);
|
||||
int windSpeed = windSpeedFix; // knots
|
||||
int windDirectionFix = ((data[5] & 0x3) << 6) | ((data[6] >> 2) & 0x3f);
|
||||
int windDirection = windDirectionFix * 180.0f / 256.0f; // Degreees
|
||||
int windDirection = windDirectionFix * 180.0f / 256.0f; // Degrees
|
||||
bool windSpeedInconsistent = (windSpeed > 250.0f) || (!windSpeedStatus && ((windSpeedFix != 0) || (windDirectionFix != 0)));
|
||||
|
||||
int staticAirTemperatureFix = ((data[6] & 0x1) << 10) | ((data[7] & 0xff) << 2) | ((data[8] >> 6) & 0x3);
|
||||
@ -2884,7 +2884,7 @@ QList<SWGSDRangel::SWGMapAnimation *> * ADSBDemodGUI::animate(QDateTime dateTime
|
||||
bool debug = false;
|
||||
|
||||
// Landing gear should be down when on surface
|
||||
// Check speed in case we get a mixture of surface and airbourne positions
|
||||
// Check speed in case we get a mixture of surface and airborne positions
|
||||
// during take-off
|
||||
if ( aircraft->m_onSurface
|
||||
&& !aircraft->m_gearDown
|
||||
@ -3591,7 +3591,7 @@ void ADSBDemodGUI::on_flightInfo_clicked()
|
||||
}
|
||||
}
|
||||
|
||||
// Find highlighed aircraft on Map Feature
|
||||
// Find highlighted aircraft on Map Feature
|
||||
void ADSBDemodGUI::on_findOnMapFeature_clicked()
|
||||
{
|
||||
QModelIndexList indexList = ui->adsbData->selectionModel()->selectedRows();
|
||||
@ -3972,7 +3972,7 @@ void ADSBDemodGUI::updateChannelList()
|
||||
|
||||
ui->amDemod->blockSignals(false);
|
||||
|
||||
// If no current settting, select first channel
|
||||
// If no current setting, select first channel
|
||||
if (m_settings.m_amDemod.isEmpty())
|
||||
{
|
||||
ui->amDemod->setCurrentIndex(0);
|
||||
@ -5564,7 +5564,7 @@ void ADSBDemodGUI::on_logOpen_clicked()
|
||||
crc.calculate((const uint8_t *)bytes.data(), bytes.size()-3);
|
||||
crcCalc = crc.get();
|
||||
}
|
||||
//qDebug() << "bytes.szie " << bytes.size() << " crc " << Qt::hex << crcCalc;
|
||||
//qDebug() << "bytes.size " << bytes.size() << " crc " << Qt::hex << crcCalc;
|
||||
handleADSB(bytes, dateTime, correlation, correlation, crcCalc, false);
|
||||
if ((count > 0) && (count % 100000 == 0))
|
||||
{
|
||||
|
@ -92,7 +92,7 @@ struct Aircraft {
|
||||
Real m_latitude; // Latitude in decimal degrees
|
||||
Real m_longitude; // Longitude in decimal degrees
|
||||
int m_altitude; // Altitude in feet
|
||||
bool m_onSurface; // Indicates if on surface or airbourne
|
||||
bool m_onSurface; // Indicates if on surface or airborne
|
||||
bool m_altitudeGNSS; // Altitude is GNSS HAE (Height above WGS-84 ellipsoid) rather than barometric alitute (relative to 29.92 Hg)
|
||||
float m_heading; // Heading or track in degrees
|
||||
int m_verticalRate; // Vertical climb rate in ft/min
|
||||
@ -101,7 +101,7 @@ struct Aircraft {
|
||||
int m_squawk; // Mode-A code
|
||||
Real m_range; // Distance from station to aircraft
|
||||
Real m_azimuth; // Azimuth from station to aircraft
|
||||
Real m_elevation; // Elevation from station to aicraft
|
||||
Real m_elevation; // Elevation from station to aircraft
|
||||
QDateTime m_time; // When last updated
|
||||
|
||||
int m_selAltitude; // Selected altitude in MCP/FCU or FMS in feet
|
||||
@ -144,7 +144,7 @@ struct Aircraft {
|
||||
float m_correlation;
|
||||
MovingAverageUtil<float, double, 100> m_correlationAvg;
|
||||
|
||||
bool m_isTarget; // Are we targetting this aircraft (sending az/el to rotator)
|
||||
bool m_isTarget; // Are we targeting this aircraft (sending az/el to rotator)
|
||||
bool m_isHighlighted; // Are we highlighting this aircraft in the table and map
|
||||
bool m_showAll;
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
#include "adsbdemodnotificationdialog.h"
|
||||
|
||||
// Map main ADS-B table column numbers to combo box indicies
|
||||
// Map main ADS-B table column numbers to combo box indices
|
||||
std::vector<int> ADSBDemodNotificationDialog::m_columnMap = {
|
||||
ADSB_COL_ICAO, ADSB_COL_CALLSIGN, ADSB_COL_MODEL,
|
||||
ADSB_COL_ALTITUDE, ADSB_COL_GROUND_SPEED, ADSB_COL_RANGE,
|
||||
|
@ -175,7 +175,7 @@ void ADSBDemodSink::stopWorker()
|
||||
}
|
||||
m_worker.wait();
|
||||
// If this is called from ADSBDemod, we need to also
|
||||
// make sure baseband sink thread isnt blocked in processOneSample
|
||||
// make sure baseband sink thread isn't blocked in processOneSample
|
||||
for (int i = 0; i < m_buffers; i++)
|
||||
{
|
||||
if (m_bufferWrite[i].available() == 0)
|
||||
|
@ -93,8 +93,8 @@ private:
|
||||
const int m_buffers = 3;
|
||||
const int m_bufferSize = 200000;
|
||||
Real *m_sampleBuffer[3]; //!< Each buffer is m_bufferSize samples
|
||||
QSemaphore m_bufferWrite[3]; //!< Sempahore to control write access to the buffers
|
||||
QSemaphore m_bufferRead[3]; //!< Sempahore to control read access from the buffers
|
||||
QSemaphore m_bufferWrite[3]; //!< Semaphore to control write access to the buffers
|
||||
QSemaphore m_bufferRead[3]; //!< Semaphore to control read access from the buffers
|
||||
QDateTime m_bufferFirstSampleDateTime[3]; //!< Time for first sample in the buffer
|
||||
bool m_bufferDateTimeValid[3];
|
||||
ADSBDemodSinkWorker m_worker; //!< Worker thread that does the actual demodulation
|
||||
|
@ -127,7 +127,7 @@ void ADSBDemodSinkWorker::run()
|
||||
// (E.g: it's quite possible to receive multiple frames simultaneously, so we don't
|
||||
// want a maximum threshold for the zeros, as a weaker signal may transmit 1s in
|
||||
// a stronger signals 0 chip position. Similarly a strong signal in an adjacent
|
||||
// channel may casue AGC to reduce gain, reducing the ampltiude of an otherwise
|
||||
// channel may cause AGC to reduce gain, reducing the ampltiude of an otherwise
|
||||
// strong signal, as well as the noise floor)
|
||||
// The threshold accounts for the different number of zeros and ones in the preamble
|
||||
// If the sum of ones is exactly 0, it's probably no signal
|
||||
@ -253,7 +253,7 @@ void ADSBDemodSinkWorker::run()
|
||||
crc ^= icao;
|
||||
}
|
||||
}
|
||||
// For DF11, the last 7 bits may have an address/interogration indentifier (II)
|
||||
// For DF11, the last 7 bits may have an address/interogration identifier (II)
|
||||
// XORed in, so we ignore those bits
|
||||
if ((parity == crc) || ((df == 11) && ((parity & 0xffff80) == (crc & 0xffff80))))
|
||||
{
|
||||
|
@ -70,7 +70,7 @@ struct AISDemodSettings
|
||||
int m_messageColumnIndexes[AISDEMOD_MESSAGE_COLUMNS];//!< How the columns are ordered in the table
|
||||
int m_messageColumnSizes[AISDEMOD_MESSAGE_COLUMNS]; //!< Size of the columns in the table
|
||||
|
||||
static const int AISDEMOD_CHANNEL_SAMPLE_RATE = 57600; //!< 6x 9600 baud rate (use even multiple so Gausian filter has odd number of taps)
|
||||
static const int AISDEMOD_CHANNEL_SAMPLE_RATE = 57600; //!< 6x 9600 baud rate (use even multiple so Gaussian filter has odd number of taps)
|
||||
static const int m_scopeStreams = 9;
|
||||
|
||||
AISDemodSettings();
|
||||
|
@ -349,7 +349,7 @@ void AISDemodSink::processOneSample(Complex &ci)
|
||||
// Select signals to feed to scope
|
||||
sampleToScope(ci / SDR_RX_SCALEF, magsq, fmDemod, filt, m_rxBuf[m_rxBufIdx], corr / 100.0, thresholdMet, dcOffset, scopeCRCValid ? 1.0 : (scopeCRCInvalid ? -1.0 : 0));
|
||||
|
||||
// Send demod signal to Demod Analzyer feature
|
||||
// Send demod signal to Demod Analyzer feature
|
||||
m_demodBuffer[m_demodBufferFill++] = fmDemod * std::numeric_limits<int16_t>::max();
|
||||
|
||||
if (m_demodBufferFill >= m_demodBuffer.size())
|
||||
@ -422,7 +422,7 @@ void AISDemodSink::applySettings(const AISDemodSettings& settings, bool force)
|
||||
qDebug() << "AISDemodSink::applySettings: m_samplesPerSymbol: " << m_samplesPerSymbol << " baud " << settings.m_baud;
|
||||
m_pulseShape.create(0.5, 3, m_samplesPerSymbol);
|
||||
|
||||
// Recieve buffer, long enough for one max length message
|
||||
// Receive buffer, long enough for one max length message
|
||||
delete[] m_rxBuf;
|
||||
m_rxBufLength = AISDEMOD_MAX_BYTES*8*m_samplesPerSymbol;
|
||||
m_rxBuf = new Real[m_rxBufLength];
|
||||
|
@ -113,7 +113,7 @@ private:
|
||||
|
||||
PhaseDiscriminators m_phaseDiscri; // FM demodulator
|
||||
Gaussian<Real> m_pulseShape; // Pulse shaping filter
|
||||
Real *m_rxBuf; // Receive sample buffer, large enough for one max length messsage
|
||||
Real *m_rxBuf; // Receive sample buffer, large enough for one max length message
|
||||
int m_rxBufLength; // Size in elements in m_rxBuf
|
||||
int m_rxBufIdx; // Index in to circular buffer
|
||||
int m_rxBufCnt; // Number of valid samples in buffer
|
||||
|
@ -202,7 +202,7 @@ bool APTDemodGUI::handleMessage(const Message& message)
|
||||
}
|
||||
else
|
||||
{
|
||||
m_image = m_image.copy(0, 0, m_image.width(), m_image.height()+1); // Add a line at tne bottom
|
||||
m_image = m_image.copy(0, 0, m_image.width(), m_image.height()+1); // Add a line at the bottom
|
||||
|
||||
if (m_settings.m_flip)
|
||||
{
|
||||
|
@ -314,7 +314,7 @@ void APTDemodImageWorker::calcPixelCoords(CoordGeodetic centreCoord, double head
|
||||
}
|
||||
}
|
||||
|
||||
// Recalculate all pixel coordiantes as satTimeOffset or satYaw has changed
|
||||
// Recalculate all pixel coordinates as satTimeOffset or satYaw has changed
|
||||
void APTDemodImageWorker::recalcCoords()
|
||||
{
|
||||
if (m_sgp4)
|
||||
@ -381,7 +381,7 @@ void APTDemodImageWorker::calcCoord(int row)
|
||||
QStringList elements = m_settings.m_tle.trimmed().split("\n");
|
||||
if (elements.size() == 3)
|
||||
{
|
||||
// Initalise SGP4
|
||||
// Initialise SGP4
|
||||
Tle tle(elements[0].toStdString(), elements[1].toStdString(), elements[2].toStdString());
|
||||
m_sgp4 = new SGP4(tle);
|
||||
|
||||
@ -559,7 +559,7 @@ void APTDemodImageWorker::calcBoundingBox(double &east, double &south, double &w
|
||||
//fclose(f);
|
||||
}
|
||||
|
||||
// Project satellite image to equidistant cyclindrical projection (Plate Carree) for use on 3D Map
|
||||
// Project satellite image to equidistant cylindrical projection (Plate Carree) for use on 3D Map
|
||||
// We've previously computed lat and lon for each pixel in satellite image
|
||||
// so we just work through coords in projected image, trying to find closest pixel in satellite image
|
||||
// FIXME: How do we handle sat going over the poles?
|
||||
|
@ -71,7 +71,7 @@ struct APTDemodSettings
|
||||
bool m_hidden;
|
||||
|
||||
// The following are really working state, rather than settings
|
||||
QString m_tle; // Satelite two-line elements, from satellite tracker
|
||||
QString m_tle; // Satellite two-line elements, from satellite tracker
|
||||
QDateTime m_aosDateTime; // When decoder was started (may not be current time, if replaying old file)
|
||||
bool m_northToSouth; // Separate from flip, in case user changes it
|
||||
|
||||
|
@ -121,7 +121,7 @@ void ATVDemodSink::demod(Complex& c)
|
||||
int n_out;
|
||||
Complex *filtered;
|
||||
|
||||
n_out = m_DSBFilter->runAsym(c, &filtered, m_settings.m_atvModulation != ATVDemodSettings::ATV_LSB); // all usb except explicitely lsb
|
||||
n_out = m_DSBFilter->runAsym(c, &filtered, m_settings.m_atvModulation != ATVDemodSettings::ATV_LSB); // all usb except explicitly lsb
|
||||
|
||||
if (n_out > 0)
|
||||
{
|
||||
|
@ -100,7 +100,7 @@ private:
|
||||
|
||||
int m_channelSampleRate;
|
||||
int m_channelFrequencyOffset;
|
||||
int m_samplesPerLine; //!< number of samples per complete line (includes sync signals) - adusted value
|
||||
int m_samplesPerLine; //!< number of samples per complete line (includes sync signals) - adjusted value
|
||||
float m_samplesPerLineFrac; //!< number of samples per complete line (includes sync signals), fractional part
|
||||
ATVDemodSettings m_settings;
|
||||
int m_videoTabIndex;
|
||||
|
@ -215,7 +215,7 @@ bool RDSDecoder::frameSync(bool bit)
|
||||
return group_ready;
|
||||
}
|
||||
|
||||
////////////////////////// HELPER FUNTIONS /////////////////////////
|
||||
////////////////////////// HELPER FUNCTIONS /////////////////////////
|
||||
|
||||
void RDSDecoder::enter_sync(unsigned int sync_block_number)
|
||||
{
|
||||
|
@ -52,13 +52,13 @@ struct ChirpChatDemodSettings
|
||||
int m_inputFrequencyOffset;
|
||||
int m_bandwidthIndex;
|
||||
int m_spreadFactor;
|
||||
int m_deBits; //!< Low data rate optmize (DE) bits
|
||||
int m_deBits; //!< Low data rate optimize (DE) bits
|
||||
FFTWindow::Function m_fftWindow;
|
||||
CodingScheme m_codingScheme;
|
||||
bool m_decodeActive;
|
||||
int m_eomSquelchTenths; //!< Squelch factor to trigger end of message (/10)
|
||||
unsigned int m_nbSymbolsMax; //!< Maximum number of symbols in a payload
|
||||
bool m_autoNbSymbolsMax; //!< Set maximum number of symbols in a payload automatically using last messag value
|
||||
bool m_autoNbSymbolsMax; //!< Set maximum number of symbols in a payload automatically using last message value
|
||||
unsigned int m_preambleChirps; //!< Number of expected preamble chirps
|
||||
int m_nbParityBits; //!< Hamming parity bits (LoRa)
|
||||
int m_packetLength; //!< Payload packet length in bytes or characters (LoRa)
|
||||
|
@ -54,4 +54,4 @@ const int SIMD_WIDTH = SIZEOF_SIMD / sizeof(code_type);
|
||||
typedef SIMD<code_type, SIMD_WIDTH> simd_type;
|
||||
#endif
|
||||
|
||||
} // namepsace ldpctool
|
||||
} // namespace ldpctool
|
||||
|
@ -94,7 +94,7 @@ struct deconvol_poly2
|
||||
{
|
||||
typedef u8 hardsymbol;
|
||||
|
||||
// Support instanciation of template with soft of float input
|
||||
// Support instantiation of template with soft of float input
|
||||
inline u8 SYMVAL(const hardsymbol *s) { return *s; }
|
||||
inline u8 SYMVAL(const softsymbol *s) { return s->symbol; }
|
||||
|
||||
|
@ -979,7 +979,7 @@ struct mpeg_sync : runnable
|
||||
{
|
||||
if (resync_phase == 0)
|
||||
{
|
||||
// Try all bit alighments
|
||||
// Try all bit alignments
|
||||
for (bitphase = 0; bitphase <= 7; ++bitphase)
|
||||
{
|
||||
if (search_sync())
|
||||
@ -1770,7 +1770,7 @@ struct viterbi_sync : runnable
|
||||
|
||||
inline TUS update_sync(int s, eucl_ss *pin, TPM *discr)
|
||||
{
|
||||
// Read one FEC ouput block
|
||||
// Read one FEC output block
|
||||
pin += syncs[s].shift;
|
||||
TCS cs = 0;
|
||||
TBM cost = 0;
|
||||
|
@ -581,7 +581,7 @@ struct s2_frame_receiver : runnable
|
||||
bool strongpls; // PL symbols at max amplitude (default: RMS)
|
||||
uint32_t modcods; // Bitmask of desired modcods
|
||||
uint8_t framesizes; // Bitmask of desired frame sizes
|
||||
bool fastlock; // Synchronize more agressively
|
||||
bool fastlock; // Synchronize more aggressively
|
||||
bool fastdrift; // Carrier drift faster than pilots
|
||||
float freq_tol; // Tolerance on carrier frequency
|
||||
float sr_tol; // Tolerance on symbol rate
|
||||
@ -755,7 +755,7 @@ struct s2_frame_receiver : runnable
|
||||
}
|
||||
}
|
||||
|
||||
// State transtion
|
||||
// State transition
|
||||
void enter_frame_detect()
|
||||
{
|
||||
state = FRAME_DETECT;
|
||||
|
@ -494,7 +494,7 @@ T max(const T &x, const T &y) {
|
||||
return (x < y) ? y : x;
|
||||
}
|
||||
|
||||
// Abreviations for integer types
|
||||
// Abbreviations for integer types
|
||||
|
||||
typedef unsigned char u8;
|
||||
typedef unsigned short u16;
|
||||
|
@ -357,7 +357,7 @@ struct rs_engine
|
||||
u8 e = gf.div(num, den);
|
||||
|
||||
// Subtract e from coefficient of degree loc.
|
||||
// Note: Coeffients listed by decreasing degree in pin[] and pout[].
|
||||
// Note: Coefficients listed by decreasing degree in pin[] and pout[].
|
||||
if (bits_corrected) {
|
||||
*bits_corrected += hamming_weight(e);
|
||||
}
|
||||
|
@ -473,7 +473,7 @@ void to_softsymb(const full_ss *fss, hard_ss *ss);
|
||||
void softsymb_harden(hard_ss *ss);
|
||||
uint8_t softsymb_to_dump(const hard_ss &ss, int bit);
|
||||
|
||||
// Euclidian QPSK soft-symbols.
|
||||
// Euclidean QPSK soft-symbols.
|
||||
// Additive metric suitable for Viterbi.
|
||||
// Backward-compatible with simplified Viterbi (TBD remove)
|
||||
struct eucl_ss
|
||||
@ -1381,7 +1381,7 @@ struct cstln_receiver : runnable
|
||||
est_ep = ev_power * kest + est_ep * (1 - kest);
|
||||
}
|
||||
|
||||
// This is best done periodically ouside the inner loop,
|
||||
// This is best done periodically outside the inner loop,
|
||||
// but will cause non-deterministic output.
|
||||
|
||||
if (!allow_drift)
|
||||
@ -1655,7 +1655,7 @@ struct fast_qpsk_receiver : runnable
|
||||
cstln_out->write(s);
|
||||
}
|
||||
|
||||
// This is best done periodically ouside the inner loop,
|
||||
// This is best done periodically outside the inner loop,
|
||||
// but will cause non-deterministic output.
|
||||
|
||||
if (!allow_drift)
|
||||
|
@ -163,7 +163,7 @@ void DSCDemodSink::processOneSample(Complex &ci)
|
||||
|
||||
// Save current data for edge detection
|
||||
m_dataPrev = m_data;
|
||||
// Set data according to stongest correlation
|
||||
// Set data according to strongest correlation
|
||||
m_data = biasedData > 0;
|
||||
|
||||
// Calculate timing error (we expect clockCount to be 0 when data changes), and add a proportion of it
|
||||
|
@ -259,7 +259,7 @@ void EndOfTrainDemodSink::processOneSample(Complex &ci)
|
||||
// Select signals to feed to scope
|
||||
sampleToScope(ci / SDR_RX_SCALEF, magsq, fmDemod, f0Filt, f1Filt, diff, sample, bit, m_gotSOP);
|
||||
|
||||
// Send demod signal to Demod Analzyer feature
|
||||
// Send demod signal to Demod Analyzer feature
|
||||
m_demodBuffer[m_demodBufferFill++] = fmDemod * std::numeric_limits<int16_t>::max();
|
||||
|
||||
if (m_demodBufferFill >= m_demodBuffer.size())
|
||||
|
@ -161,7 +161,7 @@ void NavtexDemodSink::processOneSample(Complex &ci)
|
||||
|
||||
// Save current data for edge detection
|
||||
m_dataPrev = m_data;
|
||||
// Set data according to stongest correlation
|
||||
// Set data according to strongest correlation
|
||||
m_data = biasedData < 0;
|
||||
|
||||
// Generate sampling clock by aligning to correlator zero-crossing
|
||||
|
@ -156,7 +156,7 @@ quint32 PagerDemodSink::bchEncode(const quint32 cw)
|
||||
}
|
||||
|
||||
// Use BCH decoding to try to fix any bit errors
|
||||
// Returns true if able to be decode/repair successfull
|
||||
// Returns true if able to be decode/repair successful
|
||||
// See: https://www.eevblog.com/forum/microcontrollers/practical-guides-to-bch-fec/
|
||||
bool PagerDemodSink::bchDecode(const quint32 cw, quint32& correctedCW)
|
||||
{
|
||||
@ -585,7 +585,7 @@ void PagerDemodSink::processOneSample(Complex &ci)
|
||||
|
||||
sampleToScope(scopeSample);
|
||||
|
||||
// Send demod signal to Demod Analzyer feature
|
||||
// Send demod signal to Demod Analyzer feature
|
||||
m_demodBuffer[m_demodBufferFill++] = fmDemod * std::numeric_limits<int16_t>::max();
|
||||
|
||||
if (m_demodBufferFill >= m_demodBuffer.size())
|
||||
|
@ -67,7 +67,7 @@ struct RadiosondeDemodSettings
|
||||
int m_frameColumnIndexes[RADIOSONDEDEMOD_FRAME_COLUMNS];//!< How the columns are ordered in the table
|
||||
int m_frameColumnSizes[RADIOSONDEDEMOD_FRAME_COLUMNS]; //!< Size of the columns in the table
|
||||
|
||||
static const int RADIOSONDEDEMOD_CHANNEL_SAMPLE_RATE = 57600; //!< 12x 4800 baud rate (use even multiple so Gausian filter has odd number of taps)
|
||||
static const int RADIOSONDEDEMOD_CHANNEL_SAMPLE_RATE = 57600; //!< 12x 4800 baud rate (use even multiple so Gaussian filter has odd number of taps)
|
||||
|
||||
RadiosondeDemodSettings();
|
||||
void resetToDefaults();
|
||||
|
@ -274,7 +274,7 @@ void RadiosondeDemodSink::processOneSample(Complex &ci)
|
||||
}
|
||||
if (sampleIdx >= 16 * 8 * m_samplesPerSymbol)
|
||||
{
|
||||
// Too many bits without receving header
|
||||
// Too many bits without receiving header
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -359,7 +359,7 @@ void RadiosondeDemodSink::processOneSample(Complex &ci)
|
||||
}
|
||||
sampleToScope(scopeSample);
|
||||
|
||||
// Send demod signal to Demod Analzyer feature
|
||||
// Send demod signal to Demod Analyzer feature
|
||||
m_demodBuffer[m_demodBufferFill++] = fmDemod * std::numeric_limits<int16_t>::max();
|
||||
|
||||
if (m_demodBufferFill >= m_demodBuffer.size())
|
||||
@ -550,7 +550,7 @@ void RadiosondeDemodSink::applySettings(const RadiosondeDemodSettings& settings,
|
||||
// What value to use for BT? RFIC is Si4032 - its datasheet only appears to support 0.5
|
||||
m_pulseShape.create(0.5, 3, m_samplesPerSymbol);
|
||||
|
||||
// Recieve buffer, long enough for one max length message
|
||||
// Receive buffer, long enough for one max length message
|
||||
delete[] m_rxBuf;
|
||||
m_rxBufLength = RADIOSONDEDEMOD_MAX_BYTES*8*m_samplesPerSymbol;
|
||||
m_rxBuf = new Real[m_rxBufLength];
|
||||
|
@ -112,7 +112,7 @@ private:
|
||||
Lowpass<Complex> m_lowpass; // RF input filter
|
||||
PhaseDiscriminators m_phaseDiscri; // FM demodulator
|
||||
Gaussian<Real> m_pulseShape; // Pulse shaping filter
|
||||
Real *m_rxBuf; // Receive sample buffer, large enough for one max length messsage
|
||||
Real *m_rxBuf; // Receive sample buffer, large enough for one max length message
|
||||
int m_rxBufLength; // Size in elements in m_rxBuf
|
||||
int m_rxBufIdx; // Index in to circular buffer
|
||||
int m_rxBufCnt; // Number of valid samples in buffer
|
||||
|
@ -219,7 +219,7 @@ void RttyDemodSink::processOneSample(Complex &ci)
|
||||
|
||||
// Save current data for edge detection
|
||||
m_dataPrev = m_data;
|
||||
// Set data according to stongest correlation
|
||||
// Set data according to strongest correlation
|
||||
if (m_settings.m_spaceHigh) {
|
||||
m_data = m_settings.m_atc ? biasedData < 0 : unbiasedData < 0;
|
||||
} else {
|
||||
|
@ -108,7 +108,7 @@ private:
|
||||
bool m_agcClamping;
|
||||
int m_agcNbSamples; //!< number of audio (48 kHz) samples for AGC averaging
|
||||
double m_agcPowerThreshold; //!< AGC power threshold (linear)
|
||||
int m_agcThresholdGate; //!< Gate length in number of samples befor threshold triggers
|
||||
int m_agcThresholdGate; //!< Gate length in number of samples before threshold triggers
|
||||
DoubleBufferFIFO<fftfilt::cmplx> m_squelchDelayLine;
|
||||
bool m_audioActive; //!< True if an audio signal is produced (no AGC or AGC and above threshold)
|
||||
Lowpass<Real> m_lowpassI;
|
||||
|
@ -143,7 +143,7 @@ bool VORDemodGUI::handleMessage(const Message& message)
|
||||
ui->morseText->setText(Morse::toSpacedUnicode(ident));
|
||||
|
||||
// Idents should only be two or three characters, so filter anything else
|
||||
// other than TEST which indicates a VOR is under maintainance (may also be TST)
|
||||
// other than TEST which indicates a VOR is under maintenance (may also be TST)
|
||||
if (((identString.size() >= 2) && (identString.size() <= 3)) || (identString == "TEST"))
|
||||
{
|
||||
ui->identText->setStyleSheet("QLabel { color: white }");
|
||||
|
@ -835,7 +835,7 @@ bool VORDemodMCGUI::handleMessage(const Message& message)
|
||||
// Convert Morse to a string
|
||||
QString identString = Morse::toString(ident);
|
||||
// Idents should only be two or three characters, so filter anything else
|
||||
// other than TEST which indicates a VOR is under maintainance (may also be TST)
|
||||
// other than TEST which indicates a VOR is under maintenance (may also be TST)
|
||||
if (((identString.size() >= 2) && (identString.size() <= 3)) || (identString == "TEST"))
|
||||
{
|
||||
vorGUI->m_rxIdentItem->setText(identString);
|
||||
|
@ -269,7 +269,7 @@ void VORDemodMCSink::processOneSample(Complex &ci)
|
||||
m_movingAverageIdent(c2.real());
|
||||
Real mav = m_movingAverageIdent.asFloat();
|
||||
|
||||
// Caclulate noise floor
|
||||
// Calculate noise floor
|
||||
if (mav > m_identMaxs[m_binCnt])
|
||||
m_identMaxs[m_binCnt] = mav;
|
||||
m_binSampleCnt++;
|
||||
|
@ -44,9 +44,9 @@ struct FreqScannerSettings
|
||||
bool deserialize(const QByteArray& data);
|
||||
};
|
||||
|
||||
qint32 m_inputFrequencyOffset; //!< Not modifable in GUI
|
||||
qint32 m_inputFrequencyOffset; //!< Not modifiable in GUI
|
||||
qint32 m_channelBandwidth; //!< Channel bandwidth
|
||||
qint32 m_channelFrequencyOffset;//!< Minium DC offset of tuned channel
|
||||
qint32 m_channelFrequencyOffset;//!< Minimum DC offset of tuned channel
|
||||
Real m_threshold; //!< Power threshold in dB
|
||||
QString m_channel; //!< Channel (E.g: R1:4) to tune to active frequency
|
||||
QList<FrequencySettings> m_frequencySettings; //!< Frequencies to scan and corresponding settings
|
||||
|
@ -1426,7 +1426,7 @@ void HeatMapGUI::resizeMap(int x, int y)
|
||||
}
|
||||
catch (std::bad_alloc&)
|
||||
{
|
||||
// Detete partially allocated memory
|
||||
// Delete partially allocated memory
|
||||
delete[] powerAverage;
|
||||
delete[] powerPulseAverage;
|
||||
delete[] powerMaxPeak;
|
||||
|
@ -920,7 +920,7 @@ bool RadioAstronomyGUI::deserialize(const QByteArray& data)
|
||||
|
||||
void RadioAstronomyGUI::updateAvailableFeatures(const AvailableChannelOrFeatureList& availableFeatures, const QStringList& renameFrom, const QStringList& renameTo)
|
||||
{
|
||||
// Update starTracker settting if it has been renamed
|
||||
// Update starTracker setting if it has been renamed
|
||||
if (renameFrom.contains(m_settings.m_starTracker))
|
||||
{
|
||||
m_settings.m_starTracker = renameTo[renameFrom.indexOf(m_settings.m_starTracker)];
|
||||
@ -1446,7 +1446,7 @@ void RadioAstronomyGUI::calcCalTrx()
|
||||
}
|
||||
}
|
||||
|
||||
// Estimate spillover temperature (This is typically very Az/El depenedent as ground noise will vary)
|
||||
// Estimate spillover temperature (This is typically very Az/El dependent as ground noise will vary)
|
||||
void RadioAstronomyGUI::calcCalTsp()
|
||||
{
|
||||
if (!ui->calTrx->text().isEmpty() && !ui->calTsky->text().isEmpty() && !ui->calYFactor->text().isEmpty())
|
||||
@ -2610,7 +2610,7 @@ void RadioAstronomyGUI::tick()
|
||||
|
||||
void RadioAstronomyGUI::updateRotatorList(const AvailableChannelOrFeatureList& rotators, const QStringList& renameFrom, const QStringList& renameTo)
|
||||
{
|
||||
// Update rotator settting if it has been renamed
|
||||
// Update rotator setting if it has been renamed
|
||||
if (renameFrom.contains(m_settings.m_rotator))
|
||||
{
|
||||
m_settings.m_rotator = renameTo[renameFrom.indexOf(m_settings.m_rotator)];
|
||||
@ -2983,7 +2983,7 @@ void RadioAstronomyGUI::updateSpectrumChartWidgetsVisibility()
|
||||
getRollupContents()->arrangeRollups();
|
||||
}
|
||||
|
||||
// Calulate mean, RMS and standard deviation
|
||||
// Calculate mean, RMS and standard deviation
|
||||
// Currently this is for all data - but could make it only for visible data
|
||||
void RadioAstronomyGUI::calcAverages()
|
||||
{
|
||||
@ -4091,7 +4091,7 @@ static double lineDopplerVelocity(double centre, double f)
|
||||
return Astronomy::dopplerToVelocity(f, centre) / 1000.0f;
|
||||
}
|
||||
|
||||
// Convert frequency shift to velocity (+ve receeding - which seems to be the astronomical convention)
|
||||
// Convert frequency shift to velocity (+ve receding - which seems to be the astronomical convention)
|
||||
double RadioAstronomyGUI::dopplerToVelocity(double centre, double f, FFTMeasurement *fft)
|
||||
{
|
||||
double v = lineDopplerVelocity(centre, f);
|
||||
@ -4107,7 +4107,7 @@ double RadioAstronomyGUI::dopplerToVelocity(double centre, double f, FFTMeasurem
|
||||
default:
|
||||
break;
|
||||
}
|
||||
// Make +ve receeding
|
||||
// Make +ve receding
|
||||
return -v;
|
||||
}
|
||||
|
||||
@ -4645,7 +4645,7 @@ void RadioAstronomyGUI::calcFFTTotalTemperature(FFTMeasurement* fft)
|
||||
fft->m_totalPowerdBm = Astronomy::noisePowerdBm(tempSum, bw);
|
||||
fft->m_tSys = tempSum/fft->m_fftSize;
|
||||
|
||||
// Esimate source temperature
|
||||
// Estimate source temperature
|
||||
fft->m_tSource = calcTSource(fft);
|
||||
|
||||
// Calculate error due to thermal noise and gain variation
|
||||
@ -5473,7 +5473,7 @@ void RadioAstronomyGUI::on_spectrumShowLAB_toggled(bool checked)
|
||||
applySettings();
|
||||
m_fftLABSeries->setVisible(m_settings.m_spectrumLAB);
|
||||
if (m_settings.m_spectrumLAB) {
|
||||
plotLAB(); // Replot incase data needs to be downloaded
|
||||
plotLAB(); // Replot in case data needs to be downloaded
|
||||
}
|
||||
spectrumAutoscale();
|
||||
}
|
||||
@ -6094,7 +6094,7 @@ void RadioAstronomyGUI::downloadFinished(const QString& filename, bool success)
|
||||
}
|
||||
else
|
||||
{
|
||||
// Try ploting for current FFT (as we only allow one download at a time, so may have been skipped)
|
||||
// Try plotting for current FFT (as we only allow one download at a time, so may have been skipped)
|
||||
m_downloadingLAB = false;
|
||||
plotLAB(fft->m_l, fft->m_b, m_beamWidth);
|
||||
// Don't clear m_downloadingLAB after this point
|
||||
|
@ -636,7 +636,7 @@ void RadioClockSink::wwvb()
|
||||
m_threshold = m_thresholdMovingAverage.asDouble() * m_linearThreshold; // xdB below average
|
||||
m_data = m_magsq > m_threshold;
|
||||
|
||||
// Look for minute marker - two consequtive markers
|
||||
// Look for minute marker - two consecutive markers
|
||||
if ((m_data == 0) && (m_prevData == 1))
|
||||
{
|
||||
if ( (m_highCount <= RadioClockSettings::RADIOCLOCK_CHANNEL_SAMPLE_RATE * 0.3)
|
||||
@ -803,7 +803,7 @@ void RadioClockSink::jjy()
|
||||
m_threshold = m_thresholdMovingAverage.asDouble() * m_linearThreshold; // xdB below average
|
||||
m_data = m_magsq > m_threshold;
|
||||
|
||||
// Look for minute marker - two consequtive markers
|
||||
// Look for minute marker - two consecutive markers
|
||||
if ((m_data == 1) && (m_prevData == 0))
|
||||
{
|
||||
if ( (m_highCount <= RadioClockSettings::RADIOCLOCK_CHANNEL_SAMPLE_RATE * 0.3)
|
||||
|
@ -66,7 +66,7 @@ public:
|
||||
};
|
||||
|
||||
enum Command {
|
||||
// These are compatbile with osmocom rtl_tcp: https://github.com/osmocom/rtl-sdr/blob/master/src/rtl_tcp.c
|
||||
// These are compatible with osmocom rtl_tcp: https://github.com/osmocom/rtl-sdr/blob/master/src/rtl_tcp.c
|
||||
// and Android https://github.com/signalwareltd/rtl_tcp_andro-/blob/master/rtlsdr/src/main/cpp/src/tcp_commands.h
|
||||
setCenterFrequency = 0x1, // rtlsdr_set_center_freq
|
||||
setSampleRate = 0x2, // rtlsdr_set_sample_rate
|
||||
|
@ -93,7 +93,7 @@ struct AISModSettings
|
||||
QByteArray m_geometryBytes;
|
||||
bool m_hidden;
|
||||
|
||||
// Sample rate is multiple of 9600 baud rate (use even multiple so Gausian filter has odd number of taps)
|
||||
// Sample rate is multiple of 9600 baud rate (use even multiple so Gaussian filter has odd number of taps)
|
||||
// Is there any benefit to having this higher?
|
||||
static const int AISMOD_SAMPLE_RATE = (9600*6);
|
||||
|
||||
|
@ -32,7 +32,7 @@ struct ATVModSettings
|
||||
ATVStdPAL625, //!< standard 625 lines B, D, G, H, I, K, K1 and N
|
||||
ATVStdPAL525, //!< standard 525 lines M
|
||||
ATVStd819, //!< standard 819 lines F (Belgium)
|
||||
ATVStdShortInterlaced, //!< non-standard with mimimal vertical sync sequences permitted by SDR technology
|
||||
ATVStdShortInterlaced, //!< non-standard with minimal vertical sync sequences permitted by SDR technology
|
||||
ATVStdShort, //!< same as above
|
||||
ATVStdHSkip //!< first introduced vertical sync by skipping horizontal sync to indicate start of image
|
||||
} ATVStd;
|
||||
|
@ -90,8 +90,8 @@ private:
|
||||
int m_videoHeight; //!< camera frame height
|
||||
float m_videoFx; //!< camera horizontal scaling factor
|
||||
float m_videoFy; //!< camera vertictal scaling factor
|
||||
float m_videoFPSq; //!< camera FPS sacaling factor
|
||||
float m_videoFPSqManual; //!< camera FPS sacaling factor manually set
|
||||
float m_videoFPSq; //!< camera FPS scaling factor
|
||||
float m_videoFPSqManual; //!< camera FPS scaling factor manually set
|
||||
float m_videoFPSCount; //!< camera FPS fractional counter
|
||||
int m_videoPrevFPSCount; //!< camera FPS previous integer counter
|
||||
|
||||
@ -201,7 +201,7 @@ private:
|
||||
int m_videoHeight; //!< current video frame height
|
||||
float m_videoFx; //!< current video horizontal scaling factor
|
||||
float m_videoFy; //!< current video vertictal scaling factor
|
||||
float m_videoFPSq; //!< current video FPS sacaling factor
|
||||
float m_videoFPSq; //!< current video FPS scaling factor
|
||||
float m_videoFPSCount; //!< current video FPS fractional counter
|
||||
int m_videoPrevFPSCount; //!< current video FPS previous integer counter
|
||||
int m_videoLength; //!< current video length in frames
|
||||
|
@ -56,7 +56,7 @@ struct ChirpChatModSettings
|
||||
int m_inputFrequencyOffset;
|
||||
int m_bandwidthIndex;
|
||||
int m_spreadFactor;
|
||||
int m_deBits; //!< Low data rate optmize (DE) bits
|
||||
int m_deBits; //!< Low data rate optimize (DE) bits
|
||||
unsigned int m_preambleChirps; //!< Number of preamble chirps
|
||||
int m_quietMillis; //!< Number of milliseconds to pause between transmissions
|
||||
int m_nbParityBits; //!< Hamming parity bits (LoRa)
|
||||
|
@ -55,7 +55,7 @@ private:
|
||||
{
|
||||
ChirpChatStateIdle, //!< Quiet time
|
||||
ChirpChatStatePreamble, //!< Transmit preamble
|
||||
ChirpChatStateSyncWord, //!< Tramsmit sync word
|
||||
ChirpChatStateSyncWord, //!< Transmit sync word
|
||||
ChirpChatStateSFD, //!< Transmit SFD
|
||||
ChirpChatStatePayload //!< Tramsmoit payload
|
||||
};
|
||||
@ -77,7 +77,7 @@ private:
|
||||
unsigned int m_quietSamples; //!< number of samples during quiet period
|
||||
unsigned int m_quarterSamples; //!< number of samples in a quarter chirp
|
||||
unsigned int m_repeatCount; //!< message repetition counter
|
||||
bool m_active; //!< modulator is in a sending sequence (icluding periodic quiet times)
|
||||
bool m_active; //!< modulator is in a sending sequence (including periodic quiet times)
|
||||
|
||||
NCO m_carrierNco;
|
||||
double m_modPhasor; //!< baseband modulator phasor
|
||||
|
@ -625,7 +625,7 @@ void DATVModGUI::tick()
|
||||
m_channelPowerDbAvg(powDb);
|
||||
ui->channelPower->setText(tr("%1 dB").arg(m_channelPowerDbAvg.asDouble(), 0, 'f', 1));
|
||||
|
||||
// Use m_tickMsgOutstanding to prevent queuing lots of messsages while stopped/paused
|
||||
// Use m_tickMsgOutstanding to prevent queuing lots of messages while stopped/paused
|
||||
if (((++m_tickCount & 0xf) == 0) && !m_tickMsgOutstanding)
|
||||
{
|
||||
if (ui->inputSelect->currentIndex() == (int) DATVModSettings::SourceFile)
|
||||
|
@ -100,7 +100,7 @@ private:
|
||||
|
||||
QUdpSocket *m_udpSocket; //!< UDP socket to receive MPEG transport stream via
|
||||
int m_udpByteCount; //!< Count of bytes received via UDP for bitrate calculation
|
||||
int64_t m_udpAbsByteCount; //!< Count of bytes received via UDP since the begining
|
||||
int64_t m_udpAbsByteCount; //!< Count of bytes received via UDP since the beginning
|
||||
boost::chrono::steady_clock::time_point m_udpTimingStart; //!< When we last started counting UDP bytes
|
||||
uint8_t m_udpBuffer[188*10];
|
||||
int m_udpBufferIdx; //!< TS frame index into buffer
|
||||
|
@ -56,8 +56,8 @@ DVBS::~DVBS()
|
||||
delete[] m_packet;
|
||||
}
|
||||
|
||||
// Scramble input packet (except for sync bytes) with psuedo random binary sequence
|
||||
// Initiliase PRBS sequence every 8 packets and invert sync byte
|
||||
// Scramble input packet (except for sync bytes) with pseudo random binary sequence
|
||||
// Initialise PRBS sequence every 8 packets and invert sync byte
|
||||
void DVBS::scramble(const uint8_t *packetIn, uint8_t *packetOut)
|
||||
{
|
||||
if (m_prbsPacketCount == 0)
|
||||
|
@ -44,7 +44,7 @@ int DVB2::set_configure( DVB2FrameFormat *f )
|
||||
|
||||
if( f->broadcasting )
|
||||
{
|
||||
// Set standard parametrs for broadcasting
|
||||
// Set standard parameters for broadcasting
|
||||
f->frame_type = FRAME_NORMAL;
|
||||
f->bb_header.ts_gs = TS_GS_TRANSPORT;
|
||||
f->bb_header.sis_mis = SIS_MIS_SINGLE;
|
||||
@ -200,7 +200,7 @@ int DVB2::set_configure( DVB2FrameFormat *f )
|
||||
f->kldpc = f->kbch + bch_bits;
|
||||
// Number of padding bits required (not used)
|
||||
f->padding_bits = 0;
|
||||
// Number of useable data bits (not used)
|
||||
// Number of usable data bits (not used)
|
||||
f->useable_data_bits = f->kbch - 80;
|
||||
// Save the configuration, will be updated on next frame
|
||||
m_format[1] = *f;
|
||||
@ -278,7 +278,7 @@ DVB2::DVB2(void)
|
||||
init_bb_randomiser();
|
||||
bch_poly_build_tables();
|
||||
build_crc8_table();
|
||||
m_dnp = 0;// No delted null packets
|
||||
m_dnp = 0;// No deleted null packets
|
||||
m_frame_offset_bits = 0;
|
||||
m_params_changed = 1;
|
||||
}
|
||||
|
@ -24,7 +24,7 @@
|
||||
typedef unsigned int u32;
|
||||
typedef unsigned char u8;
|
||||
|
||||
// BB HEADER fileds
|
||||
// BB HEADER fields
|
||||
#define TS_GS_TRANSPORT 3
|
||||
#define TS_GS_GENERIC_PACKETIZED 0
|
||||
#define TS_GS_GENERIC_CONTINUOUS 1
|
||||
@ -67,7 +67,7 @@ typedef struct{
|
||||
|
||||
typedef int Bit;
|
||||
|
||||
// The number of useable and stuff bits in a frame
|
||||
// The number of usable and stuff bits in a frame
|
||||
typedef struct{
|
||||
int data_bits;
|
||||
int stuff_bits;
|
||||
|
@ -105,15 +105,15 @@ void DVBS2::calc_efficiency( void )
|
||||
a = a*m;
|
||||
// Take into account pilot symbols
|
||||
// TBD
|
||||
// Now calculate the useable data as percentage of the frame
|
||||
// Now calculate the usable data as percentage of the frame
|
||||
b = ((double)m_format[1].useable_data_bits)/p;
|
||||
// Now calculate the efficiency by multiplying the
|
||||
// useable bits efficiency by the modulation efficiency
|
||||
// usable bits efficiency by the modulation efficiency
|
||||
m_efficiency = b*a;
|
||||
}
|
||||
//
|
||||
// Multiply the efficiency value by the symbol rate
|
||||
// to get the useable bitrate
|
||||
// to get the usable bitrate
|
||||
//
|
||||
double DVBS2::s2_get_efficiency( void )
|
||||
{
|
||||
|
@ -419,6 +419,6 @@ void DVB2::bch_poly_build_tables( void )
|
||||
}
|
||||
|
||||
// display_poly( polyout[0], len );//12
|
||||
// display_poly_pack( m_poly_s_12, 168 );// Wont work because of shift register length
|
||||
// display_poly_pack( m_poly_s_12, 168 );// Won't work because of shift register length
|
||||
*/
|
||||
}
|
||||
|
@ -125,7 +125,7 @@ This slider can be used to randomly set the current position in the file when fi
|
||||
|
||||
<h2>Creating an MPEG transport stream</h2>
|
||||
|
||||
An MPEG transport stream file can be created from a video file using ffpmeg:
|
||||
An MPEG transport stream file can be created from a video file using ffmpeg:
|
||||
|
||||
ffmpeg -i input.avi -pix_fmt yuv420p -r 25 -s 720x576 -aspect 4:3 -c:v hevc -c:a libopus -b:v 500k -b:a 64k -maxrate 600k -bufsize 50k -f mpegts -mpegts_original_network_id 1 -mpegts_transport_stream_id 1 -mpegts_service_id 1 -mpegts_pmt_start_pid 4096 -streamid 0:289 -streamid 1:337 -metadata service_provider="SDRangel" -metadata service_name="SDRangel TV" -y mpeg.ts
|
||||
|
||||
|
@ -333,7 +333,7 @@ QString M17ModProcessor::formatAPRSPosition()
|
||||
int latDeg, latMin, latFrac, latNorth;
|
||||
int longDeg, longMin, longFrac, longEast;
|
||||
|
||||
// Convert decimal latitude to degrees, min and hundreths of a minute
|
||||
// Convert decimal latitude to degrees, min and hundredths of a minute
|
||||
latNorth = latitude >= 0.0f;
|
||||
latitude = abs(latitude);
|
||||
latDeg = (int) latitude;
|
||||
|
@ -235,7 +235,7 @@ void PacketModGUI::on_insertPosition_clicked()
|
||||
char latBuf[40];
|
||||
char longBuf[40];
|
||||
|
||||
// Convert decimal latitude to degrees, min and hundreths of a minute
|
||||
// Convert decimal latitude to degrees, min and hundredths of a minute
|
||||
latNorth = latitude >= 0.0f;
|
||||
latitude = abs(latitude);
|
||||
latDeg = (int)latitude;
|
||||
|
@ -152,7 +152,7 @@ void AMBEEngine::register_comport(
|
||||
//std::cerr << "register_comport: dir: "<< dir << " driver: " << driver << std::endl;
|
||||
std::string devfile = std::string("/dev/") + basename((char *) dir.c_str());
|
||||
|
||||
// Put serial8250-devices in a seperate list
|
||||
// Put serial8250-devices in a separate list
|
||||
if (driver == "serial8250") {
|
||||
comList8250.push_back(devfile);
|
||||
} else {
|
||||
|
@ -131,7 +131,7 @@ private:
|
||||
QTimer m_statusTimer;
|
||||
int m_lastFeatureState;
|
||||
|
||||
QHash<QString,APRSStation *> m_stations; // All stations we've recieved packets for. Hashed on callsign
|
||||
QHash<QString,APRSStation *> m_stations; // All stations we've received packets for. Hashed on callsign
|
||||
|
||||
QMenu *packetsTableMenu; // Column select context menus
|
||||
QMenu *weatherTableMenu;
|
||||
|
@ -172,7 +172,7 @@ void DFMProtocol::parseLCUResponse(const QString& packet)
|
||||
float el = aa.alt;
|
||||
reportAzEl(az, el);
|
||||
|
||||
// If this is the second LCU packet, we send a commmand
|
||||
// If this is the second LCU packet, we send a command
|
||||
m_packetCnt++;
|
||||
if (m_packetCnt == 2)
|
||||
{
|
||||
|
@ -540,7 +540,7 @@ void GS232ControllerGUI::updateSerialPortList(const QStringList& serialPorts)
|
||||
|
||||
void GS232ControllerGUI::updatePipeList(const AvailableChannelOrFeatureList& sources, const QStringList& renameFrom, const QStringList& renameTo)
|
||||
{
|
||||
// Update source settting if it has been renamed
|
||||
// Update source setting if it has been renamed
|
||||
if (renameFrom.contains(m_settings.m_source))
|
||||
{
|
||||
m_settings.m_source = renameTo[renameFrom.indexOf(m_settings.m_source)];
|
||||
@ -576,7 +576,7 @@ void GS232ControllerGUI::updatePipeList(const AvailableChannelOrFeatureList& sou
|
||||
|
||||
ui->sources->blockSignals(false);
|
||||
|
||||
// If no current settting, select first available
|
||||
// If no current setting, select first available
|
||||
if (m_settings.m_source.isEmpty() && (ui->sources->count() > 0))
|
||||
{
|
||||
ui->sources->setCurrentIndex(0);
|
||||
|
@ -44,8 +44,8 @@ const std::map<int, std::string> LimeRFE::m_errorCodesMap = {
|
||||
{-3, "Non-configurable GPIO pin specified. Only pins 4 and 5 are configurable."},
|
||||
{-2, "Problem with .ini configuration file"},
|
||||
{-1, "Communication error"},
|
||||
{ 1, "Wrong TX connector - not possible to route TX of the selecrted channel to the specified port"},
|
||||
{ 2, "Wrong RX connector - not possible to route RX of the selecrted channel to the specified port"},
|
||||
{ 1, "Wrong TX connector - not possible to route TX of the selected channel to the specified port"},
|
||||
{ 2, "Wrong RX connector - not possible to route RX of the selected channel to the specified port"},
|
||||
{ 3, "Mode TXRX not allowed - when the same port is selected for RX and TX, it is not allowed to use mode RX & TX"},
|
||||
{ 4, "Wrong mode for cellular channel - Cellular FDD bands (1, 2, 3, and 7) are only allowed mode RX & TX, while TDD band 38 is allowed only RX or TX mode"},
|
||||
{ 5, "Cellular channels must be the same both for RX and TX"},
|
||||
|
@ -70,7 +70,7 @@ void MapIBPBeaconDialog::updateTable(QTime time)
|
||||
{
|
||||
AzEl azEl = *m_gui->getAzEl();
|
||||
|
||||
// Repeat from begining every 3 minutes
|
||||
// Repeat from beginning every 3 minutes
|
||||
int index = ((time.minute() * 60 + time.second()) % 180) / IBPBeacon::m_period;
|
||||
|
||||
for (int row = 0; row < IBPBeacon::m_frequencies.size(); row++)
|
||||
|
@ -346,7 +346,7 @@ private slots:
|
||||
{
|
||||
QMutexLocker locker(&m_mutex);
|
||||
//QString url = reply->url().toEncoded().constData();
|
||||
QString url = reply->request().url().toEncoded().constData(); // reply->url() may differ if redirection occured, so use requested
|
||||
QString url = reply->request().url().toEncoded().constData(); // reply->url() may differ if redirection occurred, so use requested
|
||||
|
||||
if (!isHttpRedirect(reply))
|
||||
{
|
||||
|
@ -96,7 +96,7 @@ This scope display shows waveforms related to the decoding with GGMorse.
|
||||
* When the show decoder threshold is set (11a) it shows the threshold level being used in GGMorse for decoding. It is not necessary on the same scale as the Goertzel output.
|
||||
* When the show decoder threshold is not set (11a) a constant 0.0316227766017 is applied which corresponds to a power of -30 dB.
|
||||
|
||||
The elemetary trace length is 3 seconds. This is the time window used by GGMorse thus a new trace appears every 3 seconds. The actual traces are interpolated to fit in the 4800 samples of the elementary trace. Thus the sample rate is a fixed 1.6 kS/s.
|
||||
The elementary trace length is 3 seconds. This is the time window used by GGMorse thus a new trace appears every 3 seconds. The actual traces are interpolated to fit in the 4800 samples of the elementary trace. Thus the sample rate is a fixed 1.6 kS/s.
|
||||
|
||||
The best settings to visualize the Goertzel waveform is the following:
|
||||
|
||||
|
@ -158,7 +158,7 @@ RadiosondeGUI::RadiosondeGUI(PluginAPI* pluginAPI, FeatureUISet *featureUISet, F
|
||||
|
||||
m_sondeHub = SondeHub::create();
|
||||
|
||||
// Intialise chart
|
||||
// Initialise chart
|
||||
ui->chart->setRenderHint(QPainter::Antialiasing);
|
||||
|
||||
// Resize the table using dummy data
|
||||
|
@ -483,7 +483,7 @@ bool RigCtlServerWorker::getFrequency(double& frequency, rig_errcode_e& rigCtlRC
|
||||
if (WebAPIUtils::getSubObjectDouble(*jsonObj, "centerFrequency", deviceFreq))
|
||||
{
|
||||
SWGSDRangel::SWGChannelSettings channelSettingsResponse;
|
||||
// Get channel settings containg inputFrequencyOffset, so we can patch them
|
||||
// Get channel settings containing inputFrequencyOffset, so we can patch them
|
||||
httpRC = m_webAPIAdapterInterface->devicesetChannelSettingsGet(
|
||||
m_settings.m_deviceIndex,
|
||||
m_settings.m_channelIndex,
|
||||
@ -683,7 +683,7 @@ bool RigCtlServerWorker::getMode(const char **mode, double& passband, rig_errcod
|
||||
SWGSDRangel::SWGErrorResponse errorResponse;
|
||||
int httpRC;
|
||||
|
||||
// Get channel settings containg inputFrequencyOffset, so we can patch them
|
||||
// Get channel settings containing inputFrequencyOffset, so we can patch them
|
||||
httpRC = m_webAPIAdapterInterface->devicesetChannelSettingsGet(
|
||||
m_settings.m_deviceIndex,
|
||||
m_settings.m_channelIndex,
|
||||
|
@ -305,7 +305,7 @@ SatelliteTrackerGUI::SatelliteTrackerGUI(PluginAPI* pluginAPI, FeatureUISet *fea
|
||||
|
||||
connect(&m_redrawTimer, &QTimer::timeout, this, &SatelliteTrackerGUI::plotChart);
|
||||
|
||||
// Intialise charts
|
||||
// Initialise charts
|
||||
m_emptyChart.layout()->setContentsMargins(0, 0, 0, 0);
|
||||
m_emptyChart.setMargins(QMargins(1, 1, 1, 1));
|
||||
ui->passChart->setChart(&m_emptyChart);
|
||||
|
@ -75,7 +75,7 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
// Sent from worker to GUI to indicaite LOS
|
||||
// Sent from worker to GUI to indicate LOS
|
||||
class MsgReportLOS : public Message {
|
||||
MESSAGE_CLASS_DECLARATION
|
||||
|
||||
|
@ -88,7 +88,7 @@ void SatelliteTrackerSettingsDialog::on_removeTle_clicked()
|
||||
void SatelliteTrackerSettingsDialog::on_defaultTles_clicked()
|
||||
{
|
||||
QMessageBox::StandardButton reply;
|
||||
reply = QMessageBox::question(this, "Confirm ovewrite", "Replace the current TLE list with the default?", QMessageBox::Yes|QMessageBox::No, QMessageBox::No);
|
||||
reply = QMessageBox::question(this, "Confirm overwrite", "Replace the current TLE list with the default?", QMessageBox::Yes|QMessageBox::No, QMessageBox::No);
|
||||
if (reply == QMessageBox::Yes) {
|
||||
ui->tles->clear();
|
||||
updateTleWidget(DEFAULT_TLES);
|
||||
|
@ -176,7 +176,7 @@ void getPassAzEl(QLineSeries* azimuth, QLineSeries* elevation, QLineSeries* pola
|
||||
}
|
||||
}
|
||||
|
||||
// Get whether a pass passes through 0 degreees
|
||||
// Get whether a pass passes through 0 degrees
|
||||
bool getPassesThrough0Deg(const QString& tle0, const QString& tle1, const QString& tle2,
|
||||
double latitude, double longitude, double altitude,
|
||||
QDateTime& aos, QDateTime& los)
|
||||
@ -321,7 +321,7 @@ static DateTime findCrossingPoint(Observer& obs, SGP4& sgp4, const DateTime& ini
|
||||
return middleTime;
|
||||
}
|
||||
|
||||
// Find when AOS occured, by stepping backwards
|
||||
// Find when AOS occurred, by stepping backwards
|
||||
static DateTime findAOSBackwards(Observer& obs, SGP4& sgp4, DateTime& startTime,
|
||||
int predictionPeriod, double minElevation, bool& aosUnknown)
|
||||
{
|
||||
@ -366,7 +366,7 @@ bool inPassWindow(DateTime dateTime, QTime passStartTime, QTime passEndTime, boo
|
||||
}
|
||||
|
||||
// Create a list of satellite passes, between the given start and end times, that exceed the specified minimum elevation
|
||||
// We return an uninitalised QDateTime if AOS or LOS is outside of predictionPeriod
|
||||
// We return an uninitialised QDateTime if AOS or LOS is outside of predictionPeriod
|
||||
static QList<SatellitePass> createPassList(Observer& obs, SGP4& sgp4, DateTime& startTime,
|
||||
int predictionPeriod, double minAOSElevation, double minPassElevationDeg,
|
||||
QTime passStartTime, QTime passEndTime, bool utc,
|
||||
|
@ -398,7 +398,7 @@ void SatelliteTrackerWorker::update()
|
||||
if (satWorkerState->m_losTimer.isActive()) {
|
||||
qDebug() << "SatelliteTrackerWorker::update m_losTimer.remainingTime: " << satWorkerState->m_losTimer.remainingTime();
|
||||
}
|
||||
// We can detect a new AOS for a satellite, a little bit before the LOS has occured
|
||||
// We can detect a new AOS for a satellite, a little bit before the LOS has occurred
|
||||
// Allow for 5s here (1s doesn't appear to be enough in some cases)
|
||||
if (satWorkerState->m_losTimer.isActive() && (satWorkerState->m_losTimer.remainingTime() <= 5000))
|
||||
{
|
||||
|
@ -149,7 +149,7 @@ void SIDAddChannelsDialog::channelAdded(int deviceSetIndex, ChannelAPI *channel)
|
||||
ChannelWebAPIUtils::patchChannelSetting(channel, "rfBandwidth", 300);
|
||||
ChannelWebAPIUtils::patchChannelSetting(channel, "averagePeriodUS", 10000000);
|
||||
|
||||
// Update setings if they are created by SIDGUI before this slot is called
|
||||
// Update settings if they are created by SIDGUI before this slot is called
|
||||
if (m_count < m_settings->m_channelSettings.size()) {
|
||||
m_settings->m_channelSettings[m_count].m_label = transmitter->m_callsign;
|
||||
}
|
||||
|
@ -184,7 +184,7 @@ SIDGUI::SIDGUI(PluginAPI* pluginAPI, FeatureUISet *featureUISet, Feature *featur
|
||||
ui->startDateTime->blockSignals(false);
|
||||
ui->endDateTime->blockSignals(false);
|
||||
|
||||
// Intialise chart
|
||||
// Initialise chart
|
||||
ui->chart->setRenderHint(QPainter::Antialiasing);
|
||||
ui->xRayChart->setRenderHint(QPainter::Antialiasing);
|
||||
|
||||
@ -207,7 +207,7 @@ SIDGUI::SIDGUI(PluginAPI* pluginAPI, FeatureUISet *featureUISet, Feature *featur
|
||||
applyAllSettings();
|
||||
m_resizer.enableChildMouseTracking();
|
||||
|
||||
// Intialisation for Solar Dynamics Observatory image/video display
|
||||
// Initialisation for Solar Dynamics Observatory image/video display
|
||||
ui->sdoEnabled->setChecked(true);
|
||||
ui->sdoProgressBar->setVisible(false);
|
||||
ui->sdoImage->setStyleSheet("background-color: black;");
|
||||
@ -236,7 +236,7 @@ SIDGUI::SIDGUI(PluginAPI* pluginAPI, FeatureUISet *featureUISet, Feature *featur
|
||||
m_settings.m_sdoData = ui->sdoData->currentText();
|
||||
}
|
||||
|
||||
// Intialisation for GOES X-Ray data
|
||||
// Initialisation for GOES X-Ray data
|
||||
m_goesXRay = GOESXRay::create();
|
||||
if (m_goesXRay)
|
||||
{
|
||||
|
@ -1054,7 +1054,7 @@ void SkyMapGUI::updateSourceList(const QStringList& renameFrom, const QStringLis
|
||||
{
|
||||
m_availableChannelOrFeatures = m_availableChannelOrFeatureHandler.getAvailableChannelOrFeatureList();
|
||||
|
||||
// Update source settting if it has been renamed
|
||||
// Update source setting if it has been renamed
|
||||
if (renameFrom.contains(m_settings.m_source))
|
||||
{
|
||||
m_settings.m_source = renameTo[renameFrom.indexOf(m_settings.m_source)];
|
||||
@ -1092,7 +1092,7 @@ void SkyMapGUI::updateSourceList(const QStringList& renameFrom, const QStringLis
|
||||
|
||||
ui->source->blockSignals(false);
|
||||
|
||||
// If no current settting, select first available
|
||||
// If no current setting, select first available
|
||||
if (m_settings.m_source.isEmpty() && (ui->source->count() > 0))
|
||||
{
|
||||
ui->source->setCurrentIndex(0);
|
||||
|
@ -680,7 +680,7 @@ double StarTracker::applyBeam(const FITS *fits, double beamwidth, double ra, dou
|
||||
// (Essentially the same as Gaussian of exp(-4*ln(theta^2/beamwidth^2))
|
||||
// (See a2 in https://arxiv.org/pdf/1812.10084.pdf for Elliptical equivalent))
|
||||
// We have gain of 0dB (1) at 0 degrees, and -3dB (~0.5) at half-beamwidth degrees
|
||||
// Find exponent that correponds to -3dB at that angle
|
||||
// Find exponent that corresponds to -3dB at that angle
|
||||
double minus3dBLinear = pow(10.0, -3.0/10.0);
|
||||
double p = log(minus3dBLinear)/log(cos(Units::degreesToRadians(halfBeamwidth)));
|
||||
// Create an matrix with gain as a function of angle
|
||||
@ -791,7 +791,7 @@ bool StarTracker::calcSkyTemperature(double frequency, double beamwidth, double
|
||||
// LFmap: https://www.faculty.ece.vt.edu/swe/lwa/memo/lwa0111.pdf
|
||||
double iso408 = 50 * pow(150e6/408e6, 2.75); // Extra-galactic isotropic in reference map at 408MHz
|
||||
double isoT = 50 * pow(150e6/frequency, 2.75); // Extra-galactic isotropic at target frequency
|
||||
double cmbT = 2.725; // Cosmic microwave backgroud;
|
||||
double cmbT = 2.725; // Cosmic microwave background;
|
||||
double spectralIndex;
|
||||
const FITS *spectralIndexFITS = getSpectralIndexFITS();
|
||||
if (spectralIndexFITS && spectralIndexFITS->valid())
|
||||
|
@ -361,7 +361,7 @@ StarTrackerGUI::StarTrackerGUI(PluginAPI* pluginAPI, FeatureUISet *featureUISet,
|
||||
ui->galacticLatitude->setText("");
|
||||
ui->galacticLongitude->setText("");
|
||||
|
||||
// Intialise chart
|
||||
// Initialise chart
|
||||
m_chart.legend()->hide();
|
||||
ui->chart->setChart(&m_chart);
|
||||
ui->chart->setRenderHint(QPainter::Antialiasing);
|
||||
|
@ -784,7 +784,7 @@ bool VORLocalizerGUI::handleMessage(const Message& message)
|
||||
// Convert Morse to a string
|
||||
QString identString = Morse::toString(ident);
|
||||
// Idents should only be two or three characters, so filter anything else
|
||||
// other than TEST which indicates a VOR is under maintainance (may also be TST)
|
||||
// other than TEST which indicates a VOR is under maintenance (may also be TST)
|
||||
|
||||
if (((identString.size() >= 2) && (identString.size() <= 3)) || (identString == "TEST"))
|
||||
{
|
||||
|
@ -469,7 +469,7 @@ void VorLocalizerWorker::setChannelShift(int deviceIndex, int channelIndex, doub
|
||||
SWGSDRangel::SWGErrorResponse errorResponse;
|
||||
int httpRC;
|
||||
|
||||
// Get channel settings containg inputFrequencyOffset, so we can patch them
|
||||
// Get channel settings containing inputFrequencyOffset, so we can patch them
|
||||
httpRC = m_webAPIAdapterInterface->devicesetChannelSettingsGet(
|
||||
deviceIndex,
|
||||
channelIndex,
|
||||
@ -547,7 +547,7 @@ void VorLocalizerWorker::setAudioMute(int vorNavId, bool audioMute)
|
||||
int deviceIndex = m_channelAllocations[vorNavId].m_deviceIndex;
|
||||
int channelIndex = m_channelAllocations[vorNavId].m_channelIndex;
|
||||
|
||||
// Get channel settings containg inputFrequencyOffset, so we can patch them
|
||||
// Get channel settings containing inputFrequencyOffset, so we can patch them
|
||||
httpRC = m_webAPIAdapterInterface->devicesetChannelSettingsGet(
|
||||
deviceIndex,
|
||||
channelIndex,
|
||||
|
@ -51,7 +51,7 @@ private:
|
||||
bool m_running;
|
||||
|
||||
DevicePlutoSDRBox *m_plutoBox;
|
||||
int16_t *m_buf; //!< holds I+Q values of each sample from devce
|
||||
int16_t *m_buf; //!< holds I+Q values of each sample from device
|
||||
// int16_t *m_bufConv; //!< holds I+Q values of each sample converted to host format via iio_channel_convert
|
||||
uint32_t m_blockSizeSamples; //!< buffer sizes in number of (I,Q) samples
|
||||
SampleSourceFifo* m_sampleFifo; //!< DSP sample FIFO (I,Q)
|
||||
|
@ -223,7 +223,7 @@ void AaroniaRTSAInputWorker::onReadyRead()
|
||||
qint64 done = mReply->read(mBuffer.data() + bs, n);
|
||||
mBuffer.resize(bs + done);
|
||||
|
||||
// intialize parsing
|
||||
// initialize parsing
|
||||
int offset = 0;
|
||||
int avail = mBuffer.size();
|
||||
|
||||
|
@ -21,7 +21,7 @@
|
||||
// BladerRF2 is a SISO/MIMO device with a single stream supporting one or two Rx
|
||||
// Therefore only one thread can be allocated for the Rx side
|
||||
// All FIFOs must be registered before calling startWork() else SISO/MIMO switch will not work properly
|
||||
// with unpredicatable results
|
||||
// with unpredictable results
|
||||
|
||||
#include <QThread>
|
||||
#include <QMutex>
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user