From 74e441fec32c7a64b5f3578456bcd375fcd59cb4 Mon Sep 17 00:00:00 2001 From: Paul Goeser Date: Mon, 6 Dec 2010 00:37:34 +0100 Subject: [PATCH] lcd funktioniert, wenn auch noch leichte bugs (EOL). USB funktioniert noch nicht. --- BS170.PDF | Bin 0 -> 176739 bytes firmware/Makefile | 4 +- firmware/avrbuild/Makefile.avrbuild | 10 +- firmware/display.c | 4 - firmware/lcd/lcd.c | 3 +- firmware/lcd/lcd.h | 14 +- firmware/main.c | 436 ++-------------------------- firmware/usbdrv | 1 + vusb-20100715/usbdrv/usbconfig.h | 376 ++++++++++++++++++++++++ 9 files changed, 417 insertions(+), 431 deletions(-) create mode 100644 BS170.PDF create mode 120000 firmware/usbdrv create mode 100644 vusb-20100715/usbdrv/usbconfig.h diff --git a/BS170.PDF b/BS170.PDF new file mode 100644 index 0000000000000000000000000000000000000000..0e821572eb4dd2846ab4673d82f3499debe2420b GIT binary patch literal 176739 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 z/dev/null || echo "Revision: unknown") | awk '/^Revision:/ {print "#define SVNVERSION \"" $$2 "\""};' >version.h - - clean: rm -f *.o *.hex *.obj *.i *.s *.d */*.i */*.s */*.o */*.d version.h diff --git a/firmware/display.c b/firmware/display.c index f9ca2f1..ff5d1da 100644 --- a/firmware/display.c +++ b/firmware/display.c @@ -1,6 +1,5 @@ #include #include "display.h" -#include "debug.h" char display_content[40]; // is zeroed by being in .bss @@ -169,7 +168,6 @@ void display_temperature(int16_t temperature){ char c; temperature *= 10; -// debug_int(PSTR("temperature"),temperature); for(i=3; i>=0; i--){ if(i==1) { fillzero = 1; @@ -204,8 +202,6 @@ char getdigit(int16_t *input, int16_t div, int8_t *fillzero){ if(*input < 0){ *input = - *input; /* to convert from (binary) 2s-complement to (ascii) sign and magnitude */ - debug_int(PSTR("getdigit"),*input); - debug_int(PSTR("getdigit2"),div); return '-'; } else { digit = *input / div; diff --git a/firmware/lcd/lcd.c b/firmware/lcd/lcd.c index a7c69c2..94badff 100644 --- a/firmware/lcd/lcd.c +++ b/firmware/lcd/lcd.c @@ -27,6 +27,7 @@ #include #include #include +#include #include "lcd.h" @@ -81,7 +82,7 @@ static inline void _delayFourCycles(unsigned int __count) delay for a minimum of microseconds the number of loops is calculated at compile-time from MCU clock frequency *************************************************************************/ -#define delay(us) _delayFourCycles( ( ( 1*(XTAL/4000) )*us)/1000 ) +#define delay(us) _delay_us(us) /* toggle Enable Pin to initiate write */ diff --git a/firmware/lcd/lcd.h b/firmware/lcd/lcd.h index 91d8b63..32e2549 100644 --- a/firmware/lcd/lcd.h +++ b/firmware/lcd/lcd.h @@ -57,14 +57,14 @@ * ports by adapting the LCD_DATAx_PORT and LCD_DATAx_PIN definitions. * */ -#define LCD_DATA_PORT PORTD /**< port for the LCD lines */ -#define LCD_RS_PORT PORTD /**< port for RS line */ -#define LCD_RS_PIN 4 /**< pin for RS line */ -#define LCD_RW_PORT PORTD /**< port for RW line */ +#define LCD_DATA_PORT PORTC /**< port for the LCD lines */ +#define LCD_RS_PORT PORTB /**< port for RS line */ +#define LCD_RS_PIN 0 /**< pin for RS line */ +#define LCD_RW_PORT PORTC /**< port for RW line */ #define LCD_RW_PIN 5 /**< pin for RW line */ -#define LCD_E_PORT PORTD /**< port for Enable line */ -#define LCD_E0_PIN 6 /**< pin for Enable line 0 */ -#define LCD_E1_PIN 6 /**< pin for Enable line 1 */ +#define LCD_E_PORT PORTC /**< port for Enable line */ +#define LCD_E0_PIN 4 /**< pin for Enable line 0 */ +#define LCD_E1_PIN 4 /**< pin for Enable line 1 */ #define LCD_CTRL_0 (1<<0) #define LCD_CTRL_1 (1<<1) diff --git a/firmware/main.c b/firmware/main.c index 66761eb..de78460 100644 --- a/firmware/main.c +++ b/firmware/main.c @@ -4,83 +4,31 @@ #include #include -#include -#include +#include -#include "version.h" #include "main.h" #include "display.h" -#include "1wire/1wire.h" -#include "sensors.h" -#include "menu.h" -#include "delay.h" -#include "debug.h" - -uint32_t ledval[4], ledacc[4]; - /* 0: led1 colour - * 1: led1 brightness - * 2: led2 - * 3: led3 - */ - -uint8_t run_mainloop; //set to 1 if mainloop needs running -uint8_t run_1wireloop; //set to 1 if 1wire loop needs running - -uint8_t buttlold, buttrold, butttold; -uint8_t butttbounce; - - -uint8_t buttonevent; -int8_t buttoninc; - -uint8_t EEMEM display_stored_brightness; -uint8_t EEMEM display_stored_contrast; -uint8_t EEMEM flowtemp_stored; -uint8_t EEMEM flowtemp_stored_range; -uint8_t EEMEM flowtemp_stored_alarm; - -uint8_t flowtemp; -uint8_t flowtemp_range; -uint8_t flowtemp_alarm; - -uint8_t volatile timer1_acc; void hardinit(){ /* initializes the hardware */ - // DDRB: XXXXX111 - DDRB = 0xff; - // DDRC: -X000111 - DDRC = 0x07; - // DDRD: 1XXXXXXX; - DDRD = 0x80; + DDRB = _BV(1) | _BV(2) | _BV(0); + DDRC = 0x3f; // no pullups; all digital outputs can take care of themselves PORTB = 0x00; PORTC = 0x00; PORTD = 0x00; - /* our event driver gets called with 10kHz frequency - * (to allow for proper LED PWM) - * Thats 100us or 800 cycles. - * Priority is: 1wire-bit first, then buttons, then LED-PWMs, then LCD, then the rest of 1wire. - * Sending a 1wire-bit takes about 70us. - */ - TCCR0 = 0x02; // prescaler: clk/8 - TCNT0 = 0xff-100; // 100 cycles of 1us each - TIMSK |= 0x01; // enable interrupt - /* hardware pwm for brightness/contrast: */ - TCCR1A = _BV(COM1A1) | _BV(COM1A0) | _BV(COM1B1) | _BV(WGM10); + TCCR1A = _BV(COM1A1) | _BV(COM1B1) | _BV(WGM10); TCCR1B = _BV(WGM12) | _BV(CS11); // clk/8 prescaler, 4kHz PWM-freq. - TIMSK &=( (~_BV(3)) & (~_BV(4)) & (~_BV(5))); //disable all timer1-interrupts - TIMSK |= _BV(2); // but enable overflow - OCR1A = 0xff-15; // contrast - OCR1B = 200; // brightness + OCR1A = 15; // contrast + OCR1B = 50; // brightness // init LCD: lcd_init(1); @@ -99,374 +47,45 @@ void softinit(){ lcd_defchar(1, LCD_CHAR_BAR, lcd_bar_char); lcd_defchar(1, LCD_CHAR_DEGREE, lcd_degree_char); - sensors_search(); - - menu_init(); - - set_display_brightness(load_display_brightness()); - set_display_contrast(load_display_contrast()); - set_flowtemp(load_flowtemp()); - set_flowtemp_range(load_flowtemp_range()); - set_flowtemp_alarm(load_flowtemp_alarm()); - - sei(); } -void mainloop(){ - // called with about 80Hz - static uint8_t ctr_subsec; // counts to 79, wraps around every second - static uint8_t ctr_sec; // counts to 255, use with modulo for rare events - - int16_t vorlaufdiff; - uint16_t ledbrightness; - - menu_display(); - - - - ctr_subsec++; - if(ctr_subsec >= 80){ - ctr_subsec = 0; - ctr_sec++; - - // starting here: stuff that happens every second (or rarer) - sensors_startconv(); - if(ctr_sec % 32 == 0){ - sensors_search(); // overrides sensors_startconv - } - - } - - /* warning for flow too hot */ - /* "inverted" blink-code compared to duo-led */ - if (sensoravg[sensor_which[0]]/256 >= flowtemp_alarm) { - if (ctr_subsec < 40) { - ledval[3] = 0; - } else { - ledval[3] = 65535; - } - } - - - - /* do colour/brightness for duo-led*/ - if (sensoravg[sensor_which[0]]/256 > flowtemp) { - ledval[0] = 0; // red - } else { - ledval[0] = 65535; // green - } - - vorlaufdiff = sensoravg[sensor_which[0]]/256 - (int16_t)flowtemp; - vorlaufdiff = vorlaufdiff > 0 ? vorlaufdiff : -vorlaufdiff; - - if (vorlaufdiff <= flowtemp_range / 4) { - // flowtemp OK - ledbrightness = 0; - } else { // flowtemp out of range - if (vorlaufdiff < flowtemp_range) { - // inside range, scale brightness linearly with difference - ledbrightness = (4 * vorlaufdiff - flowtemp_range) * 256 / 3 / flowtemp_range; - } else { - // outside margin, blink as a warning - if (ctr_subsec < 40) { - ledbrightness = 255; - } else { - ledbrightness = 0; - } - } - } +usbMsgLen_t usbFunctionSetup(uchar data[8]) +{ +usbRequest_t *rq = (void *)data; +static uchar dataBuffer[4]; /* buffer must stay valid when usbFunctionSetup returns */ - ledval[1] = ledbrightness * ledbrightness; + if(rq->bRequest == 1){ /* echo -- used for reliability tests */ + dataBuffer[0] = rq->wValue.bytes[0]; + dataBuffer[1] = rq->wValue.bytes[1]; + dataBuffer[2] = rq->wIndex.bytes[0]; + dataBuffer[3] = rq->wIndex.bytes[1]; + usbMsgPtr = dataBuffer; /* tell the driver which data to return */ + return 4; + } + return 0; /* default for not implemented requests: return no data back to host */ } -void main(){ +int __attribute__((noreturn)) main(void){ hardinit(); softinit(); + usbInit(); - - for(;;){ - if(run_1wireloop){ - run_1wireloop=0; - sensors_1wirebitloop(); - } - if(run_mainloop){ - run_mainloop=0; - mainloop(); - } - } - - -} - -void buttonpoll(){ // runs with 1.2kHz - uint8_t l,r,t,flanks,dir; - l=BUTTPIN & _BV(BUTTLPIN); - r=BUTTPIN & _BV(BUTTRPIN); - t=BUTTPIN & _BV(BUTTTPIN); - - // debounce code - if (t != butttold && !butttbounce ) { - butttold = t; - butttbounce = BUTT_BOUNCE; - if (t == 0) { // active low - buttonevent |= BUTTEV_PUSH; - } - } - - flanks=0; - dir=0; - if (l != buttlold) { - flanks += 1; - } - if (r != buttrold) { - flanks += 1; - dir = 1; - } - if (flanks == 1){ // we need to have exactly one flank, 0 flanks are no - // change, and 2 flanks are too fast (error) - if (l) { - dir ^= 1; - } - if (r) { - dir ^= 1; - } - if ((r && l) || (!r && !l)) { - buttoninc += dir ? -1 : 1; - } - } - - buttlold = l; - buttrold = r; - - - if(butttbounce){ - butttbounce -= 1; - } - -} - - + display_puts("Hallo, Welt!\n\n"); + display_update(); - - -void ledsoftpwm(){ - // LED softpwm: - uint8_t i; - for(i=1; i<4; ++i){ - ledacc[i] += ledval[i]; - if(ledacc[i]>0xffff){ - ledacc[i] -= 0xffff; - if(i==1){ - ledacc[0] += ledval[0]; - if(ledacc[0]>0xffff){ - ledacc[0] -= 0xffff; - LED1PORT |= _BV(LED1APIN); - LED1PORT &= ~_BV(LED1BPIN); - } else { - LED1PORT |= _BV(LED1BPIN); - LED1PORT &= ~_BV(LED1APIN); - } - } - if(i==2){ - LED2PORT &= ~_BV(LED2PIN); - } - if(i==3){ - LED3PORT &= ~_BV(LED3PIN); - } - } else { - if(i==1){ - LED1PORT &= ~(_BV(LED1BPIN) | _BV(LED1APIN)); - } - if(i==2){ - LED2PORT |= _BV(LED2PIN); - } - if(i==3){ - LED3PORT |= _BV(LED3PIN); - } - } - } -} - - - - -void set_display_brightness(uint8_t display_brightness) { - // set "runtime-brightness", will be lost at poweroff! - if (display_brightness < 1 || display_brightness > 16) { - // erratic values - display_brightness = 10; - } - OCR1B = (display_brightness * display_brightness) - 1; -} -void store_display_brightness(uint8_t new_brightness) { - // store brightness-value to eeprom for next boot - if (new_brightness < 1 || new_brightness > 16) { - // erratic values, abort - return; - } - uint8_t cur_brightness = eeprom_read_byte(&display_stored_brightness); - if (new_brightness != cur_brightness) { - // value hast changed, save to eeprom - eeprom_write_byte(&display_stored_brightness, new_brightness); - } -} -uint8_t load_display_brightness() { - uint8_t display_brightness = eeprom_read_byte(&display_stored_brightness); - if (display_brightness < 1 || display_brightness > 16) { - // erratic values - display_brightness = 10; - store_display_brightness(display_brightness); - } - return display_brightness; -} - - -void set_display_contrast(uint8_t display_contrast) { - // set "runtime-contrast", will be lost at poweroff! - if (display_contrast > 32) { - // erratic values - display_contrast = 16; - } - OCR1A = 0xff - 64 + 2 * display_contrast; -} -void store_display_contrast(uint8_t new_contrast) { - // store contrast-value to eeprom for next boot - if (new_contrast > 32) { - // erratic values - return; - } - uint8_t cur_contrast = eeprom_read_byte(&display_stored_contrast); - if (new_contrast != cur_contrast) { - // value hast changed, save to eeprom - eeprom_write_byte(&display_stored_contrast, new_contrast); - } -} -uint8_t load_display_contrast() { - uint8_t display_contrast = eeprom_read_byte(&display_stored_contrast); - if (display_contrast > 32) { - // erratic values - display_contrast = 16; - store_display_contrast(display_contrast); - } - return display_contrast; -} - - - -void set_flowtemp(uint8_t new_flowtemp) { - // set "runtime-flowtemp", will be lost at poweroff! - if ((new_flowtemp > FLOWTEMP_MAX) || (new_flowtemp < FLOWTEMP_MIN)) { - // erratic values - flowtemp = FLOWTEMP_DEFAULT; - } - flowtemp = new_flowtemp; -} -void store_flowtemp(uint8_t new_flowtemp) { - // store flowtemp-value to eeprom for next boot - if ((new_flowtemp > FLOWTEMP_MAX) || (new_flowtemp < FLOWTEMP_MIN)) { - // erratic values - return; - } - uint8_t cur_flowtemp = eeprom_read_byte(&flowtemp_stored); - if (new_flowtemp != cur_flowtemp) { - // value hast changed, save to eeprom - eeprom_write_byte(&flowtemp_stored, new_flowtemp); - } -} -uint8_t load_flowtemp() { - flowtemp = eeprom_read_byte(&flowtemp_stored); - if ((flowtemp > FLOWTEMP_MAX) || (flowtemp < FLOWTEMP_MIN)) { - // erratic values - flowtemp = FLOWTEMP_DEFAULT; - store_flowtemp(flowtemp); - } - return flowtemp; -} - - - -void set_flowtemp_range(uint8_t new_flowtemp_range) { - // set "runtime-flowtemp_range", will be lost at poweroff! - if (new_flowtemp_range > FLOWTEMP_RANGE_MAX) { - // erratic values - flowtemp_range = FLOWTEMP_RANGE_DEFAULT; - } - flowtemp_range = new_flowtemp_range; -} - -void store_flowtemp_range(uint8_t new_flowtemp_range) { - // store flowtemp-value to eeprom for next boot - if (new_flowtemp_range > FLOWTEMP_RANGE_MAX) { - // erratic values - return; - } - uint8_t cur_flowtemp_range = eeprom_read_byte(&flowtemp_stored_range); - if (new_flowtemp_range != cur_flowtemp_range) { - // value has changed, save to eeprom - eeprom_write_byte(&flowtemp_stored_range, new_flowtemp_range); - } -} - -uint8_t load_flowtemp_range() { - flowtemp_range = eeprom_read_byte(&flowtemp_stored_range); - if (flowtemp_range > FLOWTEMP_RANGE_MAX) { - // erratic values - flowtemp_range = FLOWTEMP_RANGE_DEFAULT; - store_flowtemp_range(flowtemp_stored_range); - } - return flowtemp_range; -} - -void set_flowtemp_alarm(uint8_t new_flowtemp_alarm) { - // set "runtime-flowtemp_alarm", will be lost at poweroff! - flowtemp_alarm = new_flowtemp_alarm; -} - -void store_flowtemp_alarm(uint8_t new_flowtemp_alarm) { - // store flowtemp-alarm-value to eeprom for next boot - uint8_t cur_flowtemp_alarm = eeprom_read_byte(&flowtemp_stored_alarm); - if (new_flowtemp_alarm != cur_flowtemp_alarm) { - // value has changed, save to eeprom - eeprom_write_byte(&flowtemp_stored_alarm, new_flowtemp_alarm); - } -} - -uint8_t load_flowtemp_alarm() { - flowtemp_alarm = eeprom_read_byte(&flowtemp_stored_alarm); - if (flowtemp_alarm > FLOWTEMP_ALARM_MAX) { - // erratic values - flowtemp_alarm = FLOWTEMP_ALARM_DEFAULT; - store_flowtemp_alarm(flowtemp_stored_alarm); + for(;;){ + usbPoll(); } - return flowtemp_alarm; -} - - -ISR(TIMER0_OVF_vect){ - static uint8_t counter; - TCNT0 = 0xff-100; - - - counter+=1; - ledsoftpwm(); - if(counter%8 == 0){ //1.2kHz - buttonpoll(); - } - - if(counter%128 == 0){ //ca. 80Hz - run_mainloop = 1; - } - run_1wireloop = 1; // 10kHz } - + /* ISR(TIMER1_OVF_vect, ISR_NAKED){ @@ -475,9 +94,6 @@ ISR(TIMER1_OVF_vect, ISR_NAKED){ asm volatile ("out %1, %0\n" : "=r" (sreg_store) : "I" (_SFR_IO_ADDR(SREG))); reti(); }*/ -ISR(TIMER1_OVF_vect){ - timer1_acc++; -} diff --git a/firmware/usbdrv b/firmware/usbdrv new file mode 120000 index 0000000..421b6b4 --- /dev/null +++ b/firmware/usbdrv @@ -0,0 +1 @@ +../vusb-20100715/usbdrv/ \ No newline at end of file diff --git a/vusb-20100715/usbdrv/usbconfig.h b/vusb-20100715/usbdrv/usbconfig.h new file mode 100644 index 0000000..0526cbb --- /dev/null +++ b/vusb-20100715/usbdrv/usbconfig.h @@ -0,0 +1,376 @@ +/* Name: usbconfig.h + * Project: V-USB, virtual USB port for Atmel's(r) AVR(r) microcontrollers + * Author: Christian Starkjohann + * Creation Date: 2005-04-01 + * Tabsize: 4 + * Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH + * License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt) + * This Revision: $Id: usbconfig-prototype.h 785 2010-05-30 17:57:07Z cs $ + */ + +#ifndef __usbconfig_h_included__ +#define __usbconfig_h_included__ + +/* +General Description: +This file is an example configuration (with inline documentation) for the USB +driver. It configures V-USB for USB D+ connected to Port D bit 2 (which is +also hardware interrupt 0 on many devices) and USB D- to Port D bit 4. You may +wire the lines to any other port, as long as D+ is also wired to INT0 (or any +other hardware interrupt, as long as it is the highest level interrupt, see +section at the end of this file). ++ To create your own usbconfig.h file, copy this file to your project's ++ firmware source directory) and rename it to "usbconfig.h". ++ Then edit it accordingly. +*/ + +/* ---------------------------- Hardware Config ---------------------------- */ + +#define USB_CFG_IOPORTNAME D +/* This is the port where the USB bus is connected. When you configure it to + * "B", the registers PORTB, PINB and DDRB will be used. + */ +#define USB_CFG_DMINUS_BIT 4 +/* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected. + * This may be any bit in the port. + */ +#define USB_CFG_DPLUS_BIT 2 +/* This is the bit number in USB_CFG_IOPORT where the USB D+ line is connected. + * This may be any bit in the port. Please note that D+ must also be connected + * to interrupt pin INT0! [You can also use other interrupts, see section + * "Optional MCU Description" below, or you can connect D- to the interrupt, as + * it is required if you use the USB_COUNT_SOF feature. If you use D- for the + * interrupt, the USB interrupt will also be triggered at Start-Of-Frame + * markers every millisecond.] + */ +#define USB_CFG_CLOCK_KHZ (F_CPU/1000) +/* Clock rate of the AVR in kHz. Legal values are 12000, 12800, 15000, 16000, + * 16500, 18000 and 20000. The 12.8 MHz and 16.5 MHz versions of the code + * require no crystal, they tolerate +/- 1% deviation from the nominal + * frequency. All other rates require a precision of 2000 ppm and thus a + * crystal! + * Since F_CPU should be defined to your actual clock rate anyway, you should + * not need to modify this setting. + */ +#define USB_CFG_CHECK_CRC 0 +/* Define this to 1 if you want that the driver checks integrity of incoming + * data packets (CRC checks). CRC checks cost quite a bit of code size and are + * currently only available for 18 MHz crystal clock. You must choose + * USB_CFG_CLOCK_KHZ = 18000 if you enable this option. + */ + +/* ----------------------- Optional Hardware Config ------------------------ */ + +/* #define USB_CFG_PULLUP_IOPORTNAME D */ +/* If you connect the 1.5k pullup resistor from D- to a port pin instead of + * V+, you can connect and disconnect the device from firmware by calling + * the macros usbDeviceConnect() and usbDeviceDisconnect() (see usbdrv.h). + * This constant defines the port on which the pullup resistor is connected. + */ +/* #define USB_CFG_PULLUP_BIT 4 */ +/* This constant defines the bit number in USB_CFG_PULLUP_IOPORT (defined + * above) where the 1.5k pullup resistor is connected. See description + * above for details. + */ + +/* --------------------------- Functional Range ---------------------------- */ + +#define USB_CFG_HAVE_INTRIN_ENDPOINT 0 +/* Define this to 1 if you want to compile a version with two endpoints: The + * default control endpoint 0 and an interrupt-in endpoint (any other endpoint + * number). + */ +#define USB_CFG_HAVE_INTRIN_ENDPOINT3 0 +/* Define this to 1 if you want to compile a version with three endpoints: The + * default control endpoint 0, an interrupt-in endpoint 3 (or the number + * configured below) and a catch-all default interrupt-in endpoint as above. + * You must also define USB_CFG_HAVE_INTRIN_ENDPOINT to 1 for this feature. + */ +#define USB_CFG_EP3_NUMBER 3 +/* If the so-called endpoint 3 is used, it can now be configured to any other + * endpoint number (except 0) with this macro. Default if undefined is 3. + */ +/* #define USB_INITIAL_DATATOKEN USBPID_DATA1 */ +/* The above macro defines the startup condition for data toggling on the + * interrupt/bulk endpoints 1 and 3. Defaults to USBPID_DATA1. + * Since the token is toggled BEFORE sending any data, the first packet is + * sent with the oposite value of this configuration! + */ +#define USB_CFG_IMPLEMENT_HALT 0 +/* Define this to 1 if you also want to implement the ENDPOINT_HALT feature + * for endpoint 1 (interrupt endpoint). Although you may not need this feature, + * it is required by the standard. We have made it a config option because it + * bloats the code considerably. + */ +#define USB_CFG_SUPPRESS_INTR_CODE 0 +/* Define this to 1 if you want to declare interrupt-in endpoints, but don't + * want to send any data over them. If this macro is defined to 1, functions + * usbSetInterrupt() and usbSetInterrupt3() are omitted. This is useful if + * you need the interrupt-in endpoints in order to comply to an interface + * (e.g. HID), but never want to send any data. This option saves a couple + * of bytes in flash memory and the transmit buffers in RAM. + */ +#define USB_CFG_INTR_POLL_INTERVAL 10 +/* If you compile a version with endpoint 1 (interrupt-in), this is the poll + * interval. The value is in milliseconds and must not be less than 10 ms for + * low speed devices. + */ +#define USB_CFG_IS_SELF_POWERED 1 +/* Define this to 1 if the device has its own power supply. Set it to 0 if the + * device is powered from the USB bus. + */ +#define USB_CFG_MAX_BUS_POWER 0 +/* Set this variable to the maximum USB bus power consumption of your device. + * The value is in milliamperes. [It will be divided by two since USB + * communicates power requirements in units of 2 mA.] + */ +#define USB_CFG_IMPLEMENT_FN_WRITE 0 +/* Set this to 1 if you want usbFunctionWrite() to be called for control-out + * transfers. Set it to 0 if you don't need it and want to save a couple of + * bytes. + */ +#define USB_CFG_IMPLEMENT_FN_READ 0 +/* Set this to 1 if you need to send control replies which are generated + * "on the fly" when usbFunctionRead() is called. If you only want to send + * data from a static buffer, set it to 0 and return the data from + * usbFunctionSetup(). This saves a couple of bytes. + */ +#define USB_CFG_IMPLEMENT_FN_WRITEOUT 0 +/* Define this to 1 if you want to use interrupt-out (or bulk out) endpoints. + * You must implement the function usbFunctionWriteOut() which receives all + * interrupt/bulk data sent to any endpoint other than 0. The endpoint number + * can be found in 'usbRxToken'. + */ +#define USB_CFG_HAVE_FLOWCONTROL 0 +/* Define this to 1 if you want flowcontrol over USB data. See the definition + * of the macros usbDisableAllRequests() and usbEnableAllRequests() in + * usbdrv.h. + */ +#define USB_CFG_DRIVER_FLASH_PAGE 0 +/* If the device has more than 64 kBytes of flash, define this to the 64 k page + * where the driver's constants (descriptors) are located. Or in other words: + * Define this to 1 for boot loaders on the ATMega128. + */ +#define USB_CFG_LONG_TRANSFERS 0 +/* Define this to 1 if you want to send/receive blocks of more than 254 bytes + * in a single control-in or control-out transfer. Note that the capability + * for long transfers increases the driver size. + */ +/* #define USB_RX_USER_HOOK(data, len) if(usbRxToken == (uchar)USBPID_SETUP) blinkLED(); */ +/* This macro is a hook if you want to do unconventional things. If it is + * defined, it's inserted at the beginning of received message processing. + * If you eat the received message and don't want default processing to + * proceed, do a return after doing your things. One possible application + * (besides debugging) is to flash a status LED on each packet. + */ +/* #define USB_RESET_HOOK(resetStarts) if(!resetStarts){hadUsbReset();} */ +/* This macro is a hook if you need to know when an USB RESET occurs. It has + * one parameter which distinguishes between the start of RESET state and its + * end. + */ +/* #define USB_SET_ADDRESS_HOOK() hadAddressAssigned(); */ +/* This macro (if defined) is executed when a USB SET_ADDRESS request was + * received. + */ +#define USB_COUNT_SOF 0 +/* define this macro to 1 if you need the global variable "usbSofCount" which + * counts SOF packets. This feature requires that the hardware interrupt is + * connected to D- instead of D+. + */ +/* #ifdef __ASSEMBLER__ + * macro myAssemblerMacro + * in YL, TCNT0 + * sts timer0Snapshot, YL + * endm + * #endif + * #define USB_SOF_HOOK myAssemblerMacro + * This macro (if defined) is executed in the assembler module when a + * Start Of Frame condition is detected. It is recommended to define it to + * the name of an assembler macro which is defined here as well so that more + * than one assembler instruction can be used. The macro may use the register + * YL and modify SREG. If it lasts longer than a couple of cycles, USB messages + * immediately after an SOF pulse may be lost and must be retried by the host. + * What can you do with this hook? Since the SOF signal occurs exactly every + * 1 ms (unless the host is in sleep mode), you can use it to tune OSCCAL in + * designs running on the internal RC oscillator. + * Please note that Start Of Frame detection works only if D- is wired to the + * interrupt, not D+. THIS IS DIFFERENT THAN MOST EXAMPLES! + */ +#define USB_CFG_CHECK_DATA_TOGGLING 0 +/* define this macro to 1 if you want to filter out duplicate data packets + * sent by the host. Duplicates occur only as a consequence of communication + * errors, when the host does not receive an ACK. Please note that you need to + * implement the filtering yourself in usbFunctionWriteOut() and + * usbFunctionWrite(). Use the global usbCurrentDataToken and a static variable + * for each control- and out-endpoint to check for duplicate packets. + */ +#define USB_CFG_HAVE_MEASURE_FRAME_LENGTH 0 +/* define this macro to 1 if you want the function usbMeasureFrameLength() + * compiled in. This function can be used to calibrate the AVR's RC oscillator. + */ +#define USB_USE_FAST_CRC 0 +/* The assembler module has two implementations for the CRC algorithm. One is + * faster, the other is smaller. This CRC routine is only used for transmitted + * messages where timing is not critical. The faster routine needs 31 cycles + * per byte while the smaller one needs 61 to 69 cycles. The faster routine + * may be worth the 32 bytes bigger code size if you transmit lots of data and + * run the AVR close to its limit. + */ + +/* -------------------------- Device Description --------------------------- */ + +#define USB_CFG_VENDOR_ID 0xc0, 0x16 /* = 0x16c0 = 5824 = voti.nl */ +/* USB vendor ID for the device, low byte first. If you have registered your + * own Vendor ID, define it here. Otherwise you may use one of obdev's free + * shared VID/PID pairs. Be sure to read USB-IDs-for-free.txt for rules! + * *** IMPORTANT NOTE *** + * This template uses obdev's shared VID/PID pair for Vendor Class devices + * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand + * the implications! + */ +#define USB_CFG_DEVICE_ID 0xdc, 0x05 /* = 0x05dc = 1500 */ +/* This is the ID of the product, low byte first. It is interpreted in the + * scope of the vendor ID. If you have registered your own VID with usb.org + * or if you have licensed a PID from somebody else, define it here. Otherwise + * you may use one of obdev's free shared VID/PID pairs. See the file + * USB-IDs-for-free.txt for details! + * *** IMPORTANT NOTE *** + * This template uses obdev's shared VID/PID pair for Vendor Class devices + * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand + * the implications! + */ +#define USB_CFG_DEVICE_VERSION 0x00, 0x01 +/* Version number of the device: Minor number first, then major number. + */ +#define USB_CFG_VENDOR_NAME 'g', 'h', 'o', 's', 't', 'd', 'u', 'b', '.', 'd', 'e' +#define USB_CFG_VENDOR_NAME_LEN 11 +/* These two values define the vendor name returned by the USB device. The name + * must be given as a list of characters under single quotes. The characters + * are interpreted as Unicode (UTF-16) entities. + * If you don't want a vendor name string, undefine these macros. + * ALWAYS define a vendor name containing your Internet domain name if you use + * obdev's free shared VID/PID pair. See the file USB-IDs-for-free.txt for + * details. + */ +#define USB_CFG_DEVICE_NAME 'O', 'k', 'u', 'u' +#define USB_CFG_DEVICE_NAME_LEN 4 +/* Same as above for the device name. If you don't want a device name, undefine + * the macros. See the file USB-IDs-for-free.txt before you assign a name if + * you use a shared VID/PID. + */ +/*#define USB_CFG_SERIAL_NUMBER 'N', 'o', 'n', 'e' */ +/*#define USB_CFG_SERIAL_NUMBER_LEN 0 */ +/* Same as above for the serial number. If you don't want a serial number, + * undefine the macros. + * It may be useful to provide the serial number through other means than at + * compile time. See the section about descriptor properties below for how + * to fine tune control over USB descriptors such as the string descriptor + * for the serial number. + */ +#define USB_CFG_DEVICE_CLASS 0xff /* set to 0 if deferred to interface */ +#define USB_CFG_DEVICE_SUBCLASS 0 +/* See USB specification if you want to conform to an existing device class. + * Class 0xff is "vendor specific". + */ +#define USB_CFG_INTERFACE_CLASS 0 /* define class here if not at device level */ +#define USB_CFG_INTERFACE_SUBCLASS 0 +#define USB_CFG_INTERFACE_PROTOCOL 0 +/* See USB specification if you want to conform to an existing device class or + * protocol. The following classes must be set at interface level: + * HID class is 3, no subclass and protocol required (but may be useful!) + * CDC class is 2, use subclass 2 and protocol 1 for ACM + */ +/* #define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 42 */ +/* Define this to the length of the HID report descriptor, if you implement + * an HID device. Otherwise don't define it or define it to 0. + * If you use this define, you must add a PROGMEM character array named + * "usbHidReportDescriptor" to your code which contains the report descriptor. + * Don't forget to keep the array and this define in sync! + */ + +/* #define USB_PUBLIC static */ +/* Use the define above if you #include usbdrv.c instead of linking against it. + * This technique saves a couple of bytes in flash memory. + */ + +/* ------------------- Fine Control over USB Descriptors ------------------- */ +/* If you don't want to use the driver's default USB descriptors, you can + * provide our own. These can be provided as (1) fixed length static data in + * flash memory, (2) fixed length static data in RAM or (3) dynamically at + * runtime in the function usbFunctionDescriptor(). See usbdrv.h for more + * information about this function. + * Descriptor handling is configured through the descriptor's properties. If + * no properties are defined or if they are 0, the default descriptor is used. + * Possible properties are: + * + USB_PROP_IS_DYNAMIC: The data for the descriptor should be fetched + * at runtime via usbFunctionDescriptor(). If the usbMsgPtr mechanism is + * used, the data is in FLASH by default. Add property USB_PROP_IS_RAM if + * you want RAM pointers. + * + USB_PROP_IS_RAM: The data returned by usbFunctionDescriptor() or found + * in static memory is in RAM, not in flash memory. + * + USB_PROP_LENGTH(len): If the data is in static memory (RAM or flash), + * the driver must know the descriptor's length. The descriptor itself is + * found at the address of a well known identifier (see below). + * List of static descriptor names (must be declared PROGMEM if in flash): + * char usbDescriptorDevice[]; + * char usbDescriptorConfiguration[]; + * char usbDescriptorHidReport[]; + * char usbDescriptorString0[]; + * int usbDescriptorStringVendor[]; + * int usbDescriptorStringDevice[]; + * int usbDescriptorStringSerialNumber[]; + * Other descriptors can't be provided statically, they must be provided + * dynamically at runtime. + * + * Descriptor properties are or-ed or added together, e.g.: + * #define USB_CFG_DESCR_PROPS_DEVICE (USB_PROP_IS_RAM | USB_PROP_LENGTH(18)) + * + * The following descriptors are defined: + * USB_CFG_DESCR_PROPS_DEVICE + * USB_CFG_DESCR_PROPS_CONFIGURATION + * USB_CFG_DESCR_PROPS_STRINGS + * USB_CFG_DESCR_PROPS_STRING_0 + * USB_CFG_DESCR_PROPS_STRING_VENDOR + * USB_CFG_DESCR_PROPS_STRING_PRODUCT + * USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER + * USB_CFG_DESCR_PROPS_HID + * USB_CFG_DESCR_PROPS_HID_REPORT + * USB_CFG_DESCR_PROPS_UNKNOWN (for all descriptors not handled by the driver) + * + * Note about string descriptors: String descriptors are not just strings, they + * are Unicode strings prefixed with a 2 byte header. Example: + * int serialNumberDescriptor[] = { + * USB_STRING_DESCRIPTOR_HEADER(6), + * 'S', 'e', 'r', 'i', 'a', 'l' + * }; + */ + +#define USB_CFG_DESCR_PROPS_DEVICE 0 +#define USB_CFG_DESCR_PROPS_CONFIGURATION 0 +#define USB_CFG_DESCR_PROPS_STRINGS 0 +#define USB_CFG_DESCR_PROPS_STRING_0 0 +#define USB_CFG_DESCR_PROPS_STRING_VENDOR 0 +#define USB_CFG_DESCR_PROPS_STRING_PRODUCT 0 +#define USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER 0 +#define USB_CFG_DESCR_PROPS_HID 0 +#define USB_CFG_DESCR_PROPS_HID_REPORT 0 +#define USB_CFG_DESCR_PROPS_UNKNOWN 0 + +/* ----------------------- Optional MCU Description ------------------------ */ + +/* The following configurations have working defaults in usbdrv.h. You + * usually don't need to set them explicitly. Only if you want to run + * the driver on a device which is not yet supported or with a compiler + * which is not fully supported (such as IAR C) or if you use a differnt + * interrupt than INT0, you may have to define some of these. + */ +/* #define USB_INTR_CFG MCUCR */ +/* #define USB_INTR_CFG_SET ((1 << ISC00) | (1 << ISC01)) */ +/* #define USB_INTR_CFG_CLR 0 */ +/* #define USB_INTR_ENABLE GIMSK */ +/* #define USB_INTR_ENABLE_BIT INT0 */ +/* #define USB_INTR_PENDING GIFR */ +/* #define USB_INTR_PENDING_BIT INTF0 */ +/* #define USB_INTR_VECTOR INT0_vect */ + +#endif /* __usbconfig_h_included__ */