unit MainUnit; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ImgList, ExtCtrls, Buttons, ComCtrls; type TMainForm = class(TForm) LevelImages: TImageList; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; OutButton1C: TSpeedButton; OutButton1B: TSpeedButton; OutButton1A: TSpeedButton; OutButton2A: TSpeedButton; ReadTime: TTimer; TristateButton: TSpeedButton; BitLabelA7: TLabel; BitLabelA6: TLabel; BitLabelA5: TLabel; BitLabelA4: TLabel; BitLabelA3: TLabel; BitLabelA2: TLabel; BitLabelA1: TLabel; BitLabelA0: TLabel; BitLabelB7: TLabel; BitLabelB6: TLabel; BitLabelB5: TLabel; BitLabelB4: TLabel; BitLabelB3: TLabel; BitLabelB2: TLabel; BitLabelB1: TLabel; BitLabelB0: TLabel; BitLabelC7: TLabel; BitLabelC6: TLabel; BitLabelC5: TLabel; BitLabelC4: TLabel; BitLabelC3: TLabel; BitLabelC2: TLabel; BitLabelC1: TLabel; BitLabelC0: TLabel; BitLabelD7: TLabel; BitLabelD6: TLabel; BitLabelD5: TLabel; BitLabelD4: TLabel; BitLabelD3: TLabel; BitLabelD2: TLabel; BitLabelD1: TLabel; BitLabelD0: TLabel; Label6: TLabel; OutButton2B: TSpeedButton; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; Label13: TLabel; Label14: TLabel; Label15: TLabel; Image1: TImage; Image2: TImage; Image3: TImage; Image4: TImage; Image5: TImage; Image6: TImage; Image7: TImage; Image8: TImage; Image9: TImage; Image10: TImage; Image11: TImage; Image12: TImage; Image13: TImage; Image14: TImage; Image15: TImage; Image16: TImage; Image17: TImage; Image18: TImage; Image19: TImage; Image20: TImage; Image21: TImage; Image22: TImage; Image23: TImage; Image24: TImage; Image25: TImage; Image26: TImage; Image27: TImage; Image28: TImage; Image29: TImage; Image30: TImage; Image31: TImage; Image32: TImage; Image33: TImage; Image34: TImage; Image35: TImage; Image36: TImage; Image37: TImage; Image38: TImage; Image39: TImage; Image40: TImage; Image41: TImage; Image42: TImage; Image43: TImage; Image44: TImage; Image45: TImage; Image46: TImage; Image47: TImage; Image48: TImage; Image49: TImage; Image50: TImage; Image51: TImage; Image52: TImage; Image53: TImage; Image54: TImage; Image55: TImage; Image56: TImage; Image57: TImage; Image58: TImage; Image59: TImage; Image60: TImage; Image61: TImage; Image62: TImage; Image63: TImage; Image64: TImage; Image65: TImage; Image66: TImage; Image67: TImage; Image68: TImage; Image69: TImage; Image70: TImage; Image71: TImage; Image72: TImage; Image73: TImage; Image74: TImage; Image75: TImage; Image76: TImage; Image77: TImage; Image78: TImage; Image79: TImage; Image80: TImage; Image81: TImage; Image82: TImage; Image83: TImage; Image84: TImage; Image85: TImage; Image86: TImage; Image87: TImage; Image88: TImage; Image89: TImage; Image90: TImage; Image91: TImage; Image92: TImage; Image93: TImage; Image94: TImage; Image95: TImage; Image96: TImage; OutButton2C: TSpeedButton; Label16: TLabel; Label17: TLabel; Label18: TLabel; Label19: TLabel; Label20: TLabel; Label21: TLabel; Label22: TLabel; Label23: TLabel; Label24: TLabel; Label25: TLabel; Label26: TLabel; Label27: TLabel; Label35: TLabel; Label36: TLabel; Label37: TLabel; Label38: TLabel; Label39: TLabel; Label40: TLabel; Label41: TLabel; Label42: TLabel; OutButton3A: TSpeedButton; OutButton3B: TSpeedButton; OutButton3C: TSpeedButton; OutButton4C: TSpeedButton; OutButton4B: TSpeedButton; OutButton4A: TSpeedButton; Label60: TLabel; Label69: TLabel; Panel1: TPanel; Label1: TLabel; Label28: TLabel; Label29: TLabel; Label30: TLabel; Label31: TLabel; Label32: TLabel; Label33: TLabel; Label34: TLabel; Label43: TLabel; Label44: TLabel; Label45: TLabel; Label46: TLabel; Label47: TLabel; Label48: TLabel; Label49: TLabel; Label50: TLabel; Label51: TLabel; Label61: TLabel; Label62: TLabel; Label63: TLabel; Label64: TLabel; Label65: TLabel; Label66: TLabel; Label67: TLabel; Label68: TLabel; Label70: TLabel; Label71: TLabel; Label72: TLabel; Label73: TLabel; Label74: TLabel; Label75: TLabel; Label76: TLabel; Label77: TLabel; Label78: TLabel; Label79: TLabel; Label80: TLabel; Label81: TLabel; Label82: TLabel; Label83: TLabel; Label84: TLabel; Panel2: TPanel; Panel3: TPanel; Panel4: TPanel; Panel5: TPanel; Panel6: TPanel; Label52: TLabel; Label53: TLabel; Label54: TLabel; Label55: TLabel; procedure FormCreate(Sender: TObject); procedure ReadTimeTimer(Sender: TObject); procedure LevelImageClick(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure OutButtonClick(Sender: TObject); procedure TristateButtonClick(Sender: TObject); protected public end; var MainForm: TMainForm; implementation {$R *.DFM} uses AIOUSB, DetectUnit; var DeviceIndex: LongWord; LevelImage: array[0..95] of TImage; OutButton: array[0..11] of TSpeedButton; LowLevel, HighLevel: TBitmap; DIOData: array[0..11] of Byte; DoUpdate: Boolean; function FormatFreq(Freq: Double): String; begin end; procedure TMainForm.FormCreate(Sender: TObject); var DetectForm: TDetectForm; OutMask: Word; I: Integer; Status: LongWord; begin LowLevel := TBitmap.Create; HighLevel := TBitmap.Create; DeviceIndex := diOnly; OutMask := $0000; for I := 0 to 11 do DIOData[I] := $FF; Status := DIO_Configure(DeviceIndex, False, @OutMask, @DIOData); if Status <> ERROR_SUCCESS then begin DetectForm := TDetectForm.Create(Self); if DetectForm.ShowModal = mrOK then begin DeviceIndex := DetectForm.DeviceIndex; DetectForm.Free; end else begin DetectForm.Free; Application.Terminate; Exit; end; DIO_Configure(DeviceIndex, False, @OutMask, @DIOData); end; 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; LevelImage[32] := Image33; LevelImage[33] := Image34; LevelImage[34] := Image35; LevelImage[35] := Image36; LevelImage[36] := Image37; LevelImage[37] := Image38; LevelImage[38] := Image39; LevelImage[39] := Image40; LevelImage[40] := Image41; LevelImage[41] := Image42; LevelImage[42] := Image43; LevelImage[43] := Image44; LevelImage[44] := Image45; LevelImage[45] := Image46; LevelImage[46] := Image47; LevelImage[47] := Image48; LevelImage[48] := Image49; LevelImage[49] := Image50; LevelImage[50] := Image51; LevelImage[51] := Image52; LevelImage[52] := Image53; LevelImage[53] := Image54; LevelImage[54] := Image55; LevelImage[55] := Image56; LevelImage[56] := Image57; LevelImage[57] := Image58; LevelImage[58] := Image59; LevelImage[59] := Image60; LevelImage[60] := Image61; LevelImage[61] := Image62; LevelImage[62] := Image63; LevelImage[63] := Image64; LevelImage[64] := Image65; LevelImage[65] := Image66; LevelImage[66] := Image67; LevelImage[67] := Image68; LevelImage[68] := Image69; LevelImage[69] := Image70; LevelImage[70] := Image71; LevelImage[71] := Image72; LevelImage[72] := Image73; LevelImage[73] := Image74; LevelImage[74] := Image75; LevelImage[75] := Image76; LevelImage[76] := Image77; LevelImage[77] := Image78; LevelImage[78] := Image79; LevelImage[79] := Image80; LevelImage[80] := Image81; LevelImage[81] := Image82; LevelImage[82] := Image83; LevelImage[83] := Image84; LevelImage[84] := Image85; LevelImage[85] := Image86; LevelImage[86] := Image87; LevelImage[87] := Image88; LevelImage[88] := Image89; LevelImage[89] := Image90; LevelImage[90] := Image91; LevelImage[91] := Image92; LevelImage[92] := Image93; LevelImage[93] := Image94; LevelImage[94] := Image95; LevelImage[95] := Image96; OutButton[ 0] := OutButton1A; OutButton[ 1] := OutButton1B; OutButton[ 2] := OutButton1C; OutButton[ 3] := OutButton2A; OutButton[ 4] := OutButton2B; OutButton[ 5] := OutButton2C; OutButton[ 6] := OutButton3A; OutButton[ 7] := OutButton3B; OutButton[ 8] := OutButton3C; OutButton[ 9] := OutButton4A; OutButton[10] := OutButton4B; OutButton[11] := OutButton4C; LevelImages.GetBitmap(0, LowLevel); LevelImages.GetBitmap(1, HighLevel); DoUpdate := True; ReadTime.Enabled := True; end; procedure TMainForm.ReadTimeTimer(Sender: TObject); var I: Integer; oDIODATA, Changes: array[0..11] of Byte; begin for i:=0 to 11 do begin oDIOData[I] := DIOData[I]; end; DIO_ReadAll(DeviceIndex, @DIOData[0]); for i:=0 to 11 do begin Changes[I] := DIOData[I] xor oDIOData[I]; end; if DoUpdate then begin for i:=0 to 11 do begin Changes[I] := $FF; end; DoUpdate := False; end; for I := 0 to 95 do if (Changes[I div 8] and (1 shl (I mod 8))) <> 0 then begin if (DIOData[I div 8] and (1 shl (I mod 8))) <> 0 then LevelImage[I].Picture.Assign(HighLevel) else LevelImage[I].Picture.Assign(LowLevel) end ; end; procedure TMainForm.LevelImageClick(Sender: TObject); var I: Integer; NewValue: Boolean; begin I := (Sender as TImage).Tag; NewValue := ((DIOData[I div 8]) and (1 shl (I mod 8))) = 0; //Get bit value DIO_Write1(DeviceIndex, I, NewValue); DoUpdate := True; end; procedure TMainForm.FormDestroy(Sender: TObject); begin LowLevel.Free; HighLevel.Free; end; procedure TMainForm.OutButtonClick(Sender: TObject); var I: Integer; OutMask: Word; begin OutMask := $0000; for I := 0 to 11 do if OutButton[I].Down then OutMask := OutMask or (1 shl I) ; I := (Sender as TSpeedButton).Tag; DIOData[i] := $FF; //Set new output byte high, in case user made a mistake DIO_Configure(DeviceIndex, TristateButton.Down, @OutMask, @DIOData[0]); DoUpdate := True; end; procedure TMainForm.TristateButtonClick(Sender: TObject); var I: Integer; OutMask: Word; begin OutMask := $0000; for I := 0 to 11 do if OutButton[I].Down then OutMask := OutMask or (1 shl I) ; DIO_Configure(DeviceIndex, TristateButton.Down, @OutMask, @DIOData[0]); end; end.