Member
Статус: Не в сети Регистрация: 23.12.2004 Откуда: Беларусь, Минск
Давайте поможем мне создать простенький файл-менеджер для Сименса (примерно М55) написанный на делфи. Не прошу полностью исходники (есть исходники SGHFS для Самсунга) но там много не понимаю.
Для начала хочу узнать
Как посылать на телефон комманды Какие там есть комманды (записать/считать) Правила безопасности (чтоб не повалить телефон)
_________________ ASUS A4M88T-M, Athlon II X3 425, 2GB NCP, video - internal ATI 4250, 200GB Samsung HDD, Win7 x64
Member
Статус: Не в сети Регистрация: 14.01.2004 Откуда: Киев, Украина
Цитата:
Взаимодействие с мобильными телефонами Вы, наверное, не раз видели или даже пользовались программами, которые отображают любую информацию о вашем телефоне. Сейчас вы узнаете, как самим сделать такую программу!
Для начала положим на форму 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-карты
Member
Статус: Не в сети Регистрация: 23.12.2004 Откуда: Беларусь, Минск
Daemon Большое спасибо.
Добавлено спустя 3 минуты, 13 секунд: Чего-то дока не хочет качаться.
И ещё - насколько реально и просто повалить этим истему телефона - чего делать нельзя?
Добавлено спустя 3 минуты, 22 секунды: А с USB как взаимодействовать?
_________________ ASUS A4M88T-M, Athlon II X3 425, 2GB NCP, video - internal ATI 4250, 200GB Samsung HDD, Win7 x64
Member
Статус: Не в сети Регистрация: 23.12.2004 Откуда: Беларусь, Минск
Почитал код. Появился вопрос - для всех мобил принцип один и тот же и надо смотреть лишь только спецификации комманд? И как записать txt-файл, картинку, мелодию?
_________________ ASUS A4M88T-M, Athlon II X3 425, 2GB NCP, video - internal ATI 4250, 200GB Samsung HDD, Win7 x64
Member
Статус: Не в сети Регистрация: 15.08.2003 Откуда: МО, Химки мкр.С
тут тебе врятли помогут
ступай на http://www.siemens-club.ru/ там много людей занисаются програмированием под телефон! Так что там тебе всё раскажут и покажу
_________________ Вот что значит быть взрослым: иметь на спидометре 210, но не привышать 60. (с) "Влюбись в меня, если осмелишся"
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения