Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

com порт и ИК

257
30 апреля 2006 года
kosfiz
1.6K / / 18.09.2005
Вообщем есть у меня инфракрасник подключенный к com порту. Так вот решил я написать программку, которая бы могла выполнять определенную работу в том случае, когда на неё попадает сигнал с ДУ. Знаю, что можно работать с портом как с файлом, но что после выполнения CreateFile делать? И еще один вопрос: можно ли как-нибудь включать и отключать питание на com порт? Если не сложно подскажите или может знаете где и что почитать сообщите буду признателен. Заранее всем спасибо.
5.3K
01 мая 2006 года
r000n_m
177 / / 26.02.2006
Сильно сомневаюсь, что есть готовый класс для ИК-порта, подключенного к com'у.

Так что изучать распиновку...куда что послать чтобы что-то получить.

Кажется, питание с com'a убрать программно нельзя
257
01 мая 2006 года
kosfiz
1.6K / / 18.09.2005
Цитата:
Originally posted by r000n_m
Сильно сомневаюсь, что есть готовый класс для ИК-порта, подключенного к com'у.

Так что изучать распиновку...куда что послать чтобы что-то получить.

Кажется, питание с com'a убрать программно нельзя


Я тут с помощью одной программки выяснил, что при направлении пульта с сигналом на приемник тот получает какие-то RX. Посмотрел MSDN заменил кое-что на EV_RXFLAG и получилось:

#include <windows.h>
#include <assert.h>
#include <stdio.h>

void main( )
{
HANDLE hCom;
OVERLAPPED o;
BOOL fSuccess;
DWORD dwEvtMask;

hCom = CreateFile( "COM1",
GENERIC_READ | GENERIC_WRITE,
0, // exclusive access
NULL, // default security attributes
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL
);

if (hCom == INVALID_HANDLE_VALUE)
{
// Handle the error.
printf("CreateFile failed with error %d.\n", GetLastError());
return;
}

// Set the event mask.

fSuccess = SetCommMask(hCom, EV_RXFLAG);

if (!fSuccess)
{
// Handle the error.
printf("SetCommMask failed with error %d.\n", GetLastError());
return;
}

// Create an event object for use by WaitCommEvent.

o.hEvent = CreateEvent(
NULL, // default security attributes
FALSE, // auto reset event
FALSE, // not signaled
NULL // no name
);


// Intialize the rest of the OVERLAPPED structure to zero.
o.Internal = 0;
o.InternalHigh = 0;
o.Offset = 0;
o.OffsetHigh = 0;
dwEvtMask=EV_RXFLAG;
assert(o.hEvent);

if (WaitCommEvent(hCom, &dwEvtMask, &o))
{
if (dwEvtMask & EV_RXFLAG)
{
printf("EV_RXFLAG\n");
}

}
else
{
DWORD dwRet = GetLastError();
if( ERROR_IO_PENDING == dwRet)
{
printf("I/O is pending...\n");

// To do.
}
else
printf("WaitCommEvent failed with error %d.\n", GetLastError());
}
//return 0;
}

Я так понимаю здесь идет мониторинг состояния порта и при получении RXFLAG'а происходит событие, но этот код выдает ERROR_IO_PENDING может кто-нибудь объяснит. Насчет подачи напряжения где-то слышал что все как с LPT - может кто-нибудь скажет это как?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог