Работа с сотовыми телефонами

Взаимодействие с мобильными телефонами
Вы, наверное, не раз видели или даже пользовались программами, которые отображают любую информацию о вашем телефоне. Сейчас вы узнаете, как самим сделать такую программу!
Для начала положим на форму Memo, CheckBox "Соединиться», кнопку «Послать команду», Edit.
А) Подключение
Итак, в «Public declarations» объявляем 2 функции и 2 процедуры, потом объявляем 4 глобальные переменные:



public

{ Public declarations }

function OpenCOMPort: Boolean;

 function SetupCOMPort: Boolean; //для настройки порта

  procedure Connect;

  procedure Disconnect;

  …

  var

  Form1: TForm1;

  ComFile: THandle; //Хэндл создаваемого нами файла

  ComString: string; //(COM1, COM2 или COM3)

  ComSpeed: Integer; //Скорость взаимодействия с COM-портом

  Status: Boolean; //подключен или не подключен (чтобы в дальнейшем проверять статус)

Жмём Ctrl+C и записываем дальше:

procedure TForm1.Connect;

begin

 ComString := 'COM2';

 ComSpeed := 19200;

 if OpenCOMPort = true then //Открываем порт…

  if SetupCOMPort = true then //…и конфигурируем его

  Memo1.Lines.Add('Подключились...');

 Sleep(1500); //засыпаем на полторы секунды чтобы дать время на соединение

end;

procedure TForm1.Disconnect;

begin

 CloseHandle(ComFile);

 Memo1.Lines.Add('Отключились.');

end;

function TForm.OpenCOMPort: Boolean;

var DeviceName: array[0..80] of Char;

 Device: string;

begin

 Device := ComString;

 StrPCopy(DeviceName, Device);

 ComFile := CreateFile(DeviceName,

  GENERIC_READ or GENERIC_WRITE,

  0,

  nil,

  OPEN_EXISTING,

  FILE_ATTRIBUTE_NORMAL,

  0);

 if ComFile = INVALID_HANDLE_VALUE then

  begin

  Result := False;

  Status := Result;

  end

 else

  begin

  Result := True;

  Status := Result;

  end;

end;

function TForm1.SetupCOMPort: Boolean;

const RxBufferSize = 256;

 TxBufferSize = 256;

var DCB: TDCB;

 Config: string;

 CommTimeouts: TCommTimeouts;

begin

 Result := True;

 if not SetupComm(ComFile, RxBufferSize, TxBufferSize) then

  Result := False;

 if not GetCommState(ComFile, DCB) then

  Result := False;

 Config := 'baud=' + IntToStr(ComSpeed) + ' parity=n data=8 stop=1'; //Устанавливаем скорость

 if not BuildCommDCB(@Config[1], DCB) then

  Result := False;

 if not SetCommState(ComFile, DCB) then

  Result := False;

 with CommTimeouts do

  begin

  ReadIntervalTimeout := 0;

  ReadTotalTimeoutMultiplier := 0;

  ReadTotalTimeoutConstant := 1000;

  WriteTotalTimeoutMultiplier := 0;

  WriteTotalTimeoutConstant := 1000;

  end;

 if not SetCommTimeouts(ComFile, CommTimeouts) then

  Result := False;

end;

Теперь два раза щёлкаем по CheckBox и записываем код:

procedure TForm1.CheckBox1Click(Sender: TObject);

begin

 if CheckBox1.Checked then

  Connect

 else

  Disconnect;

end;

В событии формы OnDestroy записываем:

procedure TForm1.FormDestroy(Sender: TObject);

begin

 if Status = true then //При выходе из программы отключаемся

  Disconnect;

end;

Б) Шлём команды и принимаем ответы
Щёлкаем два раза по кнопке «Послать команду» и записываем код:

procedure TForm1.Button1Click(Sender: TObject);

var BytesWritten: DWORD;

 s: string;

 d: array[1..1500] of Char;

 BytesRead: DWORD;

 i: Integer;

 Result: string;

begin

 s := Edit1.Text; //Берём команды из Edit1…

 s := s + #13 + #10;

 WriteFile(ComFile, s[1], Length(s), BytesWritten, nil); //…и посылаем их телефону

 Result := '';

 if not ReadFile(ComFile, d, SizeOf(d), BytesRead, nil) then

  begin

  MessageDlg('Ошибка чтения!', mtError, [mbOK], 0);

  exit;

  end;

 s := '';

 for i := 1 to BytesRead do //Считываем ответ от телефона

  s := s + d[I];

 Result := s;

 Memo1.Lines.Add(Result); //Выводим ответ от телефона в Memo

end;

Вот и всё! Теперь подключите телефон, запускайте программу, ставьте галку в CheckBox'е, и, после того, как вам написали в Memo, что вы подключились вводите в Edit любую AT-команду и жмите «Послать команду». Удачи!
В) Некоторые полезные команды AT
Этими командами вы можете воспользоваться, для посылки телефону (из поля Edit):
AT+CGMI – производитель
AT+CGMM – модель телефона
AT+CPAS – состояние
AT+COPS? – оператор
AT+CGSN – номер IMEI
AT+CGMR – версия прошивки
AT+CBC – степень зарядки телефона
AT+CREG? – статус сети
AT^SCID – номер SIM-карты
AT+CIMI - номер IMSI
AT^SPIC – попыток до блокировки SIM-карты
Более подробно о командах вы сможете узнать из pdf-инструкции s35i_c35i_m35i_atc_commandset_v01.pdf (можно утащить по адресу: http://www.like.e-technik.uni-erlangen.de/...andset_v01.pdf)
Примечания: Автор: Лазуткин Алексей (alessio19@mail.ru), помощь в написании: av3nger (av3nger@hakep.com)

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...