• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

JuSt

outportb e inportb

6 mensagens neste tópico

Estou fazer uma programa que irá comunicar com a speaker do pc, tendo que usar as funções atrás referidas. Problema é que não sei em que biblioteca estas se encontram.

Já procurei no google mas a única coisa que achei foi a usar a biblioteca dos.h, que segundo o que me parece é exclusivamente para windows, e eu estou utilizar linux e o gcc..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas.

Para linux é inb e outb

#include <asm/io.h> /* inb, outb */

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E deixa-me adivinhar... em linux têm acesso directo às portas sem ter que usar dll's de m*rda como no windows, certo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acesso directo sim mas antes tem de se ter a premissão.

#include <unistd.h>

if (ioperm(PORT, 3, 1)) {perror("ioperm"); exit(1);}

Repara neste codigo que tambem é valido em linux, sem usar inb e outb.

#include <stdio.h>
#include <unistd.h>
#define PORT 0x378 //porta paralela do pino 2 ao 9


unsigned char ler_porta_byte( unsigned short port )
{
  unsigned char result;
   asm volatile("inb %1, %0" : "=a" (result) : "dN" (port));
  return result;
}

void escrever_porta_byte( unsigned short port, unsigned char data )
{
asm volatile ("outb %1, %0" : : "dN" (port), "a" (data));
}



int main(){
char var;

if (ioperm(PORT, 3, 1)) {perror("ioperm"); exit(1);}

escrever_porta_byte(PORT, 1); // liga o pino 2 = 00000001

var=ler_porta_byte(PORT); // le os pinos do 2 ao 9 ou seja le o que escrevemos antes = 1

printf("var= %d\n", var);

if (ioperm(PORT, 3, 0)) {perror("ioperm"); exit(1);} 
return 0;

}

Este programa tem de ser executado em root.

ps: acho que em W$ o processo é o mesmo, mas sem o ioperm() .

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já agora onde éque essa biblioteca esta presente? É que não a tenho

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora