Нужно записать значение в порт LPT, т.е. засветить 2 контакт и погасить когда надо, или 3 4 5 и т.д.
Как это реализовать ? и можно ли обойтись без Си ?
если на Си
то вот код откапал на этом форуме#include<iostream>
#include<sys/io.h>
#include<sys/perm/h>
#include<stdio.h>
#include<stdlib.h>
main()
{
unsigned char x;
if(ioperm(0x378,3,1)) //open lpt port
{
printf("error opening lpt");
exit(1);
}
x=inb(0x379);//read from lpt port
outb(x,0x378); write to lpt
if(ioperm(0x378,3,0)) //close lpt port
{
printf("error closing lpt");
exit(1);
}
}будет ли он рабоать и как его откомпилить ? :)
Если линукс, то там есть /dev/port - юзать осторожно, но можно хоть откуда. Открываешь, сикаешь на нужный адрес (например 0x378), пишешь туда байтик и т.д. Понятно, что перед каждой операцией чтения/записи важно стоять на правильном месте, иначе можно тааакого понаписать.
Мигание битиком проще всего сделать, наверное, так:in = inb(PORT); //читаем
in ^= 1; //переворачиваем первый битик
outb(in, PORT); //пишем
Вот склероз :( забыл ОС указать
FreeBSD 5.2
/dev/port необнаружен
Насколько я понимаю, то, что вам нужно - это ppi. Он обеспечивает доступ к порту безо всяких там дурацких inb() и outb().
man 4 ppi
>Насколько я понимаю, то, что вам нужно - это ppi. Он обеспечивает
>доступ к порту безо всяких там дурацких inb() и outb().
>man 4 ppi:) меня уже тыкали в ppi носом , но или я неправильно понял или это облегчитель для работы с порами на СИ.
#include <dev/ppbus/ppi.h>
#include <dev/ppbus/ppbconf.h>а в Си я по дуб дубом
>:) меня уже тыкали в ppi носом , но или я неправильно
>понял или это облегчитель для работы с порами на СИ.Дело в том, что ppi - это файловый интерфейс, жесткой привязки к C здесь нет. На каком языке вы пишете? Если он дает вам доступ к нативным read/write/ioctl, то нужно всего лишь перенести нужные определения из ppi.h.
>Дело в том, что ppi - это файловый интерфейс, жесткой привязки к
>C здесь нет. На каком языке вы пишете? Если он дает
>вам доступ к нативным read/write/ioctl, то нужно всего лишь перенести нужные
>определения из ppi.h.если-бы писал на хоть 1 Си подобном языке, то незадавал бы таких глупых вопросов :)
Хотя скоро прийдется осваивать Perl, ......... кстати под Perl вроде куча модулей есть, а нет ли случайно модуля для работы с портами ? Просто я плохо представляю что такое модули для Perl, толи тотже Perl, толи вкрапления на других языках.P.S.
Мдя и почему языки высокого уровня так плохо работают с железом на прямую, толи дело ASM
>>Дело в том, что ppi - это файловый интерфейс, жесткой привязки к
>>C здесь нет. На каком языке вы пишете? Если он дает
>>вам доступ к нативным read/write/ioctl, то нужно всего лишь перенести нужные
>>определения из ppi.h.
>
>если-бы писал на хоть 1 Си подобном языке, то незадавал бы таких
>глупых вопросов :)
>Хотя скоро прийдется осваивать Perl, ......... кстати под Perl вроде куча модулей
>есть, а нет ли случайно модуля для работы с портами ?
>Просто я плохо представляю что такое модули для Perl, толи тотже
>Perl, толи вкрапления на других языках.
>
>P.S.
>Мдя и почему языки высокого уровня так плохо работают с железом на
>прямую, толи дело ASM
>вот эту мессагу смотрел?
http://www.opennet.me/openforum/vsluhforumID9/1386.html#7
>вот эту мессагу смотрел?
>http://www.opennet.me/openforum/vsluhforumID9/1386.html#7Огромное спасибо !!!
блин. а ведь полдня убил на поиски прежде чем сюда писать :((
С perl'ом по идее все должно работать... там есть ioctl, и не надо передавать структуры. Ее описание есть в мане perlfunc. Для конвертации заголовка ppi.h можно воспользоваться h2ph или h2xs.
К сожалению, я не нашел в CPAN готового решения, есть только модуль Device::ParallelPort, работающий под линуксом и win32.На мой взгляд C в данном случае гораздо удобнее.