#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include "CAENHVWrapper.h"

int main(void) {
    
	// VARIABLES DECLARATION
	char		address[30], userName[20], passwd[30], name[64], ParName[8], channelname[30], stringaexec[80], directory_data[80], meteofile[80], meteofile2[80], header[200];
	int		link, is, n, i, slot, NrOfCh=1, pw, status, station;
	float		vmon, imon, vset, iset;
	time_t 		now;
    
    float           dew, pressure=0,rainlast,rainday,rainmonth,rainyear,heat,temp1=0,temp2=0,rh1=0,rh2=0,wind,gust,dir;
    int             day,month,year,hour,min;
    
    	int channel_temp, slot_temp;
	float channel_offset;

	float *param = NULL;
	param = malloc(sizeof(float));
    
	uint *param2 = NULL;
	param2 = malloc(sizeof(uint));
    
	ushort *id_channel = NULL;
	id_channel = malloc(sizeof(ushort));
    
    
	// CAEN SY1527 settings
	sprintf(userName,"%s","admin");
	sprintf(passwd,"%s","admin");
    
	// Reading the Configuration file (it cointains the path file also)
	FILE *stream1;
	stream1=fopen("/srv/www/htdocs/conf.txt","r");
	fscanf(stream1,"%s\n",name);
	fscanf(stream1,"%s\n",address);
    
	// Preparing connection to the mainframe
	CAENHVRESULT  ret_init,ret;
	link = LINKTYPE_TCPIP;
	ret_init =  CAENHVInitSystem(name, link, address, userName, passwd);
	//printf("\nCAENHVInitSystem: %s (num. %d)\n\n", CAENHVGetError(name), ret_init);
    
    
    FILE *stream2;
    stream2=fopen("/home/user/dump","w");
    
	// Reading values from the Mainframe
	if ( ret_init == CAENHV_OK ) {
        
        for ( slot = 0; slot < 14; slot++ ) {
            
            for ( i = 0; i <= 5; i++ ) {
                
				// READING THE HIGH VOLTAGE
				sprintf(ParName,"%s","VMon");
				id_channel[0] = i;
				ret = CAENHVGetChParam(name, slot, ParName, NrOfCh, id_channel, param);
                
				if (ret==CAENHV_OK) {
					vmon = param[0];
				}
				else {
					//printf("\nCAEN1527: %s (num. %d)\n Paramenter Name %s \n", CAENHVGetError(name), ret, ParName);
				}
                
				// READING THE HIGH VOLTAGE
				sprintf(ParName,"%s","V0Set");
				id_channel[0] = i;
				ret = CAENHVGetChParam(name, slot, ParName, NrOfCh, id_channel, param);
                
				if (ret==CAENHV_OK) {
					vset = param[0];
				}
				else {
					//printf("\nCAEN1527: %s (num. %d)\n Paramenter Name %s \n", CAENHVGetError(name), ret, ParName);
				}
                
                
                
				// READING THE CURRENTS
				sprintf(ParName,"%s","IMon");
				ret = CAENHVGetChParam(name, slot, ParName, NrOfCh, id_channel, param);
                
				if (ret==CAENHV_OK) {
					imon = param[0];
				}
				else {
					//printf("\nCAEN1527: %s (num. %d)\n Paramenter Name %s \n", CAENHVGetError(name), ret, ParName);
				}

        			FILE *stream11;
        			stream11=fopen("/home/user/workspace/rpcupgrade/CAEN1527_monitoring-1.00/CAEN1527_monitoring/chamber_offsets.ini","r");
				while (!feof(stream11)) {
					fscanf(stream11,"%d %d %f\n", &slot_temp, &channel_temp, &channel_offset);
				
					if ( channel_temp == id_channel[0] && slot_temp == slot ) { 
						imon = imon + channel_offset;
					}
				}
    				fflush(stream11);
    				fclose(stream11);
                
                
				// READING THE CURRENTS
				sprintf(ParName,"%s","I0Set");
				ret = CAENHVGetChParam(name, slot, ParName, NrOfCh, id_channel, param);
                
				if (ret==CAENHV_OK) {
					iset = param[0];
				}
				else {
					//printf("\nCAEN1527: %s (num. %d)\n Paramenter Name %s \n", CAENHVGetError(name), ret, ParName);
				}
                
				// READING THE STATUS
				sprintf(ParName,"%s","Status");
				ret = CAENHVGetChParam(name, slot, ParName, NrOfCh, id_channel, param2);
                
				if (ret==CAENHV_OK) {
					status = param2[0];
				}
				else {
					//printf("\nCAEN1527: %s (num. %d)\n Paramenter Name %s \n", CAENHVGetError(name), ret, ParName);
				}
                
                
                
                
				// READING THE POWER ON/OFF
				sprintf(ParName,"%s","Pw");
				ret = CAENHVGetChParam(name, slot, ParName, NrOfCh, id_channel, param2);
                
				if (ret==CAENHV_OK) {
					pw = param2[0];
				}
				else {
					//printf("\nCAEN1527: %s (num. %d)\n Paramenter Name %s \n", CAENHVGetError(name), ret, ParName);
				}
                
				// OPENING FILE TO WRITE DATA
				fprintf(stream2,"%2d %d %8.2f %8.2f %7.3f %7.3f %3d %2d\n", slot, id_channel[0], vset, vmon , iset, imon ,status, pw);
			}
        }
        ret_init = CAENHVDeinitSystem(name);
        //printf("\nDisconnecting from caen on %s \n",name);
	}
	else {
		//printf("Error connecting to the caen %s (num %d) \n",CAENHVGetError(name),ret_init);
	}
    // CLOSING FILES
    fflush(stream2);
    fclose(stream2);
    fflush(stream1);
    fclose(stream1);
    
}
/* name),ret_init); */
/* 	} */
/*     // CLOSING FILES */
/*     fflush(stream2); */
/*     fclose(stream2); */
/*     fflush(stream1); */
/*     fclose(stream1); */
    
/* } */
