Просмотр полной версии : Хочу написать программу чтобы она читала SMSки телефона
Кто нить пробывал когда нибуть написать программу эксплорер для мобильного телефона, или хотя бы чтоб прога читала смс-ки телефона. Расскажите как это делается, желательно для телефонов Siemens.
Если Сименс поддерживает Java, тогда прямиком на
www.sun.com. Там много чего есть для написания софта
под мобильники и главное бесплатно. Емуляторы телефонов
для компа загружаются с сайтов производителей.
Ну и голову на плечах иметь надо и англицкий, так как доки
все именно на нем.
Литература на русском тоже есть. Ищи в нете Горнакова
"Программирование мобильных телефонов"
Никакой явы, необходимо написать программу которая с компьютера читает смс сообщения телефона, но готовые не подходят. Если у кого есть исходники скиньте плиз мне на мыло. Заранее благодарен
Это мне дали курсовой работу сделать, если сделаю, сдам экзамены досрочно. Мне важно чтоб это было сделано на си и мной. Если у кого есть исходники на Pascale(Delphi) ниче скиньте, я переведу на с.
Я написал прогу которая отсылает AT-команды COM порту, но не получается написать прием ответа от телефона.
PIC-ador
22.02.2006, 17:00
...но не получается написать прием ответа от телефона.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnfiles/html/msdn_serial.asp
чтобы не написать передачу/прием at-комманд...
что там писать то вообще... 2 часа делов...
чтобы не написать передачу/прием at-комманд...
что там писать то вообще... 2 часа делов...
Так покажи как, и желательно в VC++
Спасибо PIC-ador за инфу. Я научился читать данные с ком-порта, вродебы дает правильные ответы на АТ-команды. Но как делать чтение только того количества символов, которое идет с ответом. Пытался создавать поток, который постоянно читал данные из порта и записывал куда нужно, но ничего не получилось. А в бесконечном цикле все читает, но ясное дело зацикливается
На чем пишем?
Что именно не получается с потоками? Я считку в отдельном потоке делал в Дельфи 6.0
Когда делаешь считывание с буфера (ReadFile(ComHandles, Receive, ToBeRead, IsRead, @ReadOverlapped)), то указываешь кол-во байт для считывания (ToBeRead) и после считки в IsRead возвращается кол-во считанных байт, которые считываются в буфер (Receive:array of byte).
Вот нормальный пример работы с комом в асинхронном режиме.
http://kladovka.net.ru/delphibase/?action=viewfunc&topic=hardsystem&id=10452
PIC-ador
28.02.2006, 12:06
Или вот:
http://www.books.ru/shop/books/168691
На чем пишем?
Пишу в VC++, разницы в чем писать особой нет. Мне так удобней, лиш бы на Си.
Вот пример моей программы где я использую поток. Этот код содержится в функции которая отправляет АТ-команды
...
DWORD iSize;
WriteFile(hCom, sComand, strlen(sComand), &iSize,0);
hThread = CreateThread(0, 0, ReadThread, (LPVOID)this, 0, 0);
...
Вот код потока, который читает ответ с порта
DWORD __stdcall ReadThread(LPVOID hwnd)
{
DWORD iSize;
char sReceivedChar;
while(true)
{
ReadFile(hCom,&sReceivedChar,1,&iSize,0);
SendDlgItemMessage((HWND)hwnd,IDC_EDIT1,WM_CHAR,sR eceivedChar,0);
}
}
У меня такое подозрение что неправильно передается адрес идентификатора окна hwnd, или не создается поток
если в функции которая отправляет АТ-команды добавить бесконечные цикл который читает ответ то все работает
...
DWORD iSize;
WriteFile(hCom, sComand, strlen(sComand), &iSize,0);
char sReceivedChar;
while(1)
{
ReadFile(hCom,sReceivedChar,1,&iSize,0);
SendDlgItemMessage(IDC_EDIT1,WM_CHAR,sReceivedChar ,0);
}
...
если в функции которая отправляет АТ-команды добавить бесконечные цикл который читает ответ то все работает
:-)))))))))
Советую поступить следующим образом:
1) Взять любой компонент для работы с СОМ портом и не заморачиваться
2) Если хочится заморочиться, то
а) Делай всю работу с СОМ поротом в отдельном потоке, так лучше, все в одном классе
б) Между отправкой команды и приемом ответа должно пройти время, нужное для работы отвечающего устройство. Советую применить TimeOutResponce, чтобы это время проверять буфер порта. Если время вышло, то можешь сразу сообщать о неполучении данных
в) Не знаю, как в С++, но в Дельфи при создании потока в методе Create указывается переменная типа boolean, которая разрешает запуск потока или держит его приостановленным. Разберись с этим, может поток создается, но он Suspended.
COMThread = class (TThread)
private
COMHandle:THandle;
......
procedure Execute; override;
function ReadData:string;
protected
public
constructor Create(Go:boolean);
destructor Destroy; override;
function COMPortInit(PortName:string):boolean;
function SendData(DataToSend):string;
function CloseCOMPort(PortName:string):boolean;
end;
.........
constructor COMThread.Create(Go:boolean);
begin
inherited Create(Go);
COMHandle:=nil;
end;
destructor COMThread.Destroy;
begin
inherited Destroy;
end;
procedure COMThread.Execute
begin
While not Terminated do
begin
end;
If COMHandle<>nil then
CloseFile(COMHandle);
end;
function COMThread.COMPortInit(PortName:string):boolean;
begin
// Здесь отыкрываем порт
// и настравиаем его
COMHandle:=CreateFie(PChar(PortName),...)
end;
function COMThread.SendData(DataToSend):string;
begin
// Отсылаешь данные
// Вызываешь COMThread.ReadData
Result:=COMThread.ReadData;
end;
function COMThread.ReadData:string;
begin
//Проверяешь в течение AnswerTimeout миллисекунд буфер СОМ порта
// Но можно создать предварительно евент, который будет "включаться"
// при появлении данных на входе СОМ порта
// Читаем данные, если они пришли на СОМ порт
end;
function COMThread.CloseCOMPort:boolean;
begin
// Закрываем СОМ порт
CloseFile(COMHandle);
end;
Примерно так, я писал по памяти, так что могут быть неточности.