Страница 2 из 3
Re: Работа с GSM-модемом из Delphi
Добавлено: Чт окт 04, 2012 6:58 pm
ra0uek
Иван, пример я видел, для меня без какого-либо образца это сложно.
Аськой я не пользуюсь.
Re: Работа с GSM-модемом из Delphi
Добавлено: Чт окт 04, 2012 7:01 pm
lis
ra0uek писал(а):Иван, пример я видел, для меня без какого-либо образца это сложно.
Аськой я не пользуюсь.
=) пост на хабре, который выдаётся гуглем первой ссылкой и имеющий полный код на делфи, тоже не катит?
Re: Работа с GSM-модемом из Delphi
Добавлено: Чт окт 04, 2012 7:02 pm
ra0uek
ra0uek писал(а):=) пост на хабре, который выдаётся гуглем первой ссылкой и имеющий полный код на делфи, тоже не катит?
Увы.
Re: Работа с GSM-модемом из Delphi
Добавлено: Чт окт 04, 2012 7:04 pm
lis
О_о тогда не понимаю что ты имел ввиду под словами "Как отправить/принять sms из delphi" какое действие надо сделать чтобы оно устроило?
Уж на хабре разжёванно от и до, да ещё и исходник приложен.
Я лучше объяснить не смогу.
Re: Работа с GSM-модемом из Delphi
Добавлено: Чт окт 04, 2012 7:12 pm
ra0uek
Мне непонятно из статьи с хабра каким кодом получить смс с модема.
Конкретно то есть кусок кода нужен.
Re: Работа с GSM-модемом из Delphi
Добавлено: Чт окт 04, 2012 7:24 pm
lis
если с хабрапримера то тут
Код: Выделить всё
function TGSMComander.GetSMSMessage(AIndex: Integer): TSMSMessage;
var
LRead: String;
begin
LRead := '';
WriteStr(Format(CMD_CMGR, [AIndex]));
if ReadToOK(LRead) then
Result := StringToSMS('0,' + StrPart(READING_MESSAGE, END_MESSAGES, LRead));
end;
function TGSMComander.GetSMSMessages(AGetSMS: TGetSMS): TSMSMessages;
var
LReadALL: String;
LList: TArrayOfString;
i: Integer;
begin
WriteStr(Format(CMD_CMGL, [GET_SMS[AGetSMS]]));
LReadALL := '';
ReadToOK(LReadALL);
LReadALL := StrPart('', END_MESSAGES, LReadALL);
if pos(BEGIN_MESSAGE, LReadALL) > 0 then
begin
LReadALL := StrPart(BEGIN_MESSAGE, '', LReadALL);
LList := StrParse(LReadALL, BEGIN_MESSAGE);
SetLength(Result, Length(LList));
for i := 0 to Length(LList) - 1 do
Result[i] := TGsmSms.StringToSMS(LList[i]);
end;
end;
Кратко как читается SMS
модему отправляется AT+CMGL="ALL"
он в ответ плюёт все смс какие у него есть в памяти.
В обычном текстовом формате, читаем
СМС отдаётся в 2 строки, в первой строке номер ячейки, отправитель, датавремя
Во второй строке сама смс.
Читаем первую, обрабатываем как нам надо и стираем командой AT+CMGD=номер ячейки
Опять посылаем AT+CMGL="ALL"
Читаем снова, обработанной уже не будет в том что вернул модем.
И так далее.
Re: Работа с GSM-модемом из Delphi
Добавлено: Сб окт 06, 2012 11:21 pm
ra0uek
Решил разбираться по возрастающей.
Итак, сначала просто читаю что шлет модем в порт (например, при входящем звонке должно прилететь сообщение RING).
ReadFile(hFile, Data, SizeOf(Data),i,nil);
Получаю полный бред, просто набор символов. Но всегда один и тот же.
Скорости и прочие установки порта программно выполняются нормально.
Куда копать?
Re: Работа с GSM-модемом из Delphi
Добавлено: Пн окт 08, 2012 12:03 am
lis
Кинь что читается.
Обычно в получении крякозябр всётаки виновата скорость.
Re: Работа с GSM-модемом из Delphi
Добавлено: Чт окт 11, 2012 10:41 pm
ra0uek
Итак, продолжаем.
Начал ковырять исходники с Хабра. Столкнулся с некоторыми траблами.
Во-первых, сообщение не хочет отправляться, если телефонный номер написан через +7. То есть если написать 8914... то все работает, если в международном формате -- то нифига. Это раз.
Во-вторых, во время отправки сообщения модем не всегда отправляет смс-ку сразу, иногда он выдает сообщение ERROR, которое никак не обрабатывается и сообщение остается недоставленым. Кстати сказать, из пачки передаваемых сообщений -- половина точно не уходит.
Третье, я так и не понял как прочитать только непрочитанное сообщение. Одно сообщение. Например, пришедшее последним.
Re: Работа с GSM-модемом из Delphi
Добавлено: Пт окт 12, 2012 8:24 am
pitman
ra0uek писал(а):
Третье, я так и не понял как прочитать только непрочитанное сообщение. Одно сообщение. Например, пришедшее последним.
Исходя из того, что писал
lis
1. Запрашиваем сколько СМС есть вааще.
2. В цикле считываем СМСки из ячейки, обрабатываем, стираем обработанные.
3. И так пока все на данный момент не будут обработаны.
4. Спим 0.5сек
5. п.1
По отправке, делаем в памяти ПК пул исходящих сообщений. Сообщений из проги записываются в пул отправки, планировщик каждые 0.2сек (например) проверяет пул. если надо что отправить, отправлят одну СМС и проверяет результат, если ок, отправленую удаляет из пула.