📄 uautocode.pas
字号:
{
Project: AVR Universal Bootloader Download
File: uAutoCode.pas
Describe: Show autocode dialog, auto make bootcfg.h file
Author: Shaoziyang
Date: 2007.6
Version: 3.0
Web: http://shaoziyang.googlepages.com
or http://shaoziyang.bloger.com.cn (Chinese)
Email: shaoziyang@gmail.com
}
unit uAutoCode;
interface
uses
Windows,
Messages,
SysUtils,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
ExtCtrls,
StdCtrls,
Buttons,
ShellAPI,
CPortCtl;
type
TfrmAutoCode = class(TForm)
btnCancel: TBitBtn;
btnHypertrm: TBitBtn;
btnMake: TBitBtn;
btnRecommand: TBitBtn;
btnRecover: TBitBtn;
btnSmallest: TBitBtn;
cbbCportBaudRate: TComComboBox;
cbbBootCnt: TComboBox;
cbbBootLevel: TComboBox;
cbbBootMode: TComboBox;
cbbBootStart: TComboBox;
cbbBufferSize: TComboBox;
cbbComPortNo: TComboBox;
cbbCRC: TComboBox;
cbbFCPU: TComboBox;
cbbFileCnt: TComboBox;
cbbInitDelay: TComboBox;
cbbPINLED: TComboBox;
cbbPINLevel: TComboBox;
cbbPINRS485: TComboBox;
cbbPortLED: TComboBox;
cbbPortLevel: TComboBox;
cbbPortRS485: TComboBox;
cbbTimeClk: TComboBox;
chkChipCheck: TCheckBox;
chkLED: TCheckBox;
chkRS485En: TCheckBox;
chkVerbose: TCheckBox;
chkWDG: TCheckBox;
edtKeyHEX: TEdit;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
imgDragon: TImage;
imgLED: TImage;
lbBauRate: TLabel;
lbBOOTLEVEL: TLabel;
lbBOOTPIN: TLabel;
lbBOOTPORT: TLabel;
lbBootStart: TLabel;
lbBUFFERSIZE: TLabel;
lbchecksum: TLabel;
lbComPortNo: TLabel;
lbFCPU: TLabel;
lbInitDelay: TLabel;
lbKEY: TLabel;
lbLEDEn: TLabel;
lbLEDPIN: TLabel;
lbLEDPORT: TLabel;
lbLEVELMODE: TLabel;
lbRS485En: TLabel;
lbRS485PIN: TLabel;
lbRS485PORT: TLabel;
lbtimeclk: TLabel;
lbTimeOutCnt: TLabel;
lbTimeOutCntC: TLabel;
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Timer: TTimer;
tmrErr: TTimer;
cbbBaudRate: TComboBox;
dlgSave: TSaveDialog;
Panel4: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
cbbMCU: TComboBox;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
cbbByteWord: TComboBox;
btnReload: TSpeedButton;
procedure chkLEDClick(Sender: TObject);
procedure edtKeyHEXChange(Sender: TObject);
procedure edtKeyHEXClick(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure lbLEDEnClick(Sender: TObject);
procedure lbRS485EnClick(Sender: TObject);
procedure TimerTimer(Sender: TObject);
procedure btnRecommandClick(Sender: TObject);
procedure btnHypertrmClick(Sender: TObject);
procedure btnSmallestClick(Sender: TObject);
procedure btnMakeClick(Sender: TObject);
procedure tmrErrTimer(Sender: TObject);
procedure dlgSaveShow(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure cbbByteWordChange(Sender: TObject);
procedure cbbMCUChange(Sender: TObject);
private
{ Private declarations }
Idle: Boolean;
procedure setedtErr(edt: TEdit);
procedure setcbbErr(cbb: TComboBox);
public
{ Public declarations }
function getAVRType: Integer;
end;
var
frmAutoCode: TfrmAutoCode;
cbbErr: TComboBox;
edtErr: TEdit;
implementation
uses
uMain;
{$R *.DFM}
procedure TfrmAutoCode.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
//释放鼠标事件的对象
ReleaseCapture;
PostMessage(handle, wm_SysCommand, $F012, 0);
end;
procedure TfrmAutoCode.TimerTimer(Sender: TObject);
begin
imgLED.Visible := not imgLED.Visible;
end;
procedure TfrmAutoCode.chkLEDClick(Sender: TObject);
begin
try
Timer.Interval := StrToInt(cbbTimeClk.Text);
except
Timer.Interval := 200;
end;
Timer.Enabled := chkLED.Checked;
imgLED.Visible := chkLED.Checked;
end;
procedure TfrmAutoCode.lbRS485EnClick(Sender: TObject);
begin
chkRS485En.Checked := not chkRS485En.Checked;
end;
procedure TfrmAutoCode.lbLEDEnClick(Sender: TObject);
begin
chkLED.Checked := not chkLED.Checked;
chkLEDClick(Sender);
end;
procedure TfrmAutoCode.edtKeyHEXChange(Sender: TObject);
begin
if Sender is TEdit then
begin
if (Length(TEdit(Sender).Text) mod 3) = 0 then
begin
edtKeyHEXClick(Sender);
PostMessage(TEdit(Sender).handle, WM_KEYDOWN, VK_END, 0);
end;
end;
end;
procedure TfrmAutoCode.edtKeyHEXClick(Sender: TObject);
var
buf: CBuf;
begin
if not (Sender is TEdit) then
Exit;
TEdit(Sender).Text := FormatHexStr(TEdit(Sender).Text, buf);
end;
procedure TfrmAutoCode.btnRecommandClick(Sender: TObject);
begin
chkVerbose.Checked := False;
chkWDG.Checked := True;
chkChipCheck.Checked := True;
edtKeyHEX.Text := '64 0E 1C 39 14 28 57 AA';
cbbTimeClk.Text := '200';
cbbBootCnt.Text := '5';
cbbFileCnt.Text := '20';
cbbBootMode.ItemIndex := 0;
chkLED.Checked := True;
cbbBufferSize.Text := '128';
chkLED.Checked := True;
cbbCRC.ItemIndex := 0;
end;
procedure TfrmAutoCode.btnHypertrmClick(Sender: TObject);
begin
chkVerbose.Checked := True;
chkLED.Checked := True;
edtKeyHEX.Text := '64';
cbbBufferSize.Text := '128';
cbbTimeClk.Text := '500';
cbbBootCnt.Text := '10';
cbbFileCnt.Text := '100';
cbbBootMode.ItemIndex := 0;
cbbCRC.ItemIndex := 0;
end;
procedure TfrmAutoCode.btnSmallestClick(Sender: TObject);
begin
chkRS485En.Checked := False;
chkLED.Checked := False;
cbbInitDelay.Text := '0';
cbbBootMode.ItemIndex := 1;
chkChipCheck.Checked := False;
chkWDG.Checked := False;
chkVerbose.Checked := False;
cbbCRC.ItemIndex := 1;
end;
//
procedure TfrmAutoCode.dlgSaveShow(Sender: TObject);
begin
HWD := FindWindow(nil, PChar(dlgSave.Title));
frmMain.clrSmart;
end;
procedure TfrmAutoCode.btnMakeClick(Sender: TObject);
var
f: TextFile;
buf: CBuf;
i: Integer;
t: Double;
b: Boolean;
msg: string;
begin
if Idle = False then
Exit;
try
Idle := False;
edtKeyHEXClick(Sender);
if (cbbMCU.Text = '') or (StrLIComp(PChar(cbbMCU.Text), PChar('at'), 2) <> 0) then
begin
Application.MessageBox(PChar(lang.msgError + ': MCU'), PChar(lang.msgError), MB_OK + MB_ICONSTOP);
setcbbErr(cbbMCU);
Exit;
end;
//check value range
if edtKeyHEX.Text = '' then
begin
Application.MessageBox(PChar(lang.msgError + ': KEY[]'), PChar(lang.msgError), MB_OK + MB_ICONSTOP);
setedtErr(edtKeyHEX);
Exit;
end;
try
btnMake.Tag := StrToInt(cbbFCPU.Text);
except
Application.MessageBox(PChar(lang.msgError + ': F_CPU'), PChar(lang.msgError), MB_OK + MB_ICONSTOP);
setcbbErr(cbbFCPU);
Exit;
end;
try
btnMake.Tag := StrToInt(cbbBufferSize.Text);
except
Application.MessageBox(PChar(lang.msgError + ': BUFFERSIZE'), PChar(lang.msgError), MB_OK + MB_ICONSTOP);
setcbbErr(cbbBufferSize);
Exit;
end;
try
btnMake.Tag := StrToInt(cbbTimeClk.Text);
except
Application.MessageBox(PChar(lang.msgError + ': timeclk'), PChar(lang.msgError), MB_OK + MB_ICONSTOP);
setcbbErr(cbbTimeClk);
Exit;
end;
try
btnMake.Tag := StrToInt(cbbBootCnt.Text);
except
Application.MessageBox(PChar(lang.msgError + ': TimeOutCnt'), PChar(lang.msgError), MB_OK + MB_ICONSTOP);
setcbbErr(cbbBootCnt);
Exit;
end;
try
btnMake.Tag := StrToInt(cbbFileCnt.Text);
except
Application.MessageBox(PChar(lang.msgError + ': TimeOutCntC'), PChar(lang.msgError), MB_OK + MB_ICONSTOP);
setcbbErr(cbbFileCnt);
Exit;
end;
try
btnMake.Tag := StrToInt(cbbInitDelay.Text);
except
Application.MessageBox(PChar(lang.msgError + ': InitDelay'), PChar(lang.msgError), MB_OK + MB_ICONSTOP);
setcbbErr(cbbInitDelay);
Exit;
end;
try
btnMake.Tag := StrToInt(cbbBootStart.Text);
except
Application.MessageBox(PChar(lang.msgError + ': BootStart'), PChar(lang.msgError), MB_OK + MB_ICONSTOP);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -