unit prjUSBaspOpenDevice; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, USBasp; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Label1: TLabel; Memo1: TMemo; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Memo1Change(Sender: TObject); procedure Memo1DblClick(Sender: TObject); private FUSBasp: TUSBasp; procedure USBaspDataReceive(Sender: TObject; ASerialData: TByteArray; ASerialDataLength: SizeInt); procedure USBaspStatusChange(Sender: TObject); public end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.FormCreate(Sender: TObject); begin FUSBasp := TUSBasp.Create; FUSBasp.OnUARTReceive := @USBaspDataReceive; FUSBasp.OnStatusChange := @USBaspStatusChange; end; procedure TForm1.Button1Click(Sender: TObject); begin FUSBasp.Connect; end; procedure TForm1.Button2Click(Sender: TObject); begin FUSBasp.Disconnect; end; procedure TForm1.Button3Click(Sender: TObject); begin FUSBasp.UARTOpen(19200, USBASP_UART_BYTES_8B, USBASP_UART_PARITY_NONE, USBASP_UART_STOP_1BIT); end; procedure TForm1.Button4Click(Sender: TObject); begin FUSBasp.UARTClose; end; procedure TForm1.FormDestroy(Sender: TObject); begin FUSBasp.Free; end; procedure TForm1.Memo1Change(Sender: TObject); begin if Memo1.Lines.Count > 150 then begin Memo1.Lines.BeginUpdate; while Memo1.Lines.Count > 150 do Memo1.Lines.Delete(0); Memo1.Lines.EndUpdate; end; end; procedure TForm1.Memo1DblClick(Sender: TObject); begin Memo1.Clear; end; procedure TForm1.USBaspDataReceive(Sender: TObject; ASerialData: TByteArray; ASerialDataLength: SizeInt); begin Memo1.Lines.BeginUpdate; Memo1.Lines.Append(TEncoding.ASCII.GetString(ASerialData, 0, ASerialDataLength)); Memo1.SelStart := Length(Memo1.Lines.Text); Memo1.VertScrollBar.Position := Memo1.Lines.Count; Memo1.Lines.EndUpdate; end; procedure TForm1.USBaspStatusChange(Sender: TObject); begin Randomize; Label1.Caption := 'Changed' + IntToStr(Random(999)); end; end.