#!/usr/bin/python
# -*- coding: utf-8 -*-

import time
import datetime
import io, os, serial



def n568xug():
	# si el sensor esta true en locals o globals lo cerramos
	if 'sensor' in locals():
		sensor.close()
	if 'sensor' in globals():
		sensor.close()
	## ESTA VARIABLE VA A MARCAR EL TIEMPO MÁXIMO PARA REALIZAR UNA LECTURA CORRECTA, Y PEDIR ALGUNA
	## ACCIÓN AL PILOTO.
	L = 48
	tiempolectura = 10
	TIEMPO_INICIO_LECTURA = datetime.datetime.now()
	TIEMPO_TRANSCURRIDO_LECTURA = 0
	TIEMPO_DIFERENCIA_LECTURA = 0
	###
	## ACTIVAMOS EL SENSOR Y ESTABLECEMOS UN TIEMPO DE LECTURA (  ligado con read() :
	## timeout = none -> espera por siempre hasta completar L (nº de bytes)
	## timeout = 0 -> modo de no bloqueo, va enviando todo lo que coge.
	## timeout = x -> envia lo que coge hasta que el tiempo x ha transcurrido.
	## 
	sensor = serial.Serial('/dev/ttyACM0', baudrate = 115200, timeout = 0)
	while(True):
    		## BORRAMOS CUALQUIER INFORMACIÓN ACUMULADA EN EL BUFFER DE ENTRADA.
		sensor.flushInput()
		## CODIGO DE ACCIÓN EN EL BUFFER DE SALIDA (esto lo lee el sensor para realizar la lectura)
		sensor.write("\x16T\r")
		## REALIZAMOS LA LECTURA DE UN NÚMERO L DE BYTES
		lectura = sensor.read(L)
		## SI LA LECTURA ES MÁS LARGA DE L, SE QUEDAN UNOS BYTES EN ESPERA DE ENTRADA.
		enespera = sensor.inWaiting()
		## CUANDO LA LONGITUD LEÍDA SEA DEL TAMAÑO QUE BUSCAMOS, DEJAREMOS DE BUSCAR.
		if(lectura != ""):
			sensor.close()
			return lectura
		TIEMPO_TRANSCURRIDO_LECTURA = datetime.datetime.now()
		TIEMPO_DIFERENCIA_LECTURA = TIEMPO_TRANSCURRIDO_LECTURA - TIEMPO_INICIO_LECTURA
		## SI HAN PASADO EN EL PROCESO DE BÚSQUEDA X SEGUNDOS, EL OPERARIO DEBE REALIZAR ALGUNA OPCIÓN.
		if(TIEMPO_DIFERENCIA_LECTURA.seconds >= tiempolectura):
    		## BORRAMOS LA INSTRUCCIÓN DE LECTURA, PERO EL SENSOR NO SE APAGA HASTA QUE NO RECIBE ALGO
			sensor.flushOutput()
			sensor.close()
			return ""

leido = n568xug()
print leido