/*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;  Copyright (c) 1995-1999, ADLink Technology Inc.  All rights reserved.  ;;
;;                                                                         ;;
;;      File Name : 7230INT.C                                              ;;
;;      Purpose   : This sample program demonstrates how handle interrupt  ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*/
#include <stdio.h>
#include <unistd.h>
#include "dask.h"
#include "conio.h"

int int2_count=0;
I16 card=-1;

void sig2_handler( int signo )
{
   int2_count++;
   printf("INT count = %d\n\n", int2_count);
   printf("press any key to generate an interrupt or press ESC for exit\n" );

   return;
}


int main(void)
{
    int  err;
    char temp_char;

    setbuf( stdout, NULL );
    printf("PCI-7230 Interrupt Sample (INT2)\n\n");
    printf("This program shows the number of occurrence of INT2 interupt.\n");
    printf("INT2 interrupt is generated by external signal from DI bit-1.\n");
    printf("If you connect DO bit-1 to DI bit-1, press any key can generate an interrupt.\n" );
    printf("Or press ESC for exit\n\n" );

    int2_count = 0;

    if ((card=Register_Card(PCI_7230, 0)) < 0) {
      printf ("Can't open device file: PCI7230\n");
      exit(-1);
    }

    err = DIO_SetDualInterrupt(card, INT1_DISABLE, INT2_EXT_SIGNAL, NULL, sig2_handler );
    if( err != NoError ){
       printf(" error from DIO_SetDualInterrupt : %d \n" , err );
       goto exit_after_error;
    }

    while(1){
       temp_char = getch();
       if( temp_char == 0x1b ) break;

       DO_WritePort(card,0, 0x2);
       usleep(1000);
       DO_WritePort(card,0, 0x0);
    }


    DIO_SetDualInterrupt(card, INT1_DISABLE, INT2_DISABLE, NULL, NULL);
exit_after_error:
    if (card >= 0) Release_Card(card);
    exit(0);
}



