Ayuda con C y el Paralelo *Linux*

Iniciado por dgg006, 4 Junio 2011, 17:24 PM

0 Miembros y 1 Visitante están viendo este tema.

dgg006

Hola, sigo con este proyecto que me va a sacar canas verdes  :P
La cosa es asi, tengo este codigo:
#include <stdio.h>
#include <stdlib.h>
#include <sys/io.h>
#define puerto 0x378

int main ()
{
    int resul;
    int estado=-1;
    int infinito=0;

    FILE *texto;
    texto = fopen ("Cocina.txt","r");
    fscanf (texto, "%d",&resul);
    fclose (texto);

    while (infinito == 0)
    {
        switch (resul)
        {
            case 0:
            texto = fopen ("Cocina.txt","r");
            fscanf (texto, "%d",&resul);
            fclose (texto);
            if (estado != 0)
            {
                unsigned int p; // en esta variable le decimos, en hexa, cuantos cuantos leds prenderan

//apertura del puerto
if(ioperm(puerto,1,1))
{
perror("Se ha encontrado el siguiente error: "); //manejo de errores
exit(1); //salida con error
}

p = 0x00; //puerto 0. Apaga todos los bits
outb(p,puerto);
            }
                    estado=0;
                    break;
            case 1:
            texto = fopen ("Cocina.txt","r");
            fscanf (texto, "%d",&resul);
            fclose (texto);
            if (estado != 1)
            {
                unsigned int p; // en esta variable le decimos, en hexa, cuantos cuantos leds prenderan

//apertura del puerto
if(ioperm(puerto,1,1))
{
perror("Se ha encontrado el siguiente error: "); //manejo de errores
exit(1); //salida con error
}

p = 0x01; //puerto 1
outb(p,puerto); //envia el valor en binario al puerto
            }
                    estado=1;
                    break;
        }
    }
}

Lo que hace es leer un TXT llamado Cocina, si dentro hay un 1, enciende el pin 2 del paralelo, si hay un 0, lo apaga.
Para esto funciona, pero cual es el problema?, La cosa es que va a haber mas de un TXT, y tiene que controlar cada pin de forma independiente, ej: Si esta la cocina encendida, y quiero encender la habitacion, o que esten las 2 encendidas y quiero apagar una.
Buscando en internet, encontre este otro codigo:
#include<stdio.h>
#include<stdlib.h>
#include<sys/io.h> //esta librería permite el manejo de puertos en linux con lenguaje C
#define puerto 0x378 //definimos el puerto a utilizar

int main (void)
{
  int seleccion,seleccion_sal,salida[8],valor_sal=0,i,k;
  for(i=0;i<=8;i++)
    salida[i]=0;

  i=0;
  while(seleccion!=4)
  {
      printf("nSeleccione la opcion deseada:nt1- Activar salidant2- Desactivar salidant3- Estado de salidasnt4- Salirn Seleccion: ");
      scanf("%d",&seleccion);
      printf("Usted selecciono la opcion %i n",seleccion);
      switch(seleccion)
      {
        case 1:
            valor_sal=0;
            printf("Seleccione la salida a Activar (0 para cancelar): ");
            scanf("%d",&seleccion_sal);
            if(seleccion_sal==0)
                break;
            if(seleccion_sal<0 || seleccion_sal>8)
            {
                printf("tLa salida seleccionada no existe");
                break;
            }
            salida[seleccion_sal-1]=1;
            i=1;
            for(k=0;k<8;k++)
            {
                printf("t %d",i);
                if (salida[k]==1)
                    valor_sal = valor_sal + i;
                i=i*2;
            }
            ioperm(0x0378,1,1);
            outb(valor_sal,0x0378);
            printf("nEl valor de Salida es: %i",valor_sal);
            break;
        case 2:
            valor_sal=0;
            printf("Seleccione la salida a Desactivar:");
            scanf("%d",&seleccion_sal);
            if(seleccion_sal<1 || seleccion_sal>8)
            {
                printf("tLa salida seleccionada no existe");
                break;
            }
            salida[seleccion_sal-1]=0;
            i=1;
            for(k=0;k<8;k++)
            {
                printf("t %d",i);
                if (salida[k]==1)
                    valor_sal = valor_sal + i;
                i=i*2;
            }

            ioperm(0x0378,1,1);
            outb(valor_sal,0x0378);
            printf("nEl valor de Salida es: %i",valor_sal);
            break;
        case 3:
            printf("n%d",valor_sal);
            for(i=0;i<8;i++)
            {
                printf("nEstado de salida %i: ",(i+1));
                if (salida[i]==1)
                    printf("Activada");
                if (salida[i]==0)
                    printf("Desactivada");
             }
            printf("n");
            break;
        case 4:
            break;
        default:
            printf("Seleccion Invalidan");
            break;
      }
}
exit(0);
}

De una forma, este hace algo de lo que quiero, y tengo que lograr entender lo que hace para poder juntarlo con mi codigo.
Talves es algo basico, pero no tengo nada de experiencia en programacion, de verdad que necesito una ayuda.
Desde ya Gracias!!