C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Модемы, Программирование модемов
androgen2003
  Отправлено: 19.06.2004, 10:53


Не зарегистрирован







Товарищи, помогите подыскать литературку или пару уроков по программирванию и управлению модемами в буилдере 5.0!
Георгий
Отправлено: 19.06.2004, 14:11


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



работаем как с обычным com портом и шлём обычные AT команды
работа с компортом — на этом форуме куча примеров
AT команды — к производителям модемов или на специализарованные сайты — usrroborics.ru usrsupport.ru
а ещё можно через TAPI, но это уже не ко мне — с TAPI не знаком
androgen2003
  Отправлено: 20.06.2004, 20:09


Не зарегистрирован







Товарищ Георгий!
Оно то дело понятно, но я только начал этот вопрос жевать. Мне бы пару уроков да исходничков, вот было бы дивно.
Георгий
Отправлено: 23.06.2004, 20:51


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



если не возражаешь, то в выходные набросаю примеры.
Георгий
Отправлено: 28.06.2004, 12:36


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



описание всякой хрени, в том числе и AT команд лежит ftp://ftp.usrsupport.ru/sportster/techref.zip
примеры работы с голосовыми функциями ftp://ftp.usrsupport.ru/sportster/vi_progr.rar

CODE

открытие и настройка порта:
COMMCONFIG cc;
DCB cdb;
HANDLE hCom;
DWORD size=sizeof(COMMCONFIG);

hCom=CreateFile(com.c_str(),GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);

cc.dwSize=size;
cc.wVersion=1;
cc.dwProviderSubType=PST_RS232;
cc.dwProviderOffset=0;
cc.dwProviderSize=0;

if (hCom==INVALID_HANDLE_VALUE)
ShowLastError();

if (!GetCommConfig(hCom,&cc,&size))
ShowLastError();

if (!CommConfigDialog(this->Edit1->Text.c_str(),this->Handle,&cc))
ShowLastError();

if (!SetCommConfig(hCom,&cc,size))
ShowLastError();

ctmo.ReadIntervalTimeout=0;
ctmo.ReadTotalTimeoutMultiplier=0;
ctmo.ReadTotalTimeoutConstant=5000;
ctmo.WriteTotalTimeoutMultiplier=0;
ctmo.WriteTotalTimeoutConstant=2000;

<чтение и запись в модем выполняются точно так же как и в обычный файл — через WriteFile ReadFile>

CloseHandle(hCom);

самая важная функция — диагностика ошибок (содрана из хелпа)
void ShowLastError(void)
{
LPVOID lpMsgBuf;

FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);

// Display the string.
MessageBox( NULL,(char*) lpMsgBuf, "GetLastError", MB_OK|MB_ICONINFORMATION );

// Free the buffer.
LocalFree( lpMsgBuf );
};



например если записать в порт текстовую строку "ATI7" заканчивающуюся кодом 13
то в ответ будет получена строка содержащая кучу всякой информации о модеме

а если "ATDP100" то позвоним в службу времени

сочетание простуды и новой РПГ — лучший способ потратить время

Отредактировано Георгий — 28/06/2004, 13:39

Вернуться в Работа с внешними устройствами