Stap 6: Firmware Code
Opmerking: Veel van de code voor dit project kwam geheel of gedeeltelijk uit een uitstekende VUSB tutorial over th.
Zorg ervoor dat uw firmware-code wordt opgeslagen in dezelfde map als de usbdrv-map die u hebt gedownload van VUSB (de usbdrv map, op zijn beurt moet bevat de gemodificeerde usbconfig.h).
Ik zal niet teveel ingaan op de code. Er zijn tal van andere ' ibles over PWMing LEDs of opzetten van veranderende kleuren sfeer verlichting. Het enige dat is waarschijnlijk nieuw is de code voor interactie met de USB-poort. Er zijn een paar verschillende manieren om gegevens over USB. De eenvoudigste manier is met behulp van een overdracht van de controle. Een overdracht van de controle wordt meestal gebruikt voor configuratie of status commando's, maar er is genoeg ruimte voor het verzenden van al onze gegevens. Een overdracht van de controle begint met een installatie pakket. Uit de libusb documentatieheeft de setup-pakket de volgende structuur:
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 en wLength kunnen alle toepassingsspecifieke. Voor onze doeleinden, zal er een aantal unieke bRequest voor elk verschillende RGB-kanaal (en één voor fade-modus). In de bijgevoegde code ziet het er zo uit:
// USB control messages (same as PC software) #define RED 0 #define GREEN 1 #define BLUE 2 #define FADE 3
Wij zullen wValue gebruiken om te houden van de gebruiker opgegeven intensiteitsniveau (0-255). Dus bijvoorbeeld, als we volledig inschakelen van de rode LEDs wilden, zou wij een signaal met bRequest ingesteld op '0' en wValue ingesteld op '255'. Als we uitschakelen van de groene LED's wilden, zouden we een boodschap met bRequest ingesteld op '1' en wValue ingesteld op '0'. De code van de VUSB biedt een leuke manier voor onze micro dit om informatie te extraheren uit het pakket van de setup in de vorm van de usbFunctionSetup() -functie, die automatisch wordt aangeroepen wanneer de micro een setup-pakket ziet.