|
|
void | showSoundInError (const QString &errorMsg) |
|
void | showSoundOutError (const QString &errorMsg) |
|
void | showStatusMessage (const QString &statusMsg) |
| void | dataSink (qint64 frames) |
| void | guiUpdate () |
|
void | setXIT (int n) |
|
void | qsy (int hzDelta) |
|
void | onDriftChanged (qint64 new_drift_ms) |
|
void | setFreqOffsetForRestore (int freq, bool shouldRestore) |
|
bool | tryRestoreFreqOffset () |
|
void | changeFreq (int) |
|
bool | hasExistingMessageBufferToMe (int *pOffset) |
|
bool | hasExistingMessageBuffer (int submode, int offset, bool drift, int *pPrevOffset) |
|
bool | hasClosedExistingMessageBuffer (int offset) |
|
void | logCallActivity (CallDetail d, bool spot=true) |
|
void | logHeardGraph (QString from, QString to) |
|
QString | lookupCallInCompoundCache (QString const &call) |
|
void | cacheActivity (QString key) |
|
void | restoreActivity (QString key) |
|
void | clearActivity () |
|
void | clearBandActivity () |
|
void | clearRXActivity () |
|
void | clearCallActivity () |
|
void | createGroupCallsignTableRows (QTableWidget *table, const QString &selectedCall, bool &showIconColumn) |
|
void | displayTextForFreq (QString text, int freq, QDateTime date, bool isTx, bool isNewLine, bool isLast) |
|
void | writeNoticeTextToUI (QDateTime date, QString text) |
|
int | writeMessageTextToUI (QDateTime date, QString text, int freq, bool isTx, int block=-1) |
|
bool | isMessageQueuedForTransmit () |
|
bool | isInDecodeDelayThreshold (int seconds) |
|
void | prependMessageText (QString text) |
|
void | addMessageText (QString text, bool clear=false, bool selectFirstPlaceholder=false) |
|
void | confirmThenEnqueueMessage (int timeout, int priority, QString message, int offset, Callback c) |
|
void | enqueueMessage (int priority, QString message, int offset, Callback c) |
|
void | resetMessage () |
|
void | resetMessageUI () |
|
void | restoreMessage () |
|
void | initializeDummyData () |
|
void | initializeGroupMessage () |
|
bool | ensureCallsignSet (bool alert=true) |
|
bool | ensureKeyNotStuck (QString const &text) |
|
bool | ensureNotIdle () |
|
bool | ensureCanTransmit () |
|
bool | ensureCreateMessageReady (const QString &text) |
|
QString | createMessage (QString const &text, bool *pDisableTypeahead) |
|
QString | appendMessage (QString const &text, bool isData, bool *pDisableTypeahead) |
|
QString | createMessageTransmitQueue (QString const &text, bool reset, bool isData, bool *pDisableTypeahead) |
| void | resetMessageTransmitQueue () |
| | Resets the frame-level transmission state after a message completes.
|
|
QPair< QString, int > | popMessageFrame () |
|
void | tryNotify (const QString &key) |
| void | processDecodeEvent (JS8::Event::Variant const &) |
|
void | updateCQButtonDisplay () |
|
void | updateHBButtonDisplay () |
| void UI_Constructor::dataSink |
( |
qint64 | frames | ) |
|
|
slot |
Perform real to complex FFT; note that the Fortran code performed this operation in the four2a subroutine, which contains a cache of plans. However, since the FFTW3 library itself caches, this resulted in double caching, so as an experiment we're allowing the library to handle caching.
Note that the FFTW library requires all calls but for the plan execution, i.e., fftwf_execute(), to be serialized. The library doesn't require prescriptive serialization, anything will do so long as the result is one thread at a time.
Providing room for an extra complex value, i.e., a pair of floats, real and imaginary parts, allows us to use the same buffer for the FFT input and output.
While the memory for the FFT can come from anywhere, if we ask the library for it, it'll guarantee that it's aligned for use of SIMD instructions, which will in turn allow it to use them.