?? fmain.pas
字號:
begin
len := length(arr);
if (len<12) then exit;
SetLength(arr2,len-12);
for i:=12 to len-1 do
begin
arr2[i-12] := arr[i];
end;
txt := IntArray2ASCIIStr(arr2);
Phone.Model := LeftStr(txt,5);
Phone.Boot_Ver := MidStr(txt, 37, 5);
Phone.SW_Ver := LeftStr(txt,13);
phone.HW_boot := MidStr(txt, 60, 6);
GetPhoneInfo :=phone;
end;
Function TMain.Info_dm:boolean;
var pck : t_intvect;
phone: T_Handset_INFO;
i : integer;
state,stat : string;
begin
setlength(pck,8);
pck[0] := $0C;
pck[1] := $14;
pck[2] := $3A;
pck[3] := $7E;
pck[4] := $0C;
pck[5] := $14;
pck[6] := $3A;
pck[7] := $7E;
writecom(pck,length(pck));
pck := ReadCMD;
if length(pck)<=0 then exit;
if pck[0] = $13
then AddLinesLog('- Not Connected ')
else
begin
state := IntArray2HexSTR(pck[3]);
if state = '43' then
main.AddLinesLog('- Phone Connected in Download Mode');
stat := 'Download Mode Connected';
phone.Model := stat;
StatusBar_UPDATE(phone);
end;
end;
procedure TMain.Get_INFO(echo:boolean);
var
phone: T_Handset_INFO;
begin
if PORTnum=0 then exit;
begin
if not Send_CMD(Get_CMD(Q0_GET_HW_INFO)) then exit;
phone := GetPhoneInfo(ReadCMD);
begin
if (phone.Model = '')then
begin
info_dm;
end
else
begin
StatusBar_UPDATE(phone);
if echo then
with phone do
BEGIN
main.AddLinesLog('- Model'+' = '+phone.Model);
main.AddLinesLog('- Boot Version'+' = '+Boot_ver);
main.AddLinesLog('- App Version'+' = '+SW_Ver);
main.AddLinesLog('- HW Version'+' = '+HW_boot);
end;
end;
end;
end;
end;
procedure TMain.btn_infoClick(Sender: TObject);
begin
if not(Main.InitializeINTERFACE) then exit;
Get_INFO(true);
end;
procedure TMain.btn_rd_spcClick(Sender: TObject);
var pck,spc_code : t_intvect;
i : integer;
begin
if not(Main.InitializeINTERFACE) then exit;
setlength(pck,133);
pck[0] := $26;
pck[1] := $a2;
pck[2] := $c3;
for i:=3 to 133 do
pck[i] := $00;
DO_CMD(pck,True,True,False);
pck := ReadCMD;
if length(pck)<=0 then exit;
if pck[0] = $13
then AddLinesLog('-Read SPC fails :(')
else
begin
spc.Text := Char(pck[3]) + Char(pck[4]) + Char(pck[5]) + Char(pck[6]) + Char(pck[7]) + Char(pck[8]);
AddLinesLog('- Read SPC : '+spc.Text);
end;
end;
procedure TMain.btn_restartClick(Sender: TObject);
begin
Do_CMD(Q0_MODE_OFFLINE_D,True,True,True);
sleep(100);
Do_CMD(Q0_RESET,True,True,True);
end;
procedure TMain.btn_lockClick(Sender: TObject);
var pck : t_intvect;
i : integer;
begin
if not(Main.InitializeINTERFACE) then exit;
setlength(pck,133);
pck[0] := $26;
pck[1] := $52;
for i:=2 to 133 do
pck[i] := $00;
DO_CMD(pck,True,True,False);
pck := ReadCMD;
if length(pck)<=0 then exit;
if pck[0] = $13
then AddLinesLog('- Read user code fails :(')
else
begin
USER_CODE.Text := Char(pck[3])+Char(pck[4])+Char(pck[5])+Char(pck[6]);
AddLinesLog('- Read user code : '+USER_CODE.Text);
end;
end;
procedure TMain.btn_offline_aClick(Sender: TObject);
begin
Do_CMD(Q0_MODE_OFFLINE_A,True,True,True);
end;
Function TMain.dm:boolean;
var pck : t_intvect;
phone: T_Handset_INFO;
i : integer;
state,stat : string;
begin
setlength(pck,4);
pck[0] := $3A;
pck[1] := $A1;
pck[2] := $6E;
pck[3] := $7E;
writecom(pck,length(pck));
pck := ReadCMD;
if length(pck)<=0 then exit;
if pck[0] = $13
then AddLinesLog('- Not Connected ')
else
begin
state := IntArray2HexSTR(pck[0])+IntArray2HexSTR(pck[1])+IntArray2HexSTR(pck[2])+IntArray2HexSTR(pck[3]);
if state = '3AA16E00' then
begin
sleep(2000);
main.AddLinesLog('- Phone on Download Mode now');
stat := 'Download Mode Connected';
phone.Model := stat;
StatusBar_UPDATE(phone);
end
else
begin
main.AddLinesLog('- Download Mode Failed');
end;
end;
end;
procedure TMain.btn_DMClick(Sender: TObject);
begin
if (statusbar.Panels[0].Text='Phone Connected : Download Mode Connected') then
begin
main.AddLinesLog('- Phone state in download Mode');
exit;
end
else
begin
dm;
end;
end;
procedure TMain.btn_exit_dmClick(Sender: TObject);
begin
Do_CMD(Q0_EXIT_DM,True,True,True);
end;
procedure TMain.btn_offline_dClick(Sender: TObject);
begin
Do_CMD(Q0_MODE_OFFLINE_D,True,True,True);
end;
Function Z_REFRESH_COM_LIST: Boolean;
var I : Integer;
port: integer;
begin
// result := False;
if PortNum > MaxEnumComNum
then port := PortNum-MaxEnumComNum
else port := 0;
with main do
begin
ChangeComSpeed(ComBaud);
for i:=1 to MaxEnumComNum-1 do
begin
ComNum := i;
if OpenCom(False)=Z_OK
then
begin
cmb_com.Items.Add('COM'+IntToStr(ComNum));
if (port<>0) and (ComNum = port)
then result := True;
main.AddLinesLog('- Found COM : '+IntToStr(ComNum));
end;
end;
comnum := port;
if port=0 then exit;
if result then exit;
AddLinesLog('- COM'+IntToStr(ComNum)+' does not exist');
comnum := 0;
portnum := 0;
end;
end;
Procedure REFR_INT_SEL;
begin
if PortNum< MaxEnumComNum
then
begin
ComNum := PortNum-MaxEnumComNum;
// main.cmb_com.Text := 'COM'+IntToStr(ComNum);
end;
end;
procedure TMain.REFR_INTERFACE_LIST;
var speed: integer;
begin
REFRESH_REQUESTED := False;
if ComBaud =0
then
begin
Main.AddLinesLog('- Com Speed auto-set = 115200 b/s');
speed := 115200;
end
else speed := ComBaud ;
cmb_com.clear;
Z_REFRESH_COM_LIST;
if ComBaud <> speed then
begin
ComBaud := speed;
ChangeComSpeed(ComBaud);
end;
REFR_INT_SEL;
end;
procedure TMain.COM_Change(Sender: TObject);
var
phone: T_Handset_INFO;
begin
if cmb_com.Text = ''
then
begin
PortNum := 0;
exit;
end;
end;
procedure TMain.ComBo_INTERFACESelect(Sender: TObject);
var txt: string;
typ: string;
begin
txt := cmb_com.Items.Strings[cmb_com.ItemIndex];
typ :=copy(txt,1,3);
if typ='COM'
then
begin
ComNum := StrToInt(copy(txt,4,length(txt)-3));
PortNum := ComNum+MaxEnumComNum;
Main.AddLinesLog('- COM : '+ inttostr(PortNum - 25) + ' Selected');
main.AddLinesLog('- Interface Speed : 115200 b/s');
ComBaud := 115200;
ChangeComSpeed(ComBaud);
Get_INFO(false);
end
else
begin
Main.AddLinesLog('- COM Error '+IntToStr(PortNum));
exit;
end;
end;
procedure TMain.idletime(Sender: TObject; var Done: Boolean);
var aux : string;
begin
if OK_ALLOWED
then
begin
OK_ALLOWED := False;
exit;
end;
aux := TimeToStr(now);
setlength(aux,length(aux)-3);
statusbar.Panels.Items[1].Text := aux+' ';
if REFRESH_REQUESTED
then REFR_INTERFACE_LIST;
end;
procedure TMain.FormDestroy(Sender: TObject);
begin
DeviceChange1.Free;
end;
procedure TMain.FormCreate(Sender: TObject);
begin
OK_ALLOWED := False;
DeviceChange1 := TDeviceChange.Create(Self);
DeviceChange1.Arrival := DevChangeArrival;
DeviceChange1.RemoveComplete := DevChangeRemoveComplete;
application.OnIdle := idletime;
if Screen.DesktopHeight <= Top then Top := Screen.DesktopHeight shr 1;
if Screen.DesktopWidth <= Left then Left := Screen.DesktopWidth shr 1;
end;
procedure TMain.FormShow(Sender: TObject);
begin
REFR_INTERFACE_LIST;
ComBaud := 115200;
cmb_com.SetFocus;
end;
Function TMain.EXIT_DM:boolean;
var pck : t_intvect;
i : integer;
state : string;
begin
setlength(pck,6);
pck[0] := $29;
pck[1] := $01;
pck[2] := $00;
pck[3] := $31;
pck[4] := $40;
pck[5] := $7E;
writecom(pck,length(pck));
pck := ReadCMD;
if length(pck)<=0 then exit;
if pck[0] = $13
then AddLinesLog('- Not Connected ')
else
begin
state := IntArray2HexSTR(pck[0])+IntArray2HexSTR(pck[1])+IntArray2HexSTR(pck[2])+IntArray2HexSTR(pck[3])+IntArray2HexSTR(pck[4])+IntArray2HexSTR(pck[5]);
if state = '290100008A00' then
begin
sleep(200);
main.AddLinesLog('- Phone on OFFLINE-D Mode now');
end
else
begin
main.AddLinesLog('- OFFLINE-D Failed');
end;
end;
end;
procedure TMain.btn_wdClick(Sender: TObject);
begin
Do_CMD(Q0_EXIT_DM,True,True,True);
SLEEP(3000);
Do_CMD(Q0_WD,True,True,True);
end;
procedure TMain.btn_wr_lockClick(Sender: TObject);
var pck : t_intvect;
i : integer;
begin
if not(Main.InitializeINTERFACE) then exit;
if (USER_CODE.Text='') then
begin
main.AddLinesLog('- Empty User Code');
exit;
end
else
begin
setlength(pck,133);
pck[0] := $27;
pck[1] := $52;
for i:=2 to 133 do
pck[i] := $00;
pck[3] := Integer(USER_CODE.Text[1]);
pck[4] := Integer(USER_CODE.Text[2]);
pck[5] := Integer(USER_CODE.Text[3]);
pck[6] := Integer(USER_CODE.Text[4]);
DO_CMD(pck,True,True,False);
pck := ReadCMD;
if (pck[0] = $27) and (pck[1] = $52) and (pck[2] = $00)
and (pck[3] = Integer(USER_CODE.Text[1]))
and (pck[4] = Integer(USER_CODE.Text[2]))
and (pck[5] = Integer(USER_CODE.Text[3]))
and (pck[6] = Integer(USER_CODE.Text[4]))
then main.AddLinesLog('- Write user code : '+USER_CODE.Text)
else main.AddLinesLog('- Read user code :(');
end;
end;
procedure TMain.btn_wr_spcClick(Sender: TObject);
var pck : t_intvect;
i : integer;
begin
if not(Main.InitializeINTERFACE) then exit;
if (spc.Text='') then
begin
main.AddLinesLog('- Empty SPC Code');
exit;
end
else
begin
setlength(pck,133);
pck[0] := $27;
pck[1] := $A2;
pck[2] := $C3;
for i:=3 to 133 do
pck[i] := $00;
pck[3] := Integer(spc.Text[1]);
pck[4] := Integer(spc.Text[2]);
pck[5] := Integer(spc.Text[3]);
pck[6] := Integer(spc.Text[4]);
pck[7] := Integer(spc.Text[5]);
pck[8] := Integer(spc.Text[6]);
DO_CMD(pck,True,True,False);
pck := ReadCMD;
if (pck[0] = $27) and (pck[1] = $A2) and (pck[2] = $C3)
and (pck[3] = Integer(spc.Text[1]))
and (pck[4] = Integer(spc.Text[2]))
and (pck[5] = Integer(spc.Text[3]))
and (pck[6] = Integer(spc.Text[4]))
and (pck[7] = Integer(spc.Text[5]))
and (pck[8] = Integer(spc.Text[6]))
then main.AddLinesLog('- Write user code success: '+spc.Text)
else main.AddLinesLog('- Read user code fails :(');
end
end;
procedure TMain.btn_magicClick(Sender: TObject);
begin
Do_CMD(unlock_1,false,false,false);
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -