Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2010, 17:35   #11
Assemblerru
Форумчанин
 
Регистрация: 28.01.2010
Сообщений: 224
По умолчанию

А посмотрите еше вот что он работает и не выдает ошибок... Мне кажится что удалось собрать сведения о работе порта.
#include <windows.h>
char Data;
//==================================
//глобальные переменные
//------------------------------------------
//объявим структуру для конфигурации СОМ порта
DCB dcb;
/*
ZeroMemory (&dcb, sizeof (DCB));// не знает что ето такое
//дескриптор порта
*/
HANDLE hCom_1 = NULL;
//------------------------------------------
//объявим структуру для асинхронной работы порта
OVERLAPPED over;
//------------------------------------------
//для выделения сигнала
DWORD dwSignal;

//пишим функцию инициализации порта СОМ1
bool Innit_COM1 ()
{
//открываем порт СОМ 1
hCom_1 = CreateFile ("COM1", GENERIC_READ|GENERIC_WRITE,
0,NULL, OPEN_EXISTING,
FILE_FLAG_OVERLAPPED, NULL);
if (hCom_1 == INVALID_HANDLE_VALUE)//если порт не удалось открыть
{
CloseHandle (hCom_1);
return false;//выходим из функции с ошибкой
}
//настраиваем параметры порта
dcb.BaudRate = CBR_19200;//скорость передачи
dcb.ByteSize = 8;//размер передачи
dcb.StopBits = ONESTOPBIT;//один стоповый бит
dcb.Parity = NULL;
//проверяем на правильность настройки

if ( !SetCommState ( hCom_1, &dcb)) //тоже не работает....
{
CloseHandle (hCom_1);
return false;//выходим из функции с ошибкой
}

//если все выполнилось то возвращаем положительный результат
return true;
}
/*Теперь когда порт открыт и настроен, нужно настроить
обработку сигналов DSR и CTS.
*/
//пишим функцию настройки событий
bool SetEventCOM ()
{
//настраиваем мониторинг порта
if (!SetCommMask (hCom_1, EV_DSR|EV_CTS))
//если не удалось настроить порт
{
CloseHandle (hCom_1);
return false;//выходим из функции с ошибкой
}
//создаем объект событие
over.hEvent = CreateEvent ( NULL, FALSE, FALSE, NULL);
if (over.hEvent)
{
//при неудачи выходим из функции с ошибкой
CloseHandle (hCom_1);
return false;//выходим из функции с ошибкой
}
//если все выполнилось то возвращаем положительный результат
return true;
}
//функция чтения одного байта данных
BYTE ReadByteCOM ()
{
BYTE read = 0;
DWORD dwByteRead = 0;
do
{//читаем байт из порта
if (!ReadFile (hCom_1, &read, sizeof (BYTE), &dwByteRead, NULL))
{return 0;}
} while (!dwByteRead);
return read;//возвращаем данные
}
//=================================== ==========
//функция чтения массива данных
//=================================== ==========
//функция чтения одного байта данных
bool WriteByteCOM (char bufer)
{
DWORD dwByteWrite = 0;
if (!WriteFile(hCom_1, &bufer, sizeof(char), &dwByteWrite, NULL))
{return 0;}
return true;//возвращаем сведение о выполнении
}
//функция для записи одного байта
char ReadByte_COM ()
{
char bufer = 0x00;
DWORD dwByteWrite = 0;
do
{//читаем байт из порта
if (!ReadFile (hCom_1, &bufer, sizeof (char), &dwByteWrite, NULL))
{return 0;}
} while (!dwSignal);
return bufer;
}
//общая функция для работы с портом
void GeneralCOMRead ()
{
//проверяем сигнал в линии
if (dwSignal & EV_DSR)//данные готовы для чтения
{
//читаем байт из порта
Data = ReadByte_COM ();
//сохраняем байт куда-либо
}

}
void GeneralCOMWrite ()
{
//проверяем сигнал в линии
if (dwSignal & EV_CTS)//данные готовы для записи
{
//пердаем байт из вне и записываем его в порт
WriteByteCOM (Data);
}

}
void CloseCOM ()
{
if (over.hEvent)
{
CloseHandle (over.hEvent);//закрываем объект событие
}
if (hCom_1)
{
CloseHandle (hCom_1);
hCom_1 = NULL;
}
}
всему свое время как зиме и весне
и каждому солнцу свой неба кусок
Assemblerru вне форума Ответить с цитированием
Старый 06.05.2010, 19:37   #12
Assemblerru
Форумчанин
 
Регистрация: 28.01.2010
Сообщений: 224
По умолчанию

Граждане форумчане подскажите как можно описать подобным образом ЛПТ порт... У меня есть некоторый код но он с кучей ошибок...
всему свое время как зиме и весне
и каждому солнцу свой неба кусок
Assemblerru вне форума Ответить с цитированием
Старый 06.05.2010, 22:24   #13
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

через стандартный драйвер parclass.sys:
Код:
HANDLE hLpt =
CreateFile( "LPT1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL );
char buf[0x100];
sprintf(buf, "hello printer\ngood bye printer");
BOOL res =
WriteFile(hLpt, &buf, strlen(buf), &ret, NULL);
CloseHandle(hLpt);
...через другие драйверы и DLL >>> тут <<<
...также читайте статьи DeKot-а (поиск по форуму "LPT") и в следующем номере нашего журнала будет расширенная статья по практике работы с LPT/
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 07.05.2010, 21:03   #14
Assemblerru
Форумчанин
 
Регистрация: 28.01.2010
Сообщений: 224
По умолчанию

да спасибо огромное но я уже пользовался и этой ссылко и подобным кодом может я делал чтото не так (короче у меня ошибка при работе исполнительного файла = чтение с зашищеного адреса).

а код мне тоже известен я скачал по одной из ссылок с этого сайта литературу по WinApi прочитал но пока не разобрался во всех тонкостях.

мне интересно считать с порта по его готовности на сколько я понимаю (//проверяем сигнал в линии
if (dwSignal & EV_CTS)//данные готовы для записи...) Но это для КОМ порта я писал выше а как это сделать для ЛПТ пока не знаю

Посмотрите код он у меня вызывает кучу ашибок при компиляции

HANDLE h = CreateFile("\\\\.\\LPT1", GENERIC_READ|GENERIC_WRITE, 0,NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);
DCB dcb;

-> GetCommState(m_hFile, &dcb);

COMMTIMEOUTS CommTimeOuts;
CommTimeOuts.ReadIntervalTimeout = MAXDWORD;
CommTimeOuts.ReadTotalTimeoutMultip lier = 0;
CommTimeOuts.ReadTotalTimeoutConsta nt = 0;
CommTimeOuts.WriteTotalTimeoutMulti plier = 0;
CommTimeOuts.WriteTotalTimeoutConst ant = 1000;
SetCommTimeouts(m_hFile, &CommTimeOuts);
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.BaudRate = baud;
-> SetCommState(m_hFile, &dcb);
//->так я отметил часть проги вызывающей около 50 ошибок разного плана
char bufer = 0xfd;
DWORD lpdwBytesWrittens = 0;
WriteFile(h, &bufer, sizeof(char), &lpdwBytesWrittens, NULL);
всему свое время как зиме и весне
и каждому солнцу свой неба кусок

Последний раз редактировалось Assemblerru; 07.05.2010 в 21:10.
Assemblerru вне форума Ответить с цитированием
Старый 30.05.2010, 00:34   #15
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

структура dcb неприменима к lpt/
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 10.06.2010, 18:44   #16
Assemblerru
Форумчанин
 
Регистрация: 28.01.2010
Сообщений: 224
По умолчанию

А как тогда описать ЛПТ порт по другому
всему свое время как зиме и весне
и каждому солнцу свой неба кусок
Assemblerru вне форума Ответить с цитированием
Старый 10.06.2010, 20:00   #17
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...скажите, а я уже посылал вас на статьи DeKot-а ?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с com портом Валера777 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 05.12.2009 00:06
Работа с com портом albles Общие вопросы C/C++ 2 16.11.2009 15:15
Работа c COM-портом doniyor Общие вопросы Delphi 12 27.07.2009 11:16
Работа с COM-портом jovanny Помощь студентам 2 03.05.2009 18:06
работа с COM портом ShAzat Общие вопросы Delphi 8 28.05.2008 20:08