/* * spreadspace avr utils * * * Copyright (C) 2013-2016 Christian Pointner * * This file is part of spreadspace avr utils. * * spreadspace avr utils is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * spreadspace avr utils is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with spreadspace avr utils. If not, see . */ #include #include #include #include #include #include #include "usbdrv.h" #include "oddebug.h" #include "util.h" #include "led.h" void vusbio_init(void) { odDebugInit(); USBOUT &= ~USBMASK; USBDDR &= ~USBMASK; usbInit(); usbDeviceDisconnect(); uchar i = 0; while(--i){ wdt_reset(); _delay_ms(1); } usbDeviceConnect(); } void vusbio_task(void) { usbPoll(); } usbMsgLen_t usbFunctionSetup(uchar data[8]) { usbRequest_t *req = (void *)data; static uchar buf[4]; /* buffer must stay valid when usbFunctionSetup returns */ switch(req->bRequest) { case 0: { /* echo */ buf[0] = req->wValue.bytes[0]; buf[1] = req->wValue.bytes[1]; buf[2] = req->wIndex.bytes[0]; buf[3] = req->wIndex.bytes[1]; usbMsgPtr = (usbMsgPtr_t)buf; return 4; } case 1: { if(req->wValue.bytes[0] & 1) { led_on(); } else { led_off(); } break; } } return 0; } int main(void) { wdt_enable(WDTO_1S); cpu_init(); vusbio_init(); led_init(); sei(); for(;;) { wdt_reset(); vusbio_task(); } }