⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 QAM module to use in Java with an easy interface and powerful performance
💻 CPP
📖 第 1 页 / 共 5 页
字号:
//---------------------------------------------------------------------------

#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 + -