#include 
#include 
#include 
#include 
#include 
#include 
#include 
//#include 
//#include 
//#include 
#include "DIO96.h"
#include "control.h"
//hrtime_t samtime;
//hrtime_t samtime_old = 0;
int main()
{
    unsigned char buf[10];
    fd_set rfds;
    struct timeval tv;
    int retval;
    int fd0, fd1, ctl, sem;
    int n;
    unsigned char data_ready;
    struct msg_struct msg;    
    FILE *fp0;
    if((fp0 = fopen("data_file", "w"))<0) {
        fprintf(stderr, "Error opening data_file\n");
        exit(1);
    }
    if ((fd0 = open("/dev/rtf0", O_RDONLY)) < 0) {
    fprintf(stderr, "Error opening /dev/rtf0\n");
    exit(1);
    }
    if ((fd1 = open("/dev/rtf1", O_RDONLY)) < 0) {
        fprintf(stderr, "Error opening /dev/rtf1\n");
        exit(1);
    }
    if ((ctl = open("/dev/rtf2", O_WRONLY)) < 0) {
        fprintf(stderr, "Error opening /dev/rtf2\n");
        exit(1);
    }
    if ((sem = open("/dev/rtf4", O_RDONLY)) < 0) {
        fprintf(stderr, "Error opening /dev/rtf4\n");
        exit(1);
    }
    
    msg.command = START_TASK;
    msg.period = TICK_RESOLUTION;       /*  1ns per tick */
    msg.conf = DIO96_CONF;
    msg.buffer_size=BUFSIZE/2;
    if (write(ctl, &msg, sizeof(msg)) < 0) {
        fprintf(stderr, "Can't send a command to RT-task\n");
        exit(1);
    }
    while(1) {
        FD_ZERO(&rfds);
        FD_SET(sem, &rfds);
        tv.tv_sec = 2;
        tv.tv_usec = 0;
        retval = select(sem+1, &rfds, NULL, NULL, &tv);
        if (retval >0) {
            n = read(sem, &data_ready, 1);
            printf("FIFO 0x%x: ", data_ready);
            if(data_ready==0x00) {
                read(fd0, buf, BUFSIZE); 
                printf("fd0=0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n", buf[0],buf[1],buf[2],buf[3],buf[4],buf[5],buf[6],buf[7],buf[8],buf[9]);
            }
            if(data_ready==0x01) {
                read(fd1, buf, BUFSIZE); 
                printf("fd1=0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n", buf[0],buf[1],buf[2],buf[3],buf[4],buf[5],buf[6],buf[7],buf[8],buf[9]);
            }
        }
    }
    close(fd0);
    close(fd1);
    close(ctl);
    return 0;
}