Входит и выходит...Работаем с COM-портом

Николай "GorluM" Андреев

Xakep, номер #053, стр. 053-086-4


<команда>\r

\r<ответ>\r

К тому же все данные передаются открытым текстом, без каких-либо сложных кодов и т.п. Первое, что я послал, было AT, модем вернул OK. Я попробовал пару строк инициализации, все прошли на ура. Потом вспомнил еще несколько интересных команд, например таких:

ATDPномер - звонит пульсом по номеру (T - тоновый набор)

ATI3 - выдает версию модема

ATI7 - выдает название модема

ATH0 - вешает трубку

ATH1 - снимает трубку и подключается к линии

Если захочешь узнать побольше команд, поройся в документации своего модема. Но и это еще не все. Сейчас практически у всех есть мобильники, и у многих имеется комовский провод для синхронизации мобильного телефона с компьютером. Так вот, в каждом телефоне существует GSM-модем, а это очень интересная штука. Помимо обычных функций модема, он может отправлять SMS. Вот как это сделать при помощи нашей программы:

AT+CMGS="+79033133373"

Модем ответит. Затем ты введешь текст сообщения с символом '\x1A' на конце, а модем отправит эту мессагу на номер +79033133373.

Break

Проект для Visual Studio .NET, полный исходный текст программы c подробными комментариям и уже скомпилированный exe’шник ты можешь взять на диске или скачать с сайта www.xakep.ru. Наверняка у написанной нами программы есть еще и другие применения. Так что экспериментируй, а если придумаешь что-нибудь оригинальное, то напиши мне об этом.

На этом все. Удачного компилирования.

Листинг оконной процедуры

int __stdcall Dlg_Proc(HWND hwnd, UINT wMsg, WPARAM wParam, LPARAM lParam)

{

switch (wMsg){

case WM_CLOSE:

EndDialog(hwnd,1);

break;

case WM_COMMAND:

switch (LOWORD(wParam)) {

case IDC_BUTTON1:

// Нажали на кнопку отправки данных

// Выделяем память под буферы

writebuffer = (char*)malloc((size_t)128);

memset(writebuffer,0,128);

// получаем текст из поля

GetDlgItemText(hwnd,IDC_EDIT1,writebuffer,128);

writebuffer[strlen(writebuffer)] = '\r';

writebuffer[strlen(writebuffer)] = '\0';

// отправляем

TerminateThread(hThread,0);

WriteFile(hCom, writebuffer,

strlen(writebuffer),&n1,0); // Отправляем текст

// Заново создаем нить

hThread = CreateThread(0, 0, ReadThread, (LPVOID)hwnd, 0, 0);

break;

case IDC_BUTTON2:

// Нажали на кнопку открытия порта

combuffer = (char*)malloc((size_t)16);

memset(combuffer,0,16);

// Получаем имя порта и открываем его

GetDlgItemText(hwnd,IDC_EDIT2,combuffer,16);

hCom = CreateFile(combuffer, GENERIC_READ | GENERIC_WRITE,

0, 0, 3, 0, 0);

hThread = CreateThread(0, 0, ReadThread, (LPVOID)hwnd, 0, 0);

// настраиваем его

GetCommState(hCom, &dcb);

dcb.BaudRate = CBR_57600;

dcb.ByteSize = 8;

dcb.Parity = NOPARITY;

dcb.StopBits = ONESTOPBIT;

SetCommState(hCom, &dcb);

break;

}

break;

}

return false;

}

Назад на стр. 053-086-3  Содержание