Beispiel #1
0
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);
    }
}
Beispiel #2
0
/**
* @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);
            }
        }
    }
}
Beispiel #3
0
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);

}
Beispiel #4
0
/*! 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();
}
Beispiel #5
0
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;
}
Beispiel #6
0
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; }
}
Beispiel #7
0
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();
}
Beispiel #8
0
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;
}
Beispiel #9
0
// 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()
Beispiel #10
0
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);
}
Beispiel #11
0
static int getBandIndex(void) {
	float freq = getBand();
	return getHip9011BandIndex(freq);
}
Beispiel #12
0
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());
}
Beispiel #14
0
/*! 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;
    }
}