//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "test.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        FILE *f0;
        int freq=(int)(StrToFloat(ComboBox1->Text)*1000000);
        float a=StrToFloat(ComboBox2->Text), amp=32768.0; ///400.0*a; //pow(10.0,a/20.0);
        float nt=StrToFloat(ComboBox3->Text);
        float fr, pi2=atan(1.0)*8.0, t;
        unsigned int ByteSound[1];
        int i, n=8192, n3, n1 ,n2; //32768;     16376
        f0=fopen("f:\\stop","wb");
        fclose(f0);
        sleep(1);
        unlink("f:\\stop");
        sleep(1);
        ByteSound[0]=n*4;
        f0=fopen("f:\\test.rdr","wb");
        fwrite(ByteSound,1,4,f0);
        t=0;
        fr=freq*pi2/100.0;
        n2=nt*100;
        n1=n-n2;
        n3=8000;
        Chart1->Series[0]->Clear();
        for(i=0; i<10; i++) Signal[i][0]=0;
        for(i=0; i<n2; i++)  Signal[i+10][0]=amp; //*sin(fr*(float)i);
        for(i=n2+10; i<n; i++) Signal[i][0]=0;
        for(i=0; i<10+n3; i++) Signal[i][1]=0;
        for(i=0; i<n2; i++)  Signal[i+n3+10][1]=amp; //*sin(fr*(float)i);
        for(i=n2+n3+10; i<n; i++) Signal[i][1]=0;
        fwrite(Signal,n,4,f0);
        fclose(f0);
        chdir("d:\\radar\\sdk\\examples\\imitator\\debug");
        WinExec("exam_adc.exe",SW_HIDE);
        Chart1->Series[0]->Clear();
        Chart1->Series[1]->Clear();
        for(i=0; i<n; i++) Chart1->Series[0]->Add(Signal[i][0],"",clBlue);
        for(i=0; i<n; i++) Chart1->Series[1]->Add(Signal[i][1],"",clRed);
        Chart1->LeftAxis->Minimum=-100;
        Chart1->LeftAxis->Maximum=a+100;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
FILE *f0;
int freq=(int)(StrToFloat(ComboBox1->Text)*1000000);
float aa, a=StrToFloat(ComboBox2->Text), fr, pi2=atan(1.0)*8.0, t;
int i, amp1=(int)(32767.0/400.0*a)/1.1;
int amp2=32767;
f0=fopen("f:\\stop","wb");
fclose(f0);
        sleep(1);
        unlink("f:\\stop");
        sleep(1);
chdir("d:\\radar\\sdk\\examples\\dac_sdram1\\debug");
f0=fopen("exam_bdac_sdram.ini","wt");
fprintf(f0,"[Option]\n");
fprintf(f0,"WorkMode= 7 				; Режим теста: \n");
fprintf(f0,"			    			; 0 - однократный вывод с помощью ЦПУ(в программном цикле)  \n");
fprintf(f0,"			    			; 1 - однократный вывод с помощью ПДП через FIFO(в программном цикле)  \n");
fprintf(f0,"			    			; 2 - однократный вывод с помощью ПДП через SDRAM(в программном цикле)  \n");
fprintf(f0,"			    			; 3 - вывод из FIFO в режиме рестарта  \n");
fprintf(f0,"			    			; 4 - вывод из SDRAM в режиме рестарта --- Только для независимых плат! ---- \n");
fprintf(f0,"			    			; 5 - циклический вывод из FIFO  \n");
fprintf(f0,"			    			; 6 - непрерывный вывод помощью ПДП через FIFO  \n");
fprintf(f0,"			    			; 7 - циклический вывод из SDRAM  \n");

fprintf(f0,"IsAlwaysWriteSdram= 0 	; (WorkMode=2) 0-записывать SDRAM  только в первом цикле, 1- записывать SDRAM в каждом цикле !   \n");
fprintf(f0,"SamplesPerChannel= 16384   ; 1073741824	; Число отсчётов на канал    \n");
fprintf(f0,"IsSystemMemory= 1 		; 0 - пользовательская память (доступен максимальный размер)  \n");
fprintf(f0,"						; 1 - системная память(доступна максимальная скорость)  \n");
fprintf(f0,"SdramWriteBufSize= 1	; Размер буфера одной записи в SDRAM(Кбайт) \n");
fprintf(f0,"PldFileName= ambpex2_v10_adm216x100m_bdacsdram.mcs  \n");
fprintf(f0,"IsAlwaysLoadPld= 0		; 0 - загружать прошивку только если она не загружена \n");
fprintf(f0,"						; 1 - всегда загружать прошивку при старте программы  \n");
fprintf(f0,"MasterSlave= 0			; 0 - независимые платы, 1 - режим  Master/Slave   \n");
fprintf(f0,"StartSource= 0			; Источник сигнала старт: 0 - программный, 2 - от разъёма SDX(компаратор 1) \n");
fprintf(f0,"StartInverting= 0		; Инверсия сигнала старт: 0 - нет, 1 - да   \n");
fprintf(f0,"StartTrigger= 1			; Режим старта : 0 - потенциальный, 1 - тригеррный  \n");
fprintf(f0,"StopSource= 0			; Источник сигнала стоп для режима триггерного старта  \n");
fprintf(f0,"StopInverting= 0		; Инверсия сигнала стоп: 0 - нет, 1 - да \n");
fprintf(f0,"ThresholdComp1= 0.0		; Порог компаратора 1 (Вольт)  \n");
fprintf(f0,"               \n");
fprintf(f0,"[device0_basedac] \n");
fprintf(f0,"ClockSource= 2			; Генератор: 0-внут.66,6МГц, 1-внут.60МГц, 2-внут.100МГ, 3-внешний SDX  \n");
fprintf(f0,"ExtClockValue= 110000000 ; Частота внешнего тактового генератора (Гц)  \n");
fprintf(f0,"MaskChannels= 1			; Маска каналов: 1-канал 0,2-канал 1,3-канал 0 и 1  \n");
fprintf(f0,"DacDataControl= 1		; DacDataControl: 0-DUAL PORT, 1-ONE PORT   \n");
fprintf(f0,"OutRate= 110000000		; Частота дискретизации ЦАП   \n");
fprintf(f0,"AmpChan0= %d			; Амплитуда сигнала канала 0 (0-32767) \n",amp1);
fprintf(f0,"AmpChan1= %d			; Амплитуда сигнала канала 1 (0-32767)  \n",amp2);
fprintf(f0,"OutFreq= %d		; Частота выходного сигнала ЦАП канала 0 и 1(Гц)  \n",freq);
fprintf(f0,"SignalType= 0			; Тип выходного сигнала ЦАП: 0 - sin,  1- sin & cos, 2 - меандр,3 - строчные + кадровые  \n");
fprintf(f0,"Filter= 4			    ; Длина фильтра: 1,2,4,6,8  --- только для сигнала меандр (MaskChannels=3)  \n");
fprintf(f0,"SamplesPerString= 256	; Число отсчётов в строке (256,512,1024,2048,4096,8192)  \n");
fprintf(f0,"StringsPerFrame= 256		; Число строк в кадре (256,512,1024,2048,4096,8192)  \n");
fprintf(f0,"SamplesPerStringReverse= 128;Число отсчётов в обратном ходе сторочной развёртки (0 - 8192)  \n");
fclose(f0);
chdir("d:\\radar\\sdk\\examples\\dac_sdram1\\debug");
WinExec("exam_bdac_sdram.exe",SW_HIDE);
        Chart1->Series[0]->Clear();
        Chart1->Series[1]->Clear();
        fr=freq*pi2/100.0;
        for(i=0; i<10000; i++)
        {
        aa=a*sin(fr*t);
        t++;
        Chart1->Series[1]->Add(aa,"",clBlue);
        }
        for(i=0; i<10000; i++)
        Chart1->Series[1]->XValue[i]=(float)i/2.0;
        Chart1->LeftAxis->Minimum=-a-100;
        Chart1->LeftAxis->Maximum=a+100;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
        FILE *f0;
        f0=fopen("f:\\stop","wb");
        fclose(f0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
        FILE *f0;
        int n=300000, nt=StrToInt(ComboBox4->Text)*100;
        int freq=(int)(StrToFloat(ComboBox1->Text)*1000000);
        float a, fr, pi2=atan(1.0)*8.0, t;
        int i, j, m;
        unsigned int ByteSound[1];
        fr=freq*pi2/100.0;
        for(i=0; i<5000; i++) //50mks
        {
               Signal[i][0]=0;
               Signal[i][1]=0;
        }
                t=0.0;
                for(m=0; m<5000; m++) //50mks длительность импульса
                {
                a=32767.0*sin(fr*pi2*t);
                Signal[i][0]=a;
                Signal[i][1]=0;
                t+=1.e-5;
                i++;
                }
        for(m=0; m<nt-5000; m++)
        {
               Signal[i][0]=0;
               Signal[i][1]=0;
               i++;
        }
                t=0.0;
                for(m=0; m<5000; m++)
                {
                a=32767.0*sin(fr*pi2*t);
                Signal[i][0]=0;
                Signal[i][1]=a;
                t+=1.e-5;
                i++;
                }
        for(m=0; m<5000; m++)
        {
               Signal[i][0]=0;
               Signal[i][1]=0;
               i++;
        }
        n=i;
        ByteSound[0]=n*4;
        f0=fopen("f:\\test.rdr","wb");
        fwrite(ByteSound,1,4,f0);
        fwrite(Signal,4,n,f0);
        fclose(f0);
chdir("d:\\radar\\sdk\\examples\\test\\debug");
//WinExec("exam_bdac_sdram.exe",SW_HIDE);
system("exam_adc.exe");
        f0=fopen("f:\\data_0.bin","rb");
        fread(Sg,4,n,f0);
        fclose(f0);
        Chart1->Series[0]->Clear();
        Chart1->Series[1]->Clear();
        for(i=0; i<n; i++)
        {
        Chart1->Series[0]->Add(Sg[i][0],"",clBlue);
        Chart1->Series[1]->Add(Sg[i][1],"",clRed);
        }
        for(i=0; i<n; i++)
        {
        Chart1->Series[0]->XValue[i]=(float)i/100.0;
        Chart1->Series[1]->XValue[i]=(float)i/100.0;
        }
}
//---------------------------------------------------------------------------

