<?
function apc_fetch_udt($key){	
	$udtl_store = apc_fetch($key."_udt");
	$udt = time();
	if ($udtl_store){
		if ($udt-$udtl_store<5) { // 5 segundos maximo de vida
			$val = apc_fetch($key);
			apc_store('dif', ($udt-$udtl_store));
			return $val; 
		} else {
			// no vamos a borrar, es mejor que los datos esten obsoleto a que no este y se caiga.
			/*apc_delete($key);
			apc_delete("udt".$key);*/
			
			return false;
		}
	} else {
		return false;
	}
}
function apc_store_udt($key,$g){
	$udt = time();
	apc_store($key, $g);
	apc_store($key."_udt", $udt);
} 

 function valores_camaras() {	
	$id_camara=array();
	$titulowin=array();
	$nsensores=array();
	$proceso_actual=array();
	$sql="select * from pf_camara a order by id_camara";
	$filas=0;
	$resultado="";
	ejecutarsql($sql,&$filas,&$resultado);
	$totalcamaras=$filas;	
	// leemos las camaras..
	for ($i=0;$i<$totalcamaras;$i++) {
		$id_camara[$i]=mssql_result($resultado,$i, "id_camara");	
		$titulowin[$i]=mssql_result($resultado,$i, "nombre_camara");	
		$proceso_actual[$i]=mssql_result($resultado,$i, "proceso_actual");	
	}
	for ($i=0;$i<$totalcamaras;$i++) {
		$sql="select * from pf_sensorxcamara where id_camara=".$id_camara[$i];
		$filas=0;
		$resultado="";
		ejecutarsql($sql,&$filas,&$resultado);	
		$nsensores[$i]=$filas;
	}
	apc_store_udt('id_camara',$id_camara);
	
	apc_store_udt('titulowin',$titulowin);
	apc_store_udt('proceso_actual',$proceso_actual);	
	apc_store_udt('nsensores',$nsensores);
}

function leer_sesion() {
	global $titulowin,$id_camara,$totalcamaras,$nsensores,$proceso_actual;
	if (!apc_fetch_udt('id_camara')) {		
		valores_camaras();
	}
	$id_camara=apc_fetch_udt('id_camara');
	$titulowin=apc_fetch_udt('titulowin');
	$nsensores=apc_fetch_udt('nsensores');
	$proceso_actual=apc_fetch_udt('proceso_actual');
	$totalcamaras=	count($id_camara);	
}

function leer_temperatura(&$t,$n_camara,&$maxima,&$minima,&$estado,&$nombre_sensor,&$num_temp,&$limites) {
	global $titulowin,$id_camara,$totalcamaras,$nsensores;
	global $id_sensor;
	if (!apc_fetch_udt('tmp'.$n_camara)) {
		$sql="select * ";
		$sql.="from pf_sensorxcamara a,motorlecturas b ";
		$sql.="where a.id_camara=".$id_camara[$n_camara]." and a.lecturadirmodulo=b.lecturadirmodulo and b.lecturadirtipo=1 ";
		$sql.="and a.lecturadirtipo=1 ";
		$sql.="order by b.lecturadirmodulo,b.lecturadirtipo ";
		

		$filas=0;
		$resultado="";
		ejecutarsql($sql,&$filas,&$resultado);	
		$tchar="";
		$maxima_v=-555;
		$minima_v=555;
		$estado=0;
		/*apc_store('foo', $bar);
		var_dump(apc_fetch('foo'));*/
		$num_temp=$filas;
		for ($e=0;$e<$filas;$e++) {
			// leemos la dupla... (el sistema se desetabilizara si no hay dupla.
			$nombre_sensor[$e]=mssql_result($resultado,$e, "Nombre_modulo");
			//$mm=$tchar.mssql_result($resultado,$e, "lecturadirtipo");
			$dm=$tchar.mssql_result($resultado,$e, "lecturadirmodulo");
			$vv=$tchar.mssql_result($resultado,$e, "lecturavalor");
			$id_status=$tchar.mssql_result($resultado,$e, "id_status");
			$limite_minimo=$tchar.mssql_result($resultado,$e, "limite_minimo");
			if ($limite_minimo=='') { $limite_minimo=-20; }
			$limite_maximo=$tchar.mssql_result($resultado,$e, "limite_maximo");
			if ($limite_maximo=='') { $limite_maximo=60; }
			//$mm2=$tchar.mssql_result($resultado,$e+1, "lecturadirtipo");
			$limites[$e]['limite_minimo']=$limite_minimo;
			$limites[$e]['limite_maximo']=$limite_maximo;
			$t[$e]=($id_status=='V')?$vv:-666; 
			$vv=$vv/10;
			if ($vv>-55.5 and $vv<$minima_v) {
				$minima_v=$vv;
				$minima=$e;
			}
			if ($vv>$maxima_v) {
				$maxima_v=$vv;
				$maxima=$e;
			}
			if ($vv<=-55.5) {
				$estado=1;
			}
			$id_sensor[$e]=$dm;
		}
		$t['minima']=$minima;
		$t['minima_v']=$minima_v;
		$t['maxima']=$maxima;
		$t['maxima_v']=$maxima_v;
		apc_store_udt('tmp'.$n_camara,$t,60);
		apc_store_udt('limites'.$n_camara,$limites,60);
		apc_store_udt('nombre_sensor'.$n_camara,$nombre_sensor,60);
		apc_store_udt('id_sensor'.$n_camara,$id_sensor,60);
		apc_store_udt('num_temp'.$n_camara,$num_temp,60);
		//$t['minima_v']=-1;
	} else {
		
		$t=apc_fetch_udt('tmp'.$n_camara);
		$limites=apc_fetch_udt('limites'.$n_camara);
		//$t['minima_v']=1;
		$nombre_sensor=apc_fetch_udt('nombre_sensor'.$n_camara);
		$id_sensor=apc_fetch_udt('id_sensor'.$n_camara);
		
		$num_temp=apc_fetch_udt('num_temp'.$n_camara);
	}
}


function leer_estados_historicos(&$tabla,$n_camara,$n_proceso,$n_rango,$rango_minimo= 999,$rango_maximo=555) {
	global $titulowin,$id_camara,$totalcamaras,$nsensores;
	global $tabla_leyenda;
	$rango_minimo=($rango_minimo==999)?-555:$rango_minimo; //esto es porque la funcion no puede tener un default negativo.

	// se genera si o si, aunque existe en la memoria.
		$tabla=array();
		$inicio_epoch=mktime("0","0","0","1","1","2005",0);
		$fecha_mostrar=(mktime()-$n_rango-$inicio_epoch)/60;
		
$sql="	SELECT * FROM PF_HISTORICO A,PF_SENSORXCAMARA B ";
$sql.=" WHERE A.camara=B.id_camara ";
$sql.="AND A.sensor=B.LecturaDirModulo ";
$sql.="AND a.sensor_tipo=B.LecturaDirTipo ";
$sql.="and a.valor>=$rango_minimo and a.valor<=$rango_maximo ";
//$sql.="AND B.ID_STATUS='V' ";
$sql.="and fecha>=$fecha_mostrar";
$sql.=" and b.id_camara=".$id_camara[$n_camara];
$sql.=" ORDER BY FECHA ASC, a.SENSOR,a.sensor_tipo ";
		
//echo $sql;
		
		$filas=0;
		$resultado="";
		ejecutarsql($sql,&$filas,&$resultado);	
		$tchar="";
		$maxima_v=-555;
		$minima_v=555;
		$estado=0;
		$num_temp=$filas;
		$mo_anterior=-55;
		$x=0;
		$y=0; // sensores (y=0 es el eje x)
		
		for ($e=0;$e<$filas;$e++) {
			// leemos la dupla... (el sistema se desestabilizara si no hay dupla pero ya estamos asegurados de antes.
			$mm=$tchar.mssql_result($resultado,$e, "sensor_tipo");
			$mo=$tchar.mssql_result($resultado,$e, "sensor");
			$vv=$tchar.mssql_result($resultado,$e, "valor");
			$id_status=$tchar.mssql_result($resultado,$e, "id_status");
			//echo "$e - $vv $id_status <br>";
			if ($mo<$mo_anterior) {				
				$x++;
				$y=0;
			}
			$y++;
			if ($y==1) {
				//$tabla[0][$x]=mssql_result($resultado,$e, "fecha"); // epoch.
				$tabla[0][$x]=date('G:i',$inicio_epoch+(mssql_result($resultado,$e, "fecha")*60));
				
				// 13 Ene 2007 22:58 (php)
				// 13/01/2007 10:59:01 PM (sql)
				
			}
			if ($x==0) {
				$tabla_leyenda[$y-1]=mssql_result($resultado,$e, "Nombre_modulo");
			}
			
			$mo_anterior=$mo;
			
			$tabla[$y][$x]=($id_status=='V')?$vv/10:-666; 

		}

}

?>