Author Topic: Работа с LPT  (Read 5303 times)

0 Members and 1 Guest are viewing this topic.

Offline FireWall

  • Newbie
  • *
  • Posts: 29
  • Karma: +0/-0
Работа с LPT
« 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 висят вентиляторы, необходимо их отключить програмно.

Перечитал кучу инфы, ничего не выходит. Мб кто подскажет где я не дочитал?
« Last Edit: October 05, 2008, 10:52:43 by FireWall »

Offline Kavka

  • Jr. Member
  • **
  • Posts: 75
  • Karma: +0/-0
Работа с LPT
« Reply #1 on: February 19, 2009, 12:06:59 »
Вроде как через /dev/lp* надо.
Можешь посмотреть исходники uisp
Tomsk OpenSUSE Team

Offline FireWall

  • Newbie
  • *
  • Posts: 29
  • Karma: +0/-0
Работа с LPT
« Reply #2 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);
}
« Last Edit: February 20, 2009, 17:45:52 by FireWall »