//--------------------------------------------------------------------------- #include #pragma hdrstop #include "MainUnit.h" #include "DetectUnit.h" #include "AIOUSB.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" unsigned long DeviceIndex; TImage *LevelImage[32]; TSpeedButton *OutButton[4]; TTrackBar *FreqOutTrack[3]; TSpeedButton *FreqOutButton[3]; Graphics::TBitmap *LowLevel = new Graphics::TBitmap(); Graphics::TBitmap *HighLevel = new Graphics::TBitmap(); unsigned long DIOData; bool DoUpdate; TMainForm *MainForm; //--------------------------------------------------------------------------- __fastcall TMainForm::TMainForm(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- AnsiString FormatFreq(double Freq) { if (Freq >= 1000000) return Format("%.2f", ARRAYOFCONST((Freq / 1000000))) + "MHz"; else if (Freq >= 10000) return Format("%.1f", ARRAYOFCONST((Freq / 1000))) + "KHz"; else if (Freq >= 1000) return Format("%.2f", ARRAYOFCONST((Freq / 1000))) + "KHz"; else if (Freq >= 10) return Format("%.1f", ARRAYOFCONST((Freq))) + "Hz"; else if (Freq >= 1) return Format("%.2f", ARRAYOFCONST((Freq))) + "Hz"; else return Format("%f", ARRAYOFCONST((Freq))) + "Hz"; } void __fastcall TMainForm::FormCreate(TObject *Sender) { TDetectForm *DetectForm = new TDetectForm(this); BYTE OutMask; int I; unsigned long Status; DeviceIndex = diOnly; OutMask = 0x00; DIOData = 0xFFFFFFFF; Status = DIO_Configure(DeviceIndex, False, &OutMask, &DIOData); if (Status != ERROR_SUCCESS) { if (DetectForm->ShowModal() == mrOk) { DeviceIndex = DetectForm->DeviceIndex; DetectForm->Free(); } else { DetectForm->Free(); Application->Terminate(); exit(0); } } OutMask = 0x00; DIOData = 0xFFFFFFFF; DIO_Configure(DeviceIndex, False, &OutMask, &DIOData); for (I = 0; I <= 2; I++) { CTR_8254Mode(DeviceIndex, I, 1, 2); CTR_8254Mode(DeviceIndex, I, 2, 3); } LevelImage[ 0] = Image1; LevelImage[ 1] = Image2; LevelImage[ 2] = Image3; LevelImage[ 3] = Image4; LevelImage[ 4] = Image5; LevelImage[ 5] = Image6; LevelImage[ 6] = Image7; LevelImage[ 7] = Image8; LevelImage[ 8] = Image9; LevelImage[ 9] = Image10; LevelImage[10] = Image11; LevelImage[11] = Image12; LevelImage[12] = Image13; LevelImage[13] = Image14; LevelImage[14] = Image15; LevelImage[15] = Image16; LevelImage[16] = Image17; LevelImage[17] = Image18; LevelImage[18] = Image19; LevelImage[19] = Image20; LevelImage[20] = Image21; LevelImage[21] = Image22; LevelImage[22] = Image23; LevelImage[23] = Image24; LevelImage[24] = Image25; LevelImage[25] = Image26; LevelImage[26] = Image27; LevelImage[27] = Image28; LevelImage[28] = Image29; LevelImage[29] = Image30; LevelImage[30] = Image31; LevelImage[31] = Image32; OutButton[0] = OutButtonA; OutButton[1] = OutButtonB; OutButton[2] = OutButtonC; OutButton[3] = OutButtonD; FreqOutTrack[0] = FreqOutTrackA; FreqOutTrack[1] = FreqOutTrackB; FreqOutTrack[2] = FreqOutTrackC; FreqOutButton[0] = FreqOutButtonA; FreqOutButton[1] = FreqOutButtonB; FreqOutButton[2] = FreqOutButtonC; LevelImages->GetBitmap(0, LowLevel); LevelImages->GetBitmap(1, HighLevel); DoUpdate = True; ReadTime->Enabled = True; } //--------------------------------------------------------------------------- void __fastcall TMainForm::ReadTimeTimer(TObject *Sender) { int I; unsigned long oDIOData, Changes; oDIOData = DIOData; DIO_ReadAll(DeviceIndex, &DIOData); Changes = DIOData ^ oDIOData; if (DoUpdate) { Changes = 0xFFFFFFFF; DoUpdate = False; } // end if DoUpdate for (I = 0; I <= 31; I++) { if ((Changes & (1 << I)) != 0) { if ((DIOData & (1 << I)) != 0) LevelImage[I]->Picture->Assign(HighLevel); else LevelImage[I]->Picture->Assign(LowLevel); } // end if Changes } // end for i } //--------------------------------------------------------------------------- void __fastcall TMainForm::LevelImageClick(TObject *Sender) { int I; bool NewValue; I = ((TImage *)(Sender))->Tag; DIOData = DIOData ^ (1 << I); //Toggle bit NewValue = (DIOData & (1 << I)) != 0; //Get bit value DIO_Write1(DeviceIndex, I, NewValue); DoUpdate = True; } //--------------------------------------------------------------------------- void __fastcall TMainForm::FormDestroy(TObject *Sender) { LowLevel->Free(); HighLevel->Free(); } //--------------------------------------------------------------------------- void __fastcall TMainForm::OutButtonClick(TObject *Sender) { int I; BYTE OutMask; OutMask = 0x00; for (I = 0; I <= 3; I++) { if (OutButton[I]->Down) OutMask = OutMask | (1 << I); } // end for I I = ((TSpeedButton *)(Sender))->Tag; DIOData = DIOData | (0xFF << (I * 8)); //Set new output byte high, in case user made a mistake DIO_Configure(DeviceIndex, TristateButton->Down, &OutMask, &DIOData); DoUpdate = True; } //--------------------------------------------------------------------------- void __fastcall TMainForm::TristateButtonClick(TObject *Sender) { int I; BYTE OutMask; OutMask = 0x00; for (I = 0; I <= 3; I++) { if (OutButton[I]->Down) OutMask = OutMask | (1 << I); } // end for I DIO_Configure(DeviceIndex, TristateButton->Down, &OutMask, &DIOData); } //--------------------------------------------------------------------------- void __fastcall TMainForm::FreqOutTrackChange(TObject *Sender) { int I; double CounterValue; AnsiString TempString; I = ((TTrackBar *)(Sender))->Tag; CounterValue = (0xFFFF - FreqOutTrack[I]->Position); TempString = FormatFreq(3000000 / (CounterValue * CounterValue)); FreqOutButton[I]->Caption = "Output " + TempString; if (FreqOutButton[I]->Down) { CTR_8254ModeLoad(DeviceIndex, I, 1, 2, CounterValue); CTR_8254ModeLoad(DeviceIndex, I, 2, 3, CounterValue); } } //--------------------------------------------------------------------------- void __fastcall TMainForm::FreqOutButtonClick(TObject *Sender) { int I; unsigned long CounterValue; I = ((TSpeedButton *)(Sender))->Tag; if (FreqOutButton[I]->Down) { CounterValue = unsigned(0xFFFF - FreqOutTrack[I]->Position); CTR_8254ModeLoad(DeviceIndex, I, 1, 2, CounterValue); CTR_8254ModeLoad(DeviceIndex, I, 2, 3, CounterValue); } else { CTR_8254Mode(DeviceIndex, I, 1, 2); CTR_8254Mode(DeviceIndex, I, 2, 3); } } //---------------------------------------------------------------------------