Last active
December 30, 2016 06:15
-
-
Save C47D/097c758217101fb8adbbfa82dbbe3fe4 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
import time | |
import usb | |
import sys | |
from sys import platform as _platform | |
# Estos valores se determinan en el proyecto de PSoC | |
VID = 0x04B4 | |
PID = 0xE177 | |
# Valor del TIMEOUT de las transferencias USB, en ms | |
TIMEOUT = 10 | |
# OUT Endpoint (PC -> PSoC) | |
OUT_EP = 0x02 | |
# IN Endpoint (PSoC -> PC) | |
IN_EP = 0x81 | |
# Buscamos el PSoC en la lista de dispositivos USB conectados a la PC | |
dev = usb.core.find(idVendor = VID, idProduct = PID) | |
if dev is None: | |
raise ValueError('Device not found') | |
print("\t!!! Encontramos al PSoC !!!\n") | |
#cfg = dev.get_active_configuration() | |
#print(cfg) | |
# Si estamos en linux necesitamos "quitarle" el driver al kernel | |
if _platform == "linux" or _platform == "linux2": | |
if dev.is_kernel_driver_active(0): | |
dev.detach_kernel_driver(0) | |
# Sabemos que la configuracion a la que queremos "hablarle" | |
# es la 0, la funcion set_configuration nos permite establecer | |
# la "conexion", sin argumentos establece a la primer | |
# configuración que encuentra disponible. | |
dev.set_configuration() | |
sys.stdout.write("\t!!! Efecto de LED respirando !!!\n") | |
for i in range(250): | |
# Escribimos al OUT ENDPOINT número 2 | |
#.write (ENDPOINT, datos, timeout) | |
dev.write(OUT_EP, bytes([i]), TIMEOUT) | |
for i in range(250, 0, -1): | |
dev.write(OUT_EP, bytes([i]), TIMEOUT) | |
data = 0 | |
sys.stdout.write("\t!!! Ahora recepción de datos !!!\n") | |
sys.stdout.write("(presiona Ctrl + C para terminar el programa)\n\n") | |
# En este loop infinito vamos a leer el estado del botón del kit | |
# en este caso el CY8CKIT059 (PSoC5LP). | |
while True: | |
# ENDPOINT = 1, pero como es transferencia IN (PSoC -> PC) | |
# se le "suma" el 0x80, por lo tanto 0x80 + ENDPOINT = 0x81 | |
data = dev.read(IN_EP, 1, TIMEOUT) | |
sys.stdout.write("Estado lógico del boton: " + str(data[0])) | |
# Si el byte que recibimos es 0 quiere decir que el boton esta | |
# presionado | |
if data[0] is 0: | |
sys.stdout.write(" Botón presionado\r\b") | |
else: | |
sys.stdout.write(" Botón sin presionar\r\b") | |
time.sleep(0.1) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment