📄 main.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "main.h"
#include "Constelation.h"
#include "Console.h"
#include "Spectrum.h"
#include "PosibleFrequenciesDisplay.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "JvExControls"
#pragma link "JvgLabel"
#pragma link "JvLED"
#pragma link "JvSimIndicator"
#pragma link "JvEdit"
#pragma link "JvExStdCtrls"
#pragma link "JvValidateEdit"
#pragma link "JvXPCheckCtrls"
#pragma link "JvXPCore"
#pragma link "JvLabel"
#pragma link "JvCombobox"
#pragma link "JvgGroupBox"
#pragma link "JvXPButtons"
#pragma link "JvMenus"
#pragma link "uCiaComport"
#pragma link "JvProgressBar"
#pragma link "JvXPProgressBar"
#pragma link "JvAppIniStorage"
#pragma link "JvAppStorage"
#pragma link "JvComponentBase"
#pragma link "JvFormPlacement"
#pragma link "JvTrayIcon"
#pragma link "WSocket"
#pragma link "JvComCtrls"
#pragma link "Ping"
#pragma link "JvExMask"
#pragma link "JvToolEdit"
#pragma link "JvDriveCtrls"
#pragma link "JvExMask"
#pragma link "JvToolEdit"
#pragma link "JvDriveCtrls"
#pragma link "FtpSrv"
#pragma link "HttpSrv"
#pragma link "JvSpin"
#pragma link "JvStaticText"
#pragma link "JvPageList"
#pragma resource "*.dfm"
HANDLE thishandle;
TQAMForm *QAMForm;
//---------------------------------------------------------------------------
__fastcall TQAMForm::TQAMForm(TComponent* Owner)
: TForm(Owner)
{
gSettings.Handle=this->Handle;
busy=false;
Sound=0;
SoundInThread=0;
SoundOutThread=0;
gSettings.SoundCardDevs->Clear();
Sound=new CSound(44100);
if(Sound)
{
int num=Sound->GetNumDev();
for(int i=0;i<num;i++)
{
gSettings.SoundCardDevs->Add((AnsiString)((char*)(&((Sound->GetDeviceName(i))[0]))));
}
Sound->Close();
delete Sound;
Sound=0;
}
file_pkt_buffer_size=15000;
file_pkt_buffer.resize(file_pkt_buffer_size);
fil_data.resize(200);
file_selector_pos_step.reserve(100);
FClients = new TList;
UnRealHeaderGotIt=false;
udp_sender_conneted=false;
LevelBar->Position=0;
FRMLED->Status=false;
AMALED->Status=false;
LKLED->Status=false;
CDLED->Status=false;
JvLabelMSE->Caption="";
JvLabelRXFreq->Caption="";
StationID=0;
CiaComPort1->GetAvailablePorts(gSettings.RS232Ports);
mod=0;demod=0;criticalsection=0;
tstrings=0;webfile=-2;
ftp_clients = new TList;
pDirMonThread=NULL;
webmetfilerec=-2;
webfilfilerec=-2;
rs232criticalsection=0;
rs232criticalsection=new TCriticalSection;
criticalsection=new TCriticalSection;
CritDestroy=new TCriticalSection;
tstrings=new TStringList;
udpinbuffer=0;
rs232incharbuf=new unsigned char[TX_CHAR_BUFF_SIZE+2];
udpinbuffer=new unsigned char[UDPBufferInSize];
FILE* input_file = fopen("Wisdom.ini", "r");
if(input_file!=NULL)
{
if(!fftw_import_wisdom_from_file(input_file))Application->MessageBox("Failed Reading Wisdom.", "Alert!", MB_OK);
fclose(input_file);
}
}
//---------------------------------------------------------------------------
bool __fastcall TQAMForm::ActivateSettings()
{
if(gSettings.ModMajor.Active||gSettings.DemodMajor.Active)return false;
if(busy)return false;
busy=true;
CritDestroy->Acquire();
try{
if(SettingsForm->JvComboBoxSoundCardDevice->ItemIndex<0)
{
CritDestroy->Release();
busy=false;
return false;
}
gSettings.SetSampleRate(SettingsForm->JvComboBoxSoundCardSampleRate->Text.ToDouble());//double Samplerate
try
{
if(Sound){Sound->Close();delete Sound;}
Sound=new CSound(gSettings.Common.Samplerate);
int Dev=SettingsForm->JvComboBoxSoundCardDevice->ItemIndex;
Sound->SetOutDev(Dev);
Sound->InitPlayback(SettingsForm->JvValidateEditSoundCardBufferSize->Value,true);
Sound->SetInDev(Dev);
Sound->InitRecording(SettingsForm->JvValidateEditSoundCardBufferSize->Value,true);
}
catch (Exception &e )
{
ShowMessage((AnsiString)"SoundCard statup failed\n"+e.Message);
CritDestroy->Release();
busy=false;
return false;
}
catch (...)
{
ShowMessage("SoundCard statup failed");
CritDestroy->Release();
busy=false;
return false;
}
if(SettingsForm->JvXPCheckboxEnableRS232->Checked)
{
CiaComPort1->Baudrate=SettingsForm->JvComboBoxRS232Baudrate->Text.ToInt();
CiaComPort1->Port=SettingsForm->JvComboBoxRS232Port->Text.ToInt();
if(!CiaComPort1->PortOpen())
{
CritDestroy->Release();
busy=false;
return false;
}
CiaComPort1->PurgeTx();
}
UnRealClientLED->ColorOff=clBtnShadow;
if(StationID)delete [] StationID;StationID=0;
StationIDSize=SettingsForm->JvEditStationID->Text.Length();
StationID=new unsigned char[StationIDSize+4];
for(int i=0;i<StationIDSize;i++)StationID[i]=*(((unsigned char*)SettingsForm->JvEditStationID->Text.c_str())+i);
AddCRC32(StationID,&StationIDSize);
webmetfilenamerec="";
FileListBoxApplyPath(SettingsForm->JvDirectoryEditWebDir->Text);
LoadSendingFileNames();
file_pkt_buffer_ptr_w=0;
file_pkt_buffer_ptr_r=0;
try
{
WSocketListner->Port=(AnsiString)SettingsForm->JvValidateEditUDPListenPort->Value;
WSocketListner->Addr="0.0.0.0";
WSocketListner->Proto="udp";
WSocketSender->Port=(AnsiString)SettingsForm->JvValidateEditUDPSendPort->Value;
WSocketSender->Addr=SettingsForm->JvEditUdpSendAddr->Text;
WSocketSender->Proto="udp";
if(SettingsForm->JvXPCheckboxDeModOn->Checked)WSocketSender->Connect();
if(SettingsForm->JvXPCheckboxModOn->Checked)WSocketListner->Listen();
}
catch (Exception &e )
{
ShowMessage((AnsiString)"Udp statup failed\n"+e.Message);
CritDestroy->Release();
busy=false;
return false;
}
catch (...)
{
ShowMessage("Udp statup failed");
CritDestroy->Release();
busy=false;
return false;
}
int sz;
if(SettingsForm->JvComboBoxCT->Text=="QAM64") sz=64;
else sz=16;
gSettings.SetDemodMajor
(
false,//SettingsForm->JvXPCheckboxDeModOn->Checked,
16,//sz,
1,//JvValidateEditAlpha->Value,
1,//JvValidateEditGamma->Value,
100,//DemodFirSize,
1200.0,//(double)(JvValidateEditFreq->Value),
400,//JvValidateEditInterleavingLength->Value,//int InterleavingLength
10,//JvValidateEditRSErrorPercent->Value,//int RSErrorPercent
10//JvValidateEditFramePriod->Value//int FramePriod
);
gSettings.SetModMajor
(
false,//bool Active
sz,//int ConstalationSize
SettingsForm->JvValidateEditAlpha->Value,//double Alpha
SettingsForm->JvValidateEditGamma->Value,//double Gamma
SettingsForm->JvValidateEditModFIRSize->Value,//int Firsize
(double)(SettingsForm->JvValidateEditFreq->Value),//double Freq
SettingsForm->JvValidateEditInterleavingLength->Value,//int InterleavingLength
SettingsForm->JvValidateEditRSErrorPercent->Value,//int RSErrorPercent
SettingsForm->JvValidateEditFramePriod->Value//int FramePriod
);
gSettings.ModMinor.Webserveron=SettingsForm->JvXPCheckboxEnableWebServer->Checked;//bool Webserveron;
gSettings.ModMinor.Unrealon=SettingsForm->JvXPCheckboxEnableUnRealStreaming->Checked;//bool Unrealon;
gSettings.ModMinor.CM_SENDNEXTWEBPACKET_is_handled=true;//bool CM_SENDNEXTWEBPACKET_is_handled;
gSettings.ModMinor.IdleThreshold=(int)(((double)TX_CHAR_BUFF_SIZE)*(((double)SettingsForm->JvValidateEditIdleThreshold->Value)/100));//int IdleThreshold;
gSettings.DemodMinor.SlowLock=false;
gSettings.DemodMinor.Locked=false;
gSettings.DemodMinor.Ama=false;
gSettings.DemodMinor.DCD=false;
gSettings.DemodMinor.Status="";
gSettings.DemodMinor.StatusChanged=true;
gSettings.DemodMinor.Acquisitionstage=(AcquisitionStage)0;
gSettings.DemodMinor.Unrealon=SettingsForm->JvXPCheckboxEnableUnRealStreaming->Checked;
webpktdatasize=SettingsForm->JvValidateEditWebPacketSendSize->Value;
webpkt.reserve(webpktdatasize+80); //reserve some space
if(gSettings.ModMajor.ConstalationSize==64)half_a_buffer_delay=(int)(1000*((double)mod->dataformatter->buffsize)/(2.0*5.0*(gSettings.ModMajor.Symbol_Freq)));
else half_a_buffer_delay=(int)(1000*((double)mod->dataformatter->buffsize)/(2.0*3.0*(gSettings.ModMajor.Symbol_Freq)));
UnRealHeaderTimerEnabled=false;
StationIDTimerEnabled=false;
if((SettingsForm->JvXPCheckboxModOn->Checked)&&(SettingsForm->JvXPCheckboxEnableUnRealStreaming->Checked))
{
UnRealHeaderTimerInterval=SettingsForm->JvValidateEditUnRealHeaderSendPriod->Value;
UnRealHeaderTimerEnabled=true;
SocketUnRealTCPClient->Addr=SettingsForm->JvEditUnRealServerAddr->Text;
SocketUnRealTCPClient->Port=(AnsiString)SettingsForm->JvValidateEditUnRealServerPort->Value;
SocketUnRealTCPClient->Proto="tcp";
SocketUnRealTCPClient->Connect();
}
if((SettingsForm->JvXPCheckboxModOn->Checked)&&((SettingsForm->JvXPCheckboxEnableWebServer->Checked)||(SettingsForm->JvXPCheckboxEnableStationID->Checked)))
{
StationIDTimerEnabled=true;
StationIDTimerInterval=SettingsForm->JvValidateEditStationIDSendPeriod->Value;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -