procedure TForm2.FormShow(Sender: TObject);var i: Integer; cl: TColor;begin for i := 0 to 31 do begin cl := RGB(i*6, i*6, i*6); Series1.AddXY(i, i/32, '', cl); // выводимое значение в начале столбика Series1.AddXY(i+0.5, i/32, '', cl); // выводимое значение в конце столбика Series1.AddXY(i+0.5, 0, '', cl); // ноль в начале промежутка Series1.AddXY(i+1, 0, '', cl); // ноль в конце промежутка (начале нового столбика) end;end;
long ResMass[32]; ... SednArray(ResMass);
SendArray(long array[]){...}
Form2->Send....
....public:long *ResMass
long *ResMass=new long[32];
long *Res;.... Res[0] = Form1->ResMass[0];
long ResMass[32];
....public:long ResMass[32]
long *Res;.... Res = Form1->ResMass;
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner){ ResMass[0] = 150; ResMass[1] = 250; ...
... #pragma link "CSPIN"#pragma resource "*.dfm"TForm1 *Form1; long *ResMass = (long*)new long[32]; ...//---------------------------------------------------------------------------// Прототипы функций // тут функция принятия пакетовvoid packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);// тут БПФ функцияvoid FFT(register double *x,register double *y,register int N,register int I); //---------------------------------------------------------------------------// Функции // поток pcapDWORD WINAPI Input_thread( LPVOID lpParam ){ pcap_loop(adhandle, 0, packet_handler, NULL); return 0;} //---------------------------------------------------------------------------// приемник пакетов double *x,*y;void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data){ // вспомогательные строки AnsiString StrTmpPct, StrTmp, StrTmpFft; int j; // ввод строки ожидаемого мак StrMac = Form1->ComboBox2->Text; // очистка проверочной строки мак StrMacWt = ""; // запись входящего мак for(int i=0; i6; i++) StrMacWt += StrTmpPct.sprintf("%.2x", pkt_data[i]); // проверка на входящий мак if(StrMacWt == StrMac && !StepOne) { StrMacSh = StrMacWt; // нужный пакет принят StepOne = true; // начальнгое значение счетчика слов j = 16; // очистка строк StrPct = ""; StrRe = ""; StrIm = ""; StrFft = ""; for(unsigned int i=1; (i header->caplen + 1 ) ; i++) { spch.push_back(pkt_data[i - 1]); // запись принятого пакета в строку InPct StrPct += StrTmpPct.sprintf("%.2x ", spch[i-1]); // запись принятых данных в буфер if(i > 15) { sp.push_back((pkt_data[j] 8) | pkt_data[j+1]); if(i > (47 + Nb) && i (80 + Nb)) { A[i - (48 + Nb)] = sp[i]; //StrRe += StrTmp.sprintf("%0.4x ", sp[i]); StrRe += StrTmp.sprintf("%d ", A[i - (48 + Nb)]); } else if(i > (79 + Nb) && i (112 + Nb)) { B[i - (80 + Nb)] = sp[i]; //StrIm += StrTmp.sprintf("%0.4x ", sp[i]); StrIm += StrTmp.sprintf("%d ", B[i - (80 + Nb)]); } else if(i > (111 + Nb) && i (144 + Nb)) { C[i - (112 + Nb)] = sp[i]; //StrIm += StrTmp.sprintf("%0.4x ", sp[i]); //StrIm += StrTmp.sprintf("%d ", C[i - (112 + Nb)]); } j++; j++; } } for(int n = 0; n 32; n++) { if(n 16) { R[n] = (double)B[n]; I[n] = (double)C[n]; //R[n] = cos((n)*pi*Dgr/180)*1024; //I[n] = sin((n)*pi*Dgr/180)*1024; } else { R[n] = ((double)B[n] + (double)A[n])*0.707; I[n] = ((double)C[n] + (double)B[n])*0.707; //R[n] = cos((n)*pi*Dgr/180)*1024; //I[n] = sin((n)*pi*Dgr/180)*1024; } } // FFT x = new double(); y = new double(); //ResMass=new long[32]; x=R; y=I; //сама функция бпф FFT(&x[0],&y[0],32,1); for(int k = 0; k 32; k++) { double Re = x[k]; double Im = y[k]; long result = 2.0 *sqrt(Re * Re + Im * Im)/(double)32; ResMass[k] = result; //StrFft += StrTmpFft.sprintf("%0.4d ", result); StrFft += StrTmpFft.sprintf("%0.4d ", ResMass[k]); } ResMass[0] = 150; ResMass[1] = 250; } Sleep(1);} //---------------------------------------------------------------------------// бпф void FFT(register double *x,register double *y,register int N,register int I) { register double c,s,t1,t2,t3,t4,u1,u2,u3; register int i,j,p,l,L,M,M1,K; L=N; M=N/2; M1=N-1; while (L>=2) { l=L/2; u1=1.; u2=0.; t1=M_PI/(double)l; c=cos(t1); s=(-1)*I*sin(t1); for (j=0; jl;j++) { for (i=j; i N ;i+=L) { p=i+l; t1=*(x+i)+*(x+p); t3=*(x+i)-*(x+p); t2=*(y+i)+*(y+p); t4=*(y+i)-*(y+p); // *(x+i)=t1; *(x+p)=t3*u1-t4*u2; *(y+i)=t2; *(y+p)=t4*u1+t3*u2; } u3=u1*c-u2*s; u2=u2*c+u1*s; u1=u3; } L/=2; } j=0; for (i=0;iM1;i++) { if (i > j) { t1=*(x+j); t2=*(y+j); *(x+j)=*(x+i); *(y+j)=*(y+i); *(x+i)=t1; *(y+i)=t2; } K=M; while (j >=K) { j-=K; K/=2; } j+=K; } } //---------------------------------------------------------------------------// main//---------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner){ Sleep(50); if (pcap_findalldevs(&alldevs, errbuf) == -1) { Memo1->Lines->Add("Невозможно установить соеденение"); } else { Memo1->Lines->Add("программа открыта"); } for(d=alldevs;d;d=d->next) { ++i_p; ComboBox1->Items->Add(IntToStr(i_p)+ " " + d->description); } hEvent1 = CreateEvent( NULL, FALSE, TRUE, NULL ); ...
void __fastcall TForm1::Button1Click(TObject *Sender){ /******************************************************/ int inum=ComboBox1->ItemIndex+1; AnsiString nazv = ComboBox1->Text; for(d=alldevs, i_p=0; i_p inum-1 ;d=d->next, i_p++); if ( (adhandle=pcap_open_live(d->name,65354,1,1000,errbuf)) == NULL) { Memo1->Lines->Add("Невозможно открыть адаптер!"); } else Memo1->Lines->Add("Выбранный вами адептер "+ nazv + " открыт для принятия пакетов!"); Sleep(10); //*********создание потока приема****************** Handle_input = CreateThread( NULL, 0,Input_thread, &Handle_thread_input, CREATE_SUSPENDED, NULL); if ( Handle_input == NULL) ExitProcess(Handle_thread_input); // разрешение таймера Timer1->Enabled = true; //запуск потока для принятия пакетов с помощью pcap ResumeThread(Handle_input); Sleep(10); }
void __fastcall TForm2::FormCreate(TObject *Sender){ Res = Form1->ResMass; Series1->Clear();......
public:.....std::vectorlong>ResMass;