Exemple #1
0
Phone::~Phone(void)
{
	timer->stop();
	for (int i=0; i<maxcall; i++)
	{
		if (calls[i])
			deleteCall(i);
	}
	if (out)
		free(out);
	if (buffer)
		free(buffer);
	if (prebuffer)
		free(prebuffer);
	if (playBuffer)
		free(playBuffer);
	if (enc_state)
		speex_encoder_destroy(enc_state);
	delete[] calls;
	delete recorder;
	delete player;
}
Exemple #2
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;
    }
}