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

int main(int argC, char* argv[]) {

	// 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, slot, NrOfCh=1, pw, status, station;
	float		vmon, imon;
	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;

	float *param = NULL;
	param = malloc(sizeof(float));

	uint *param2 = NULL;
	param2 = malloc(sizeof(uint));

	ushort *id_channel = NULL;
	id_channel = malloc(sizeof(ushort));

	if (argC != 3) {
		//printf("usage: HVprint_single <slot> <channel>\n");
		exit(1);
	}

	slot = atoi(argv[1]);
	id_channel[0] = atoi(argv[2]);

	// 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);



	// Reading values from the Mainframe
	if ( ret_init == CAENHV_OK ) {

			// READING THE HIGH VOLTAGE
			sprintf(ParName,"%s","VMon");
			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 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);
			}



			// 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);
			}


			// DEBUGGING PRINTOUT OF THE VARIABLES
			printf("%.2f %.5f %d %d\n",vmon ,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);
	}
}

