光电工程师社区

标题: 使用 Delphi 对手机通讯的编程 [打印本页]

作者: suncon    时间: 2003-9-21 17:31
标题: 使用 Delphi 对手机通讯的编程
使用 Delphi 对手机通讯的编程

希望对喜欢编程的朋友有帮助,最近在整理所有手机的编程,可能会出一书,交广州华莹出版。
unit PanasonicGD&#59;
interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, RXClock, ExtCtrls, RXCtrls, Gauges, OoMisc, AdPort, DsFancyButton&#59;
type TPanasonicGD92 = class(TForm)
SoftwareTitle: TRxLabel&#59;
ComPortItem: TPanel&#59;
PhoneInfo: TPanel&#59;
ComPort1: TRadioButton&#59;
ComPort2: TRadioButton&#59;
ComPort3: TRadioButton&#59;
ComPort4: TRadioButton&#59;
Com1Port: TRxLabel&#59;
Com2Port: TRxLabel&#59;
Com3Port: TRxLabel&#59;
Com4Port: TRxLabel&#59;
RealClock: TRxClock&#59;
Autohor: TRxLabel&#59;
SoftwareVersion: TRxLabel&#59;
PhoneIMEI: TRxLabel&#59;
GD92SW: TEdit&#59;
GD92IMEI: TEdit&#59;
JobItem: TPanel&#59;
ProcessInfo: TPanel&#59;
PhoneLockCode: TRxLabel&#59;
GD92CODE: TEdit&#59;
ProcessBar: TGauge&#59;
PromptInfo: TPanel&#59;
UserInfo: TLabel&#59;
ComPort: TApdComPort&#59;
ExitProgram: TDsFancyButton&#59;
TestMode: TDsFancyButton&#59;
ReadInfo: TDsFancyButton&#59;
Chinese: TDsFancyButton&#59;
ExitTestMode: TDsFancyButton&#59;
function GetCOMData(Count: integer): string&#59;
procedure ExitProgramClick(Sender: TObject)&#59;
procedure TestModeClick(Sender: TObject)&#59;
procedure ComPortTriggerAvail(CP: TObject&#59; Count: word)&#59; procedure ChineseClick(Sender: TObject)&#59;
procedure ExitTestModeClick(Sender: TObject)&#59;
procedure ReadInfoClick(Sender: TObject)&#59;
private { Private declarations }
public { Public declarations }
end&#59;
var PanasonicGD92: TPanasonicGD92&#59;
ResponseArray: array[1..300] of string&#59;
Step: integer&#59;
PanaGD9xIMEI: string&#59;
PanaGD9xCode: string&#59;
PanaGD9xSW: string&#59;
DoStop: boolean&#59;
implementation
{$R *.DFM}
function TPanasonicGD92.GetCOMData(Count: integer): string&#59;
var I: integer&#59;begin
Result := ’&#59;
for I := 1 to Count do
Result := Result + IntToHex(byte(ComPort.GetChar), 02)&#59;
end&#59;
procedure TPanasonicGD92.ExitProgramClick(Sender: TObject)&#59;
begin
Close&#59;
end&#59;
procedure TPanasonicGD92.TestModeClick(Sender: TObject)&#59;
begin
if TestMode.Caption = ’Stop Jobs’ then
DoStop := True else
begin
TestMode.Caption := ’Stop Jobs’&#59;
Step := 1&#59;
if ComPort1.Checked then
ComPort.ComNumber := 1&#59;
if ComPort2.Checked then
ComPort.ComNumber := 2&#59;
if ComPort3.Checked then
ComPort.ComNumber := 3&#59;
if ComPort4.Checked then
ComPort.ComNumber := 4&#59;
UserInfo.Caption := ’Press Phone Power On Key ...’&#59; ResponseArray[Step] := ’00’&#59;
while Step = 1 do begin Application.ProcessMessages&#59;
if DoStop then
begin
TestMode.Caption := ’Test Mode’&#59;
Exit&#59;
end&#59;
end&#59;
ProcessBar.Progress := 0&#59;
ReadInfo.Enabled := True&#59;
Chinese.Enabled := True&#59;
ExitTestMode.Enabled := True&#59;
UserInfo.Caption := ’Phone Test Mode OK !’&#59;
end&#59;
end&#59;
procedure TPanasonicGD92.ChineseClick(Sender: TObject)&#59;
begin
Step := 5&#59;
ProcessBar.ForeColor := clLime&#59;
ResponseArray[Step] := ’00800110’&#59;
ComPort.PutChar(#$00)&#59;
ProcessBar.Progress := 4&#59;
ComPort.PutChar(#$80)&#59;
ProcessBar.Progress := 8&#59;
ComPort.PutChar(#$02)&#59;
ProcessBar.Progress := 12&#59;
ComPort.PutChar(#$E2)&#59;
ProcessBar.Progress := 15&#59;
ComPort.PutChar(#$00)&#59;
ProcessBar.Progress := 19&#59;
while Step = 5 do begin Application.ProcessMessages&#59;
if DoStop then Exit&#59;
end&#59;
Step := 6&#59;
ResponseArray[Step] := ’00800110’&#59;
ComPort.PutChar(#$00)&#59;
ProcessBar.Progress := 23&#59;
ComPort.PutChar(#$80)&#59;
ProcessBar.Progress := 27&#59;
ComPort.PutChar(#$03)&#59;
ProcessBar.Progress := 31&#59;
ComPort.PutChar(#$9A)&#59;
ProcessBar.Progress := 35&#59;
ComPort.PutChar(#$00)&#59;
ProcessBar.Progress := 38&#59;
ComPort.PutChar(#$FF)&#59;
ProcessBar.Progress := 42&#59;
while Step = 6 do begin
Application.ProcessMessages&#59;
if DoStop then Exit&#59;
end&#59;
Step := 7&#59;
ResponseArray[Step] := ’00800110’&#59;
ComPort.PutChar(#$00)&#59;
ProcessBar.Progress := 46&#59;
ComPort.PutChar(#$80)&#59;
ProcessBar.Progress := 50&#59;
ComPort.PutChar(#$0B)&#59;
ProcessBar.Progress := 54&#59;
ComPort.PutChar(#$CB)&#59;
ProcessBar.Progress := 58&#59;
ComPort.PutChar(#$02)&#59;
ProcessBar.Progress := 62&#59;
ComPort.PutChar(#$00)&#59;
ProcessBar.Progress := 65&#59;
ComPort.PutChar(#$00)&#59;
ProcessBar.Progress := 69&#59;
ComPort.PutChar(#$00)&#59;
ProcessBar.Progress := 73&#59;
ComPort.PutChar(#$00)&#59;
ProcessBar.Progress := 77&#59;
ComPort.PutChar(#$07)&#59;
ProcessBar.Progress := 81&#59;
ComPort.PutChar(#$00)&#59;
ProcessBar.Progress := 85&#59;
ComPort.PutChar(#$00)&#59;
ProcessBar.Progress := 88&#59;
ComPort.PutChar(#$00)&#59;
ProcessBar.Progress := 92&#59;
ComPort.PutChar(#$00)&#59;
ProcessBar.Progress := 96&#59;
ComPort.PutChar(#$00)&#59;
ProcessBar.Progress := 100&#59;
while Step = 7 do
begin
Application.ProcessMessages&#59;
if DoStop then Exit&#59;
end&#59;
ProcessBar.Progress := 0&#59;
UserInfo.Caption := ’Chinese Language Active OK !’&#59;
end&#59;
procedure TPanasonicGD92.ExitTestModeClick(Sender: TObject)&#59;
begin
ExitTestMode.Enabled := False&#59;
Step := 30&#59;
ResponseArray[Step] := ’0080015A’&#59;
ProcessBar.ForeColor := clRed&#59;
ProcessBar.Progress := 0&#59;
ComPort.PutChar(#$00)&#59;
ProcessBar.Progress := 25&#59;
ComPort.PutChar(#$80)&#59;
ProcessBar.Progress := 50&#59;
ComPort.PutChar(#$01)&#59;
ProcessBar.Progress := 75&#59;
ComPort.PutChar(#$23)&#59;
ProcessBar.Progress := 100&#59;
while Step = 30 do begin
Application.ProcessMessages&#59;
if DoStop then Exit&#59;
end&#59;
ProcessBar.Progress := 0&#59;
ReadInfo.Enabled := False&#59;
Chinese.Enabled := False&#59;
TestMode.Enabled := True&#59;
UserInfo.Caption := ’Phone Exit Test Mode OK !’&#59; TestMode.Caption := ’Stop’&#59;
end&#59;
procedure TPanasonicGD92.ReadInfoClick(Sender: TObject)&#59;
var IMEI92: string&#59;
Code92: string&#59;
Soft92: string&#59;
begin
Step := 20&#59;
UserInfo.Caption := ’Please Wait ...’&#59; ProcessBar.ForeColor := clBlue&#59;
ProcessBar.Progress := 0&#59;
ComPort.PutChar(#$00)&#59;
ProcessBar.Progress := 8&#59;
ComPort.PutChar(#$80)&#59;
ProcessBar.Progress := 15&#59;
ComPort.PutChar(#$01)&#59;
ProcessBar.Progress := 23&#59;
ComPort.PutChar(#$98)&#59;
ProcessBar.Progress := 31&#59;
while Step = 20 do begin Application.ProcessMessages&#59;
if DoStop then Exit&#59;
end&#59;
Code92 := Copy(PanaGD9xCode, 10, 1)&#59;
Code92 := Code92 + Copy(PanaGD9xCode, 12, 1)&#59;
Code92 := Code92 + Copy(PanaGD9xCode, 14, 1)&#59;
Code92 := Code92 + Copy(PanaGD9xCode, 16, 1)&#59;
Code92 := Code92 + Copy(PanaGD9xCode, 18, 1)&#59; GD92CODE.Text := Code92&#59;
ProcessBar.Progress := 0&#59;
UserInfo.Caption := ’Read Phone Code OK !’&#59; Step := 21&#59;
ComPort.PutChar(#$00)&#59;
ProcessBar.Progress := 38&#59;
ComPort.PutChar(#$80)&#59;
ProcessBar.Progress := 46&#59;
ComPort.PutChar(#$01)&#59;
ProcessBar.Progress := 53&#59;
ComPort.PutChar(#$90)&#59;
ProcessBar.Progress := 62&#59;
while Step = 21 do
begin
Application.ProcessMessages&#59;
if DoStop then Exit&#59;
end&#59;
IMEI92 := Copy(PanaGD9xIMEI, 10, 1)&#59;
IMEI92 := IMEI92 + Copy(PanaGD9xIMEI, 12, 1)&#59;
IMEI92 := IMEI92 + Copy(PanaGD9xIMEI, 14, 1)&#59;
IMEI92 := IMEI92 + Copy(PanaGD9xIMEI, 16, 1)&#59;
IMEI92 := IMEI92 + Copy(PanaGD9xIMEI, 18, 1)&#59;
IMEI92 := IMEI92 + Copy(PanaGD9xIMEI, 20, 1)&#59;
IMEI92 := IMEI92 + Copy(PanaGD9xIMEI, 22, 1)&#59;
IMEI92 := IMEI92 + Copy(PanaGD9xIMEI, 24, 1)&#59;
IMEI92 := IMEI92 + Copy(PanaGD9xIMEI, 26, 1)&#59;
IMEI92 := IMEI92 + Copy(PanaGD9xIMEI, 28, 1)&#59;
IMEI92 := IMEI92 + Copy(PanaGD9xIMEI, 30, 1)&#59;
IMEI92 := IMEI92 + Copy(PanaGD9xIMEI, 32, 1)&#59;
IMEI92 := IMEI92 + Copy(PanaGD9xIMEI, 34, 1)&#59;
IMEI92 := IMEI92 + Copy(PanaGD9xIMEI, 36, 1)&#59;
IMEI92 := IMEI92 + Copy(PanaGD9xIMEI, 38, 1)&#59; GD92IMEI.Text := IMEI92&#59;
UserInfo.Caption := ’Read Phone IMEI OK !’&#59;
Step := 22&#59;
ComPort.PutChar(#$00)&#59;
ProcessBar.Progress := 69&#59;
ComPort.PutChar(#$80)&#59;
ProcessBar.Progress := 77&#59;
ComPort.PutChar(#$02)&#59;
ProcessBar.Progress := 85&#59;
ComPort.PutChar(#$94)&#59;
ProcessBar.Progress := 92&#59;
ComPort.PutChar(#$00)&#59;
ProcessBar.Progress := 100&#59;
while Step = 22 do
begin
Application.ProcessMessages&#59;
if DoStop then Exit&#59;
end&#59;
Soft92 := ’GAD’ + Copy(PanaGD9xSW, 16, 1)&#59;
Soft92 := Soft92 + Copy(PanaGD9xSW, 18, 1)&#59;
Soft92 := Soft92 + ’A’ + Copy(PanaGD9xSW, 22, 1)&#59; Soft92 := Soft92 + Copy(PanaGD9xSW, 24, 1)&#59;
GD92SW.Text := Soft92&#59;
ProcessBar.Progress := 0&#59;
UserInfo.Caption := ’Read Phone Info OK !’&#59;
end&#59;
procedure TPanasonicGD92.ComPortTriggerAvail(CP: TObject&#59; Count: word)&#59;
var ST: string&#59; Rs: string&#59; // I: Integer&#59;begin if Step = 1 then
begin
ProcessBar.Progress := 0&#59;
ComPort.PutChar(#$00)&#59;
ProcessBar.Progress := 25&#59;
ComPort.PutChar(#$80)&#59;
ProcessBar.Progress := 50&#59;
ComPort.PutChar(#$01)&#59;
ProcessBar.Progress := 75&#59;
ComPort.PutChar(#$5C)&#59;
ProcessBar.Progress := 100&#59;
end&#59; St := GetCOMData(Count)&#59;
Rs := ResponseArray[Step]&#59;
if Step = 20 then begin
PanaGD9xCode := St&#59;
Rs := St&#59;
end&#59;
if Step = 21 then
begin
PanaGD9xIMEI := St&#59; Rs := St&#59;
end&#59;
if Step = 22 then begin
PanaGD9xSW := St&#59;
Rs := St&#59;
end&#59;
if Pos(Rs, St)  0 then
Inc(Step)&#59;
end&#59;
end.




欢迎光临 光电工程师社区 (http://bbs.oecr.com/) Powered by Discuz! X3.2