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; }
/*! 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; } }