Tomsk Sysadmins Forum

Unix => Программирование => Topic started by: FireWall on October 05, 2008, 10:48:44

Title: Работа с LPT
Post by: FireWall on October 05, 2008, 10:48:44
Есть код

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

Перечитал кучу инфы, ничего не выходит. Мб кто подскажет где я не дочитал?
Title: Работа с LPT
Post by: Kavka on February 19, 2009, 12:06:59
Вроде как через /dev/lp* надо.
Можешь посмотреть исходники uisp
Title: Работа с LPT
Post by: FireWall on February 20, 2009, 17:45:17
Quote from: Kavka
Вроде как через /dev/lp* надо.
Можешь посмотреть исходники uisp

Давно уже все сделал. Не надо через /dev/lp, надо через outb.

Тем более темка то устарела ) В простейщем варианте это выглядит так

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <asm/io.h>
main(int argc, char **argv)
{
  int par_data;
  int PORT;
  if (argc!=3).
      printf("USAGE: [PORT] [DATA]"), exit(1);  
  sscanf(argv[1],"%i",&PORT);
  if ((par_data<0) || (par_data>255))
      fprintf(stderr, "ERROR: DATA  must be between 0 and 255"), exit(1);
  if (ioperm(PORT,1,1)).
      fprintf(stderr, "ERROR: Can't gain access to port %x", PORT), exit(1);
  outb((unsigned char)par_data, PORT);
}