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

Ваш аккаунт

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

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

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

Работа с LPT

6.1K
04 августа 2006 года
Devider
28 / / 24.12.2004
Извините, если было, не нашел.
Надо написать на LPT некоторые значения. Для начала хоть что-нибудь. =)
Беру пример
HANDLE hLPT=CreateFile("LPT1",GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hLPT!=INVALID_HANDLE_VALUE)
{
cout << " Ok Open LPT1" << endl;
char buffer[25];
memset(buffer,0,sizeof(buffer));
strcpy(buffer,"Hello LPT ");
DWORD dw;
OVERLAPPED ov;
for (int x=0;x < 3;x++)
{
if (WriteFile(hLPT,buffer,sizeof(buffer),&dw,&ov)) cout << "." << endl;
}
CloseHandle(hLPT);
cout << "Closing..." << endl;
}
else cout << "Error Open" << endl;
return 0;
WriteFile возвращает false. Что не так - не пойму. Помогите!
6.1K
07 августа 2006 года
Devider
28 / / 24.12.2004
Спасибо, только мне бы хотелось без использования сторонних sys'ек и dll'лек если это возможно...
334
07 августа 2006 года
HexEdit
809 / / 27.07.2006
[QUOTE=Devider]Извините, если было, не нашел.
Надо написать на LPT некоторые значения. Для начала хоть что-нибудь. =)
Беру пример
HANDLE hLPT=CreateFile("LPT1",GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hLPT!=INVALID_HANDLE_VALUE)
{
cout << " Ok Open LPT1" << endl;
char buffer[25];
memset(buffer,0,sizeof(buffer));
strcpy(buffer,"Hello LPT ");
DWORD dw;
OVERLAPPED ov;
for (int x=0;x < 3;x++)
{
if (WriteFile(hLPT,buffer,sizeof(buffer),&dw,&ov)) cout << "." << endl;
}
CloseHandle(hLPT);
cout << "Closing..." << endl;
}
else cout << "Error Open" << endl;
return 0;
WriteFile возвращает false. Что не так - не пойму. Помогите![/QUOTE]

Узнай ошибку через GetLastError() после WriteFile.
Код:
...
 if (WriteFile(hLPT,buffer,sizeof(buffer),&dw,&ov)) {
    cout << "." << endl;
    DWORD dwErrorCode = GetLastError();
    LPVOID lpMsg;
    FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
                          FORMAT_MESSAGE_FROM_SYSTEM |
                          FORMAT_MESSAGE_IGNORE_INSERTS,
           NULL,dwErrorCode,
           MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
           (LPTSTR) &lpMsg, 0, NULL)
    MessageBox(NULL, (LPCTSTR) lpMsg, "Error", MB_OK | MB_ICONHAND);
    LocalFree(lpMsg);
 }
 CloseHandle(hLPT);
 ...
6.1K
07 августа 2006 года
Devider
28 / / 24.12.2004
"Параметр задан не верно"... Ничего не понимаю.. Помогите, кто понимает,а? =)
334
07 августа 2006 года
HexEdit
809 / / 27.07.2006
Попробуй пока убрать Overlapped.
6.1K
07 августа 2006 года
Devider
28 / / 24.12.2004
Тогда глухо виснет... Вот код в итоге:
Код:
HANDLE  hLPT=CreateFile("LPT1",GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    if (hLPT!=INVALID_HANDLE_VALUE)
    {
        cout << " Ok Open LPT1" << endl;
        char buffer[25];
        memset(buffer,0,sizeof(buffer));
                strcpy(buffer,"Hello LPT ");
        DWORD dw;
        OVERLAPPED ov;
        if (!WriteFile(hLPT,buffer,sizeof(buffer),&dw,NULL /*&ov*/))
        {
            cout << "." << endl;
            DWORD dwErrorCode = GetLastError();
            LPVOID lpMsg;
            FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
                     FORMAT_MESSAGE_FROM_SYSTEM |
                     FORMAT_MESSAGE_IGNORE_INSERTS,
            NULL,dwErrorCode,
            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
            (LPTSTR) &lpMsg, 0, NULL);
            MessageBox(NULL, (LPCTSTR) lpMsg, "Error", MB_OK | MB_ICONHAND);
            LocalFree(lpMsg);
        }
        else cout << "!!!" << endl;
        CloseHandle(hLPT);
        cout << "Closing..." << endl;
    }
    else cout << "Error Open" << endl;
334
07 августа 2006 года
HexEdit
809 / / 27.07.2006
мда... трудно сказать какой "параметр задан не верно"...
попробуй WriteFile(hLPT,&buffer,sizeof(buffer),&dw,NULL,&ov), т.е. &buffer
раз виснет, тогда лучше верни &ov
3.3K
08 августа 2006 года
GENA_DJ
123 / / 08.03.2005
[QUOTE=Devider]Тогда глухо виснет...[/QUOTE]
При работе под win посредством CreateFile(), WriteFile() есть одна особенность. Устройство, подключенное к LPT должно сбрасывать в 0 линии ОШИБКА и КОНЕЦ БУМАГИ. Иначе будет висеть.
6.8K
08 августа 2006 года
Romikgy
84 / / 28.04.2005
точно сначало надо поднять протокол обмена принтер комп а после юзать лпт
6.1K
09 августа 2006 года
Devider
28 / / 24.12.2004
Уточню. Это хитрый девайс, который управляется с порта подачей на него (порт) чисел от 1 до 15 (больше ему не надо). Мне всего навсего надо это сделать (подавать числа). Сейчас, пока прибора нет, у меня "эмулятор" - схемка, которая диодами показывает напряжение на контактах порта. Я использую inpout32.dll, все замечательно работает, но начальство не хочет использовать "левые" (панимаешь...) примочки. Вообще я пишу на C#, но подобные веши там не предусмотренны. Работа с COM портом - пожалста, а лпт нет... =( На форумах меня послали бороться с API, а я тут... ну... не гуру, как минимум. =) Посему прошу помощи.
6.1K
09 августа 2006 года
Devider
28 / / 24.12.2004
Кстати, на это:
 
Код:
WriteFile(hLPT,&buffer,sizeof(buffer),&dw,NULL)

получил ошибку "устройство не подключено"... Блин, а что же желать?
6.8K
09 августа 2006 года
Romikgy
84 / / 28.04.2005
Еще раз повторюсь , для правильной работы LPT порта под виндой используя стандартный драйвер виндов , надо поднимать протокол обмена принтер - комп иначе юзать паралельный порт не получится, или писать свой драйвер для этого порта, или технически ухищрятся
PS почитай инфу как работает LPT порт вообще
6.1K
09 августа 2006 года
Devider
28 / / 24.12.2004
А, все, со второй попытки дошло... =) Спасибо большое всем, кто отозвался.
6.8K
09 августа 2006 года
Romikgy
84 / / 28.04.2005
Лучше позже чем никогда!
3.3K
09 августа 2006 года
GENA_DJ
123 / / 08.03.2005
[QUOTE=Devider]Кстати, на это:
 
Код:
WriteFile(hLPT,&buffer,sizeof(buffer),&dw,NULL)

получил ошибку "устройство не подключено"... Блин, а что же желать?[/QUOTE]

Соединить линию BUSY(11) и Paper End(12) с общим проводим(напр., 20).

Strobe(1) рекомендестя соединить с Acknowledge(10).

[QUOTE=Romikgy]надо поднимать протокол обмена принтер - комп[/QUOTE]
вот и подняли..

После всех манипуляций проведи простой тест.
1.Создай файл 1.in
2.В него запиши один байт 0xFF
3.Затем напиши в комм. строке: copy 1.in LPT1
4.Как результат, файл сразу же скопируется без "подвисаний", а все светодиоды на линиях данных зажгутся. Если же в файле написать 0x00, то, наоборот, потухнут.

Примечание. При передаче потока считаем данные действительными, если на линии Strobe высокий уровень.

http://www.hardwarebook.net/ - тоже погляди
10K
09 августа 2006 года
Sonic_amiga
34 / / 19.06.2006
Есть такая хрень - Libieee124.

http://cyberelk.net/tim/libieee1284/

Оно в исходниках и работает с портом на низком уровне. Драйвера под Windows, кажется, не требует. Использовать нельзя, зато можно посмотреть как оно устроено.
6.1K
10 августа 2006 года
Devider
28 / / 24.12.2004
С общим проводом? BUSY и Paper Out? Это перемкнуть в смысле? "А не @бнет?" =)
3.3K
10 августа 2006 года
GENA_DJ
123 / / 08.03.2005
[QUOTE=Devider]С общим проводом? BUSY и Paper Out? Это перемкнуть в смысле? "А не @бнет?" =)[/QUOTE]
Да, соединить линию 11(BUSY), 12(Paper End) и 20(общий провод) одним проводом, а также, уже другим проводом, соединить линию 1(Strobe) и 10(Acknowledge). Не @=нет, если вилку в порт при отключенном от сети устройстве включать. (если серьезно, то перед включением нужно потенциалы общих проводов (корпусов иначе) компа и твоего устройста)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог