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

import datetime, io, os, serial, time 
import RPi.GPIO as gpio
from bluetooth import *

##################################################################################################
# VARIABLES DE HARDWARE                                                                          #
##################################################################################################

LED1G = 4
LED1B = 17
LED2B = 27
LED34G = 18
LED3R = 23
LED4R = 24

gpio.setmode(gpio.BCM)
gpio.setwarnings(False)

gpio.setup(LED1G, gpio.OUT)
gpio.setup(LED1B, gpio.OUT)
gpio.setup(LED2B, gpio.OUT)
gpio.setup(LED34G, gpio.OUT)
gpio.setup(LED3R, gpio.OUT)
gpio.setup(LED4R, gpio.OUT)


def luces_azules():
    global LED1G
    global LED1B
    global LED2B
    global LED34G
    global LED3R
    global LED4R
    gpio.output(LED2B, gpio.HIGH)
    gpio.output(LED1B, gpio.HIGH)
    time.sleep(2)
    gpio.output(LED2B, gpio.LOW)
    gpio.output(LED1B, gpio.LOW)   


## Informamos al técnico de que el piloto esta dando instrucciones
print("Iniciando conexión...")

server_socket = BluetoothSocket( RFCOMM )
port = 1 # suponemos que solo hay un dispositivo bluetooth conectado por drone
server_socket.bind(("",port))
server_socket.listen(5)
client_socket,address = server_socket.accept()
## Vamos añadir un tiempo de espera para la respuesta, si no la hay, salta un error
client_socket.settimeout(5)
## Cuando se establece conexión se enciende el led 1 en azul y se apagan las rojas
gpio.output(LED1B, gpio.HIGH)
print("Conexión activa...")
print("""
    1) Encender luces verdes.
    2) Encender luces rojas.
    3) Llamar a una función para luz azul.
    4) Salir.
""")
while True:
    ## Si no hay respuesta lo que queremos es que continue ejecutándose el programa
    try:
    	data = client_socket.recv(1024)
    except:
	continue
    finally:
	    gpio.output(LED2B, gpio.HIGH)
	    time.sleep(1)
	    gpio.output(LED2B, gpio.LOW)
	    if(data=="1"):
	        mensaje = "Opcion 1\n"
	        client_socket.send(mensaje)
	        gpio.output(LED1G, gpio.HIGH)
	        gpio.output(LED34G, gpio.HIGH)
	        gpio.output(LED1B, gpio.LOW)
	        time.sleep(2)
	        gpio.output(LED1G, gpio.LOW)
	        gpio.output(LED34G, gpio.LOW)
	        gpio.output(LED1B, gpio.HIGH)
	    if(data=="2"):
	        mensaje = "Opcion 2\n"
	        client_socket.send(mensaje)
	        gpio.output(LED3R, gpio.HIGH)
	        gpio.output(LED4R, gpio.HIGH)
	        gpio.output(LED1B, gpio.LOW)
	        time.sleep(2)
	        gpio.output(LED3R, gpio.LOW)
	        gpio.output(LED4R, gpio.LOW)
	        gpio.output(LED1B, gpio.HIGH)
	    if(data=="3"):
	        mensaje = "Opcion 3\n"
	        client_socket.send(mensaje)
	        luces_azules()
	        gpio.output(LED1B, gpio.HIGH)
	    if(data=="4"):
	        mensaje = "FIN DEL PROGRAMA\n"
	        client_socket.send(mensaje)
	        gpio.output(LED1B, gpio.LOW)
	        client_socket.close()
        	break
	    # Creamos un data igual a nada para que no se repita el mensaje anterior
	    data = ""
