Конференция "WinAPI" » Как позвонить или отправить СМС через подключенный тлф?
 
  • TheEd (16.09.10 01:00) [0]
    Господа мастера, всем привет!
    Наведите на мысль, как позвонить с устройства (модем или сотовый через дата-кабель подключенный) на определённый номер или послать СМС в случае если девайс - сотовый?
    Общий принцип понятен: получить количество такого типа устройств, получить их список, выбрать нужное, сделать дело, освободить устройство.
    основной интерес вызывает то что жирное, хотя за остальные пункты тоже буду признателен.
  • 0x00FF00 © (16.09.10 03:10) [1]
    Использовать AT-команды, т.е. фактически работать с телефоном как с модемом.

    1. отправка ATZ
    2. последовательность инициализации (в случае моего SE K800 — просто ожидание ответа TZ OK)
    3. отправка AT-кода SMS (у меня это набор из AT+CSMS, AT+CPMS, AT+CMGF, AT+CMGS и прочих), со всеми параметрами типа текста сообщения, номера поучателя, итд.
    4. ожидание ответа ОК и выход (освобождение устройства)

    Как-то так.
  • Anatoly Podgoretsky © (16.09.10 18:56) [2]
    > TheEd  (16.09.2010 01:00:00)  [0]

    Телефон подключается как модем, твоя задача найти систему команд модема.
  • brother © (17.09.10 10:20) [3]
    > твоя задача найти систему команд модема.

    + com порт на котором он висит)
  • Anatoly Podgoretsky © (17.09.10 11:52) [4]
    > brother  (17.09.2010 10:20:03)  [3]

    Если есть ком порт.
  • han_malign (17.09.10 13:51) [5]
    http://www.dreamfabric.com/sms/

    ETSI(http://www.etsi.org):
    ETS 300 916 - AT command set for GSM Mobile Equipment
    GSM 03.40 - Technical realization of the Short Message Service
    GSM 07.05 - Equipment (DTE - DCE) interface for Short Message Service (SMS) and Cell Broadcast Service (CBS)
  • TheEd (17.09.10 22:55) [6]
    не густо...
    когда-то с com-портом работал - то была связь с технологическим оборудованием по com-порту. Я так понимаю что com-порт, на котороми висит модем используем так же, т.е. посылаем в него последовательности AT-комманд и, если надо, ждём ответ?
    И где систему этих AT-команд раскопать? Помогите со ссылками на мануалы.
    Сегодня подключу свой Samsung и попробую что нить сотворить...
  • 0x00FF00 © (17.09.10 23:58) [7]

    > т.е. посылаем в него последовательности AT-комманд и, если
    > надо, ждём ответ

    Именно.


    > И где систему этих AT-команд раскопать?

    Теоретически, на официальном сайте фирмы, выпустившей мобильник.
    Там должна лежать наиболее полная система команд под каждую модель (включая "самопальные" расширения от производителя).
  • TheEd (18.09.10 12:18) [8]
    С СМС понятно. Дозвон видимо так же происходит, а вот как, дозвонившись, послать/принять сообщение?
  • 0x00FF00 © (19.09.10 02:15) [9]
    Могу прислать рабочую программу приёмопередачи AT-сообщений для моего К800, если не смущает, что она на С и под Linux =)
  • TheEd (21.09.10 23:08) [10]
    На C++ я работал, но под мелкомягкими осями... :)
    тем не менее думаю что разберусь. Если не сложно, на ed.serdyuk@mail.ru забрось плиз!
  • 0x00FF00 © (22.09.10 02:17) [11]
    TheEd, готово.
  • 0x00FF00 © (22.09.10 02:18) [12]
    В архиве также есть спеки на мой телефон (2 PDF-документа), в них есть АТ-команды для SMS, с примером строки вызова.
  • 0x00FF00 © (22.09.10 02:19) [13]
    *думаю, эти SMS-коды стандартны для большинства мобильных.
  • Sasha (05.12.10 20:37) [14]
    Здраствуйте ешё раз. Если у кого есть рабочий компонент для отправки смс на делфи с примером, поделетись-а?
    sasha070393@mail.ru
  • TMichael (17.01.11 17:51) [15]
    если несложно можно мне наработки от к800 для линуха? :)
    буду признателен zmraven@inbox.ru
  • Spot (22.02.11 05:55) [16]
    Пытаюсь отправить последовательно 5 СМСок "тест1","тест2",..."тест3", приходит только первый, третий и пятый. Почему?
    Между отправками  sleep(10000);
    Лог:

    at+cmgf=0

    OK
    AT+CMGS=24

    > 0011000B919742717403F70008A80A04420435044104420031

    at+cmgf=0

    OK
    AT+CMGS=24

    > 0011000B919742717403F70008A80A04420435044104420032
    +CMGS: 66

    OK
    at+cmgf=0

    AT+CMGS=24

    OK

    > 0011000B919742717403F70008A80A04420435044104420033
    at+cmgf=0

    AT+CMGS=24

    OK

    > 0011000B919742717403F70008A80A04420435044104420034
    +CMGS: 67

    OK
    at+cmgf=0
    AT+CMGS=24

    OK

    > 0011000B919742717403F70008A80A04420435044104420035
    +CMGS: 68

    OK

  • Slym © (22.02.11 14:02) [17]
    из архива этого форума:
    Pattern   (10.04.07 12:37) [5]
    Чтобы уж завершить эту эпопею (вдруг кому пригодится), напишу как на самом деле производится отправка:
    var
    AtIn: String;
    Simb: Integer;
    ...
    begin
    ...
    if ComPort.Connected then
    begin
    //отправляем предварительную команду отправки SMS
    ComPort.WriteStr('AT+CMGS=+79211234567'+#13);
    //считываем данные, что модем готов для приёма сообщения
    ComPort.ReadStr(AtIn,Simb);
    //AtIn должен вернуть строку
    //AT+CMGS=+79211234567
    //>
    ...
    //далее идёт посылка на модем самого сообщения
    ComPort.WriteStr('Test message'+' '+^Z);
    //после тела сообщения обязателен пробел (??? не понятно почему)
    //посылка SMS - [CTRL+Z], он же ^Z, он же #26

    //считываем как завершилась операция
    ComPort.ReadStr(AtIn,Simb);
    //после считывания при успешной отправке AtIn должен вернуть
    //+CMGS: [номер отправленного сообщения]
    end;

    Ещё раз спасибо Леониду!
  • Slym © (22.02.11 14:05) [18]
    а мо твоему коду я бы попробывал дослать #13#10 после CTRL+Z
  • han_malign (22.02.11 17:00) [19]

    > at+cmgf=0
    >
    > OK
    > AT+CMGS=24
    >
    > > 0011000B919742717403F70008A80A04420435044104420031

    >
    > at+cmgf=0
    >
    > OK
    > AT+CMGS=24
    >
    > > 0011000B919742717403F70008A80A04420435044104420032
    > +CMGS: 66
    >
    > OK


    - надо не sleep(100500) делать, а дожидаться результата операции(+), и сигнала готовности(OK)...
  • Spot (24.02.11 03:30) [20]

    > //после считывания при успешной отправке AtIn должен вернуть
    > //+CMGS: [номер отправленного сообщения]

    По моему логу только 2-й,4-й и 5-й сообщение вернули +CMGS:XX
    Но получателю приходят 1, 3 и 5. Как понять? Как дожидаться результата операции?
  • han_malign (24.02.11 11:59) [21]

    > Как дожидаться результата операции?

    - после посылки любой команды подразумевающей ответ устройства - необходимо переходить в режим ожидания ответа(подтверждения/ ошибки(
    +...

    ), или приглашения (
    >

    )). Завершенная последовательность  команд также подразумевает ожидания готовности к приему новых команд
    OK

    ...
    То есть - читаешь из порта пока не придет ответ(+, > , OK), только после этого посылаешь новую команду... Причем, согласитесь - на ответ
    +<команда>

    и
    +CME/CMS ERROR: <err>

    - дальнейшая последовательность действий должна несколько отличаться...

    Если будет превышено время ожидания(скажем минут пять) - значит устройство "отвалилось" - переходишь в режим ожидания готовности устройства. Например можно с разумной периодичностью(не чаще двух секунд) посылать команду сброса ATZ - до тех пор пока устройство не скажет OK(я тута)... После чего заново выставляешь режимы устройства и переходишь в состояние работы...
  • Spot (25.02.11 04:18) [22]
    Спасибо han_malign за советы, пока получается, буду копаться дальше, усложнять задачу
  • имя (29.09.11 14:10) [23]
    Удалено модератором
 
Конференция "WinAPI" » Как позвонить или отправить СМС через подключенный тлф?
Есть новые Нет новых   [134430   +2][b:0][p:0.001]