Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: "Прослушивание" СОМ-порта  (Прочитано 9291 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« : 30-06-2010 08:13 » 

У меня есть джойстик, который подключается к порту СОМ. Хочу для него написать драйвер. Но перед этим хотелось бы точно знать, что по нажатию кнопок на джойстеке в порт действительно отправляется информация. Мне нужна программа, которая может любым образом отобразить поступившую с СОМ информацию... Можете посоветовать?
« Последнее редактирование: 10-11-2010 07:21 от Джон » Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #1 : 30-06-2010 08:20 » 

Поиском в гугле нашел много ссылок: http://www.google.ru/search?q=com+port+sniffer
Попробуй одну из этих программ.
К сожалению, своего опыта в этом нет и посоветовать конкретного ничего не могу.
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Золотая Лань
Молодой специалист

ru
Offline Offline
Пол: Женский

« Ответ #2 : 30-06-2010 08:29 » 

послушайте…
я конечно не доктор, но разве hyperterminal, штатно входящий в состав Windows, не делает именно это?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 30-06-2010 08:45 » 

Золотая Лань, не, гипер отпадает Улыбаюсь

QoI, что нибудь вроде LGComSpy надо. Только он 1 и 2 порты умеет, если номер больше - то что -то другое надо искать


это тоже Realterm - даже получше будет
« Последнее редактирование: 30-06-2010 08:54 от Алексей1153++ » Записан

Paul
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 30-06-2010 11:35 » 

Free Serial Monitor. Умеет смотреть виртуальные сом-порты
Записан
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #5 : 01-07-2010 01:37 » 

Спасибо за ответы!
Записан
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #6 : 12-07-2010 07:27 » 

Подскажите пожалуйста: если я открыл СОМ-порт (методом CreateFile), закрыть его мне нужно функцией CloseHandle или DeleteFile?

Я использую CloseHandle, но если неправильно, то напишите.
« Последнее редактирование: 12-07-2010 07:41 от QoI » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #7 : 12-07-2010 08:13 » 

CloseHandle - правильно.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #8 : 12-07-2010 18:03 » 

Работал по примеру https://forum.shelek.ru/index.php/topic,7459.0.html.
Но как только хочу что-то прочитать с порта, прога зависает, то есть сигналов/данных нет. Возможно сам джойстик их не посылает. Я же надеюсь, что у меня в коде где-то ошибка. Если вас не затруднит, посмотрите, пожалуйста, мой код.

Открытие порта:
Код:
	char portIndent[10];
sprintf(portIndent, "\\\\.\\COM%d", no); // no - это номер порта.

port = CreateFile(portIndent,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL
);
if(port != INVALID_HANDLE_VALUE)
{
opened = true;
DCB dcb;
if(GetCommState(port, &dcb) == 0)
{
this->close();
throw COMDCBReadErrorException();
}
else
{
dcb.fOutX             = 1;
dcb.fInX              = 1;
dcb.fTXContinueOnXoff = 1;
dcb.fDtrControl       = 1;
dcb.fRtsControl       = 0;
dcb.fOutxDsrFlow      = 0;
dcb.fOutxCtsFlow      = 0;
dcb.XoffChar          = 0x13;
dcb.XonChar           = 0x19;
                                          SetCommState(port, &dcb);
                            }
}
else
{
success = opened = false;
}

Reading:
Код:
	if(!opened)
throw COMPortIsUnopenedException();
else
{
char inputBuffer[COM_BUFFER_SIZE] = {0};
DWORD recd = 0;
if(FALSE == ReadFile(port,                               // тут происходит остановка :(.
     inputBuffer,
     COM_BUFFER_SIZE - 1,
     &recd,
     NULL
                                                             )
                              )
{
throw COMUnableToReadException();
}
else
{
if((recd > 0) && (recd < COM_BUFFER_SIZE))
{
char* copy = new char[COM_BUFFER_SIZE]
for(unsigned int i = 0; i < recd; ++i)
copy[i] = inputBuffer[i];
copy[recd] = '\0';
this->clear();
buffer = copy;
copy = 0;
}
else
{
this->clear();
}

return buffer;
        }
    }
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 13-07-2010 10:52 » 

может быть, проще сделать inputBuffer не локальным, тем самым избавиться от
char* copy = new char[COM_BUFFER_SIZE]

и прочитать (правильно настроив таймайту) так (указатель на буфер передать, естественно, в функцию):

Код:
if(!opened)
{
return 0;//прочитано 0 байтов
}
else
{
DWORD recd = 0;
if(!ReadFile(port,inputBuffer,COM_BUFFER_SIZE - 1,&recd,NULL))
{
return 0;//прочитано 0 байтов
}
else
{
return recd;
        }
}

Записан

Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #10 : 09-11-2010 16:01 » 

Снова вернулся к оживлению джойстика...

Из всех портов от 0 до 255 все возвращают INVALID_HANDLE_VALUE, за исключением №1 (\\.\СОМ1); последний инициализацию проходит успешно, но останавливается на части кода
Код:
ReadFile(...)

Проблема в том, что джойстик этот от какого-то караоке (сейчас нету ни его, ни инструкции к нему). Может быть, что разъём похож на RS-232 (http://ru.wikipedia.org/wiki/Файл:RS-232.jpeg)(а таки похож), но стандарт иной?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 09-11-2010 17:12 » 

Dr.Y, для джойстиков когда-то использовали "game port". Он немного длиннее - 15 контактов.
http://ru.wikipedia.org/wiki/%D0%98%D0%B3%D1%80%D0%BE%D0%B2%D0%BE%D0%B9_%D0%BF%D0%BE%D1%80%D1%82
Возможно это твой разъем.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #12 : 09-11-2010 22:21 » 

RXL, нет, у меня 9-контактный раъем, в точности, как на рисунке в Википедии.
« Последнее редактирование: 10-11-2010 14:46 от Dr.Y » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 14-11-2010 13:01 » 

Может тему стоит перенести в тематический раздел?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines