Paso 6: Código de Firmware
Nota: Gran parte del código para este proyecto provino enteramente o en parte un excelente tutorial VUSB en TH.
Asegúrese de que el código de firmware se guarda en el mismo directorio que la carpeta usbdrv que descargaste desde VUSB (la carpeta usbdrv, a su vez, debe contener el usbconfig.h modificado).
No entraré en el código demasiado. Hay un montón de otros ' ibles PWMing LEDs, o configuración de color, cambio de luces de estado de ánimo. Lo único que es nuevo probablemente es el código para interactuar con el puerto USB. Existen dos maneras diferentes para transferir datos a través de USB. La forma más sencilla es mediante una transferencia de control. Una transferencia de control se utiliza normalmente para comandos de estado o configuración, pero hay espacio suficiente para enviar los datos. Una transferencia de control comienza con un paquete de instalación. De la documentaciónde libusb, el paquete de instalación tiene la siguiente estructura:
uint8_t bmRequestType //Request type uint8_t bRequest //Request uint16_t wValue //Value uint16_t wIndex //Index uint16_t wLength //Number of bytes to transfer
bRequest, wValue y wLength pueden ser específicas de la aplicación. Para nuestros propósitos, tenemos un número de bRequest único para cada canal RGB diferente (y uno para el modo de transición). En el código adjunto se ve así:
// USB control messages (same as PC software) #define RED 0 #define GREEN 1 #define BLUE 2 #define FADE 3
Utilizamos wValue para mantener el nivel de intensidad especificada por el usuario (0-255). Por ejemplo, si quisiéramos completamente encender los LEDs rojos, nos enviaría un mensaje con bRequest establece en '0' y a '255' wValue. Si queremos apagar los LED verdes, nos enviaría un mensaje con bRequest a '1' y wValue el valor '0'. El código VUSB proporciona una manera agradable para nuestro micro extraer esta información del paquete de instalación en la forma de la función usbFunctionSetup() , que se llama automáticamente cada vez que el micro ve un paquete de instalación.