Skip to content

Instantly share code, notes, and snippets.

@C47D
Last active December 30, 2016 06:15
Show Gist options
  • Save C47D/097c758217101fb8adbbfa82dbbe3fe4 to your computer and use it in GitHub Desktop.
Save C47D/097c758217101fb8adbbfa82dbbe3fe4 to your computer and use it in GitHub Desktop.
#!/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