Kontrollera lamporna över USB med VUSB (6 / 10 steg)
Steg 6: Firmware koden
Obs: Mycket av koden för detta projekt kom antingen helt eller delvis från en utmärkt VUSB tutorial på th.
Se till att din firmware koden sparas i samma katalog som usbdrv mappen du har hämtat från VUSB (mappen usbdrv, i sin tur bör innehålla den modifierade usbconfig.h).
Jag tänker inte gå in i koden för mycket. Det finns gott om andra ' ibles om PWMing lysdioder, eller ställa in färgskiftande humör ljus. Det enda som är förmodligen nytt är koden för att interagera med USB-porten. Det finns ett par olika sätt att överföra data över USB. Det enklaste sättet är att använda en kontroll överföring. En kontroll överföring används vanligtvis för konfiguration och status kommandon, men det finns tillräckligt med utrymme att sända alla våra data. En kontroll överföringen börjar med en setup packet. Från libusb dokumentationhar setup paket följande struktur:
uint8_t bmRequestType //Request typ
uint8_t bRequest //Request
uint16_t wValue //Value
uint16_t wIndex //Index
uint16_t wLength //Number byte att överföra
bRequest, wValue och wLength kan alla vara programspecifika. För våra ändamål, får vi ett unikt bRequest nummer för varje olika RGB-kanal (och en för tona läget). Den bifogade uppförandekoden ser det ut så här:
USB-kontrollmeddelanden (samma som PC-programvara)
#define röd 0
#define grön 1
#define BLUE 2
#define FADE 3
Vi använder wValue för att hålla den användarspecificerade intensitetsnivån (0-255). Så till exempel, om vi ville helt slå på de röda lysdioderna, vill vi skicka ett meddelande med bRequest inställd på "0" och wValue satt till "255". Om vi ville stänga av gröna lysdioderna, skulle vi skicka ett meddelande med bRequest inställd på "1" och wValue inställd på "0". Koden VUSB ger ett trevligt sätt för våra mikro att extrahera informationen från installationen paketet i form av den usbFunctionSetup() funktionen som anropas automatiskt när mikro ser ett setup-paket.