FFTransformer::FFTransformer(QObject *parent, char workersCount): QObject(parent), m_workersCount(workersCount), m_workersStopped(0), m_complexSub(nullptr) { if(!FFT_INIT_THREADS()) throw QString("unable to init fftw threading!"); auto o = Options::getInstance(); m_bufferSize = o->getBand() * Options::calculateActualBand(o->getActualBand(), o->getSignalSpeed()) / o->getSignalSpeed(); size_t i = 2; while ((i *= 2) < m_bufferSize) ; m_bufferSize = i; size_t bufferOverlap = (size_t)(o->getBand() / o->getActualBand()); if(workersCount <= 0) workersCount = 1; m_threads = new QThread*[workersCount]; m_workers = new WorkerFFT*[workersCount]; for (int i = 0; i < workersCount; ++i) { m_threads[i] = new QThread(this); m_workers[i] = new WorkerFFT(m_threads[i], m_bufferSize, bufferOverlap); connect(m_workers[i], &WorkerFFT::digested, this, &FFTransformer::dataProcessed); connect(m_workers[i], &WorkerFFT::finished, this, &FFTransformer::workerFinished); } }
/** * @brief Set the A vfo frequency * * @param f */ void setAFrequency(long long f) { double cal; dspAFrequency=0; ddsAFrequency=0; frequencyA=f; dspAFrequency=0; ddsAFrequency=f-frequencyALO; cal=(float)f*calibOffset; SetRXOsc(0,0,cal); updateVfoADisplay(); frequencyAChanged=1; // check the band if(displayHF) { int thisBand=getBand(f); if(band!=thisBand) { if(band!=-1) { forceBand(thisBand,FALSE); } } } }
TH1D* fitTools::getBand( TF1* f, const std::string& name ) { const int ndim_resp_q = f->GetNpar(); TMatrixD emat_resp_q(ndim_resp_q, ndim_resp_q); gMinuit->mnemat(&emat_resp_q[0][0], ndim_resp_q); return getBand(f, emat_resp_q, name); }
/*! parse udp data coming from N1MM+ * set center frequency if the number of this bandmap (nr=0,1) matches * RadioNr (1,2) of N1MM+ */ void So2sdrBandmap::xmlParseN1MM() { int nr=-1; int f=0; while (!xmlReader.atEnd() && !xmlReader.hasError()) { QXmlStreamReader::TokenType token=xmlReader.readNext(); if (token==QXmlStreamReader::StartDocument) continue; if (token==QXmlStreamReader::StartElement) { if (xmlReader.name()=="RadioNr") { bool ok; nr=xmlReader.readElementText().toInt(&ok)-1; if (!ok) nr=-1; } if (xmlReader.name()=="Freq") { bool ok; // note N1MM+ freqs not in Hz, multiply by 10 f=xmlReader.readElementText().toInt(&ok)*10; if (ok && f>0 && nr==settings->value(s_sdr_nrig,s_sdr_nrig_def).toInt()) { centerFreq=f; int b=getBand(f); setBandName(b); endFreqs[0] = centerFreq- settings->value(s_sdr_sample_freq,s_sdr_sample_freq_def).toInt()/2 -settings->value(s_sdr_offset,s_sdr_offset_def).toInt(); endFreqs[1] = centerFreq+ settings->value(s_sdr_sample_freq,s_sdr_sample_freq_def).toInt()/2 -settings->value(s_sdr_offset,s_sdr_offset_def).toInt(); setWindowTitle("Bandmap "+bandName+" ["+QString::number(endFreqs[0]/1000)+"-"+QString::number(endFreqs[1]/1000)+"]"); if (band != b) { spectrumProcessor->clearSigs(); spectrumProcessor->clearCQ(); band=b; } spectrumProcessor->setFreq(centerFreq, band, endFreqs[0], endFreqs[1]); spectrumProcessor->resetAvg(); makeFreqScaleAbsolute(); FreqLabel->setPixmap(freqPixmap); FreqLabel->update(); } } } } xmlReader.clear(); }
void So2sdrBandmap::initVariables() { callList.clear(); cmdLen=0; cmd=0; flow=0; fhigh=0; initialized = false; tx = false; centerFreq = 0; band=getBand(centerFreq); bandName.clear(); endFreqs[0] = 0; endFreqs[1] = 0; addOffset = 0; _invert = false; bandMapName="So2sdrBandmap1"; firstTime=false; }
int main(int argc, char* argv[]) { fprintf(stderr, "GeoTIFF to CONSOLE PRINTER\nVersion %s.%s. Free software. GNU General Public License, version 3\n", PROG_VERSION, DATE_VERSION); fprintf(stderr, "Copyright (C) 2016 Igor Garkusha.\nUkraine, Dnipro (Dnipropetrovsk)\n\n"); if(!((argc==6)||(argc==8)||(argc==10))) { fputs("Input parameters not found!\n", stderr); printHelp(); return 1; } int headerFormat = 1; int BandNumber = 0; char separator = '\x20'; char SHPMaskFile[MAX_PATH] = ""; for(int i=1; i<argc-2; i++) { if(0 == strcmp(argv[i], "-f")) headerFormat = getHeaderFormat(argv[i], argv[i+1]); else if(0 == strcmp(argv[i], "-b")) BandNumber = getBand(argv[i], argv[i+1]); else if(0 == strcmp(argv[i], "-s")) { if(0 == strcmp(argv[i+1], "space")) separator = '\x20'; else if(0 == strcmp(argv[i+1], "tab")) separator = '\t'; else if(1 == strlen(argv[i+1])) separator = argv[i+1][0]; // else default -> '\x20' } else if(0 == strcmp(argv[i], "-m")) strcpy(SHPMaskFile, argv[i+1]); } OGRRegisterAll(); GDALAllRegister(); if((ERROR != headerFormat)&&(ERROR != BandNumber)) { doTif2Con(argv[argc-1], headerFormat, BandNumber, separator, SHPMaskFile); return 0; } else { printHelp(); return 1; } }
static void showHipInfo(void) { if (!boardConfiguration->isHip9011Enabled) { scheduleMsg(logger, "hip9011 driver not active"); return; } printSpiState(logger, boardConfiguration); scheduleMsg(logger, "enabled=%s state=%d bore=%fmm freq=%fkHz PaSDO=%d", boolToString(boardConfiguration->isHip9011Enabled), state, engineConfiguration->cylinderBore, getBand(), engineConfiguration->hip9011PrescalerAndSDO); scheduleMsg(logger, "band_index=%d gain %f/index=%d", currentBandIndex, boardConfiguration->hip9011Gain, currentGainIndex); scheduleMsg(logger, "integrator index=%d knockVThreshold=%f knockCount=%d maxKnockSubDeg=%f", currentIntergratorIndex, engineConfiguration->knockVThreshold, engine->knockCount, engineConfiguration->maxKnockSubDeg); scheduleMsg(logger, "spi=%s IntHold@%s response count=%d incorrect response=%d", getSpi_device_e(hipSpiDevice), hwPortname(boardConfiguration->hip9011IntHoldPin), correctResponse, invalidResponse); scheduleMsg(logger, "CS@%s updateCount=%d", hwPortname(boardConfiguration->hip9011CsPin), settingUpdateCount); scheduleMsg(logger, "hip %fv/last=%f@%s/max=%f spiCount=%d adv=%d", engine->knockVolts, getVoltage("hipinfo", engineConfiguration->hipOutputChannel), getPinNameByAdcChannel("hip", engineConfiguration->hipOutputChannel, pinNameBuffer), hipValueMax, spiCount, boardConfiguration->useTpicAdvancedMode); scheduleMsg(logger, "mosi=%s", hwPortname(getMosiPin(hipSpiDevice))); scheduleMsg(logger, "miso=%s", hwPortname(getMisoPin(hipSpiDevice))); scheduleMsg(logger, "sck=%s", hwPortname(getSckPin(hipSpiDevice))); scheduleMsg(logger, "start %f end %f", engineConfiguration->knockDetectionWindowStart, engineConfiguration->knockDetectionWindowEnd); hipValueMax = 0; engine->printKnockState(); }
void QtRPT::setPageSettings(QPrinter *printer) { QDomElement docElem = xmlDoc->documentElement().childNodes().at(0).toElement(); ph = docElem.attribute("pageHeight").toInt(); pw = docElem.attribute("pageWidth").toInt(); ml = docElem.attribute("marginsLeft").toInt(); mr = docElem.attribute("marginsRight").toInt(); mt = docElem.attribute("marginsTop").toInt(); mb = docElem.attribute("marginsBottom").toInt(); qreal unit = docElem.attribute("unit").toInt(); QString unitName = docElem.attribute("unitName"); if (unit == 0) // keep backward compatibility unit = 40; if (unitName == "" || unitName == "cm"){ unit /= 10; // convert cm to mm printer->setPaperSize(QSizeF(pw/unit, ph/unit), QPrinter::Millimeter); printer->setPageMargins(ml/unit+0.01, mt/unit+0.01, mr/unit+0.01, mb/unit+0.01, QPrinter::Millimeter); }else{ //inch printer->setPaperSize(QSizeF(pw/unit, ph/unit), QPrinter::Inch); printer->setPageMargins(ml/unit+0.001, mt/unit+0.001, mr/unit+0.001, mb/unit+0.001, QPrinter::Inch); } int orientation = docElem.attribute("orientation").toInt(); if (orientation == 1) { printer->setOrientation(QPrinter::Landscape); } else { printer->setOrientation(QPrinter::Portrait); } QRect r = printer->pageRect(); //painter.drawRect(0,0,r.width(),r.height()); //Рамка вокруг страницы koefRes_h = static_cast<double>(r.height()) / (ph - mt - mb); koefRes_w = static_cast<double>(r.width()) / (pw - ml - mr); reportTitle = getBand(ReportTitle, docElem); pageHeader = getBand(PageHeader, docElem); pageFooter = getBand(PageFooter, docElem); masterFooter = getBand(MasterFooter, docElem); reportSummary = getBand(ReportSummary, docElem); masterData = getBand(MasterData, docElem); masterHeader = getBand(MasterHeader, docElem); pageSettingsSet = true; }
// format the current frequency for display and printing void RADIO::formatFrequency(char *s, uint8_t length) { RADIO_BAND b = getBand(); RADIO_FREQ f = getFrequency(); if ((s != NULL) && (length > 10)) { *s = '\0'; if ((b == RADIO_BAND_FM) || (b == RADIO_BAND_FMWORLD)) { // " ff.ff MHz" or "fff.ff MHz" int16_to_s(s, (uint16_t)f); // insert decimal point s[5] = s[4]; s[4] = s[3]; s[3] = '.'; // append units strcpy(s+6, " MHz"); } // if // f = _freqLow + (channel * _bandSteps); // if (f < 10000) Serial.write(' '); // Serial.print(f / 100); Serial.print('.'); Serial.print(f % 100); Serial.print(" MHz "); } // if } // formatFrequency()
I2C::I2C(int luno, bool alt1): APBdevice(1, 20 + luno), b(reinterpret_cast <I2C_BAND *> (getBand())), dcb(reinterpret_cast <I2C_DCB *> (getAddress())), eventIrq(29 + 2 * luno), errorIrq(30 + 2 * luno){ inprogress = 0; pinbase = 2 + 4 * luno + (alt1 ? 2 : 0); }
static int getBandIndex(void) { float freq = getBand(); return getHip9011BandIndex(freq); }
FrequencyBand * FrequencyMask::getNext() { return (getBand(++current)); }
Solid::Control::ModemInterface::Band Solid::Control::ModemGsmNetworkInterface::getBand() const { Q_D(const ModemGsmNetworkInterface); return_SOLID_CALL(Ifaces::ModemGsmNetworkInterface *, d->backendObject(), UnknownBand, getBand()); }
/*! read data from TCP socket. Connects to signal readyRead of socket */ void So2sdrBandmap::readData() { // continue on as long as data is available while (socket->bytesAvailable()) { // first read command and length char buff[2]; if (cmdLen==0) { if (socket->bytesAvailable()<2) return; int n=socket->read(buff,2); if (n==2) { cmd=buff[0]; cmdLen=buff[1]; } } QByteArray data; data.clear(); if (cmdLen>0) { if (socket->bytesAvailable()<cmdLen) return; data=socket->read(cmdLen); } bool ok=false; int f; unsigned int ff; switch (cmd) { case BANDMAP_CMD_SET_FREQ: // set frequency f=data.toInt(&ok); if (ok) { centerFreq=f; int b=getBand(f); setBandName(b); endFreqs[0] = centerFreq- settings->value(s_sdr_sample_freq,s_sdr_sample_freq_def).toInt()/2 -settings->value(s_sdr_offset,s_sdr_offset_def).toInt(); endFreqs[1] = centerFreq+ settings->value(s_sdr_sample_freq,s_sdr_sample_freq_def).toInt()/2 -settings->value(s_sdr_offset,s_sdr_offset_def).toInt(); setWindowTitle("Bandmap "+bandName+" ["+QString::number(endFreqs[0]/1000)+"-"+QString::number(endFreqs[1]/1000)+"]"); if (band != b) { // if band changed, clear all signals spectrumProcessor->clearSigs(); spectrumProcessor->clearCQ(); band=b; } spectrumProcessor->setFreq(centerFreq, band, endFreqs[0], endFreqs[1]); spectrumProcessor->resetAvg(); makeFreqScaleAbsolute(); FreqLabel->setPixmap(freqPixmap); FreqLabel->update(); } break; case BANDMAP_CMD_SET_LOWER_FREQ: // set freq finder lower limit ff=data.toUInt(&ok); if (ok) { flow=ff; } break; case BANDMAP_CMD_SET_UPPER_FREQ: // set freq finder upper limit ff=data.toUInt(&ok); if (ok) { fhigh=ff; } break; case BANDMAP_CMD_QUIT: // quit program quit(); break; case BANDMAP_CMD_TX: // set transmit state tx=true; txLabel.setText("<font color=#FF0000>TX"); settings->setValue(s_sdr_peakdetect,false); break; case BANDMAP_CMD_RX: // cancel transmit state tx=false; txLabel.setText("<font color=#000000>TX"); settings->setValue(s_sdr_peakdetect,true); break; case BANDMAP_CMD_FIND_FREQ: // find open frequency if (centerFreq!=0 && flow!=0 && fhigh!=0) { spectrumProcessor->startFindCQ(flow,fhigh,callList); } break; case BANDMAP_CMD_SET_INVERT: // invert spectrum if (data[0]==char(0x00)) { setInvert(false); } else { setInvert(true); } break; case BANDMAP_CMD_SET_ADD_OFFSET: // set additional IF offset f=data.toInt(&ok); if (ok) { spectrumProcessor->setAddOffset(f); } break; case BANDMAP_CMD_ADD_CALL: // add callsign addCall(data); break; case BANDMAP_CMD_CLEAR: // clear callsign list callList.clear(); break; case BANDMAP_CMD_DELETE_CALL: // delete callsign deleteCall(data); break; case BANDMAP_CMD_QSY_UP: // qsy to next higher signal qsyNext(true); break; case BANDMAP_CMD_QSY_DOWN: // qsy to next lower signal qsyNext(false); break; } cmd=0; cmdLen=0; } }