﻿// pcDuino3 ADC
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <time.h>

#define ADC_IF_PATH "/proc/"
#define ADC_IF_FILE "adc" 
#define DEVICE_NAME "ServerRoom"
#define APP_NAME   "RoomTemperatureMonitor1.0"
#define LOCATION_ID 910
#define INSTRUMENT_ID 654

int analogRead(int i); 
void xml2stdout(double Ti, double Ta, double To);
void adc();

int a0, a1, a2, a3, a4, a5,lp;
double a2d,T2,T3,T4,Ts, Tu, Tn;
 
void setup() 
{
}


void main()
{
 Ts=0;
 Tu=0;
 Tn=0;
 for (lp=1;lp<10;lp++){
 adc();
 Ts+=T2;
 Tu+=T3;
 Tn+=T4;
 }
Ts=Ts/(lp-1);
Tu=Tu/(lp-1);
Tn=Tn/(lp-1);
//printf("Ti,  Ta,   To \n");
//printf("%2.1f  %2.1f  %2.1f\n", Ts, Tu,Tn);	
xml2stdout(Ts, Tu, Tn);



}

 
void adc() 
{
  // read all the ADCs
// analogReference(DEFAULT);
  a0 = analogRead(0);
  a1 = analogRead(1);
  a2d = analogRead(2)*3.0/4095;
T2 = (a2d-0.6)/0.010+0.5;
  T3 = analogRead(3)*3.0/4095;
  T3 = (T3-0.6)/0.010+1.0;
  T4 = analogRead(4)*3.0/4095;
  T4 = (T4-0.6)/0.010-0.7;
  a5 = analogRead(5);
  // display ADC values to console
//  printf("A0, A1,    T2,    T3,   T4,   A5\n");
//  printf("%d  %d     %2.1f   %2.1f   %2.1f    %d\n", a0, a1, T2, T3, T4, a5);
//  printf("\n");
 //delay(1000);
 sleep(1);
}



int analogRead(int i){
    char path[64];
        char ADCBuffer[16];
	char ADCBuffer2[16];
	char ch[16];
	FILE *val;
int ADCResult;
    memset(path, 0, sizeof(path));
    sprintf(path, "%s%s%d", ADC_IF_PATH, ADC_IF_FILE , i);
    val=fopen(path, "r");
	fseek(val,0,SEEK_SET);
        int res = fread(ADCBuffer, 1,sizeof(ADCBuffer),val);
fclose(val);
ADCBuffer[9] = '\0';
	  sscanf(ADCBuffer,"%[^':']:%s",ch,ADCBuffer2);
	ADCResult = atoi(ADCBuffer2);
	return(ADCResult);
//	printf("ADC Channel: %d Value: %s %d\n", i, ADCBuffer, ADCResult);
}

void xml2stdout(double Ti, double Ta, double To){
time_t timer;
struct tm *utc;
timer = time(NULL);
utc = gmtime(&timer);


printf("--sndfile\n");
printf("Content-Disposition: form-data; name=\"tempxml\"; filename=\"tempxml.xml\"\n");
printf("Content-Type: text/plain\n\n");

printf("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
	printf("<TemperatureHistory>\n");
printf("<DateTime>%4d-%02d-%02dT%02d:%02d:%02d+0000</DateTime>\n",utc->tm_year + 1900, utc->tm_mon + 1,  utc->tm_mday,  utc->tm_hour, utc->tm_min, utc->tm_sec);
printf("<DeviceName>%s</DeviceName>\n",DEVICE_NAME);
printf("<LocationID>%d</LocationID>\n",LOCATION_ID);
printf("<InstrumentID>%d</InstrumentID>\n",INSTRUMENT_ID);
printf("<InletTemperature ObjectID=\"urn:oid:1.3.6.1.4.1.22689.2.1.8.623\" UnitID=\"urn:oid:1.3.6.1.4.1.22689.2.1.28.23\">%2.1f</InletTemperature>\n",Ti);
printf("<AmbientTemperature ObjectID=\"urn:oid:1.3.6.1.4.1.22689.2.1.8.625\" UnitID=\"urn:oid:1.3.6.1.4.1.22689.2.1.28.23\">%2.1f</AmbientTemperature>\n",Ta);
printf("<OutletTemperature ObjectID=\"urn:oid:1.3.6.1.4.1.22689.2.1.8.624\" UnitID=\"urn:oid:1.3.6.1.4.1.22689.2.1.28.23\">%2.1f</OutletTemperature>\n",To);
printf("<ApplicationType>%s</ApplicationType>\n",APP_NAME);
printf("</TemperatureHistory>\n\n");

printf("--sndfile--\n");

}
 