Работа с LPT

Модератор: Модераторы разделов

FireWall
Сообщения: 10

Работа с LPT

Сообщение FireWall »

Есть код

#include <sys/io.h>
#define BASEPORT 0x378
int main ()
{
ioperm(BASEPORT, 8, 1);
outb(0,BASEPORT);
return(0);
}
Как я понимаю сначала открываю 8 портов для доступа, потом пишу в 0x378 значение 0, так ли?
Как отключить например 9ю ножку? а лучше все? На LPT висят вентиляторы, необходимо их отключить програмно.

Перечитал кучу инфы, ничего не выходит. Мб кто подскажет где я не дочитал?
Спасибо сказали:
MiK13
Сообщения: 1290
ОС: Linux Debian

Re: Работа с LPT

Сообщение MiK13 »

А что именно не выходит? Напряжение на ножке порта не зависит от записываемого значения?
Спасибо сказали:
FireWall
Сообщения: 10

Re: Работа с LPT

Сообщение FireWall »

MiK13 писал(а):
06.10.2008 16:36
А что именно не выходит? Напряжение на ножке порта не зависит от записываемого значения?


Всмысле не зависит от записываемого значения, по хорошему все на 0-выкл, все на 1-вкл
Уже и так попробовал
#include <stdio.h>
#include <stdlib.h>
................
int main(int argc, char *argv[])
{
ioperm(0x378,3,1);
asm("mov $0x378, %dx");
asm("mov $0, %al");
asm("out %al, %dx");
ioperm(0x378,3,0);
return 0;
}

не тухнут вентиляторы, тразнистор на землю стоит.
мб в ядре я чего не включил? как проверить, что в /dev должно быть при рабочем LPT, система генту

Поддержка LPT включена в ядро, мб надо модулями?
Спасибо сказали:
MiK13
Сообщения: 1290
ОС: Linux Debian

Re: Работа с LPT

Сообщение MiK13 »

FireWall писал(а):
06.10.2008 19:15
MiK13 писал(а):
06.10.2008 16:36
А что именно не выходит? Напряжение на ножке порта не зависит от записываемого значения?


Всмысле не зависит от записываемого значения, по хорошему все на 0-выкл, все на 1-вкл

Записать в порт 0x378 значение 255 и померять напряжение на ножках LPT-порта. А затем записать 0 и опять померять напряжение.
Только надо убедиться, что этот порт имеет адрес именно 0x378
FireWall писал(а):
06.10.2008 19:15
мб в ядре я чего не включил? как проверить, что в /dev должно быть при рабочем LPT, система генту

Поддержка LPT включена в ядро, мб надо модулями?

А причём тут ядро, если обращение идёт напрямую к порту?

А под DOSом это работает?
Спасибо сказали:
FireWall
Сообщения: 10

Re: Работа с LPT

Сообщение FireWall »

MiK13 писал(а):
07.10.2008 12:48
FireWall писал(а):
06.10.2008 19:15
MiK13 писал(а):
06.10.2008 16:36
А что именно не выходит? Напряжение на ножке порта не зависит от записываемого значения?


Всмысле не зависит от записываемого значения, по хорошему все на 0-выкл, все на 1-вкл

Записать в порт 0x378 значение 255 и померять напряжение на ножках LPT-порта. А затем записать 0 и опять померять напряжение.
Только надо убедиться, что этот порт имеет адрес именно 0x378
FireWall писал(а):
06.10.2008 19:15
мб в ядре я чего не включил? как проверить, что в /dev должно быть при рабочем LPT, система генту

Поддержка LPT включена в ядро, мб надо модулями?

А причём тут ядро, если обращение идёт напрямую к порту?

А под DOSом это работает?


Под досом все работает! и под виндой тоже
Спасибо сказали:
Galaxy Master
Сообщения: 142
ОС: Debian GNU/Linux

Re: Работа с LPT

Сообщение Galaxy Master »

опять возник какой-то LPT некро-топик... потому что ЭТО уже обсуждалось... а поискать по форуму всем влом

все сорцы рабочие. если есть вопросы по делу можно в личку.
Спасибо сказали:
FireWall
Сообщения: 10

Re: Работа с LPT

Сообщение FireWall »

Кстати говоря.
Во всех примерах встречается использование библиотеки asm/io.h, где-то даж написано что ее надо обязательно юзать. Так вот когда я ее добавляю мне пишет
asm/io.h: No such file or directory
в /usr/include ее нет
в /usr/src/linux/include она есть.
Так вот вопрос. Как ее добавть? Не просто же скопировать, ибо не работает )

http://www.epanorama.net/circuits/parallel_output.html
читаю, нахожу уже готовое решение

пробую ./parashell 0x378 0
далее ./pin 0x378
выводит 255
т.е. не записал туды ничего. Что-то у меня либо с портом либо с доступом туда, пробую под рутом.
Спасибо сказали:
Galaxy Master
Сообщения: 142
ОС: Debian GNU/Linux

Re: Работа с LPT

Сообщение Galaxy Master »

FireWall писал(а):
08.10.2008 03:26
Кстати говоря.
Во всех примерах встречается использование библиотеки asm/io.h, где-то даж написано что ее надо обязательно юзать. Так вот когда я ее добавляю мне пишет
asm/io.h: No such file or directory
в /usr/include ее нет
в /usr/src/linux/include она есть.
Так вот вопрос. Как ее добавть? Не просто же скопировать, ибо не работает )

http://www.epanorama.net/circuits/parallel_output.html
читаю, нахожу уже готовое решение

пробую ./parashell 0x378 0
далее ./pin 0x378
выводит 255
т.е. не записал туды ничего. Что-то у меня либо с портом либо с доступом туда, пробую под рутом.


никак не возьму в толк зачем вам асм? разве что по-приколу...?
если вам так нужен неправильный кодинг с запуском от рута... то пользуйте outb, inb из /usr/include/sys/io.h

а вообще разберитесь в какой именно байт порта вы хотите писать и читать, а так же проверьте, что ваше устройство к правильным ножкам присоединено.
ваш первый пост с маппингом 8 байт и представлением 1-байт - 1 ножка - показывает, что вы полностью не понимаете что делаете. позже вы нашли маппинг 3 байт... это уже лучше.. но еще лучше будет, если вы прочтете про устройство порта и осознаете, какие биты какого байта за что отвечают. без этого дальнейшее программирование непонятно чего смысла не имеет.

а еще почитайте ссылку из предыдущего поста. там куски моего кода из работающего с железом софта.

PS. может все ж лучше через /dev/parport ? я в свое время отказался от вашего подхода, не только потому, что это ПРИНЦИПИАЛЬНО плохо для пользовательской проги, но и потому, что для работы от обычного юзера приходилось на бинарь suid-бит ставить. а это еще один костыль.

...хотя дело ваше и решать вам.
Спасибо сказали: