init
authorOlivier Matz <zer0@droids-corp.org>
Fri, 17 Feb 2012 17:23:51 +0000 (18:23 +0100)
committerOlivier Matz <zer0@droids-corp.org>
Fri, 17 Feb 2012 17:23:51 +0000 (18:23 +0100)
297 files changed:
Descriptors.c [new file with mode: 0644]
Descriptors.h [new file with mode: 0644]
Doxygen.conf [new file with mode: 0644]
DualVirtualSerial.aps [new file with mode: 0644]
DualVirtualSerial.c [new file with mode: 0644]
DualVirtualSerial.h [new file with mode: 0644]
LUFA DualVirtualSerial.inf [new file with mode: 0644]
autoconf.h [new file with mode: 0644]
aversive.h [new file with mode: 0644]
aversive/eeprom.h [new file with mode: 0644]
aversive/endian.h [new file with mode: 0644]
aversive/errno.h [new file with mode: 0644]
aversive/error.h [new file with mode: 0644]
aversive/irq_lock.h [new file with mode: 0644]
aversive/list.h [new file with mode: 0644]
aversive/parts.h [new file with mode: 0644]
aversive/parts.h~ [new file with mode: 0644]
aversive/parts/AT86RF401.h [new file with mode: 0644]
aversive/parts/AT89S51.h [new file with mode: 0644]
aversive/parts/AT89S52.h [new file with mode: 0644]
aversive/parts/AT90CAN128.h [new file with mode: 0644]
aversive/parts/AT90CAN32.h [new file with mode: 0644]
aversive/parts/AT90CAN64.h [new file with mode: 0644]
aversive/parts/AT90PWM2.h [new file with mode: 0644]
aversive/parts/AT90PWM216.h [new file with mode: 0644]
aversive/parts/AT90PWM2B.h [new file with mode: 0644]
aversive/parts/AT90PWM3.h [new file with mode: 0644]
aversive/parts/AT90PWM316.h [new file with mode: 0644]
aversive/parts/AT90PWM3B.h [new file with mode: 0644]
aversive/parts/AT90S1200.h [new file with mode: 0644]
aversive/parts/AT90S2313.h [new file with mode: 0644]
aversive/parts/AT90S2323.h [new file with mode: 0644]
aversive/parts/AT90S2343.h [new file with mode: 0644]
aversive/parts/AT90S4414.h [new file with mode: 0644]
aversive/parts/AT90S4433.h [new file with mode: 0644]
aversive/parts/AT90S4434.h [new file with mode: 0644]
aversive/parts/AT90S8515.h [new file with mode: 0644]
aversive/parts/AT90S8515comp.h [new file with mode: 0644]
aversive/parts/AT90S8535.h [new file with mode: 0644]
aversive/parts/AT90S8535comp.h [new file with mode: 0644]
aversive/parts/AT90USB1286.h [new file with mode: 0644]
aversive/parts/AT90USB1287.h [new file with mode: 0644]
aversive/parts/AT90USB1287.h~ [new file with mode: 0644]
aversive/parts/AT90USB162.h [new file with mode: 0644]
aversive/parts/AT90USB646.h [new file with mode: 0644]
aversive/parts/AT90USB647.h [new file with mode: 0644]
aversive/parts/AT90USB82.h [new file with mode: 0644]
aversive/parts/ATmega103.h [new file with mode: 0644]
aversive/parts/ATmega103comp.h [new file with mode: 0644]
aversive/parts/ATmega128.h [new file with mode: 0644]
aversive/parts/ATmega1280.h [new file with mode: 0644]
aversive/parts/ATmega1281.h [new file with mode: 0644]
aversive/parts/ATmega1284P.h [new file with mode: 0644]
aversive/parts/ATmega128A.h [new file with mode: 0644]
aversive/parts/ATmega16.h [new file with mode: 0644]
aversive/parts/ATmega161.h [new file with mode: 0644]
aversive/parts/ATmega161comp.h [new file with mode: 0644]
aversive/parts/ATmega162.h [new file with mode: 0644]
aversive/parts/ATmega163.h [new file with mode: 0644]
aversive/parts/ATmega164P.h [new file with mode: 0644]
aversive/parts/ATmega165.h [new file with mode: 0644]
aversive/parts/ATmega165P.h [new file with mode: 0644]
aversive/parts/ATmega168.h [new file with mode: 0644]
aversive/parts/ATmega168P.h [new file with mode: 0644]
aversive/parts/ATmega168PA.h [new file with mode: 0644]
aversive/parts/ATmega169.h [new file with mode: 0644]
aversive/parts/ATmega169P.h [new file with mode: 0644]
aversive/parts/ATmega16A.h [new file with mode: 0644]
aversive/parts/ATmega16HVA.h [new file with mode: 0644]
aversive/parts/ATmega16U4.h [new file with mode: 0644]
aversive/parts/ATmega2560.h [new file with mode: 0644]
aversive/parts/ATmega2561.h [new file with mode: 0644]
aversive/parts/ATmega32.h [new file with mode: 0644]
aversive/parts/ATmega323.h [new file with mode: 0644]
aversive/parts/ATmega324P.h [new file with mode: 0644]
aversive/parts/ATmega324PA.h [new file with mode: 0644]
aversive/parts/ATmega325.h [new file with mode: 0644]
aversive/parts/ATmega3250.h [new file with mode: 0644]
aversive/parts/ATmega3250P.h [new file with mode: 0644]
aversive/parts/ATmega325P.h [new file with mode: 0644]
aversive/parts/ATmega328P.h [new file with mode: 0644]
aversive/parts/ATmega329.h [new file with mode: 0644]
aversive/parts/ATmega3290.h [new file with mode: 0644]
aversive/parts/ATmega3290P.h [new file with mode: 0644]
aversive/parts/ATmega329P.h [new file with mode: 0644]
aversive/parts/ATmega32A.h [new file with mode: 0644]
aversive/parts/ATmega32C1.h [new file with mode: 0644]
aversive/parts/ATmega32HVB.h [new file with mode: 0644]
aversive/parts/ATmega32M1.h [new file with mode: 0644]
aversive/parts/ATmega32U4.h [new file with mode: 0644]
aversive/parts/ATmega32U6.h [new file with mode: 0644]
aversive/parts/ATmega406.h [new file with mode: 0644]
aversive/parts/ATmega48.h [new file with mode: 0644]
aversive/parts/ATmega48P.h [new file with mode: 0644]
aversive/parts/ATmega64.h [new file with mode: 0644]
aversive/parts/ATmega640.h [new file with mode: 0644]
aversive/parts/ATmega644.h [new file with mode: 0644]
aversive/parts/ATmega644P.h [new file with mode: 0644]
aversive/parts/ATmega645.h [new file with mode: 0644]
aversive/parts/ATmega6450.h [new file with mode: 0644]
aversive/parts/ATmega649.h [new file with mode: 0644]
aversive/parts/ATmega6490.h [new file with mode: 0644]
aversive/parts/ATmega64A.h [new file with mode: 0644]
aversive/parts/ATmega8.h [new file with mode: 0644]
aversive/parts/ATmega8515.h [new file with mode: 0644]
aversive/parts/ATmega8535.h [new file with mode: 0644]
aversive/parts/ATmega88.h [new file with mode: 0644]
aversive/parts/ATmega88P.h [new file with mode: 0644]
aversive/parts/ATmega88PA.h [new file with mode: 0644]
aversive/parts/ATmega8A.h [new file with mode: 0644]
aversive/parts/ATtiny10.h [new file with mode: 0644]
aversive/parts/ATtiny11.h [new file with mode: 0644]
aversive/parts/ATtiny12.h [new file with mode: 0644]
aversive/parts/ATtiny13.h [new file with mode: 0644]
aversive/parts/ATtiny13A.h [new file with mode: 0644]
aversive/parts/ATtiny15.h [new file with mode: 0644]
aversive/parts/ATtiny167.h [new file with mode: 0644]
aversive/parts/ATtiny22.h [new file with mode: 0644]
aversive/parts/ATtiny2313.h [new file with mode: 0644]
aversive/parts/ATtiny24.h [new file with mode: 0644]
aversive/parts/ATtiny25.h [new file with mode: 0644]
aversive/parts/ATtiny26.h [new file with mode: 0644]
aversive/parts/ATtiny261.h [new file with mode: 0644]
aversive/parts/ATtiny28.h [new file with mode: 0644]
aversive/parts/ATtiny43U.h [new file with mode: 0644]
aversive/parts/ATtiny44.h [new file with mode: 0644]
aversive/parts/ATtiny45.h [new file with mode: 0644]
aversive/parts/ATtiny461.h [new file with mode: 0644]
aversive/parts/ATtiny48.h [new file with mode: 0644]
aversive/parts/ATtiny84.h [new file with mode: 0644]
aversive/parts/ATtiny85.h [new file with mode: 0644]
aversive/parts/ATtiny861.h [new file with mode: 0644]
aversive/parts/ATtiny88.h [new file with mode: 0644]
aversive/parts/ATxmega128A1.h [new file with mode: 0644]
aversive/parts/ATxmega128A3.h [new file with mode: 0644]
aversive/parts/ATxmega256A3.h [new file with mode: 0644]
aversive/parts/ATxmega256A3B.h [new file with mode: 0644]
aversive/parts/ATxmega64A1.h [new file with mode: 0644]
aversive/parts/ATxmega64A3.h [new file with mode: 0644]
aversive/pgmspace.h [new file with mode: 0644]
aversive/pgmspace.h~ [new file with mode: 0644]
aversive/queue.h [new file with mode: 0644]
aversive/timers.h [new file with mode: 0644]
aversive/timers.h~ [new file with mode: 0644]
aversive/types.h [new file with mode: 0644]
aversive/wait.h [new file with mode: 0644]
callout.c [new file with mode: 0644]
callout.h [new file with mode: 0644]
cirbuf.c [new file with mode: 0644]
cirbuf.h [new file with mode: 0644]
cirbuf_add_buf_head.c [new file with mode: 0644]
cirbuf_add_buf_tail.c [new file with mode: 0644]
cirbuf_add_head.c [new file with mode: 0644]
cirbuf_add_tail.c [new file with mode: 0644]
cirbuf_align.c [new file with mode: 0644]
cirbuf_del_buf_head.c [new file with mode: 0644]
cirbuf_del_buf_tail.c [new file with mode: 0644]
cirbuf_del_head.c [new file with mode: 0644]
cirbuf_del_tail.c [new file with mode: 0644]
cirbuf_get_buf_head.c [new file with mode: 0644]
cirbuf_get_buf_tail.c [new file with mode: 0644]
cirbuf_get_head.c [new file with mode: 0644]
cirbuf_get_tail.c [new file with mode: 0644]
clock_time.h [new file with mode: 0644]
cmdline.c [new file with mode: 0644]
cmdline.h [new file with mode: 0644]
commands.c [new file with mode: 0644]
commands2.c [new file with mode: 0644]
commands_gen.c [new file with mode: 0644]
cscope.out [new file with mode: 0644]
diag_host.c [new file with mode: 0644]
diagnostic.h [new file with mode: 0644]
diagnostic_config.h [new file with mode: 0644]
error.c [new file with mode: 0644]
error.h [new file with mode: 0644]
error_config.h [new file with mode: 0644]
general_errors.h [new file with mode: 0644]
i2c_config.h [new file with mode: 0644]
int_show.c [new file with mode: 0644]
main.c [new file with mode: 0644]
main.h [new file with mode: 0644]
makefile [new file with mode: 0644]
parse.c [new file with mode: 0644]
parse.h [new file with mode: 0644]
parse_atcmd.c [new file with mode: 0644]
parse_atcmd.h [new file with mode: 0644]
parse_monitor.c [new file with mode: 0644]
parse_monitor.h [new file with mode: 0644]
parse_neighbor.c [new file with mode: 0644]
parse_neighbor.h [new file with mode: 0644]
parse_num.c [new file with mode: 0644]
parse_num.h [new file with mode: 0644]
parse_string.c [new file with mode: 0644]
parse_string.h [new file with mode: 0644]
pid_config.h [new file with mode: 0644]
rc_proto.c [new file with mode: 0644]
rc_proto.h [new file with mode: 0644]
rdline.c [new file with mode: 0644]
rdline.h [new file with mode: 0644]
rdline_config.h [new file with mode: 0644]
scheduler.c [new file with mode: 0644]
scheduler.h [new file with mode: 0644]
scheduler_add.c [new file with mode: 0644]
scheduler_config.h [new file with mode: 0644]
scheduler_del.c [new file with mode: 0644]
scheduler_dump.c [new file with mode: 0644]
scheduler_host.c [new file with mode: 0644]
scheduler_interrupt.c [new file with mode: 0644]
scheduler_private.h [new file with mode: 0644]
scheduler_stats.c [new file with mode: 0644]
scheduler_stats.h [new file with mode: 0644]
spi_config.h [new file with mode: 0644]
stack_space.c [new file with mode: 0644]
stackdump.c [new file with mode: 0644]
stackdump.h [new file with mode: 0644]
time.c [new file with mode: 0644]
time_config.h [new file with mode: 0644]
timer.h [new file with mode: 0644]
timer0_getset.c [new file with mode: 0644]
timer0_prescaler.c [new file with mode: 0644]
timer0_register_OC_at_tics.c [new file with mode: 0644]
timer0_register_OC_in_us.c [new file with mode: 0644]
timer0_register_OV.c [new file with mode: 0644]
timer0_startstop.c [new file with mode: 0644]
timer1_getset.c [new file with mode: 0644]
timer1_prescaler.c [new file with mode: 0644]
timer1_register_OC_at_tics.c [new file with mode: 0644]
timer1_register_OC_in_us.c [new file with mode: 0644]
timer1_register_OV.c [new file with mode: 0644]
timer1_startstop.c [new file with mode: 0644]
timer2_getset.c [new file with mode: 0644]
timer2_prescaler.c [new file with mode: 0644]
timer2_register_OC_at_tics.c [new file with mode: 0644]
timer2_register_OC_in_us.c [new file with mode: 0644]
timer2_register_OV.c [new file with mode: 0644]
timer2_startstop.c [new file with mode: 0644]
timer3_getset.c [new file with mode: 0644]
timer3_prescaler.c [new file with mode: 0644]
timer3_register_OC_at_tics.c [new file with mode: 0644]
timer3_register_OC_in_us.c [new file with mode: 0644]
timer3_register_OV.c [new file with mode: 0644]
timer3_startstop.c [new file with mode: 0644]
timer4_getset.c [new file with mode: 0644]
timer4_prescaler.c [new file with mode: 0644]
timer4_register_OC_at_tics.c [new file with mode: 0644]
timer4_register_OC_in_us.c [new file with mode: 0644]
timer4_register_OV.c [new file with mode: 0644]
timer4_startstop.c [new file with mode: 0644]
timer5_getset.c [new file with mode: 0644]
timer5_prescaler.c [new file with mode: 0644]
timer5_register_OC_at_tics.c [new file with mode: 0644]
timer5_register_OC_in_us.c [new file with mode: 0644]
timer5_register_OV.c [new file with mode: 0644]
timer5_startstop.c [new file with mode: 0644]
timer_conf_check.c [new file with mode: 0644]
timer_config.h [new file with mode: 0644]
timer_declarations.h [new file with mode: 0644]
timer_definitions.h [new file with mode: 0644]
timer_host.c [new file with mode: 0644]
timer_init.c [new file with mode: 0644]
timer_intr.c [new file with mode: 0644]
timer_intr.h [new file with mode: 0644]
timer_prescaler.h [new file with mode: 0644]
uart.c [new file with mode: 0644]
uart.h [new file with mode: 0644]
uart_config.h [new file with mode: 0644]
uart_defs.h [new file with mode: 0644]
uart_dev_io.c [new file with mode: 0644]
uart_errors.h [new file with mode: 0644]
uart_events.c [new file with mode: 0644]
uart_getconf.c [new file with mode: 0644]
uart_host.c [new file with mode: 0644]
uart_host.h [new file with mode: 0644]
uart_private.h [new file with mode: 0644]
uart_recv.c [new file with mode: 0644]
uart_recv9.c [new file with mode: 0644]
uart_recv9_nowait.c [new file with mode: 0644]
uart_recv_nowait.c [new file with mode: 0644]
uart_send.c [new file with mode: 0644]
uart_send9.c [new file with mode: 0644]
uart_send9_nowait.c [new file with mode: 0644]
uart_send_nowait.c [new file with mode: 0644]
uart_setconf.c [new file with mode: 0644]
vt100.c [new file with mode: 0644]
vt100.h [new file with mode: 0644]
xbee.c [new file with mode: 0644]
xbee.h [new file with mode: 0644]
xbee_atcmd.c [new file with mode: 0644]
xbee_atcmd.h [new file with mode: 0644]
xbee_buf.c [new file with mode: 0644]
xbee_buf.h [new file with mode: 0644]
xbee_neighbor.c [new file with mode: 0644]
xbee_neighbor.h [new file with mode: 0644]
xbee_proto.c [new file with mode: 0644]
xbee_proto.h [new file with mode: 0644]
xbee_stats.c [new file with mode: 0644]
xbee_stats.h [new file with mode: 0644]

diff --git a/Descriptors.c b/Descriptors.c
new file mode 100644 (file)
index 0000000..ff1d09e
--- /dev/null
@@ -0,0 +1,386 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2011.\r
+\r
+  dean [at] fourwalledcubicle [dot] com\r
+           www.lufa-lib.org\r
+*/\r
+\r
+/*\r
+  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, distribute, and sell this\r
+  software and its documentation for any purpose is hereby granted\r
+  without fee, provided that the above copyright notice appear in\r
+  all copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special\r
+ *  computer-readable structures which the host requests upon device enumeration, to determine\r
+ *  the device's capabilities and functions.\r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/* On some devices, there is a factory set internal serial number which can be automatically sent to the host as\r
+ * the device's serial number when the Device Descriptor's .SerialNumStrIndex entry is set to USE_INTERNAL_SERIAL.\r
+ * This allows the host to track a device across insertions on different ports, allowing them to retain allocated\r
+ * resources like COM port numbers and drivers. On demos using this feature, give a warning on unsupported devices\r
+ * so that the user can supply their own serial number descriptor instead or remove the USE_INTERNAL_SERIAL value\r
+ * from the Device Descriptor (forcing the host to generate a serial number for each device from the VID, PID and\r
+ * port location).\r
+ */\r
+#if (USE_INTERNAL_SERIAL == NO_DESCRIPTOR)\r
+       #warning USE_INTERNAL_SERIAL is not available on this AVR - please manually construct a device serial descriptor.\r
+#endif\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ *  device characteristics, including the supported USB version, control endpoint size and the\r
+ *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ *  process begins.\r
+ */\r
+const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+\r
+       .USBSpecification       = VERSION_BCD(01.10),\r
+       .Class                  = USB_CSCP_IADDeviceClass,\r
+       .SubClass               = USB_CSCP_IADDeviceSubclass,\r
+       .Protocol               = USB_CSCP_IADDeviceProtocol,\r
+\r
+       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
+\r
+       .VendorID               = 0x03EB,\r
+       .ProductID              = 0x204E,\r
+       .ReleaseNumber          = VERSION_BCD(00.01),\r
+\r
+       .ManufacturerStrIndex   = 0x01,\r
+       .ProductStrIndex        = 0x02,\r
+       .SerialNumStrIndex      = USE_INTERNAL_SERIAL,\r
+\r
+       .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ *  of the device in one of its supported configurations, including information about any device interfaces\r
+ *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ *  a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+       .Config =\r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+                       .TotalInterfaces        = 4,\r
+\r
+                       .ConfigurationNumber    = 1,\r
+                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
+\r
+                       .ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+\r
+                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
+               },\r
+\r
+       .CDC1_IAD =\r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},\r
+\r
+                       .FirstInterfaceIndex    = 0,\r
+                       .TotalInterfaces        = 2,\r
+\r
+                       .Class                  = CDC_CSCP_CDCClass,\r
+                       .SubClass               = CDC_CSCP_ACMSubclass,\r
+                       .Protocol               = CDC_CSCP_ATCommandProtocol,\r
+\r
+                       .IADStrIndex            = NO_DESCRIPTOR\r
+               },\r
+\r
+       .CDC1_CCI_Interface =\r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 0,\r
+                       .AlternateSetting       = 0,\r
+\r
+                       .TotalEndpoints         = 1,\r
+\r
+                       .Class                  = CDC_CSCP_CDCClass,\r
+                       .SubClass               = CDC_CSCP_ACMSubclass,\r
+                       .Protocol               = CDC_CSCP_ATCommandProtocol,\r
+\r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .CDC1_Functional_Header =\r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface},\r
+                       .Subtype                = CDC_DSUBTYPE_CSInterface_Header,\r
+\r
+                       .CDCSpecification       = VERSION_BCD(01.10),\r
+               },\r
+\r
+       .CDC1_Functional_ACM =\r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface},\r
+                       .Subtype                = CDC_DSUBTYPE_CSInterface_ACM,\r
+\r
+                       .Capabilities           = 0x06,\r
+               },\r
+\r
+       .CDC1_Functional_Union =\r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface},\r
+                       .Subtype                = CDC_DSUBTYPE_CSInterface_Union,\r
+\r
+                       .MasterInterfaceNumber  = 0,\r
+                       .SlaveInterfaceNumber   = 1,\r
+               },\r
+\r
+       .CDC1_ManagementEndpoint =\r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+                       .EndpointAddress        = (ENDPOINT_DIR_IN | CDC1_NOTIFICATION_EPNUM),\r
+                       .Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),\r
+                       .EndpointSize           = CDC_NOTIFICATION_EPSIZE,\r
+                       .PollingIntervalMS      = 0xFF\r
+               },\r
+\r
+       .CDC1_DCI_Interface =\r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 1,\r
+                       .AlternateSetting       = 0,\r
+\r
+                       .TotalEndpoints         = 2,\r
+\r
+                       .Class                  = CDC_CSCP_CDCDataClass,\r
+                       .SubClass               = CDC_CSCP_NoDataSubclass,\r
+                       .Protocol               = CDC_CSCP_NoDataProtocol,\r
+\r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .CDC1_DataOutEndpoint =\r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+                       .EndpointAddress        = (ENDPOINT_DIR_OUT | CDC1_RX_EPNUM),\r
+                       .Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),\r
+                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
+                       .PollingIntervalMS      = 0x01\r
+               },\r
+\r
+       .CDC1_DataInEndpoint =\r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+                       .EndpointAddress        = (ENDPOINT_DIR_IN | CDC1_TX_EPNUM),\r
+                       .Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),\r
+                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
+                       .PollingIntervalMS      = 0x01\r
+               },\r
+\r
+       .CDC2_IAD =\r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},\r
+\r
+                       .FirstInterfaceIndex    = 2,\r
+                       .TotalInterfaces        = 2,\r
+\r
+                       .Class                  = CDC_CSCP_CDCClass,\r
+                       .SubClass               = CDC_CSCP_ACMSubclass,\r
+                       .Protocol               = CDC_CSCP_ATCommandProtocol,\r
+\r
+                       .IADStrIndex            = NO_DESCRIPTOR\r
+               },\r
+\r
+       .CDC2_CCI_Interface =\r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 2,\r
+                       .AlternateSetting       = 0,\r
+\r
+                       .TotalEndpoints         = 1,\r
+\r
+                       .Class                  = CDC_CSCP_CDCClass,\r
+                       .SubClass               = CDC_CSCP_ACMSubclass,\r
+                       .Protocol               = CDC_CSCP_ATCommandProtocol,\r
+\r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .CDC2_Functional_Header =\r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface},\r
+                       .Subtype                = CDC_DSUBTYPE_CSInterface_Header,\r
+\r
+                       .CDCSpecification       = VERSION_BCD(01.10),\r
+               },\r
+\r
+       .CDC2_Functional_ACM =\r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface},\r
+                       .Subtype                = CDC_DSUBTYPE_CSInterface_ACM,\r
+\r
+                       .Capabilities           = 0x06,\r
+               },\r
+\r
+       .CDC2_Functional_Union =\r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface},\r
+                       .Subtype                = CDC_DSUBTYPE_CSInterface_Union,\r
+\r
+                       .MasterInterfaceNumber  = 2,\r
+                       .SlaveInterfaceNumber   = 3,\r
+               },\r
+\r
+       .CDC2_ManagementEndpoint =\r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+                       .EndpointAddress        = (ENDPOINT_DIR_IN | CDC2_NOTIFICATION_EPNUM),\r
+                       .Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),\r
+                       .EndpointSize           = CDC_NOTIFICATION_EPSIZE,\r
+                       .PollingIntervalMS      = 0xFF\r
+               },\r
+\r
+       .CDC2_DCI_Interface =\r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 3,\r
+                       .AlternateSetting       = 0,\r
+\r
+                       .TotalEndpoints         = 2,\r
+\r
+                       .Class                  = CDC_CSCP_CDCDataClass,\r
+                       .SubClass               = CDC_CSCP_NoDataSubclass,\r
+                       .Protocol               = CDC_CSCP_NoDataProtocol,\r
+\r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .CDC2_DataOutEndpoint =\r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+                       .EndpointAddress        = (ENDPOINT_DIR_OUT | CDC2_RX_EPNUM),\r
+                       .Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),\r
+                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
+                       .PollingIntervalMS      = 0x01\r
+               },\r
+\r
+       .CDC2_DataInEndpoint =\r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+                       .EndpointAddress        = (ENDPOINT_DIR_IN | CDC2_TX_EPNUM),\r
+                       .Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),\r
+                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
+                       .PollingIntervalMS      = 0x01\r
+               }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+const USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+\r
+       .UnicodeString          = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+const USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+\r
+       .UnicodeString          = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+const USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String},\r
+\r
+       .UnicodeString          = L"LUFA Dual CDC Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ *  USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,\r
+                                    const uint8_t wIndex,\r
+                                    const void** const DescriptorAddress)\r
+{\r
+       const uint8_t  DescriptorType   = (wValue >> 8);\r
+       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
+\r
+       const void* Address = NULL;\r
+       uint16_t    Size    = NO_DESCRIPTOR;\r
+\r
+       switch (DescriptorType)\r
+       {\r
+               case DTYPE_Device:\r
+                       Address = &DeviceDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Device_t);\r
+                       break;\r
+               case DTYPE_Configuration:\r
+                       Address = &ConfigurationDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
+                       break;\r
+               case DTYPE_String:\r
+                       switch (DescriptorNumber)\r
+                       {\r
+                               case 0x00:\r
+                                       Address = &LanguageString;\r
+                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
+                                       break;\r
+                               case 0x01:\r
+                                       Address = &ManufacturerString;\r
+                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
+                                       break;\r
+                               case 0x02:\r
+                                       Address = &ProductString;\r
+                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
+                                       break;\r
+                       }\r
+\r
+                       break;\r
+       }\r
+\r
+       *DescriptorAddress = Address;\r
+       return Size;\r
+}\r
+\r
diff --git a/Descriptors.h b/Descriptors.h
new file mode 100644 (file)
index 0000000..d3e9b81
--- /dev/null
@@ -0,0 +1,111 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2011.\r
+\r
+  dean [at] fourwalledcubicle [dot] com\r
+           www.lufa-lib.org\r
+*/\r
+\r
+/*\r
+  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, distribute, and sell this\r
+  software and its documentation for any purpose is hereby granted\r
+  without fee, provided that the above copyright notice appear in\r
+  all copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Descriptors.c.\r
+ */\r
+\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/pgmspace.h>\r
+\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+\r
+       /* Macros: */\r
+               /** Endpoint number of the first CDC interface's device-to-host data IN endpoint. */\r
+               #define CDC1_TX_EPNUM                  1\r
+\r
+               /** Endpoint number of the first CDC interface's host-to-device data OUT endpoint. */\r
+               #define CDC1_RX_EPNUM                  2\r
+\r
+               /** Endpoint number of the first CDC interface's device-to-host notification IN endpoint. */\r
+               #define CDC1_NOTIFICATION_EPNUM        3\r
+\r
+               /** Endpoint number of the second CDC interface's device-to-host data IN endpoint. */\r
+               #define CDC2_TX_EPNUM                  4\r
+\r
+               /** Endpoint number of the second CDC interface's host-to-device data OUT endpoint. */\r
+               #define CDC2_RX_EPNUM                  5\r
+\r
+               /** Endpoint number of the second CDC interface's device-to-host notification IN endpoint. */\r
+               #define CDC2_NOTIFICATION_EPNUM        6\r
+\r
+               /** Size in bytes of the CDC device-to-host notification IN endpoints. */\r
+               #define CDC_NOTIFICATION_EPSIZE        8\r
+\r
+               /** Size in bytes of the CDC data IN and OUT endpoints. */\r
+               #define CDC_TXRX_EPSIZE                16\r
+\r
+       /* Type Defines: */\r
+               /** Type define for the device configuration descriptor structure. This must be defined in the\r
+                *  application code, as the configuration descriptor contains several sub-descriptors which\r
+                *  vary between devices, and which describe the device's usage to the host.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Configuration_Header_t    Config;\r
+\r
+                       // First CDC Control Interface\r
+                       USB_Descriptor_Interface_Association_t   CDC1_IAD;\r
+                       USB_Descriptor_Interface_t               CDC1_CCI_Interface;\r
+                       USB_CDC_Descriptor_FunctionalHeader_t    CDC1_Functional_Header;\r
+                       USB_CDC_Descriptor_FunctionalACM_t       CDC1_Functional_ACM;\r
+                       USB_CDC_Descriptor_FunctionalUnion_t     CDC1_Functional_Union;\r
+                       USB_Descriptor_Endpoint_t                CDC1_ManagementEndpoint;\r
+\r
+                       // First CDC Data Interface\r
+                       USB_Descriptor_Interface_t               CDC1_DCI_Interface;\r
+                       USB_Descriptor_Endpoint_t                CDC1_DataOutEndpoint;\r
+                       USB_Descriptor_Endpoint_t                CDC1_DataInEndpoint;\r
+\r
+                       // Second CDC Control Interface\r
+                       USB_Descriptor_Interface_Association_t   CDC2_IAD;\r
+                       USB_Descriptor_Interface_t               CDC2_CCI_Interface;\r
+                       USB_CDC_Descriptor_FunctionalHeader_t    CDC2_Functional_Header;\r
+                       USB_CDC_Descriptor_FunctionalACM_t       CDC2_Functional_ACM;\r
+                       USB_CDC_Descriptor_FunctionalUnion_t     CDC2_Functional_Union;\r
+                       USB_Descriptor_Endpoint_t                CDC2_ManagementEndpoint;\r
+\r
+                       // Second CDC Data Interface\r
+                       USB_Descriptor_Interface_t               CDC2_DCI_Interface;\r
+                       USB_Descriptor_Endpoint_t                CDC2_DataOutEndpoint;\r
+                       USB_Descriptor_Endpoint_t                CDC2_DataInEndpoint;\r
+               } USB_Descriptor_Configuration_t;\r
+\r
+       /* Function Prototypes: */\r
+               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,\r
+                                                   const uint8_t wIndex,\r
+                                                   const void** const DescriptorAddress)\r
+                                                   ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
diff --git a/Doxygen.conf b/Doxygen.conf
new file mode 100644 (file)
index 0000000..498cff7
--- /dev/null
@@ -0,0 +1,1565 @@
+# Doxyfile 1.6.2\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+#       TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+#       TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file\r
+# that follow. The default is UTF-8 which is also the encoding used for all\r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the\r
+# iconv built into libc) for the transcoding. See\r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING      = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded\r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME           = "LUFA Library - Dual Virtual Serial Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.\r
+# This could be handy for archiving the generated documentation or\r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER         = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)\r
+# base path where the generated documentation will be put.\r
+# If a relative path is entered, it will be relative to the location\r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY       = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create\r
+# 4096 sub-directories (in 2 levels) under the output directory of each output\r
+# format and will distribute the generated files over these directories.\r
+# Enabling this option can be useful when feeding doxygen a huge amount of\r
+# source files, where putting all generated files in the same directory would\r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS         = NO\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all\r
+# documentation generated by doxygen is written. Doxygen will use this\r
+# information to generate all constant output in the proper language.\r
+# The default language is English, other supported languages are:\r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,\r
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,\r
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English\r
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,\r
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak,\r
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.\r
+\r
+OUTPUT_LANGUAGE        = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will\r
+# include brief member descriptions after the members that are listed in\r
+# the file and class documentation (similar to JavaDoc).\r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC      = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend\r
+# the brief description of a member or function before the detailed description.\r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the\r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF           = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator\r
+# that is used to form the text in various listings. Each string\r
+# in this list, if found as the leading text of the brief description, will be\r
+# stripped from the text and the result after processing the whole list, is\r
+# used as the annotated text. Otherwise, the brief description is used as-is.\r
+# If left blank, the following values are used ("$name" is automatically\r
+# replaced with the name of the entity): "The $name class" "The $name widget"\r
+# "The $name file" "is" "provides" "specifies" "contains"\r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF       = "The $name class" \\r
+                         "The $name widget" \\r
+                         "The $name file" \\r
+                         is \\r
+                         provides \\r
+                         specifies \\r
+                         contains \\r
+                         represents \\r
+                         a \\r
+                         an \\r
+                         the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then\r
+# Doxygen will generate a detailed section even if there is only a brief\r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC    = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all\r
+# inherited members of a class in the documentation of that class as if those\r
+# members were ordinary class members. Constructors, destructors and assignment\r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB  = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full\r
+# path before files name in the file list and in the header files. If set\r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES        = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag\r
+# can be used to strip a user-defined part of the path. Stripping is\r
+# only done if one of the specified strings matches the left-hand part of\r
+# the path. The tag can be used to show relative paths in the file list.\r
+# If left blank the directory from which doxygen is run is used as the\r
+# path to strip.\r
+\r
+STRIP_FROM_PATH        =\r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of\r
+# the path mentioned in the documentation of a class, which tells\r
+# the reader which header file to include in order to use a class.\r
+# If left blank only the name of the header file containing the class\r
+# definition is used. Otherwise one should specify the include paths that\r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH    =\r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter\r
+# (but less readable) file names. This can be useful is your file systems\r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES            = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen\r
+# will interpret the first line (until the first dot) of a JavaDoc-style\r
+# comment as the brief description. If set to NO, the JavaDoc\r
+# comments will behave just like regular Qt-style comments\r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF      = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will\r
+# interpret the first line (until the first dot) of a Qt-style\r
+# comment as the brief description. If set to NO, the comments\r
+# will behave just like regular Qt-style comments (thus requiring\r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF           = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen\r
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///\r
+# comments) as a brief description. This used to be the default behaviour.\r
+# The new default is to treat a multi-line C++ comment block as a detailed\r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented\r
+# member inherits the documentation from any documented member that it\r
+# re-implements.\r
+\r
+INHERIT_DOCS           = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce\r
+# a new page for each member. If set to NO, the documentation of a member will\r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES  = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.\r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE               = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts\r
+# as commands in the documentation. An alias has the form "name=value".\r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to\r
+# put the command \sideeffect (or @sideeffect) in the documentation, which\r
+# will result in a user-defined paragraph with heading "Side Effects:".\r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES                =\r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C\r
+# sources only. Doxygen will then generate output that is more tailored for C.\r
+# For instance, some of the names that are used will be different. The list\r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C  = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java\r
+# sources only. Doxygen will then generate output that is more tailored for\r
+# Java. For instance, namespaces will be presented as packages, qualified\r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA   = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran\r
+# sources only. Doxygen will then generate output that is more tailored for\r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN   = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL\r
+# sources. Doxygen will then generate output that is tailored for\r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL   = NO\r
+\r
+# Doxygen selects the parser to use depending on the extension of the files it parses.\r
+# With this tag you can assign which parser to use for a given extension.\r
+# Doxygen has a built-in mapping, but you can override or extend it using this tag.\r
+# The format is ext=language, where ext is a file extension, and language is one of\r
+# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP,\r
+# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat\r
+# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran),\r
+# use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.\r
+\r
+EXTENSION_MAPPING      =\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want\r
+# to include (a tag file for) the STL sources as input, then you should\r
+# set this tag to YES in order to let doxygen match functions declarations and\r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.\r
+# func(std::string) {}). This also make the inheritance and collaboration\r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT    = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT        = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.\r
+# Doxygen will parse them like normal C++ but will assume all classes use public\r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT            = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter\r
+# and setter methods for a property. Setting this option to YES (the default)\r
+# will make doxygen to replace the get and set methods by a property in the\r
+# documentation. This will only work if the methods are indeed getting or\r
+# setting a simple type. If this is not the case, or you want to show the\r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT   = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC\r
+# tag is set to YES, then doxygen will reuse the documentation of the first\r
+# member in the group (if any) for the other members of the group. By default\r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC   = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of\r
+# the same type (for instance a group of public functions) to be put as a\r
+# subgroup of that type (e.g. under the Public Functions section). Set it to\r
+# NO to prevent subgrouping. Alternatively, this can be done per class using\r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING            = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum\r
+# is documented as struct, union, or enum with the name of the typedef. So\r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct\r
+# with name TypeT. When disabled the typedef will appear as a member of a file,\r
+# namespace, or class. And the struct will be named TypeS. This can typically\r
+# be useful for C code in case the coding convention dictates that all compound\r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT   = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to\r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is\r
+# probably good enough. For larger projects a too small cache size can cause\r
+# doxygen to be busy swapping symbols to and from disk most of the time\r
+# causing a significant performance penality.\r
+# If the system has enough physical memory increasing the cache will improve the\r
+# performance by keeping more symbols in memory. Note that the value works on\r
+# a logarithmic scale so increasing the size by one will rougly double the\r
+# memory usage. The cache size is given by this formula:\r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,\r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE      = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in\r
+# documentation are documented, even if no documentation was available.\r
+# Private class members and static file members will be hidden unless\r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL            = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class\r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE        = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file\r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC         = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)\r
+# defined locally in source files will be included in the documentation.\r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES  = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local\r
+# methods, which are defined in the implementation section but not in\r
+# the interface are included in the documentation.\r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS  = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be\r
+# extracted and appear in the documentation as a namespace called\r
+# 'anonymous_namespace{file}', where file will be replaced with the base\r
+# name of the file that contains the anonymous namespace. By default\r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES   = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all\r
+# undocumented members of documented classes, files or namespaces.\r
+# If set to NO (the default) these members will be included in the\r
+# various overviews, but no documentation section is generated.\r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS     = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all\r
+# undocumented classes that are normally visible in the class hierarchy.\r
+# If set to NO (the default) these classes will be included in the various\r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES     = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all\r
+# friend (class|struct|union) declarations.\r
+# If set to NO (the default) these declarations will be included in the\r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS  = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any\r
+# documentation blocks found inside the body of a function.\r
+# If set to NO (the default) these blocks will be appended to the\r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS      = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation\r
+# that is typed after a \internal command is included. If the tag is set\r
+# to NO (the default) then the documentation will be excluded.\r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS          = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate\r
+# file names in lower-case letters. If set to YES upper-case letters are also\r
+# allowed. This is useful if you have classes or files whose names only differ\r
+# in case and if your file system supports case sensitive file names. Windows\r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES       = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen\r
+# will show members with their full class and namespace scopes in the\r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES       = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen\r
+# will put a list of the files that are included by a file in the documentation\r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES     = YES\r
+\r
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen\r
+# will list include files with double quotes in the documentation\r
+# rather than with sharp brackets.\r
+\r
+FORCE_LOCAL_INCLUDES   = NO\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]\r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO            = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen\r
+# will sort the (detailed) documentation of file and class members\r
+# alphabetically by member name. If set to NO the members will appear in\r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS       = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the\r
+# brief documentation of file, namespace and class members alphabetically\r
+# by member name. If set to NO (the default) the members will appear in\r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS        = NO\r
+\r
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.\r
+\r
+SORT_MEMBERS_CTORS_1ST = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the\r
+# hierarchy of group names into alphabetical order. If set to NO (the default)\r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES       = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be\r
+# sorted by fully-qualified names, including namespaces. If set to\r
+# NO (the default), the class list will be sorted only by class name,\r
+# not including the namespace part.\r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the\r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME     = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or\r
+# disable (NO) the todo list. This list is created by putting \todo\r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST      = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or\r
+# disable (NO) the test list. This list is created by putting \test\r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST      = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or\r
+# disable (NO) the bug list. This list is created by putting \bug\r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST       = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or\r
+# disable (NO) the deprecated list. This list is created by putting\r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional\r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS       =\r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines\r
+# the initial value of a variable or define consists of for it to appear in\r
+# the documentation. If the initializer consists of more lines than specified\r
+# here it will be hidden. Use a value of 0 to hide initializers completely.\r
+# The appearance of the initializer of individual variables and defines in the\r
+# documentation can be controlled using \showinitializer or \hideinitializer\r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES  = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated\r
+# at the bottom of the documentation of classes and structs. If set to YES the\r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES        = YES\r
+\r
+# If the sources in your project are distributed over multiple directories\r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy\r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES       = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the\r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES             = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the\r
+# Namespaces page.\r
+# This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES        = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that\r
+# doxygen should invoke to get the current version for each file (typically from\r
+# the version control system). Doxygen will invoke the program by executing (via\r
+# popen()) the command <command> <input-file>, where <command> is the value of\r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file\r
+# provided by doxygen. Whatever the program writes to standard output\r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER    =\r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by\r
+# doxygen. The layout file controls the global structure of the generated output files\r
+# in an output format independent way. The create the layout file that represents\r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a\r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name\r
+# of the layout file.\r
+\r
+LAYOUT_FILE            =\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated\r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET                  = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are\r
+# generated by doxygen. Possible values are YES and NO. If left blank\r
+# NO is used.\r
+\r
+WARNINGS               = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings\r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will\r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED   = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for\r
+# potential errors in the documentation, such as not documenting some\r
+# parameters in a documented function, or documenting parameters that\r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR      = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for\r
+# functions that are documented, but have no documentation for their parameters\r
+# or return value. If set to NO (the default) doxygen will only warn about\r
+# wrong or incomplete parameter documentation, but not about the absence of\r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC       = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that\r
+# doxygen can produce. The string should contain the $file, $line, and $text\r
+# tags, which will be replaced by the file and line number from which the\r
+# warning originated and the warning text. Optionally the format may contain\r
+# $version, which will be replaced by the version of the file (if it could\r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT            = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning\r
+# and error messages should be written. If left blank the output is written\r
+# to stderr.\r
+\r
+WARN_LOGFILE           =\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain\r
+# documented source files. You may enter file names like "myfile.cpp" or\r
+# directories like "/usr/src/myproject". Separate the files or directories\r
+# with spaces.\r
+\r
+INPUT                  = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files\r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is\r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built\r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for\r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING         = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the\r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp\r
+# and *.h) to filter out the source-files in the directories. If left\r
+# blank the following patterns are tested:\r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx\r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS          = *.h \\r
+                         *.c \\r
+                         *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories\r
+# should be searched for input files as well. Possible values are YES and NO.\r
+# If left blank NO is used.\r
+\r
+RECURSIVE              = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should\r
+# excluded from the INPUT source files. This way you can easily exclude a\r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE                = Documentation/\r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or\r
+# directories that are symbolic links (a Unix filesystem feature) are excluded\r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS       = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the\r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude\r
+# certain files from those directories. Note that the wildcards are matched\r
+# against the file with absolute path, so to exclude all test directories\r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS       = \r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names\r
+# (namespaces, classes, functions, etc.) that should be excluded from the\r
+# output. The symbol name can be a fully qualified name, a word, or if the\r
+# wildcard * is used, a substring. Examples: ANamespace, AClass,\r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS        = __* \\r
+                         INCLUDE_FROM_*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or\r
+# directories that contain example code fragments that are included (see\r
+# the \include command).\r
+\r
+EXAMPLE_PATH           =\r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the\r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp\r
+# and *.h) to filter out the source-files in the directories. If left\r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS       = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be\r
+# searched for input files to be used with the \include or \dontinclude\r
+# commands irrespective of the value of the RECURSIVE tag.\r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE      = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or\r
+# directories that contain image that are included in the documentation (see\r
+# the \image command).\r
+\r
+IMAGE_PATH             =\r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should\r
+# invoke to filter for each input file. Doxygen will invoke the filter program\r
+# by executing (via popen()) the command <filter> <input-file>, where <filter>\r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an\r
+# input file. Doxygen will then use the output that the filter program writes\r
+# to standard output.\r
+# If FILTER_PATTERNS is specified, this tag will be\r
+# ignored.\r
+\r
+INPUT_FILTER           =\r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern\r
+# basis.\r
+# Doxygen will compare the file name with each pattern and apply the\r
+# filter if there is a match.\r
+# The filters are a list of the form:\r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further\r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER\r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS        =\r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using\r
+# INPUT_FILTER) will be used to filter the input files when producing source\r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES    = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will\r
+# be generated. Documented entities will be cross-referenced with these sources.\r
+# Note: To get rid of all source code in the generated output, make sure also\r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER         = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body\r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES         = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct\r
+# doxygen to hide any special comment blocks from generated source code\r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS    = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES\r
+# then for each documented function all documented\r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES\r
+# then for each documented function all documented entities\r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION    = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code.\r
+# Otherwise they will link to the documentation.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code\r
+# will point to the HTML generated by the htags(1) tool instead of doxygen\r
+# built-in source browser. The htags tool is part of GNU's global source\r
+# tagging system (see http://www.gnu.org/software/global/global.html). You\r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS              = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen\r
+# will generate a verbatim copy of the header file for each class for\r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS       = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index\r
+# of all compounds will be generated. Enable this if the project\r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX     = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then\r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns\r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX    = 5\r
+\r
+# In case all classes in a project start with a common prefix, all\r
+# classes will be put under the same header in the alphabetical index.\r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that\r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX          =\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will\r
+# generate HTML output.\r
+\r
+GENERATE_HTML          = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.\r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be\r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT            = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for\r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank\r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION    = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for\r
+# each generated HTML page. If it is left blank doxygen will generate a\r
+# standard header.\r
+\r
+HTML_HEADER            =\r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for\r
+# each generated HTML page. If it is left blank doxygen will generate a\r
+# standard footer.\r
+\r
+HTML_FOOTER            =\r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading\r
+# style sheet that is used by each HTML page. It can be used to\r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen\r
+# will generate a default style sheet. Note that doxygen will try to copy\r
+# the style sheet file to the HTML output directory, so don't put your own\r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET        =\r
+\r
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML\r
+# page will contain the date and time when the page was generated. Setting\r
+# this to NO can help when comparing the output of multiple runs.\r
+\r
+HTML_TIMESTAMP         = NO\r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,\r
+# files or namespaces will be aligned in HTML using tables. If set to\r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS     = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML\r
+# documentation will contain sections that can be hidden and shown after the\r
+# page has loaded. For this to work a browser that supports\r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox\r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS  = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files\r
+# will be generated that can be used as input for Apple's Xcode 3\r
+# integrated development environment, introduced with OSX 10.5 (Leopard).\r
+# To create a documentation set, doxygen will generate a Makefile in the\r
+# HTML output directory. Running make will produce the docset in that\r
+# directory and running "make install" will install the docset in\r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find\r
+# it at startup.\r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET        = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the\r
+# feed. A documentation feed provides an umbrella under which multiple\r
+# documentation sets from a single provider (such as a company or product suite)\r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME        = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that\r
+# should uniquely identify the documentation set bundle. This should be a\r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen\r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID       = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files\r
+# will be generated that can be used as input for tools like the\r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)\r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP      = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can\r
+# be used to specify the file name of the resulting .chm file. You\r
+# can add a path in front of the file if the result should not be\r
+# written to the html output directory.\r
+\r
+CHM_FILE               =\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can\r
+# be used to specify the location (absolute path including file name) of\r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run\r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION           =\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag\r
+# controls if a separate .chi index file is generated (YES) or that\r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI           = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING     =\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag\r
+# controls whether a binary table of contents is generated (YES) or a\r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC             = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members\r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND             = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER\r
+# are set, an additional index file will be generated that can be used as input for\r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated\r
+# HTML documentation.\r
+\r
+GENERATE_QHP           = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can\r
+# be used to specify the file name of the resulting .qch file.\r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE               =\r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating\r
+# Qt Help Project output. For more information please see\r
+# http://doc.trolltech.com/qthelpproject.html#namespace\r
+\r
+QHP_NAMESPACE          = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating\r
+# Qt Help Project output. For more information please see\r
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders\r
+\r
+QHP_VIRTUAL_FOLDER     = doc\r
+\r
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add.\r
+# For more information please see\r
+# http://doc.trolltech.com/qthelpproject.html#custom-filters\r
+\r
+QHP_CUST_FILTER_NAME   =\r
+\r
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see\r
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">Qt Help Project / Custom Filters</a>.\r
+\r
+QHP_CUST_FILTER_ATTRS  =\r
+\r
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's\r
+# filter section matches.\r
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">Qt Help Project / Filter Attributes</a>.\r
+\r
+QHP_SECT_FILTER_ATTRS  =\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can\r
+# be used to specify the location of Qt's qhelpgenerator.\r
+# If non-empty doxygen will try to run qhelpgenerator on the generated\r
+# .qhp file.\r
+\r
+QHG_LOCATION           =\r
+\r
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files\r
+#  will be generated, which together with the HTML files, form an Eclipse help\r
+#  plugin. To install this plugin and make it available under the help contents\r
+# menu in Eclipse, the contents of the directory containing the HTML and XML\r
+# files needs to be copied into the plugins directory of eclipse. The name of\r
+# the directory within the plugins directory should be the same as\r
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before the help appears.\r
+\r
+GENERATE_ECLIPSEHELP   = NO\r
+\r
+# A unique identifier for the eclipse help plugin. When installing the plugin\r
+# the directory name containing the HTML and XML files should also have\r
+# this name.\r
+\r
+ECLIPSE_DOC_ID         = org.doxygen.Project\r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at\r
+# top of each HTML page. The value NO (the default) enables the index and\r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX          = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20])\r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE   = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to YES, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that\r
+# is generated for HTML Help). For this to work a browser that supports\r
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).\r
+# Windows users are probably better off using the HTML help feature.\r
+\r
+GENERATE_TREEVIEW      = YES\r
+\r
+# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list.\r
+\r
+USE_INLINE_TREES       = NO\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be\r
+# used to set the initial width (in pixels) of the frame in which the tree\r
+# is shown.\r
+\r
+TREEVIEW_WIDTH         = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included\r
+# as images in the HTML documentation. The default is 10. Note that\r
+# when you change the font size after a successful doxygen run you need\r
+# to manually remove any form_*.png images from the HTML output directory\r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE       = 10\r
+\r
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for the HTML output. The underlying search engine uses javascript\r
+# and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) there is already a search function so this one should\r
+# typically be disabled. For large projects the javascript based search engine\r
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.\r
+\r
+SEARCHENGINE           = NO\r
+\r
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be implemented using a PHP enabled web server instead of at the web client using Javascript. Doxygen will generate the search PHP script and index\r
+# file to put on the web server. The advantage of the server based approach is that it scales better to large projects and allows full text search. The disadvances is that it is more difficult to setup\r
+# and does not have live searching capabilities.\r
+\r
+SERVER_BASED_SEARCH    = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will\r
+# generate Latex output.\r
+\r
+GENERATE_LATEX         = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.\r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be\r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT           = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be\r
+# invoked. If left blank `latex' will be used as the default command name.\r
+# Note that when enabling USE_PDFLATEX this option is only used for\r
+# generating bitmaps for formulas in the HTML output, but not in the\r
+# Makefile that is written to the output directory.\r
+\r
+LATEX_CMD_NAME         = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to\r
+# generate index for LaTeX. If left blank `makeindex' will be used as the\r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME     = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact\r
+# LaTeX documents. This may be useful for small projects and may help to\r
+# save some trees in general.\r
+\r
+COMPACT_LATEX          = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used\r
+# by the printer. Possible values are: a4, a4wide, letter, legal and\r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE             = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX\r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES         =\r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for\r
+# the generated latex document. The header should contain everything until\r
+# the first chapter. If it is left blank doxygen will generate a\r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER           =\r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated\r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will\r
+# contain links (just like the HTML output) instead of page references\r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS         = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of\r
+# plain latex in the generated Makefile. Set this option to YES to get a\r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX           = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.\r
+# command to the generated LaTeX files. This will instruct LaTeX to keep\r
+# running if errors occur, instead of asking the user for help.\r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE        = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not\r
+# include the index chapters (such as File Index, Compound Index, etc.)\r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES     = NO\r
+\r
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER.\r
+\r
+LATEX_SOURCE_CODE      = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output\r
+# The RTF output is optimized for Word 97 and may not look very pretty with\r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF           = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.\r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be\r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT             = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact\r
+# RTF documents. This may be useful for small projects and may help to\r
+# save some trees in general.\r
+\r
+COMPACT_RTF            = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated\r
+# will contain hyperlink fields. The RTF file will\r
+# contain links (just like the HTML output) instead of page references.\r
+# This makes the output suitable for online browsing using WORD or other\r
+# programs which support those fields.\r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS         = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's\r
+# config file, i.e. a series of assignments. You only have to provide\r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE    =\r
+\r
+# Set optional variables used in the generation of an rtf document.\r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE    =\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will\r
+# generate man pages\r
+\r
+GENERATE_MAN           = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.\r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be\r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT             = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to\r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION          = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,\r
+# then it will generate one additional man file for each entity\r
+# documented in the real man page(s). These additional files\r
+# only source the real man page, but without them the man command\r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS              = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will\r
+# generate an XML file that captures the structure of\r
+# the code including all documentation.\r
+\r
+GENERATE_XML           = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.\r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be\r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT             = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema,\r
+# which can be used by a validating XML parser to check the\r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA             =\r
+\r
+# The XML_DTD tag can be used to specify an XML DTD,\r
+# which can be used by a validating XML parser to check the\r
+# syntax of the XML files.\r
+\r
+XML_DTD                =\r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will\r
+# dump the program listings (including syntax highlighting\r
+# and cross-referencing information) to the XML output. Note that\r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING     = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will\r
+# generate an AutoGen Definitions (see autogen.sf.net) file\r
+# that captures the structure of the code including all\r
+# documentation. Note that this feature is still experimental\r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF   = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will\r
+# generate a Perl module file that captures the structure of\r
+# the code including all documentation. Note that this\r
+# feature is still experimental and incomplete at the\r
+# moment.\r
+\r
+GENERATE_PERLMOD       = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate\r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able\r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX          = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be\r
+# nicely formatted so it can be parsed by a human reader.\r
+# This is useful\r
+# if you want to understand what is going on.\r
+# On the other hand, if this\r
+# tag is set to NO the size of the Perl module output will be much smaller\r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY         = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file\r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.\r
+# This is useful so different doxyrules.make files included by the same\r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX =\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will\r
+# evaluate all C-preprocessor directives found in the sources and include\r
+# files.\r
+\r
+ENABLE_PREPROCESSING   = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro\r
+# names in the source code. If set to NO (the default) only conditional\r
+# compilation will be performed. Macro expansion can be done in a controlled\r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION        = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES\r
+# then the macro expansion is limited to the macros specified with the\r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF     = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files\r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES        = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that\r
+# contain include files that are not input files but should be processed by\r
+# the preprocessor.\r
+\r
+INCLUDE_PATH           =\r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard\r
+# patterns (like *.h and *.hpp) to filter out the header-files in the\r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will\r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS  =\r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that\r
+# are defined before the preprocessor is started (similar to the -D option of\r
+# gcc). The argument of the tag is a list of macros of the form: name\r
+# or name=definition (no spaces). If the definition and the = are\r
+# omitted =1 is assumed. To prevent a macro definition from being\r
+# undefined via #undef or recursively expanded use the := operator\r
+# instead of the = operator.\r
+\r
+PREDEFINED             = __DOXYGEN__ \\r
+                         PROGMEM\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then\r
+# this tag can be used to specify a list of macro names that should be expanded.\r
+# The macro definition that is found in the sources will be used.\r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED      = \r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then\r
+# doxygen's preprocessor will remove all function-like macros that are alone\r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such\r
+# function macros are typically used for boiler-plate code, and will confuse\r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS   = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references\r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles.\r
+# Optionally an initial location of the external documentation\r
+# can be added for each tagfile. The format of a tag file without\r
+# this location is as follows:\r
+#\r
+# TAGFILES = file1 file2 ...\r
+# Adding location for the tag files is done as follows:\r
+#\r
+# TAGFILES = file1=loc1 "file2 = loc2" ...\r
+# where "loc1" and "loc2" can be relative or absolute paths or\r
+# URLs. If a location is present for each tag, the installdox tool\r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen\r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES               =\r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create\r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE       =\r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed\r
+# in the class index. If set to NO only the inherited external classes\r
+# will be listed.\r
+\r
+ALLEXTERNALS           = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed\r
+# in the modules index. If set to NO, only the current project's groups will\r
+# be listed.\r
+\r
+EXTERNAL_GROUPS        = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script\r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH              = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool\r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will\r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base\r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that\r
+# this option is superseded by the HAVE_DOT option below. This is only a\r
+# fallback. It is recommended to install and use dot, since it yields more\r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS         = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc\r
+# command. Doxygen will then run the mscgen tool (see\r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the\r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where\r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the\r
+# default search path.\r
+\r
+MSCGEN_PATH            =\r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide\r
+# inheritance and usage relations if the target is undocumented\r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS   = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is\r
+# available from the path. This tool is part of Graphviz, a graph visualization\r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section\r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT               = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output\r
+# directory and reference it in all dot files that doxygen generates. This\r
+# font does not include all possible unicode characters however, so when you need\r
+# these (or just want a differently looking font) you can specify the font name\r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font,\r
+# which can be done by putting it in a standard location or by setting the\r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory\r
+# containing the font.\r
+\r
+DOT_FONTNAME           = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.\r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE           = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the\r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a\r
+# different font using DOT_FONTNAME you can set the path where dot\r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH           =\r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen\r
+# will generate a graph for each documented class showing the direct and\r
+# indirect inheritance relations. Setting this tag to YES will force the\r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH            = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen\r
+# will generate a graph for each documented class showing the direct and\r
+# indirect implementation dependencies (inheritance, containment, and\r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH    = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen\r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS           = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and\r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling\r
+# Language.\r
+\r
+UML_LOOK               = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the\r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS     = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT\r
+# tags are set to YES then doxygen will generate a graph for each documented\r
+# file showing the direct and indirect include dependencies of the file with\r
+# other documented files.\r
+\r
+INCLUDE_GRAPH          = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and\r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each\r
+# documented header file showing the documented files that directly or\r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH      = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then\r
+# doxygen will generate a call dependency graph for every global function\r
+# or class method. Note that enabling this option will significantly increase\r
+# the time of a run. So in most cases it will be better to enable call graphs\r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH             = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then\r
+# doxygen will generate a caller dependency graph for every global function\r
+# or class method. Note that enabling this option will significantly increase\r
+# the time of a run. So in most cases it will be better to enable caller\r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH           = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen\r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY    = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES\r
+# then doxygen will show the dependencies a directory has on other directories\r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH        = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images\r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT       = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be\r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH               =\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that\r
+# contain dot files that are included in the documentation (see the\r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS           =\r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of\r
+# nodes that will be shown in the graph. If the number of nodes in a graph\r
+# becomes larger than this value, doxygen will truncate the graph, which is\r
+# visualized by representing a node as a red box. Note that doxygen if the\r
+# number of direct children of the root node in a graph is already larger than\r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note\r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES    = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the\r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable\r
+# from the root by following a path via at most 3 edges will be shown. Nodes\r
+# that lay further from the root node will be omitted. Note that setting this\r
+# option to 1 or 2 may greatly reduce the computation time needed for large\r
+# code bases. Also note that the size of a graph can be further restricted by\r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH    = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent\r
+# background. This is disabled by default, because dot on Windows does not\r
+# seem to support this out of the box. Warning: Depending on the platform used,\r
+# enabling this option may lead to badly anti-aliased labels on the edges of\r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT        = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output\r
+# files in one run (i.e. multiple -o and -T options on the command line). This\r
+# makes dot run faster, but since only newer versions of dot (>1.8.10)\r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS      = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will\r
+# generate a legend page explaining the meaning of the various boxes and\r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND        = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will\r
+# remove the intermediate dot files that are used to generate\r
+# the various graphs.\r
+\r
+DOT_CLEANUP            = YES\r
diff --git a/DualVirtualSerial.aps b/DualVirtualSerial.aps
new file mode 100644 (file)
index 0000000..78bf27c
--- /dev/null
@@ -0,0 +1 @@
+<AVRStudio><MANAGEMENT><ProjectName>DualVirtualSerial</ProjectName><Created>13-Jul-2010 15:24:20</Created><LastEdit>13-Jul-2010 15:25:07</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>13-Jul-2010 15:24:20</Created><Version>4</Version><Build>4, 18, 0, 685</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\Device\ClassDriver\DualVirtualSerial\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR ONE!</CURRENT_TARGET><CURRENT_PART></CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>DualVirtualSerial.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>DualVirtualSerial.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>atmega128</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>DualVirtualSerial.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20100110\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20100110\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/DualVirtualSerial.c b/DualVirtualSerial.c
new file mode 100644 (file)
index 0000000..f5f4053
--- /dev/null
@@ -0,0 +1,277 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2011.\r
+\r
+  dean [at] fourwalledcubicle [dot] com\r
+           www.lufa-lib.org\r
+*/\r
+\r
+/*\r
+  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, distribute, and sell this\r
+  software and its documentation for any purpose is hereby granted\r
+  without fee, provided that the above copyright notice appear in\r
+  all copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Main source file for the DualVirtualSerial demo. This file contains the main tasks of\r
+ *  the demo and is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "DualVirtualSerial.h"\r
+\r
+\r
+#include <aversive.h>\r
+#include <aversive/error.h>\r
+#include <aversive/queue.h>\r
+\r
+#include <scheduler.h>\r
+#include <clock_time.h>\r
+#include <parse.h>\r
+#include <rdline.h>\r
+#include <timer.h>\r
+\r
+#include "xbee_neighbor.h"\r
+#include "xbee_atcmd.h"\r
+#include "xbee_stats.h"\r
+#include "xbee_buf.h"\r
+#include "xbee_proto.h"\r
+#include "xbee.h"\r
+\r
+#include "callout.h"\r
+#include "main.h"\r
+#include "cmdline.h"\r
+\r
+volatile uint16_t global_ms;\r
+struct callout_manager cm;\r
+\r
+\r
+/** LUFA CDC Class driver interface configuration and state information. This structure is\r
+ *  passed to all CDC Class driver functions, so that multiple instances of the same class\r
+ *  within a device can be differentiated from one another. This is for the first CDC interface,\r
+ *  which sends strings to the host for each joystick movement.\r
+ */\r
+USB_ClassInfo_CDC_Device_t VirtualSerial1_CDC_Interface =\r
+       {\r
+               .Config =\r
+                       {\r
+                               .ControlInterfaceNumber           = 0,\r
+\r
+                               .DataINEndpointNumber             = CDC1_TX_EPNUM,\r
+                               .DataINEndpointSize               = CDC_TXRX_EPSIZE,\r
+                               .DataINEndpointDoubleBank         = false,\r
+\r
+                               .DataOUTEndpointNumber            = CDC1_RX_EPNUM,\r
+                               .DataOUTEndpointSize              = CDC_TXRX_EPSIZE,\r
+                               .DataOUTEndpointDoubleBank        = false,\r
+\r
+                               .NotificationEndpointNumber       = CDC1_NOTIFICATION_EPNUM,\r
+                               .NotificationEndpointSize         = CDC_NOTIFICATION_EPSIZE,\r
+                               .NotificationEndpointDoubleBank   = false,\r
+                       },\r
+       };\r
+\r
+/** LUFA CDC Class driver interface configuration and state information. This structure is\r
+ *  passed to all CDC Class driver functions, so that multiple instances of the same class\r
+ *  within a device can be differentiated from one another. This is for the second CDC interface,\r
+ *  which echos back all received data from the host.\r
+ */\r
+USB_ClassInfo_CDC_Device_t VirtualSerial2_CDC_Interface =\r
+       {\r
+               .Config =\r
+                       {\r
+                               .ControlInterfaceNumber           = 2,\r
+\r
+                               .DataINEndpointNumber             = CDC2_TX_EPNUM,\r
+                               .DataINEndpointSize               = CDC_TXRX_EPSIZE,\r
+                               .DataINEndpointDoubleBank         = false,\r
+\r
+                               .DataOUTEndpointNumber            = CDC2_RX_EPNUM,\r
+                               .DataOUTEndpointSize              = CDC_TXRX_EPSIZE,\r
+                               .DataOUTEndpointDoubleBank        = false,\r
+\r
+                               .NotificationEndpointNumber       = CDC2_NOTIFICATION_EPNUM,\r
+                               .NotificationEndpointSize         = CDC_NOTIFICATION_EPSIZE,\r
+                               .NotificationEndpointDoubleBank   = false,\r
+                       },\r
+       };\r
+\r
+\r
+/* return time in milliseconds on unsigned 16 bits */\r
+static uint16_t get_time_ms(void)\r
+{\r
+       return global_ms;\r
+}\r
+\r
+static void do_led_blink(struct callout_manager *cm,\r
+                        struct callout *clt, void *dummy)\r
+{\r
+       static uint8_t a = 0;\r
+\r
+       if (a & 1)\r
+               LEDs_SetAllLEDs(0);\r
+       else\r
+               LEDs_SetAllLEDs(0xff);\r
+       a++;\r
+}\r
+\r
+static void increment_ms(void *dummy)\r
+{\r
+       global_ms++;\r
+}\r
+\r
+static void main_timer_interrupt(void)\r
+{\r
+       static uint8_t cpt = 0;\r
+       cpt++;\r
+       sei();\r
+       if ((cpt & 0x3) == 0)\r
+               scheduler_interrupt();\r
+}\r
+\r
+\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ *  setup of all components and the main program loop.\r
+ */\r
+int main(void)\r
+{\r
+       struct callout t1;\r
+       FILE *xbee_file;\r
+       int8_t err;\r
+       struct xbee_dev dev;\r
+\r
+       SetupHardware();\r
+\r
+       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+\r
+       fdevopen(usbserial1_dev_send, usbserial1_dev_recv);\r
+       xbee_file = fdevopen(usbserial2_dev_send, usbserial2_dev_recv);\r
+       scheduler_init();\r
+       timer_init();\r
+       timer0_register_OV_intr(main_timer_interrupt);\r
+       sei();\r
+\r
+       scheduler_add_periodical_event_priority(increment_ms, NULL,\r
+                                               1000L / SCHEDULER_UNIT,\r
+                                               LED_PRIO);\r
+       cmdline_init();\r
+       callout_manager_init(&cm, get_time_ms);\r
+       callout_reset(&cm, &t1, 500, PERIODICAL, do_led_blink, NULL);\r
+\r
+       /* initialize libxbee */\r
+       err = xbee_init();\r
+       if (err < 0)\r
+               return -1;\r
+\r
+       xbee_dev = &dev;\r
+\r
+       /* open xbee device */\r
+       if (xbee_open(xbee_dev, xbee_file) < 0)\r
+               return -1;\r
+\r
+       /* register default channel with a callback */\r
+       if (xbee_register_channel(xbee_dev, XBEE_DEFAULT_CHANNEL,\r
+                                 xbee_rx, NULL) < 0) {\r
+               fprintf(stderr, "cannot register default channel\n");\r
+               return -1;\r
+       }\r
+\r
+       sei();\r
+       xbee_mainloop();\r
+       return 0;\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
+       /* Disable watchdog if enabled by bootloader/fuses */\r
+       MCUSR &= ~(1 << WDRF);\r
+       wdt_disable();\r
+\r
+       /* Disable clock division */\r
+       clock_prescale_set(clock_div_1);\r
+\r
+       /* Hardware Initialization */\r
+       Joystick_Init();\r
+       LEDs_Init();\r
+       USB_Init();\r
+}\r
+\r
+/** Checks for changes in the position of the board joystick, sending strings to the host upon each change\r
+ *  through the first of the CDC interfaces.\r
+ */\r
+void CheckJoystickMovement(void)\r
+{\r
+       uint8_t     JoyStatus_LCL = Joystick_GetStatus();\r
+       char*       ReportString  = NULL;\r
+       static bool ActionSent = false;\r
+\r
+       if (JoyStatus_LCL & JOY_UP)\r
+         ReportString = "Joystick Up\r\n";\r
+       else if (JoyStatus_LCL & JOY_DOWN)\r
+         ReportString = "Joystick Down\r\n";\r
+       else if (JoyStatus_LCL & JOY_LEFT)\r
+         ReportString = "Joystick Left\r\n";\r
+       else if (JoyStatus_LCL & JOY_RIGHT)\r
+         ReportString = "Joystick Right\r\n";\r
+       else if (JoyStatus_LCL & JOY_PRESS)\r
+         ReportString = "Joystick Pressed\r\n";\r
+       else\r
+         ActionSent = false;\r
+\r
+       if ((ReportString != NULL) && (ActionSent == false))\r
+       {\r
+               ActionSent = true;\r
+\r
+               CDC_Device_SendString(&VirtualSerial1_CDC_Interface, ReportString);\r
+       }\r
+}\r
+\r
+/** Event handler for the library USB Connection event. */\r
+void EVENT_USB_Device_Connect(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
+}\r
+\r
+/** Event handler for the library USB Disconnection event. */\r
+void EVENT_USB_Device_Disconnect(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+}\r
+\r
+/** Event handler for the library USB Configuration Changed event. */\r
+void EVENT_USB_Device_ConfigurationChanged(void)\r
+{\r
+       bool ConfigSuccess = true;\r
+\r
+       ConfigSuccess &= CDC_Device_ConfigureEndpoints(&VirtualSerial1_CDC_Interface);\r
+       ConfigSuccess &= CDC_Device_ConfigureEndpoints(&VirtualSerial2_CDC_Interface);\r
+\r
+       LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR);\r
+\r
+       rdline_newline(&xbeeboard.rdl, xbeeboard.prompt);\r
+}\r
+\r
+/** Event handler for the library USB Control Request reception event. */\r
+void EVENT_USB_Device_ControlRequest(void)\r
+{\r
+       CDC_Device_ProcessControlRequest(&VirtualSerial1_CDC_Interface);\r
+       CDC_Device_ProcessControlRequest(&VirtualSerial2_CDC_Interface);\r
+}\r
+\r
diff --git a/DualVirtualSerial.h b/DualVirtualSerial.h
new file mode 100644 (file)
index 0000000..a1a3d85
--- /dev/null
@@ -0,0 +1,79 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2011.\r
+\r
+  dean [at] fourwalledcubicle [dot] com\r
+           www.lufa-lib.org\r
+*/\r
+\r
+/*\r
+  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, distribute, and sell this\r
+  software and its documentation for any purpose is hereby granted\r
+  without fee, provided that the above copyright notice appear in\r
+  all copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for DualVirtualSerial.c.\r
+ */\r
+\r
+#ifndef _DUAL_VIRTUALSERIAL_H_\r
+#define _DUAL_VIRTUALSERIAL_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/wdt.h>\r
+               #include <avr/power.h>\r
+               #include <avr/interrupt.h>\r
+               #include <string.h>\r
+\r
+               #include "Descriptors.h"\r
+\r
+               #include <LUFA/Version.h>\r
+               #include <LUFA/Drivers/Board/LEDs.h>\r
+               #include <LUFA/Drivers/Board/Joystick.h>\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+\r
+       /* Macros: */\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+               #define LEDMASK_USB_NOTREADY      LEDS_LED1\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+               #define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+               #define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)\r
+\r
+               /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+               #define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)\r
+\r
+       /* Function Prototypes: */\r
+               void SetupHardware(void);\r
+               void CheckJoystickMovement(void);\r
+\r
+               void EVENT_USB_Device_Connect(void);\r
+               void EVENT_USB_Device_Disconnect(void);\r
+               void EVENT_USB_Device_ConfigurationChanged(void);\r
+               void EVENT_USB_Device_ControlRequest(void);\r
+\r
+extern USB_ClassInfo_CDC_Device_t VirtualSerial1_CDC_Interface;\r
+extern USB_ClassInfo_CDC_Device_t VirtualSerial2_CDC_Interface;\r
+\r
+#endif\r
+\r
diff --git a/LUFA DualVirtualSerial.inf b/LUFA DualVirtualSerial.inf
new file mode 100644 (file)
index 0000000..9576df5
--- /dev/null
@@ -0,0 +1,106 @@
+;************************************************************\r
+; Windows USB CDC ACM Setup File\r
+; Copyright (c) 2000 Microsoft Corporation\r
+\r
+\r
+[Version]\r
+Signature="$Windows NT$"\r
+Class=Ports\r
+ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318}\r
+Provider=%MFGNAME%\r
+LayoutFile=layout.inf\r
+CatalogFile=%MFGFILENAME%.cat\r
+DriverVer=11/15/2007,5.1.2600.0\r
+\r
+[Manufacturer]\r
+%MFGNAME%=DeviceList, NTamd64\r
+\r
+[DestinationDirs]\r
+DefaultDestDir=12\r
+\r
+\r
+;------------------------------------------------------------------------------\r
+;  Windows 2000/XP/Vista-32bit Sections\r
+;------------------------------------------------------------------------------\r
+\r
+[DriverInstall.nt]\r
+include=mdmcpq.inf\r
+CopyFiles=DriverCopyFiles.nt\r
+AddReg=DriverInstall.nt.AddReg\r
+\r
+[DriverCopyFiles.nt]\r
+usbser.sys,,,0x20\r
+\r
+[DriverInstall.nt.AddReg]\r
+HKR,,DevLoader,,*ntkern\r
+HKR,,NTMPDriver,,%DRIVERFILENAME%.sys\r
+HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"\r
+\r
+[DriverInstall.nt.Services]\r
+AddService=usbser, 0x00000002, DriverService.nt\r
+\r
+[DriverService.nt]\r
+DisplayName=%SERVICE%\r
+ServiceType=1\r
+StartType=3\r
+ErrorControl=1\r
+ServiceBinary=%12%\%DRIVERFILENAME%.sys\r
+\r
+;------------------------------------------------------------------------------\r
+;  Vista-64bit Sections\r
+;------------------------------------------------------------------------------\r
+\r
+[DriverInstall.NTamd64]\r
+include=mdmcpq.inf\r
+CopyFiles=DriverCopyFiles.NTamd64\r
+AddReg=DriverInstall.NTamd64.AddReg\r
+\r
+[DriverCopyFiles.NTamd64]\r
+%DRIVERFILENAME%.sys,,,0x20\r
+\r
+[DriverInstall.NTamd64.AddReg]\r
+HKR,,DevLoader,,*ntkern\r
+HKR,,NTMPDriver,,%DRIVERFILENAME%.sys\r
+HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"\r
+\r
+[DriverInstall.NTamd64.Services]\r
+AddService=usbser, 0x00000002, DriverService.NTamd64\r
+\r
+[DriverService.NTamd64]\r
+DisplayName=%SERVICE%\r
+ServiceType=1\r
+StartType=3\r
+ErrorControl=1\r
+ServiceBinary=%12%\%DRIVERFILENAME%.sys\r
+\r
+\r
+;------------------------------------------------------------------------------\r
+;  Vendor and Product ID Definitions\r
+;------------------------------------------------------------------------------\r
+; When developing your USB device, the VID and PID used in the PC side\r
+; application program and the firmware on the microcontroller must match.\r
+; Modify the below line to use your VID and PID.  Use the format as shown below.\r
+; Note: One INF file can be used for multiple devices with different VID and PIDs.\r
+; For each supported device, append ",USB\VID_xxxx&PID_yyyy" to the end of the line.\r
+;------------------------------------------------------------------------------\r
+[SourceDisksFiles]\r
+[SourceDisksNames]\r
+[DeviceList]\r
+%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204E&MI_00, USB\VID_03EB&PID_204E&MI_02\r
+\r
+[DeviceList.NTamd64]\r
+%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204E&MI_00, USB\VID_03EB&PID_204E&MI_02\r
+\r
+\r
+;------------------------------------------------------------------------------\r
+;  String Definitions\r
+;------------------------------------------------------------------------------\r
+;Modify these strings to customize your device\r
+;------------------------------------------------------------------------------\r
+[Strings]\r
+MFGFILENAME="CDC_vista"\r
+DRIVERFILENAME ="usbser"\r
+MFGNAME="http://www.lufa-lib.org"\r
+INSTDISK="LUFA Dual CDC Driver Installer"\r
+DESCRIPTION="Communications Port"\r
+SERVICE="USB RS-232 Emulation Driver"
\ No newline at end of file
diff --git a/autoconf.h b/autoconf.h
new file mode 100644 (file)
index 0000000..6bec9b5
--- /dev/null
@@ -0,0 +1,256 @@
+/*
+ * Automatically generated by make menuconfig: don't edit
+ */
+#define AUTOCONF_INCLUDED
+
+/*
+ * Hardware
+ */
+#undef  CONFIG_MCU_AT90S2313
+#undef  CONFIG_MCU_AT90S2323
+#undef  CONFIG_MCU_AT90S3333
+#undef  CONFIG_MCU_AT90S2343
+#undef  CONFIG_MCU_ATTINY22
+#undef  CONFIG_MCU_ATTINY26
+#undef  CONFIG_MCU_AT90S4414
+#undef  CONFIG_MCU_AT90S4433
+#undef  CONFIG_MCU_AT90S4434
+#undef  CONFIG_MCU_AT90S8515
+#undef  CONFIG_MCU_AT90S8534
+#undef  CONFIG_MCU_AT90S8535
+#undef  CONFIG_MCU_AT86RF401
+#undef  CONFIG_MCU_ATMEGA103
+#undef  CONFIG_MCU_ATMEGA603
+#undef  CONFIG_MCU_AT43USB320
+#undef  CONFIG_MCU_AT43USB355
+#undef  CONFIG_MCU_AT76C711
+#undef  CONFIG_MCU_ATMEGA8
+#undef  CONFIG_MCU_ATMEGA48
+#undef  CONFIG_MCU_ATMEGA88
+#undef  CONFIG_MCU_ATMEGA8515
+#undef  CONFIG_MCU_ATMEGA8535
+#undef  CONFIG_MCU_ATTINY13
+#undef  CONFIG_MCU_ATTINY2313
+#undef  CONFIG_MCU_ATMEGA16
+#undef  CONFIG_MCU_ATMEGA161
+#undef  CONFIG_MCU_ATMEGA162
+#undef  CONFIG_MCU_ATMEGA163
+#undef  CONFIG_MCU_ATMEGA165
+#undef  CONFIG_MCU_ATMEGA168
+#undef  CONFIG_MCU_ATMEGA169
+#undef  CONFIG_MCU_ATMEGA32
+#undef  CONFIG_MCU_ATMEGA323
+#undef  CONFIG_MCU_ATMEGA325
+#undef  CONFIG_MCU_ATMEGA3250
+#undef  CONFIG_MCU_ATMEGA64
+#undef  CONFIG_MCU_ATMEGA645
+#undef  CONFIG_MCU_ATMEGA6450
+#undef  CONFIG_MCU_ATMEGA128
+#undef  CONFIG_MCU_ATMEGA1281
+#undef  CONFIG_MCU_AT90CAN128
+#undef  CONFIG_MCU_AT94K
+#undef  CONFIG_MCU_AT90S1200
+#undef  CONFIG_MCU_ATMEGA2560
+#undef  CONFIG_MCU_ATMEGA256
+#define CONFIG_MCU_ATMEGAUSB1287
+#define CONFIG_QUARTZ (16000000)
+
+/*
+ * Generation options
+ */
+#undef  CONFIG_OPTM_0
+#undef  CONFIG_OPTM_1
+#undef  CONFIG_OPTM_2
+#undef  CONFIG_OPTM_3
+#define CONFIG_OPTM_S 1
+#define CONFIG_MATH_LIB 1
+#undef  CONFIG_FDEVOPEN_COMPAT
+#undef  CONFIG_NO_PRINTF
+#undef  CONFIG_MINIMAL_PRINTF
+#undef  CONFIG_STANDARD_PRINTF
+#define CONFIG_ADVANCED_PRINTF 1
+#undef  CONFIG_FORMAT_IHEX
+#undef  CONFIG_FORMAT_SREC
+#define CONFIG_FORMAT_BINARY 1
+
+/*
+ * Base modules
+ */
+#define CONFIG_MODULE_CIRBUF 1
+#undef  CONFIG_MODULE_CIRBUF_LARGE
+#undef  CONFIG_MODULE_FIXED_POINT
+#undef  CONFIG_MODULE_VECT2
+#undef  CONFIG_MODULE_GEOMETRY
+#undef  CONFIG_MODULE_HOSTSIM
+#define CONFIG_MODULE_SCHEDULER 1
+#define CONFIG_MODULE_SCHEDULER_STATS 1
+#define CONFIG_MODULE_SCHEDULER_CREATE_CONFIG 1
+#undef  CONFIG_MODULE_SCHEDULER_USE_TIMERS
+#undef  CONFIG_MODULE_SCHEDULER_TIMER0
+#define CONFIG_MODULE_SCHEDULER_MANUAL 1
+#define CONFIG_MODULE_TIME 1
+#define CONFIG_MODULE_TIME_CREATE_CONFIG 1
+#undef  CONFIG_MODULE_TIME_EXT
+#undef  CONFIG_MODULE_TIME_EXT_CREATE_CONFIG
+
+/*
+ * Communication modules
+ */
+#define CONFIG_MODULE_UART 1
+#undef  CONFIG_MODULE_UART_9BITS
+#define CONFIG_MODULE_UART_CREATE_CONFIG 1
+#define CONFIG_MODULE_SPI 1
+#define CONFIG_MODULE_SPI_CREATE_CONFIG 1
+#define CONFIG_MODULE_I2C 1
+#define CONFIG_MODULE_I2C_MASTER 1
+#undef  CONFIG_MODULE_I2C_MULTIMASTER
+#define CONFIG_MODULE_I2C_CREATE_CONFIG 1
+#undef  CONFIG_MODULE_MF2_CLIENT
+#undef  CONFIG_MODULE_MF2_CLIENT_USE_SCHEDULER
+#undef  CONFIG_MODULE_MF2_CLIENT_CREATE_CONFIG
+#undef  CONFIG_MODULE_MF2_SERVER
+#undef  CONFIG_MODULE_MF2_SERVER_CREATE_CONFIG
+
+/*
+ * Hardware modules
+ */
+#define CONFIG_MODULE_TIMER 1
+#undef  CONFIG_MODULE_TIMER_CREATE_CONFIG
+#undef  CONFIG_MODULE_TIMER_DYNAMIC
+#undef  CONFIG_MODULE_PWM
+#undef  CONFIG_MODULE_PWM_CREATE_CONFIG
+#undef  CONFIG_MODULE_PWM_NG
+#undef  CONFIG_MODULE_ADC
+#undef  CONFIG_MODULE_ADC_CREATE_CONFIG
+
+/*
+ * IHM modules
+ */
+#undef  CONFIG_MODULE_MENU
+#define CONFIG_MODULE_VT100 1
+#define CONFIG_MODULE_RDLINE 1
+#define CONFIG_MODULE_RDLINE_CREATE_CONFIG 1
+#define CONFIG_MODULE_RDLINE_KILL_BUF 1
+#define CONFIG_MODULE_RDLINE_HISTORY 1
+#define CONFIG_MODULE_PARSE 1
+#undef  CONFIG_MODULE_PARSE_NO_FLOAT
+
+/*
+ * External devices modules
+ */
+#undef  CONFIG_MODULE_LCD
+#undef  CONFIG_MODULE_LCD_CREATE_CONFIG
+#undef  CONFIG_MODULE_MULTISERVO
+#undef  CONFIG_MODULE_MULTISERVO_CREATE_CONFIG
+#undef  CONFIG_MODULE_AX12
+#undef  CONFIG_MODULE_AX12_CREATE_CONFIG
+
+/*
+ * Brushless motor drivers (you should enable pwm modules to see all)
+ */
+#undef  CONFIG_MODULE_BRUSHLESS_3PHASE_DIGITAL_HALL
+#undef  CONFIG_MODULE_BRUSHLESS_3PHASE_DIGITAL_HALL_CREATE_CONFIG
+#undef  CONFIG_MODULE_BRUSHLESS_3PHASE_DIGITAL_HALL_DOUBLE
+#undef  CONFIG_MODULE_BRUSHLESS_3PHASE_DIGITAL_HALL_DOUBLE_CREATE_CONFIG
+
+/*
+ * Encoders (you need comm/spi for encoders_spi)
+ */
+#undef  CONFIG_MODULE_ENCODERS_MICROB
+#undef  CONFIG_MODULE_ENCODERS_MICROB_CREATE_CONFIG
+#undef  CONFIG_MODULE_ENCODERS_EIRBOT
+#undef  CONFIG_MODULE_ENCODERS_EIRBOT_CREATE_CONFIG
+#undef  CONFIG_MODULE_ENCODERS_SPI
+#undef  CONFIG_MODULE_ENCODERS_SPI_CREATE_CONFIG
+
+/*
+ * Robot specific modules (fixed point lib may be needed)
+ */
+#undef  CONFIG_MODULE_ROBOT_SYSTEM
+#undef  CONFIG_MODULE_ROBOT_SYSTEM_USE_F64
+#undef  CONFIG_MODULE_ROBOT_SYSTEM_MOT_AND_EXT
+#undef  CONFIG_MODULE_POSITION_MANAGER
+#undef  CONFIG_MODULE_COMPENSATE_CENTRIFUGAL_FORCE
+#undef  CONFIG_MODULE_TRAJECTORY_MANAGER
+#undef  CONFIG_MODULE_BLOCKING_DETECTION_MANAGER
+#undef  CONFIG_MODULE_OBSTACLE_AVOIDANCE
+#undef  CONFIG_MODULE_OBSTACLE_AVOIDANCE_CREATE_CONFIG
+
+/*
+ * Control system modules
+ */
+#undef  CONFIG_MODULE_CONTROL_SYSTEM_MANAGER
+#undef  CONFIG_MODULE_PID
+#undef  CONFIG_MODULE_PID_CREATE_CONFIG
+#undef  CONFIG_MODULE_RAMP
+#undef  CONFIG_MODULE_QUADRAMP
+#undef  CONFIG_MODULE_QUADRAMP_DERIVATE
+#undef  CONFIG_MODULE_BIQUAD
+
+/*
+ * Radio devices
+ */
+#undef  CONFIG_MODULE_CC2420
+#undef  CONFIG_MODULE_CC2420_CREATE_CONFIG
+
+/*
+ * Crypto modules
+ */
+#undef  CONFIG_MODULE_AES
+#undef  CONFIG_MODULE_AES_CTR
+#undef  CONFIG_MODULE_MD5
+#undef  CONFIG_MODULE_MD5_HMAC
+#undef  CONFIG_MODULE_RC4
+
+/*
+ * Encodings modules
+ */
+#undef  CONFIG_MODULE_BASE64
+#undef  CONFIG_MODULE_HAMMING
+
+/*
+ * Debug modules
+ */
+#define CONFIG_MODULE_DIAGNOSTIC 1
+#define CONFIG_MODULE_DIAGNOSTIC_CREATE_CONFIG 1
+#define CONFIG_MODULE_ERROR 1
+#define CONFIG_MODULE_ERROR_CREATE_CONFIG 1
+
+/*
+ * Programmer options
+ */
+#undef  CONFIG_AVRDUDE
+#define CONFIG_AVARICE 1
+
+/*
+ * Avrdude
+ */
+#undef  CONFIG_AVRDUDE_PROG_FUTURELEC
+#undef  CONFIG_AVRDUDE_PROG_ABCMINI
+#undef  CONFIG_AVRDUDE_PROG_PICOWEB
+#undef  CONFIG_AVRDUDE_PROG_SP12
+#undef  CONFIG_AVRDUDE_PROG_ALF
+#undef  CONFIG_AVRDUDE_PROG_BASCOM
+#undef  CONFIG_AVRDUDE_PROG_DT006
+#undef  CONFIG_AVRDUDE_PROG_PONY_STK200
+#define CONFIG_AVRDUDE_PROG_STK200 1
+#undef  CONFIG_AVRDUDE_PROG_PAVR
+#undef  CONFIG_AVRDUDE_PROG_BUTTERFLY
+#undef  CONFIG_AVRDUDE_PROG_AVR910
+#undef  CONFIG_AVRDUDE_PROG_STK500
+#undef  CONFIG_AVRDUDE_PROG_AVRISP
+#undef  CONFIG_AVRDUDE_PROG_BSD
+#undef  CONFIG_AVRDUDE_PROG_DAPA
+#undef  CONFIG_AVRDUDE_PROG_JTAG1
+#undef  CONFIG_AVRDUDE_PROG_AVR109
+#define CONFIG_AVRDUDE_PORT "/dev/parport0"
+#define CONFIG_AVRDUDE_BAUDRATE (19200)
+
+/*
+ * Avarice
+ */
+#define CONFIG_AVARICE_PORT "/dev/ttyUSB0"
+#define CONFIG_AVARICE_DEBUG_PORT (1234)
+#define CONFIG_AVARICE_PROG_MKI 1
+#undef  CONFIG_AVARICE_PROG_MKII
+#define CONFIG_AVRDUDE_CHECK_SIGNATURE 1
diff --git a/aversive.h b/aversive.h
new file mode 100644 (file)
index 0000000..22a98e8
--- /dev/null
@@ -0,0 +1,251 @@
+/*  
+ *  Copyright Droids Corporation, Microb Technology, Eirbot (2007)
+ * 
+ *  This program 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program 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 this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ *  Revision : $Id: aversive.h,v 1.1.2.6 2009-05-18 12:19:51 zer0 Exp $
+ *
+ */
+
+/**
+ * here are some cute little macros, and other stuff, microcontroller
+ * related ! 
+ */
+
+
+#ifndef _AVERSIVE_H_
+#define _AVERSIVE_H_
+
+#include <autoconf.h>
+
+#ifndef HOST_VERSION
+#include <avr/interrupt.h>
+#include <avr/io.h>
+#endif
+
+#include <aversive/types.h>
+#include <aversive/errno.h>
+#include <aversive/irq_lock.h>
+
+
+#ifndef __AVR_LIBC_VERSION__ /* version.h should be included by avr/io.h */
+#define __AVR_LIBC_VERSION__ 0UL 
+#endif
+
+#ifndef HOST_VERSION
+#if __AVR_LIBC_VERSION__ < 10403UL
+#include <avr/signal.h>
+#endif
+#endif
+
+//#define F_CPU ((unsigned long)CONFIG_QUARTZ)
+
+#define Hz  1l
+#define KHz 1000l
+#define MHz 1000000l
+
+
+
+/*
+ *  a few "mathematical" macros : maximums and minimums
+ */
+
+/**
+ *  signed maxmimum : both signs are tested
+ */
+#define S_MAX(to_saturate, value_max)    \
+do {                                     \
+   if (to_saturate > value_max)          \
+     to_saturate = value_max;            \
+   else if (to_saturate < -value_max)    \
+     to_saturate = -value_max;           \
+ } while(0)
+
+/**
+ *  unsigned maximum : result >0 is forced
+ */
+#define U_MAX(to_saturate, value_max)    \
+do {                                     \
+   if (to_saturate > value_max)          \
+     to_saturate = value_max;            \
+   else if (to_saturate < 0)             \
+     to_saturate = 0;                    \
+ } while(0)
+
+/**
+ *   simple maximum
+ */
+
+
+
+/** absolute
+ *  while the abs() function in the libc works only with int type
+ *  this macro works with every numerical type including floats
+ */
+#define ABS(val) ({                                    \
+                       __typeof(val) __val = (val);    \
+                       if (__val < 0)                  \
+                               __val = - __val;        \
+                       __val;                          \
+               })
+
+/* 
+ * Extract bytes and u16 from larger integer
+ */
+
+#if __BYTE_ORDER != __LITTLE_ENDIAN && __BYTE_ORDER != __BIG_ENDIAN
+# error        "Endianness not defined"
+#endif
+
+struct extract32 {
+       union {
+               struct {
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+                       uint8_t u8_0;
+                       uint8_t u8_1;
+                       uint8_t u8_2;
+                       uint8_t u8_3;
+#elif __BYTE_ORDER == __BIG_ENDIAN
+                       uint8_t u8_3;
+                       uint8_t u8_2;
+                       uint8_t u8_1;
+                       uint8_t u8_0;
+#endif
+               } __attribute__ ((packed)) u8;
+               struct {
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+                       uint16_t u16_0;
+                       uint16_t u16_1;
+#elif __BYTE_ORDER == __BIG_ENDIAN
+                       uint16_t u16_1;
+                       uint16_t u16_0;
+#endif
+               } __attribute__ ((packed)) u16;
+               struct {
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+                       uint8_t u8_0;
+                       uint16_t u16_mid;
+                       uint8_t u8_3;
+#elif __BYTE_ORDER == __BIG_ENDIAN
+                       uint8_t u8_3;
+                       uint16_t u16_mid;
+                       uint8_t u8_0;
+#endif
+               } __attribute__ ((packed)) u16_b;
+               uint32_t u32;
+       } __attribute__ ((packed)) u;
+} __attribute__ ((packed));
+
+#define extr32_08_0(i) ({ struct extract32 __x; __x.u.u32 = i; __x.u.u8.u8_0; })
+#define extr32_08_1(i) ({ struct extract32 __x; __x.u.u32 = i; __x.u.u8.u8_1; })
+#define extr32_08_2(i) ({ struct extract32 __x; __x.u.u32 = i; __x.u.u8.u8_2; })
+#define extr32_08_3(i) ({ struct extract32 __x; __x.u.u32 = i; __x.u.u8.u8_3; })
+
+#define extr32_16_0(i) ({ struct extract32 __x; __x.u.u32 = i; __x.u.u16.u16_0; })
+#define extr32_16_1(i) ({ struct extract32 __x; __x.u.u32 = i; __x.u.u16.u16_1; })
+#define extr32_16_mid(i) ({ struct extract32 __x; __x.u.u32 = i; __x.u.u16_b.u16_mid; })
+
+
+struct extract16 {
+       union {
+               struct {
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+                       uint8_t u8_0;
+                       uint8_t u8_1;
+#elif __BYTE_ORDER == __BIG_ENDIAN
+                       uint8_t u8_1;
+                       uint8_t u8_0;
+#endif
+               } __attribute__ ((packed)) u8;
+               uint16_t u16;
+       } __attribute__ ((packed)) u;
+} __attribute__ ((packed));
+
+#define extr16_08_0(i) ({ struct extract16 __x; __x.u.u16 = i; __x.u.u8.u8_0; })
+#define extr16_08_1(i) ({ struct extract16 __x; __x.u.u16 = i; __x.u.u8.u8_1; })
+
+
+
+/* a few asm utilities */
+
+#ifndef HOST_VERSION
+#ifndef nop
+#define nop() __asm__ __volatile__ ("NOP\n") /** nop instruction, 1 CPU cycle consumed */
+#endif
+#ifndef nothing
+#define nothing() __asm__ __volatile__ (" \n")  /** nothing */
+#endif
+#ifndef cli
+#define cli() __asm__ __volatile__ ("CLI\n") /** disable interrupts */
+#endif
+#ifndef sei
+#define sei() __asm__ __volatile__ ("SEI\n") /** enable interrupts */
+#endif
+/** simple software reset, but doesn't initialize the registers */
+#ifndef reset
+#define reset()                      \
+do {                                \
+  __asm__ __volatile__ ("ldi r30,0\n");  \
+  __asm__ __volatile__ ("ldi r31,0\n");  \
+  __asm__ __volatile__ ("ijmp\n");  \
+} while(0)
+#endif
+
+#else /* HOST_VERSION */
+#define nop() do {} while(0)
+#define nothing() do {} while(0)
+#define cli() do {} while(0)
+#define sei() do {} while(0)
+#define reset() exit(1)
+#endif /* HOST_VERSION */
+
+/**
+ *   little bit toggeling macro 
+ *  
+ *  change pin state
+ *  usage :
+ *  BIT_TOGGLE(PORTB,2) to make the pin 2 of PORTB toggle
+ */
+#define BIT_TOGGLE(port,bit) do {\
+      if(bit_is_set(PIN(port),bit)) \
+       cbi(port,bit); \
+      else \
+       sbi(port,bit); \
+      } while(0)
+
+
+/** booleans */
+
+
+/** DDR and PINS from port adress */
+#define DDR(port) (*(&(port) -1))
+#define PIN(port) (*(&(port) -2))
+
+/** open collector simulation macros */
+#define OPEN_CO_INIT(port, bit) sbi(port,bit)
+#define OPEN_CO_HIGH(port, bit) cbi(DDR(port),bit)
+#define OPEN_CO_LOW(port, bit)  cbi(DDR(port),bit)
+
+/** deprecated macros in libc, but they're almost used, so we implement them again ;) */
+#ifndef cbi
+#define cbi(sfr, bit) ( sfr &= ~ _BV(bit))
+#endif
+#ifndef sbi
+#define sbi(sfr, bit) ( sfr |= _BV(bit))
+#endif
+
+
+#endif /* ifndef _AVERSIVE_H_ */
+
diff --git a/aversive/eeprom.h b/aversive/eeprom.h
new file mode 100644 (file)
index 0000000..0b165c2
--- /dev/null
@@ -0,0 +1,41 @@
+/*  
+ *  Copyright Droids Corporation, Microb Technology, Eirbot (2005)
+ * 
+ *  This program 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program 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 this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ *  Revision : $Id: eeprom.h,v 1.1.2.4 2007-11-21 21:54:38 zer0 Exp $
+ *
+ */
+
+/**
+ * This file is used for compatibility between host and avr : with
+ * this we can emulate eeprom on a host.
+ */
+
+#ifndef _AVERSIVE_EEPROM_H_
+#define _AVERSIVE_EEPROM_H_
+
+#ifndef HOST_VERSION
+
+#include <avr/eeprom.h>
+
+#else
+
+/* XXX */
+
+#endif /* HOST_VERSION */
+#endif /* _AVERSIVE_EEPROM_H_ */
+
+
diff --git a/aversive/endian.h b/aversive/endian.h
new file mode 100644 (file)
index 0000000..5e33a19
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ *  Copyright Droids Corporation (2011)
+ *
+ *  This program 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program 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 this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ *  Revision : $Id: md5c.c,v 1.3.4.1 2006-11-26 21:06:02 zer0 Exp $
+ *
+ */
+
+#ifndef _AVERSIVE_ENDIAN_H_
+#define _AVERSIVE_ENDIAN_H_
+
+static inline uint16_t bswap16(uint16_t x)
+{
+       return (uint16_t)(((x & 0x00ffU) << 8) |
+                         ((x & 0xff00U) >> 8));
+}
+
+static inline uint32_t bswap32(uint32_t x)
+{
+       return  ((x & 0x000000ffUL) << 24) |
+               ((x & 0x0000ff00UL) << 8) |
+               ((x & 0x00ff0000UL) >> 8) |
+               ((x & 0xff000000UL) >> 24);
+}
+
+static inline uint64_t bswap64(uint64_t x)
+{
+       return  ((x & 0x00000000000000ffULL) << 56) |
+               ((x & 0x000000000000ff00ULL) << 40) |
+               ((x & 0x0000000000ff0000ULL) << 24) |
+               ((x & 0x00000000ff000000ULL) <<  8) |
+               ((x & 0x000000ff00000000ULL) >>  8) |
+               ((x & 0x0000ff0000000000ULL) >> 24) |
+               ((x & 0x00ff000000000000ULL) >> 40) |
+               ((x & 0xff00000000000000ULL) >> 56);
+}
+
+#if BYTE_ORDER == LITTLE_ENDIAN
+#define ntohs(x) bswap16(x)
+#define ntohl(x) bswap32(x)
+#define ntohll(x) bswap64(x)
+#else
+#define ntohs(x) (x)
+#define ntohl(x) (x)
+#define ntohll(x) (x)
+#endif
+
+#define htons ntohs
+#define htonl ntohl
+#define htonll ntohll
+
+#endif
diff --git a/aversive/errno.h b/aversive/errno.h
new file mode 100644 (file)
index 0000000..54acf84
--- /dev/null
@@ -0,0 +1,74 @@
+/*  
+ *  Copyright Droids Corporation, Microb Technology, Eirbot (2005)
+ * 
+ *  This program 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program 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 this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ *  Revision : $Id: errno.h,v 1.1.2.2 2009-01-23 23:05:39 zer0 Exp $
+ *
+ */
+
+/* This file contains general errors that can be returned from functions 
+ * We have to be carreful and try to return these error as often as possible
+ * isntead of a function-specific value 
+ */
+
+#ifndef _AVERSIVE_ERRNO_H_
+#define _AVERSIVE_ERRNO_H_
+
+/** No error */
+#define ESUCCESS 0
+
+#ifndef HOST_VERSION
+
+/* from avr-libc, does not define a lots of errors */
+#include <errno.h>
+
+/** Operation not permitted */
+#define EPERM    1
+/** No such file or directory */
+#define ENOENT   2
+/** I/O error */
+#define EIO      5
+/** No such device or address */
+#define ENXIO    6
+/** Argument list too long */
+#define E2BIG    7
+/** Try again */
+#define EAGAIN   11
+/** Out of memory */
+#define ENOMEM   12
+/** Bad address */
+#define EFAULT   14
+/** Device or resource busy */
+#define EBUSY    16
+/** Invalid argument */
+#define EINVAL   22
+/** Domain error */
+/* #define EDOM       33 */ /* in libc */
+/** Range error */
+/* #define ERANGE     34 */ /* in libc */
+/** Not supported */
+#define ENOTSUP  126 /* the correct number is 128 */
+/** Unkwow error */
+#define EUNKNOW  127
+
+/* must not be > 127 because it can be stored on an int8_t */
+
+#else /* HOST_VERSION */
+#include <sys/errno.h>
+
+#endif /* HOST_VERSION */
+
+#endif /* AVERSIVE_ERRNO_H_ */
diff --git a/aversive/error.h b/aversive/error.h
new file mode 100644 (file)
index 0000000..c34028a
--- /dev/null
@@ -0,0 +1,42 @@
+/*  
+ *  Copyright Droids Corporation, Microb Technology, Eirbot (2005)
+ * 
+ *  This program 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program 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 this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ *  Revision : $Id: error.h,v 1.1.2.2 2007-06-01 09:37:22 zer0 Exp $
+ *
+ */
+
+#ifndef _AVERSIVE_ERROR_H_
+#define _AVERSIVE_ERROR_H_
+
+#include <autoconf.h>
+
+#ifdef CONFIG_MODULE_ERROR
+#include <error.h>
+#else
+
+#define EMERG(num, text...)  do {} while(0)
+
+#define ERROR(num, text...)  do {} while(0)
+
+#define WARNING(num, text...)  do {} while(0)
+
+#define NOTICE(num, text...)  do {} while(0)
+
+#define DEBUG(num, text...)  do {} while(0)
+
+#endif
+#endif
diff --git a/aversive/irq_lock.h b/aversive/irq_lock.h
new file mode 100644 (file)
index 0000000..055c247
--- /dev/null
@@ -0,0 +1,73 @@
+/*  
+ *  Copyright Droids Corporation, Microb Technology, Eirbot (2005)
+ * 
+ *  This program 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program 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 this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ *  Revision : $Id: irq_lock.h,v 1.1.2.1 2007-05-23 17:18:09 zer0 Exp $
+ *
+ */
+
+/** \file modules/base/utils/irq_lock_macros.h
+ *  \brief Interface of the utils module
+ *   
+ *   here are defined the three macros : 
+ *
+ *  IRQ_LOCK(flags);              this saves interrupt state
+ *  IRQ_UNLOCK(flags);            this restores interrupt state
+ *  
+ *  code example follows: 
+ *
+ *    uint8_t flags;
+ *    IRQ_LOCK(flags);
+ *      // code to be protected against interrupts ...
+ *    IRQ_UNLOCK(flags); // needs to be associated with an unlock
+ *  
+ */
+
+
+#ifndef _AVERSIVE_IRQ_LOCK_H_
+#define _AVERSIVE_IRQ_LOCK_H_
+
+#ifdef HOST_VERSION
+
+#ifdef CONFIG_MODULE_HOSTSIM
+#include <hostsim.h>
+
+/* we must use 'flags' to avoid a warning */
+#define IRQ_UNLOCK(flags) do { flags=0; /* hostsim_lock(); */ } while(0)
+#define IRQ_LOCK(flags) do { flags=0; /* hostsim_unlock(); */ } while(0)
+#define GLOBAL_IRQ_ARE_MASKED() hostsim_islocked()
+#else
+#define IRQ_UNLOCK(flags) do { flags=0; } while(0)
+#define IRQ_LOCK(flags) do { flags=0; } while(0)
+#define GLOBAL_IRQ_ARE_MASKED() (0)
+#endif /* CONFIG_MODULE_HOSTSIM */
+
+#else
+
+#define GLOBAL_IRQ_ARE_MASKED() (!(bit_is_set(SREG,7)))
+
+#define IRQ_LOCK(flags) do {         \
+  flags = SREG;                      \
+  cli();                             \
+  } while(0)
+
+#define IRQ_UNLOCK(flags) do {       \
+  SREG = flags;                      \
+  } while ( 0 )
+
+#endif /* ! HOST_VERSION */
+
+#endif /* _AVERSIVE_IRQ_LOCK_H_ */
diff --git a/aversive/list.h b/aversive/list.h
new file mode 100644 (file)
index 0000000..98c2e2f
--- /dev/null
@@ -0,0 +1,532 @@
+/*  
+ *  Copyright Droids Corporation, Microb Technology, Eirbot (2005)
+ * 
+ *  This program 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program 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 this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ *  Revision : $Id: list.h,v 1.1.2.4 2007-08-19 10:35:45 zer0 Exp $
+ *
+ */
+
+/** 
+ * This header file provides LISTs implemented in tables. Don't use
+ * list size > 127. 
+ *
+ * WARNING ---------------------
+ * This header file will probably be deprecated in a soon.
+ * future. Consider using the 'cirbuf' module (circular buffer) instead.
+ * Indeed, the full-macro implementation of this header file is not
+ * the most efficient in terms of code size.... :)
+ * WARNING ---------------------
+ * 
+ * 
+ * Header
+ * ------
+ * 
+ * struct list_hdr {
+ *   u08 size; < The size of the fifo 
+ *   u08 cur_size; < number of data in the fifo
+ *   u08 beg_indice; < indice of the first elt
+ *   u08 read_cursor; < read cursor 
+ * } __attribute__ ((packed));
+ * 
+ * 
+ * ---------------------------------------------
+ * I       I       I       I       I      
+ * I size  IcursizeI beg   I rcurs I    elements ...  
+ * I       I       I       I       I      
+ * ---------------------------------------------
+ * 
+ * <------------------------------->
+ *          list_hdr
+ * 
+ * 
+ * Data
+ * ----
+ * 
+ * Data are stored in a circular buffer, beginning is specified by
+ * beg_indice in header.
+ * 
+ * 
+ * Type
+ * ----
+ * 
+ * For example, the type of a list of u08 with 10 elements is :
+ * 
+ * struct list_u08_10 {
+ *   struct list_hdr hdr;
+ *   u08 elt[10];
+ * }
+ * 
+ * - With this example, an empty list is :
+ *   size = 10
+ *   cursize = 0
+ *   beg = X
+ *   curs = X
+ * 
+ * - A full list :
+ *   size = 10
+ *   cursize = 10
+ *   beg = X
+ *   curs = X
+ *  
+ * 
+ * Functions & Macros
+ * ------------------
+ * 
+ * ********** Define and init
+ * 
+ * LIST_TYPE(typename, elttype, size) -> define type :
+ * 
+ *     #define LIST_TYPE(typename, elttype, size)
+ *     typedef struct typename {
+ *         struct list_hdr hdr;
+ *         elttype elt[size];
+ *         } typename;
+ * 
+ * LIST_INIT(list, beginning) -> flushes the list, and set size and beginning
+ * 
+ * 
+ * ********** Control 
+ * 
+ * u08 LIST_FULL(list)
+ * u08 LIST_EMPTY(list)
+ * 
+ * u08 LIST_READ_GOTO(*elt, list, i) -> place the read cursor at position i (0 means
+ *                   the beginning of the list) and set the elt if
+ *                   pointer not NULL
+ * 
+ * u08 LIST_READ_LEFT(*elt, list, i) -> move the read cursor left by i 
+ * u08 LIST_READ_RIGHT(*elt, list, i) -> move the read cursor right by i 
+ * u08 LIST_READ_START(*elt, list) 
+ * u08 LIST_READ_END(*elt, list)
+ * 
+ * Examples :
+ * 
+ * size | cursize | beg | cursor | elt0 | elt1 | elt2 | elt3 | elt4 | elt5 |
+ *  6        3       2      3        X     X       A      B     C      X     
+ * 
+ * 
+ * we do LIST_READ_LEFT(NULL, x,x, 1) :
+ * 
+ * size | cursize | beg | cursor | elt0 | elt1 | elt2 | elt3 | elt4 | elt5 |
+ *  6        3       2      2        X     X       A      B     C      X     
+ * 
+ * 
+ * we do LIST_READ_LEFT(NULL, x,x, 1), but return 1 instead of 0 because we
+ * overwrapped :
+ * 
+ * size | cursize | beg | cursor | elt0 | elt1 | elt2 | elt3 | elt4 | elt5 |
+ *  6        3       4      4        X     X       A      B     C      X     
+ * 
+ * 
+ * we do LIST_READ_GOTO(NULL, x,x, 0) :
+ * 
+ * size | cursize | beg | cursor | elt0 | elt1 | elt2 | elt3 | elt4 | elt5 |
+ *  6        3       4      2        X     X       A      B     C      X     
+ * 
+ * 
+ * 
+ * ********** accesses modifying the list
+ * 
+ * u08 LIST_PUSH_START(elt, list)   -> add at the beginning (prepend)
+ * u08 LIST_PUSH_END(elt, list)     -> add at the end (append)
+ * u08 LIST_PULL_START(elt *, list) -> del at the beginning
+ * u08 LIST_PULL_END(elt *, list)   -> del at the end
+ * 
+ * u08 LIST_ARRAY_PUSH_START(*elt, list, n)   -> prepend n elts
+ *                                                     from elt pointer
+ * u08 LIST_ARRAY_PUSH_END(*elt, list, n)     -> append n elts
+ * u08 LIST_ARRAY_PULL_START(elt *, list, n)  -> del n elts from buffer
+ * u08 LIST_ARRAY_PULL_END(elt *, list, n)    -> del at the end
+ * 
+ * Examples :
+ * 
+ * size | cursize | beg | cursor | elt0 | elt1 | elt2 | elt3 | elt4 | elt5 |
+ *  6        4       2      3        X     X      B      C      D      E     
+ * 
+ * 
+ * we do  LIST_PUSH_START(A, l, u08) :
+ * 
+ * size | cursize | beg | cursor | elt0 | elt1 | elt2 | elt3 | elt4 | elt5 |
+ *  6        5       1      3        X     A      B      C      D      E
+ * 
+ * 
+ * we do  LIST_PUSH_END(F, l, u08) :
+ * 
+ * size | cursize | beg | cursor | elt0 | elt1 | elt2 | elt3 | elt4 | elt5 |
+ *  6        6       1      3       F      A      B      C      D      E
+ * 
+ * we do  LIST_PUSH_END(X, l, u08) -> return -1
+ * 
+ * 
+ * 
+ * ********** Accesses NOT modifying the list
+ * 
+ * u08 LIST_FIRST(elt *, list)      -> Return the first elt
+ * u08 LIST_LAST(elt *, list)       -> Return the last elt
+ * 
+ * u08 LIST_READ(elt *, list)       -> Return the elt pointed by
+ *                                           the read cursor
+ * 
+ * u08 LIST_ARRAY_READ(elt *, list, n)  -> reads n elts from read cursor
+ * 
+ * u08 LIST_READ_GET_PTR(list) -> return a pointer to the read
+ * cursor. Warning, perhaps you need to do LIST_ALIGN_XXXX() before
+ * 
+ * ********** loop functions
+ * 
+ * #define LIST_FOREACH(list, elt)
+ *    for( u08 ret = LIST_READ_START(elt, list) ;
+ *              ret == 0 ;             
+ *              ret = LIST_READ_RIGHT(*elt, list, 1) )
+ * 
+ * 
+ * ********** Alignement functions
+ * 
+ * these functions can by quite long to execute. If possible, try to
+ * avoid using them by choosing a good place for the beg_indice when
+ * calling init of list. If you need it, prefer using
+ * LIST_ALIGN_CONTINUOUS if possible.
+ * 
+ * u08 LIST_ALIGN_LEFT(list)  
+ * u08 LIST_ALIGN_RIGHT(list)
+ * u08 LIST_ALIGN_CONTINUOUS(list) -> just try to put data in a 
+ *                                countinuous memory region in 
+ *                                minimum operations.
+ * 
+ * Example :
+ * 
+ * size | cursize | beg | cursor | elt0 | elt1 | elt2 | elt3 | elt4 | elt5 |
+ *  6        4       3      4       D      X      X      A      B      C 
+ * 
+ * 
+ * we do  LIST_ALIGN_LEFT(list) :
+ * 
+ * size | cursize | beg | cursor | elt0 | elt1 | elt2 | elt3 | elt4 | elt5 |
+ *  6        4       0      1       A      B      C      D      X      X
+ * 
+ * we do  LIST_ALIGN_RIGHT(list) :
+ * 
+ * size | cursize | beg | cursor | elt0 | elt1 | elt2 | elt3 | elt4 | elt5 |
+ *  6        4       2      3       X      X      A      B      C      D
+ * 
+ * 
+ * With these functions, you can easily imagine a network stack,
+ * prepending headers to data, without copying the buffer multiple times.
+ * 
+ * Example :
+ * 
+ * LIST_INIT(mylist, 5)
+ * size | cursize | beg | cursor | elt0 | elt1 | elt2 | elt3 | elt4 | elt5 |
+ *  6        0       5      5       X      X      X      X      X      X
+ * 
+ * LIST_ARRAY_PUSH_START("DATA", mylist, u08, strlen("DATA"))
+ * size | cursize | beg | cursor | elt0 | elt1 | elt2 | elt3 | elt4 | elt5 |
+ *  6        4       2      5       X      X      D      A      T      A
+ * 
+ * LIST_PUSH_START('H', mylist, u08) (push header)
+ * size | cursize | beg | cursor | elt0 | elt1 | elt2 | elt3 | elt4 | elt5 |
+ *  6        5       1      5       X      H      D      A      T      A
+ * 
+ * LIST_PUSH_START('H', mylist, u08) (push another header)
+ * size | cursize | beg | cursor | elt0 | elt1 | elt2 | elt3 | elt4 | elt5 |
+ *  6        6       0      5       H      H      D      A      T      A
+ * 
+ */
+
+
+#ifndef _AVERSIVE_LIST_H_
+#define _AVERSIVE_LIST_H_
+
+#ifndef LIST_DEBUG
+#define LIST_DEBUG 0
+#endif
+
+#include <stdio.h>
+
+#define WOVERWRAPPED -1
+
+#ifdef HOST_VERSION
+#define CR "\n"
+#else
+#define CR "\r\n"
+#endif
+
+#include <aversive.h>
+
+/**
+ * This structure is the header of a list type.
+ */
+struct list_hdr {
+  uint8_t size; /**< The size of the list (number of elements) */
+  uint8_t cur_size; /**< number of data in the list */
+  uint8_t beg_indice; /**< indice of the first elt */
+  int8_t read_cursor; /**< read cursor */
+} __attribute__ ((packed));
+
+/**
+ * This is a generic kind of list, in which we suppose that elements
+ * are char 
+*/
+struct generic_list {
+       struct list_hdr hdr; 
+       char elt[0]; 
+} __attribute__ ((packed));
+
+
+/**
+ * Define a new list type
+ */
+#define LIST_TYPEDEF(typename, elttype, size) \
+typedef struct typename { \
+       struct list_hdr hdr; \
+       elttype elt[size]; \
+} typename;
+
+#define LIST_INIT(list, beginning) \
+do { \
+  list.hdr.size = sizeof(list.elt)/sizeof(list.elt[0]); \
+  list.hdr.cur_size = 0; \
+  list.hdr.beg_indice = beginning; \
+  list.hdr.read_cursor = beginning; \
+} while(0)
+
+
+/**
+ * Return 1 if the list is full
+ */
+#define LIST_FULL(list) (list.hdr.size == list.hdr.cur_size)
+
+/**
+ * Return 1 if the list is empty
+ */
+#define LIST_EMPTY(list) (list.hdr.cur_size == 0)
+
+/**
+ * return current size of the list (number of used elements)
+ */
+#define LIST_CURSIZE(list) (list.hdr.cur_size)
+
+/**
+ * return size of the list (used + free elements)
+ */
+#define LIST_SIZE(list) (list.hdr.size)
+
+/**
+ * return the number of free elts 
+ */
+#define LIST_FREESIZE(list) (list.hdr.size-list.hdr.cur_size)
+
+
+
+#define LIST_READ_START(list, elt_p) ({ \
+ uint8_t __ret=0; \
+ list.hdr.read_cursor = 0 ; \
+ *elt_p = list.elt[list.hdr.beg_indice] ;  \
+ if(LIST_DEBUG) \
+   printf("LIST_READ_START(%s, %s) -> ret %d"CR,#list, #elt_p, __ret); \
+ __ret; \
+}) 
+
+#define LIST_READ_END(list, elt_p) ({ \
+ uint8_t __ret=0; \
+ list.hdr.read_cursor = list.hdr.cur_size-1; \
+ *elt_p = list.elt[(list.hdr.beg_indice-1+list.hdr.cur_size) % list.hdr.size] ;  \
+ if(LIST_DEBUG) \
+   printf("LIST_READ_END(%s, %s) -> ret %d"CR,#list, #elt_p, __ret); \
+ __ret; \
+}) 
+
+
+#define LIST_READ_GOTO(list, elt_p, i) ({ \
+ uint8_t __ret=0; \
+ if( (i<0) || (i>=list.hdr.cur_size) ) \
+        __ret = EINVAL; \
+ else { \
+       list.hdr.read_cursor = i; \
+       *elt_p = list.elt[(list.hdr.beg_indice+i) % list.hdr.size] ;  \
+ } \
+ if(LIST_DEBUG) \
+   printf("LIST_READ_GOTO(%s, %s, %d) -> ret %d"CR,#list, #elt_p, i, __ret); \
+ __ret; \
+}) 
+
+#define LIST_READ_MOVE(list, elt_p, i)  ({\
+uint8_t __ret=0;  \
+ if (i<0) { \
+       if( (-i) > list.hdr.read_cursor ) \
+                __ret = WOVERWRAPPED ; \
+       list.hdr.read_cursor -= ((-i) % list.hdr.cur_size) ; \
+       if (list.hdr.read_cursor < 0)  \
+               list.hdr.read_cursor += list.hdr.cur_size ;  \
+ } \
+ else {  \
+        if( i >= list.hdr.cur_size - list.hdr.read_cursor )  \
+                __ret = WOVERWRAPPED ; \
+        list.hdr.read_cursor += (i % list.hdr.cur_size) ; \
+        if (list.hdr.read_cursor >= list.hdr.cur_size) \
+                list.hdr.read_cursor -= list.hdr.cur_size ; \
+ } \
+ if(LIST_DEBUG) \
+   printf("LIST_READ_MOVE(%s, %s, %d) -> ret %d"CR,#list, #elt_p, i, __ret); \
+ *elt_p = list.elt[(list.hdr.beg_indice+list.hdr.read_cursor) % list.hdr.size] ;  \
+ __ret;  \
+}) 
+
+#define LIST_READ(list, elt_p)  ({\
+ *elt_p = list.elt[(list.hdr.beg_indice+list.hdr.read_cursor) % list.hdr.size] ;  \
+ 0;  \
+}) 
+
+#define LIST_PUSH_START(list, e) ({ \
+ uint8_t __ret=0; \
+ if( LIST_FULL(list) ) \
+        __ret=EINVAL; \
+ else { \
+        list.hdr.beg_indice = (list.hdr.beg_indice-1+list.hdr.size) % list.hdr.size; \
+        list.elt [ list.hdr.beg_indice ] = e ; \
+        list.hdr.cur_size ++ ; \
+ } \
+if(LIST_DEBUG) \
+ printf("LIST_PUSH_START(%s, %s) -> ret %d"CR,#list, #e, __ret); \
+ __ret; \
+})
+
+#define LIST_PUSH_END(list, e) ({ \
+ uint8_t __ret=0; \
+ if( LIST_FULL(list) ) \
+        __ret=EINVAL; \
+ else { \
+        list.elt [ (list.hdr.beg_indice+list.hdr.cur_size) % list.hdr.size ] = e ; \
+        list.hdr.cur_size ++ ; \
+ } \
+if(LIST_DEBUG) \
+ printf("LIST_PUSH_END(%s, %s) -> ret %d"CR,#list, #e, __ret); \
+ __ret; \
+})
+
+#define LIST_PULL_START(list, elt_p) ({ \
+ uint8_t __ret=0; \
+ if( LIST_EMPTY(list) ) \
+        __ret=EINVAL; \
+ else { \
+        *elt_p = list.elt [ list.hdr.beg_indice ] ; \
+        list.hdr.beg_indice = (list.hdr.beg_indice+1) % list.hdr.size; \
+        list.hdr.cur_size -- ; \
+ } \
+if(LIST_DEBUG) \
+ printf("LIST_PULL_START(%s, %s) -> ret %d"CR,#list, #elt_p, __ret); \
+ __ret; \
+})
+
+#define LIST_PULL_END(list, elt_p) ({ \
+ uint8_t __ret=0; \
+ if( LIST_EMPTY(list) ) \
+        __ret=EINVAL; \
+ else { \
+        *elt_p = list.elt [ (list.hdr.beg_indice-1+list.hdr.cur_size) % list.hdr.size ] ; \
+        list.hdr.cur_size -- ; \
+ } \
+if(LIST_DEBUG) \
+ printf("LIST_PULL_END(%s, %s) -> ret %d"CR,#list, #elt_p, __ret); \
+ __ret; \
+})
+
+/* start by the last elt */
+#define LIST_ARRAY_PUSH_START(list, array, nb) ({\
+ uint8_t __ret=0; \
+ int8_t __i; \
+ for(__i=nb-1 ; (__i>=0) && (!__ret) ; __i--) { \
+    __ret=LIST_PUSH_START(list, array[__i]); \
+ } \
+ if(LIST_DEBUG) \
+   printf("LIST_ARRAY_PUSH_START(%s, %s, %d) -> ret %d"CR,#list, #array, nb, __ret); \
+ __ret; \
+})
+
+#define LIST_ARRAY_PUSH_END(list, array, nb) ({\
+ uint8_t __ret=0, __i; \
+ for(__i=0 ; (__i<nb) && (!__ret) ; __i++) { \
+    __ret=LIST_PUSH_END(list, array[__i]); \
+ } \
+ if(LIST_DEBUG) \
+   printf("LIST_ARRAY_PUSH_END(%s, %s, %d) -> ret %d"CR,#list, #array, nb, __ret); \
+ __ret; \
+})
+
+#define LIST_ARRAY_PULL_START(list, array, nb) ({\
+ uint8_t __ret=0, __i; \
+ for(__i=0 ; (__i<nb) && (!__ret) ; __i++) { \
+    __ret=LIST_PULL_START(list, (array+__i)); \
+ } \
+ if(LIST_DEBUG) \
+   printf("LIST_ARRAY_PULL_START(%s, %s, %d) -> ret %d"CR,#list, #array, nb, __ret); \
+ __ret; \
+})
+
+#define LIST_ARRAY_PULL_END(list, array, nb) ({\
+ uint8_t __ret=0; \
+ int8_t __i; \
+ for(__i=nb-1 ; (__i>=0) && (!__ret) ; __i--) { \
+    __ret=LIST_PULL_END(list, (array+__i)); \
+ } \
+ if(LIST_DEBUG) \
+   printf("LIST_ARRAY_PULL_END(%s, %s, %d) -> ret %d"CR,#list, #array, nb, __ret); \
+ __ret; \
+})
+
+
+/* convert a list to an array, copy nb elts or less
+ * if list is too small, return number of copied elts */
+#define LIST_TO_ARRAY(list, array, nb) ({\
+ int8_t __i; \
+ for(__i=0 ; __i<nb && __i<list.hdr.cur_size ; __i++) { \
+    array[__i] = list.elt[(__i+list.hdr.beg_indice) % list.hdr.size]; \
+ } \
+ if(LIST_DEBUG) \
+   printf("LIST_TO_ARRAY(%s, %s, %d) -> ret %d"CR,#list, #array, nb, __i); \
+ __i; \
+})
+
+
+#define LIST_ALIGN_LEFT(list) ({ \
+uint8_t __ret=0, __i; \
+if(list.hdr.beg_indice != 0) { \
+       if(list.hdr.beg_indice+list.hdr.cur_size <= list.hdr.size) { \
+               for(__i=0 ; __i<list.hdr.cur_size ; __i++) { \
+                       list.elt[__i] = list.elt[__i+list.hdr.beg_indice]; \
+               } \
+       } \
+       else { \
+          uint8_t buffer_size=(list.hdr.size - list.hdr.beg_indice < (list.hdr.cur_size + list.hdr.beg_indice)%list.hdr.size) ? \
+                           (list.hdr.size - list.hdr.beg_indice) * sizeof(list.elt[0]) : \
+                             ((list.hdr.cur_size + list.hdr.beg_indice)%list.hdr.size) * sizeof(list.elt[0]); \
+                    { \
+                               uint8_t buffer[buffer_size]; \
+                               memcpy(buffer, list.elt, buffer_size); \
+                               for(__i=0 ; __i<(list.hdr.cur_size - buffer_size/sizeof(list.elt[0])) ; __i++) { \
+                                       list.elt[__i] = list.elt[__i+list.hdr.beg_indice]; \
+                               } \
+                               memcpy(&list.elt[list.hdr.cur_size - buffer_size/sizeof(list.elt[0])], buffer, buffer_size); \
+               } \
+       } \
+ list.hdr.beg_indice=0; \
+} \
+ if(LIST_DEBUG) \
+   printf("LIST_ALIGN_LEFT()"CR); \
+ __ret; \
+})
+
+#endif /* _AVERSIVE_LIST_H_ */
diff --git a/aversive/parts.h b/aversive/parts.h
new file mode 100644 (file)
index 0000000..f26cf9a
--- /dev/null
@@ -0,0 +1,301 @@
+/*  
+ *  Copyright Droids Corporation, Microb Technology, Eirbot (2009)
+ * 
+ *  This program 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program 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 this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ *  Revision :  $
+ *
+ */
+
+/* WARNING : this file is automatically generated by scripts.
+ * You should not edit it. If you find something wrong in it,
+ * write to zer0@droids-corp.org */
+
+#ifndef _AVERSIVE_PARTS_H_
+#define _AVERSIVE_PARTS_H_
+
+#if defined (__AVR_AT86RF401__)
+#include <aversive/parts/AT86RF401.h>
+#elif defined (__AVR_AT89S51__)
+#include <aversive/parts/AT89S51.h>
+#elif defined (__AVR_AT89S52__)
+#include <aversive/parts/AT89S52.h>
+#elif defined (__AVR_AT90CAN128__)
+#include <aversive/parts/AT90CAN128.h>
+#elif defined (__AVR_AT90CAN32__)
+#include <aversive/parts/AT90CAN32.h>
+#elif defined (__AVR_AT90CAN64__)
+#include <aversive/parts/AT90CAN64.h>
+#elif defined (__AVR_AT90PWM2__)
+#include <aversive/parts/AT90PWM2.h>
+#elif defined (__AVR_AT90PWM216__)
+#include <aversive/parts/AT90PWM216.h>
+#elif defined (__AVR_AT90PWM2B__)
+#include <aversive/parts/AT90PWM2B.h>
+#elif defined (__AVR_AT90PWM3__)
+#include <aversive/parts/AT90PWM3.h>
+#elif defined (__AVR_AT90PWM316__)
+#include <aversive/parts/AT90PWM316.h>
+#elif defined (__AVR_AT90PWM3B__)
+#include <aversive/parts/AT90PWM3B.h>
+#elif defined (__AVR_AT90S1200__)
+#include <aversive/parts/AT90S1200.h>
+#elif defined (__AVR_AT90S2313__)
+#include <aversive/parts/AT90S2313.h>
+#elif defined (__AVR_AT90S2323__)
+#include <aversive/parts/AT90S2323.h>
+#elif defined (__AVR_AT90S2343__)
+#include <aversive/parts/AT90S2343.h>
+#elif defined (__AVR_AT90S4414__)
+#include <aversive/parts/AT90S4414.h>
+#elif defined (__AVR_AT90S4433__)
+#include <aversive/parts/AT90S4433.h>
+#elif defined (__AVR_AT90S4434__)
+#include <aversive/parts/AT90S4434.h>
+#elif defined (__AVR_AT90S8515__)
+#include <aversive/parts/AT90S8515.h>
+#elif defined (__AVR_AT90S8515comp__)
+#include <aversive/parts/AT90S8515comp.h>
+#elif defined (__AVR_AT90S8535__)
+#include <aversive/parts/AT90S8535.h>
+#elif defined (__AVR_AT90S8535comp__)
+#include <aversive/parts/AT90S8535comp.h>
+#elif defined (__AVR_AT90USB1286__)
+#include <aversive/parts/AT90USB1286.h>
+#elif defined (__AVR_AT90USB1287__)
+#include <aversive/parts/AT90USB1287.h>
+#elif defined (__AVR_AT90USB162__)
+#include <aversive/parts/AT90USB162.h>
+#elif defined (__AVR_AT90USB646__)
+#include <aversive/parts/AT90USB646.h>
+#elif defined (__AVR_AT90USB647__)
+#include <aversive/parts/AT90USB647.h>
+#elif defined (__AVR_AT90USB82__)
+#include <aversive/parts/AT90USB82.h>
+#elif defined (__AVR_ATmega103__)
+#include <aversive/parts/ATmega103.h>
+#elif defined (__AVR_ATmega103comp__)
+#include <aversive/parts/ATmega103comp.h>
+#elif defined (__AVR_ATmega128__)
+#include <aversive/parts/ATmega128.h>
+#elif defined (__AVR_ATmega1280__)
+#include <aversive/parts/ATmega1280.h>
+#elif defined (__AVR_ATmega1281__)
+#include <aversive/parts/ATmega1281.h>
+#elif defined (__AVR_ATmega1284P__)
+#include <aversive/parts/ATmega1284P.h>
+#elif defined (__AVR_ATmega128A__)
+#include <aversive/parts/ATmega128A.h>
+#elif defined (__AVR_ATmega16__)
+#include <aversive/parts/ATmega16.h>
+#elif defined (__AVR_ATmega161__)
+#include <aversive/parts/ATmega161.h>
+#elif defined (__AVR_ATmega161comp__)
+#include <aversive/parts/ATmega161comp.h>
+#elif defined (__AVR_ATmega162__)
+#include <aversive/parts/ATmega162.h>
+#elif defined (__AVR_ATmega163__)
+#include <aversive/parts/ATmega163.h>
+#elif defined (__AVR_ATmega164P__)
+#include <aversive/parts/ATmega164P.h>
+#elif defined (__AVR_ATmega165__)
+#include <aversive/parts/ATmega165.h>
+#elif defined (__AVR_ATmega165P__)
+#include <aversive/parts/ATmega165P.h>
+#elif defined (__AVR_ATmega168__)
+#include <aversive/parts/ATmega168.h>
+#elif defined (__AVR_ATmega168P__)
+#include <aversive/parts/ATmega168P.h>
+#elif defined (__AVR_ATmega168PA__)
+#include <aversive/parts/ATmega168PA.h>
+#elif defined (__AVR_ATmega169__)
+#include <aversive/parts/ATmega169.h>
+#elif defined (__AVR_ATmega169P__)
+#include <aversive/parts/ATmega169P.h>
+#elif defined (__AVR_ATmega16A__)
+#include <aversive/parts/ATmega16A.h>
+#elif defined (__AVR_ATmega16HVA__)
+#include <aversive/parts/ATmega16HVA.h>
+#elif defined (__AVR_ATmega16U4__)
+#include <aversive/parts/ATmega16U4.h>
+#elif defined (__AVR_ATmega2560__)
+#include <aversive/parts/ATmega2560.h>
+#elif defined (__AVR_ATmega2561__)
+#include <aversive/parts/ATmega2561.h>
+#elif defined (__AVR_ATmega32__)
+#include <aversive/parts/ATmega32.h>
+#elif defined (__AVR_ATmega323__)
+#include <aversive/parts/ATmega323.h>
+#elif defined (__AVR_ATmega324P__)
+#include <aversive/parts/ATmega324P.h>
+#elif defined (__AVR_ATmega324PA__)
+#include <aversive/parts/ATmega324PA.h>
+#elif defined (__AVR_ATmega325__)
+#include <aversive/parts/ATmega325.h>
+#elif defined (__AVR_ATmega3250__)
+#include <aversive/parts/ATmega3250.h>
+#elif defined (__AVR_ATmega3250P__)
+#include <aversive/parts/ATmega3250P.h>
+#elif defined (__AVR_ATmega325P__)
+#include <aversive/parts/ATmega325P.h>
+#elif defined (__AVR_ATmega328P__)
+#include <aversive/parts/ATmega328P.h>
+#elif defined (__AVR_ATmega329__)
+#include <aversive/parts/ATmega329.h>
+#elif defined (__AVR_ATmega3290__)
+#include <aversive/parts/ATmega3290.h>
+#elif defined (__AVR_ATmega3290P__)
+#include <aversive/parts/ATmega3290P.h>
+#elif defined (__AVR_ATmega329P__)
+#include <aversive/parts/ATmega329P.h>
+#elif defined (__AVR_ATmega32A__)
+#include <aversive/parts/ATmega32A.h>
+#elif defined (__AVR_ATmega32C1__)
+#include <aversive/parts/ATmega32C1.h>
+#elif defined (__AVR_ATmega32HVB__)
+#include <aversive/parts/ATmega32HVB.h>
+#elif defined (__AVR_ATmega32M1__)
+#include <aversive/parts/ATmega32M1.h>
+#elif defined (__AVR_ATmega32U4__)
+#include <aversive/parts/ATmega32U4.h>
+#elif defined (__AVR_ATmega32U6__)
+#include <aversive/parts/ATmega32U6.h>
+#elif defined (__AVR_ATmega406__)
+#include <aversive/parts/ATmega406.h>
+#elif defined (__AVR_ATmega48__)
+#include <aversive/parts/ATmega48.h>
+#elif defined (__AVR_ATmega48P__)
+#include <aversive/parts/ATmega48P.h>
+#elif defined (__AVR_ATmega64__)
+#include <aversive/parts/ATmega64.h>
+#elif defined (__AVR_ATmega640__)
+#include <aversive/parts/ATmega640.h>
+#elif defined (__AVR_ATmega644__)
+#include <aversive/parts/ATmega644.h>
+#elif defined (__AVR_ATmega644P__)
+#include <aversive/parts/ATmega644P.h>
+#elif defined (__AVR_ATmega645__)
+#include <aversive/parts/ATmega645.h>
+#elif defined (__AVR_ATmega6450__)
+#include <aversive/parts/ATmega6450.h>
+#elif defined (__AVR_ATmega649__)
+#include <aversive/parts/ATmega649.h>
+#elif defined (__AVR_ATmega6490__)
+#include <aversive/parts/ATmega6490.h>
+#elif defined (__AVR_ATmega64A__)
+#include <aversive/parts/ATmega64A.h>
+#elif defined (__AVR_ATmega8__)
+#include <aversive/parts/ATmega8.h>
+#elif defined (__AVR_ATmega8515__)
+#include <aversive/parts/ATmega8515.h>
+#elif defined (__AVR_ATmega8535__)
+#include <aversive/parts/ATmega8535.h>
+#elif defined (__AVR_ATmega88__)
+#include <aversive/parts/ATmega88.h>
+#elif defined (__AVR_ATmega88P__)
+#include <aversive/parts/ATmega88P.h>
+#elif defined (__AVR_ATmega88PA__)
+#include <aversive/parts/ATmega88PA.h>
+#elif defined (__AVR_ATmega8A__)
+#include <aversive/parts/ATmega8A.h>
+#elif defined (__AVR_ATtiny10__)
+#include <aversive/parts/ATtiny10.h>
+#elif defined (__AVR_ATtiny11__)
+#include <aversive/parts/ATtiny11.h>
+#elif defined (__AVR_ATtiny12__)
+#include <aversive/parts/ATtiny12.h>
+#elif defined (__AVR_ATtiny13__)
+#include <aversive/parts/ATtiny13.h>
+#elif defined (__AVR_ATtiny13A__)
+#include <aversive/parts/ATtiny13A.h>
+#elif defined (__AVR_ATtiny15__)
+#include <aversive/parts/ATtiny15.h>
+#elif defined (__AVR_ATtiny167__)
+#include <aversive/parts/ATtiny167.h>
+#elif defined (__AVR_ATtiny22__)
+#include <aversive/parts/ATtiny22.h>
+#elif defined (__AVR_ATtiny2313__)
+#include <aversive/parts/ATtiny2313.h>
+#elif defined (__AVR_ATtiny24__)
+#include <aversive/parts/ATtiny24.h>
+#elif defined (__AVR_ATtiny25__)
+#include <aversive/parts/ATtiny25.h>
+#elif defined (__AVR_ATtiny26__)
+#include <aversive/parts/ATtiny26.h>
+#elif defined (__AVR_ATtiny261__)
+#include <aversive/parts/ATtiny261.h>
+#elif defined (__AVR_ATtiny28__)
+#include <aversive/parts/ATtiny28.h>
+#elif defined (__AVR_ATtiny43U__)
+#include <aversive/parts/ATtiny43U.h>
+#elif defined (__AVR_ATtiny44__)
+#include <aversive/parts/ATtiny44.h>
+#elif defined (__AVR_ATtiny45__)
+#include <aversive/parts/ATtiny45.h>
+#elif defined (__AVR_ATtiny461__)
+#include <aversive/parts/ATtiny461.h>
+#elif defined (__AVR_ATtiny48__)
+#include <aversive/parts/ATtiny48.h>
+#elif defined (__AVR_ATtiny84__)
+#include <aversive/parts/ATtiny84.h>
+#elif defined (__AVR_ATtiny85__)
+#include <aversive/parts/ATtiny85.h>
+#elif defined (__AVR_ATtiny861__)
+#include <aversive/parts/ATtiny861.h>
+#elif defined (__AVR_ATtiny88__)
+#include <aversive/parts/ATtiny88.h>
+#elif defined (__AVR_ATxmega128A1__)
+#include <aversive/parts/ATxmega128A1.h>
+#elif defined (__AVR_ATxmega128A3__)
+#include <aversive/parts/ATxmega128A3.h>
+#elif defined (__AVR_ATxmega256A3__)
+#include <aversive/parts/ATxmega256A3.h>
+#elif defined (__AVR_ATxmega256A3B__)
+#include <aversive/parts/ATxmega256A3B.h>
+#elif defined (__AVR_ATxmega64A1__)
+#include <aversive/parts/ATxmega64A1.h>
+#elif defined (__AVR_ATxmega64A3__)
+#include <aversive/parts/ATxmega64A3.h>
+#else
+#ifndef HOST_VERSION
+#error "This arch is not implemented yet"
+#endif
+#endif
+
+#if defined(TIMER0_OVF_vect) && !defined(SIG_OVERFLOW0)
+#define SIG_OVERFLOW0 TIMER0_OVF_vect
+#endif
+
+#if defined(TIMER1_OVF_vect) && !defined(SIG_OVERFLOW1)
+#define SIG_OVERFLOW1 TIMER1_OVF_vect
+#endif
+
+#if defined(TIMER2_OVF_vect) && !defined(SIG_OVERFLOW2)
+#define SIG_OVERFLOW2 TIMER2_OVF_vect
+#endif
+
+#if defined(TIMER3_OVF_vect) && !defined(SIG_OVERFLOW3)
+#define SIG_OVERFLOW3 TIMER3_OVF_vect
+#endif
+
+#if defined(TIMER4_OVF_vect) && !defined(SIG_OVERFLOW4)
+#define SIG_OVERFLOW4 TIMER4_OVF_vect
+#endif
+
+#if defined(TIMER5_OVF_vect) && !defined(SIG_OVERFLOW5)
+#define SIG_OVERFLOW5 TIMER5_OVF_vect
+#endif
+
+#endif /* _AVERSIVE_PARTS_H_ */
diff --git a/aversive/parts.h~ b/aversive/parts.h~
new file mode 100644 (file)
index 0000000..f26cf9a
--- /dev/null
@@ -0,0 +1,301 @@
+/*  
+ *  Copyright Droids Corporation, Microb Technology, Eirbot (2009)
+ * 
+ *  This program 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program 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 this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ *  Revision :  $
+ *
+ */
+
+/* WARNING : this file is automatically generated by scripts.
+ * You should not edit it. If you find something wrong in it,
+ * write to zer0@droids-corp.org */
+
+#ifndef _AVERSIVE_PARTS_H_
+#define _AVERSIVE_PARTS_H_
+
+#if defined (__AVR_AT86RF401__)
+#include <aversive/parts/AT86RF401.h>
+#elif defined (__AVR_AT89S51__)
+#include <aversive/parts/AT89S51.h>
+#elif defined (__AVR_AT89S52__)
+#include <aversive/parts/AT89S52.h>
+#elif defined (__AVR_AT90CAN128__)
+#include <aversive/parts/AT90CAN128.h>
+#elif defined (__AVR_AT90CAN32__)
+#include <aversive/parts/AT90CAN32.h>
+#elif defined (__AVR_AT90CAN64__)
+#include <aversive/parts/AT90CAN64.h>
+#elif defined (__AVR_AT90PWM2__)
+#include <aversive/parts/AT90PWM2.h>
+#elif defined (__AVR_AT90PWM216__)
+#include <aversive/parts/AT90PWM216.h>
+#elif defined (__AVR_AT90PWM2B__)
+#include <aversive/parts/AT90PWM2B.h>
+#elif defined (__AVR_AT90PWM3__)
+#include <aversive/parts/AT90PWM3.h>
+#elif defined (__AVR_AT90PWM316__)
+#include <aversive/parts/AT90PWM316.h>
+#elif defined (__AVR_AT90PWM3B__)
+#include <aversive/parts/AT90PWM3B.h>
+#elif defined (__AVR_AT90S1200__)
+#include <aversive/parts/AT90S1200.h>
+#elif defined (__AVR_AT90S2313__)
+#include <aversive/parts/AT90S2313.h>
+#elif defined (__AVR_AT90S2323__)
+#include <aversive/parts/AT90S2323.h>
+#elif defined (__AVR_AT90S2343__)
+#include <aversive/parts/AT90S2343.h>
+#elif defined (__AVR_AT90S4414__)
+#include <aversive/parts/AT90S4414.h>
+#elif defined (__AVR_AT90S4433__)
+#include <aversive/parts/AT90S4433.h>
+#elif defined (__AVR_AT90S4434__)
+#include <aversive/parts/AT90S4434.h>
+#elif defined (__AVR_AT90S8515__)
+#include <aversive/parts/AT90S8515.h>
+#elif defined (__AVR_AT90S8515comp__)
+#include <aversive/parts/AT90S8515comp.h>
+#elif defined (__AVR_AT90S8535__)
+#include <aversive/parts/AT90S8535.h>
+#elif defined (__AVR_AT90S8535comp__)
+#include <aversive/parts/AT90S8535comp.h>
+#elif defined (__AVR_AT90USB1286__)
+#include <aversive/parts/AT90USB1286.h>
+#elif defined (__AVR_AT90USB1287__)
+#include <aversive/parts/AT90USB1287.h>
+#elif defined (__AVR_AT90USB162__)
+#include <aversive/parts/AT90USB162.h>
+#elif defined (__AVR_AT90USB646__)
+#include <aversive/parts/AT90USB646.h>
+#elif defined (__AVR_AT90USB647__)
+#include <aversive/parts/AT90USB647.h>
+#elif defined (__AVR_AT90USB82__)
+#include <aversive/parts/AT90USB82.h>
+#elif defined (__AVR_ATmega103__)
+#include <aversive/parts/ATmega103.h>
+#elif defined (__AVR_ATmega103comp__)
+#include <aversive/parts/ATmega103comp.h>
+#elif defined (__AVR_ATmega128__)
+#include <aversive/parts/ATmega128.h>
+#elif defined (__AVR_ATmega1280__)
+#include <aversive/parts/ATmega1280.h>
+#elif defined (__AVR_ATmega1281__)
+#include <aversive/parts/ATmega1281.h>
+#elif defined (__AVR_ATmega1284P__)
+#include <aversive/parts/ATmega1284P.h>
+#elif defined (__AVR_ATmega128A__)
+#include <aversive/parts/ATmega128A.h>
+#elif defined (__AVR_ATmega16__)
+#include <aversive/parts/ATmega16.h>
+#elif defined (__AVR_ATmega161__)
+#include <aversive/parts/ATmega161.h>
+#elif defined (__AVR_ATmega161comp__)
+#include <aversive/parts/ATmega161comp.h>
+#elif defined (__AVR_ATmega162__)
+#include <aversive/parts/ATmega162.h>
+#elif defined (__AVR_ATmega163__)
+#include <aversive/parts/ATmega163.h>
+#elif defined (__AVR_ATmega164P__)
+#include <aversive/parts/ATmega164P.h>
+#elif defined (__AVR_ATmega165__)
+#include <aversive/parts/ATmega165.h>
+#elif defined (__AVR_ATmega165P__)
+#include <aversive/parts/ATmega165P.h>
+#elif defined (__AVR_ATmega168__)
+#include <aversive/parts/ATmega168.h>
+#elif defined (__AVR_ATmega168P__)
+#include <aversive/parts/ATmega168P.h>
+#elif defined (__AVR_ATmega168PA__)
+#include <aversive/parts/ATmega168PA.h>
+#elif defined (__AVR_ATmega169__)
+#include <aversive/parts/ATmega169.h>
+#elif defined (__AVR_ATmega169P__)
+#include <aversive/parts/ATmega169P.h>
+#elif defined (__AVR_ATmega16A__)
+#include <aversive/parts/ATmega16A.h>
+#elif defined (__AVR_ATmega16HVA__)
+#include <aversive/parts/ATmega16HVA.h>
+#elif defined (__AVR_ATmega16U4__)
+#include <aversive/parts/ATmega16U4.h>
+#elif defined (__AVR_ATmega2560__)
+#include <aversive/parts/ATmega2560.h>
+#elif defined (__AVR_ATmega2561__)
+#include <aversive/parts/ATmega2561.h>
+#elif defined (__AVR_ATmega32__)
+#include <aversive/parts/ATmega32.h>
+#elif defined (__AVR_ATmega323__)
+#include <aversive/parts/ATmega323.h>
+#elif defined (__AVR_ATmega324P__)
+#include <aversive/parts/ATmega324P.h>
+#elif defined (__AVR_ATmega324PA__)
+#include <aversive/parts/ATmega324PA.h>
+#elif defined (__AVR_ATmega325__)
+#include <aversive/parts/ATmega325.h>
+#elif defined (__AVR_ATmega3250__)
+#include <aversive/parts/ATmega3250.h>
+#elif defined (__AVR_ATmega3250P__)
+#include <aversive/parts/ATmega3250P.h>
+#elif defined (__AVR_ATmega325P__)
+#include <aversive/parts/ATmega325P.h>
+#elif defined (__AVR_ATmega328P__)
+#include <aversive/parts/ATmega328P.h>
+#elif defined (__AVR_ATmega329__)
+#include <aversive/parts/ATmega329.h>
+#elif defined (__AVR_ATmega3290__)
+#include <aversive/parts/ATmega3290.h>
+#elif defined (__AVR_ATmega3290P__)
+#include <aversive/parts/ATmega3290P.h>
+#elif defined (__AVR_ATmega329P__)
+#include <aversive/parts/ATmega329P.h>
+#elif defined (__AVR_ATmega32A__)
+#include <aversive/parts/ATmega32A.h>
+#elif defined (__AVR_ATmega32C1__)
+#include <aversive/parts/ATmega32C1.h>
+#elif defined (__AVR_ATmega32HVB__)
+#include <aversive/parts/ATmega32HVB.h>
+#elif defined (__AVR_ATmega32M1__)
+#include <aversive/parts/ATmega32M1.h>
+#elif defined (__AVR_ATmega32U4__)
+#include <aversive/parts/ATmega32U4.h>
+#elif defined (__AVR_ATmega32U6__)
+#include <aversive/parts/ATmega32U6.h>
+#elif defined (__AVR_ATmega406__)
+#include <aversive/parts/ATmega406.h>
+#elif defined (__AVR_ATmega48__)
+#include <aversive/parts/ATmega48.h>
+#elif defined (__AVR_ATmega48P__)
+#include <aversive/parts/ATmega48P.h>
+#elif defined (__AVR_ATmega64__)
+#include <aversive/parts/ATmega64.h>
+#elif defined (__AVR_ATmega640__)
+#include <aversive/parts/ATmega640.h>
+#elif defined (__AVR_ATmega644__)
+#include <aversive/parts/ATmega644.h>
+#elif defined (__AVR_ATmega644P__)
+#include <aversive/parts/ATmega644P.h>
+#elif defined (__AVR_ATmega645__)
+#include <aversive/parts/ATmega645.h>
+#elif defined (__AVR_ATmega6450__)
+#include <aversive/parts/ATmega6450.h>
+#elif defined (__AVR_ATmega649__)
+#include <aversive/parts/ATmega649.h>
+#elif defined (__AVR_ATmega6490__)
+#include <aversive/parts/ATmega6490.h>
+#elif defined (__AVR_ATmega64A__)
+#include <aversive/parts/ATmega64A.h>
+#elif defined (__AVR_ATmega8__)
+#include <aversive/parts/ATmega8.h>
+#elif defined (__AVR_ATmega8515__)
+#include <aversive/parts/ATmega8515.h>
+#elif defined (__AVR_ATmega8535__)
+#include <aversive/parts/ATmega8535.h>
+#elif defined (__AVR_ATmega88__)
+#include <aversive/parts/ATmega88.h>
+#elif defined (__AVR_ATmega88P__)
+#include <aversive/parts/ATmega88P.h>
+#elif defined (__AVR_ATmega88PA__)
+#include <aversive/parts/ATmega88PA.h>
+#elif defined (__AVR_ATmega8A__)
+#include <aversive/parts/ATmega8A.h>
+#elif defined (__AVR_ATtiny10__)
+#include <aversive/parts/ATtiny10.h>
+#elif defined (__AVR_ATtiny11__)
+#include <aversive/parts/ATtiny11.h>
+#elif defined (__AVR_ATtiny12__)
+#include <aversive/parts/ATtiny12.h>
+#elif defined (__AVR_ATtiny13__)
+#include <aversive/parts/ATtiny13.h>
+#elif defined (__AVR_ATtiny13A__)
+#include <aversive/parts/ATtiny13A.h>
+#elif defined (__AVR_ATtiny15__)
+#include <aversive/parts/ATtiny15.h>
+#elif defined (__AVR_ATtiny167__)
+#include <aversive/parts/ATtiny167.h>
+#elif defined (__AVR_ATtiny22__)
+#include <aversive/parts/ATtiny22.h>
+#elif defined (__AVR_ATtiny2313__)
+#include <aversive/parts/ATtiny2313.h>
+#elif defined (__AVR_ATtiny24__)
+#include <aversive/parts/ATtiny24.h>
+#elif defined (__AVR_ATtiny25__)
+#include <aversive/parts/ATtiny25.h>
+#elif defined (__AVR_ATtiny26__)
+#include <aversive/parts/ATtiny26.h>
+#elif defined (__AVR_ATtiny261__)
+#include <aversive/parts/ATtiny261.h>
+#elif defined (__AVR_ATtiny28__)
+#include <aversive/parts/ATtiny28.h>
+#elif defined (__AVR_ATtiny43U__)
+#include <aversive/parts/ATtiny43U.h>
+#elif defined (__AVR_ATtiny44__)
+#include <aversive/parts/ATtiny44.h>
+#elif defined (__AVR_ATtiny45__)
+#include <aversive/parts/ATtiny45.h>
+#elif defined (__AVR_ATtiny461__)
+#include <aversive/parts/ATtiny461.h>
+#elif defined (__AVR_ATtiny48__)
+#include <aversive/parts/ATtiny48.h>
+#elif defined (__AVR_ATtiny84__)
+#include <aversive/parts/ATtiny84.h>
+#elif defined (__AVR_ATtiny85__)
+#include <aversive/parts/ATtiny85.h>
+#elif defined (__AVR_ATtiny861__)
+#include <aversive/parts/ATtiny861.h>
+#elif defined (__AVR_ATtiny88__)
+#include <aversive/parts/ATtiny88.h>
+#elif defined (__AVR_ATxmega128A1__)
+#include <aversive/parts/ATxmega128A1.h>
+#elif defined (__AVR_ATxmega128A3__)
+#include <aversive/parts/ATxmega128A3.h>
+#elif defined (__AVR_ATxmega256A3__)
+#include <aversive/parts/ATxmega256A3.h>
+#elif defined (__AVR_ATxmega256A3B__)
+#include <aversive/parts/ATxmega256A3B.h>
+#elif defined (__AVR_ATxmega64A1__)
+#include <aversive/parts/ATxmega64A1.h>
+#elif defined (__AVR_ATxmega64A3__)
+#include <aversive/parts/ATxmega64A3.h>
+#else
+#ifndef HOST_VERSION
+#error "This arch is not implemented yet"
+#endif
+#endif
+
+#if defined(TIMER0_OVF_vect) && !defined(SIG_OVERFLOW0)
+#define SIG_OVERFLOW0 TIMER0_OVF_vect
+#endif
+
+#if defined(TIMER1_OVF_vect) && !defined(SIG_OVERFLOW1)
+#define SIG_OVERFLOW1 TIMER1_OVF_vect
+#endif
+
+#if defined(TIMER2_OVF_vect) && !defined(SIG_OVERFLOW2)
+#define SIG_OVERFLOW2 TIMER2_OVF_vect
+#endif
+
+#if defined(TIMER3_OVF_vect) && !defined(SIG_OVERFLOW3)
+#define SIG_OVERFLOW3 TIMER3_OVF_vect
+#endif
+
+#if defined(TIMER4_OVF_vect) && !defined(SIG_OVERFLOW4)
+#define SIG_OVERFLOW4 TIMER4_OVF_vect
+#endif
+
+#if defined(TIMER5_OVF_vect) && !defined(SIG_OVERFLOW5)
+#define SIG_OVERFLOW5 TIMER5_OVF_vect
+#endif
+
+#endif /* _AVERSIVE_PARTS_H_ */
diff --git a/aversive/parts/AT86RF401.h b/aversive/parts/AT86RF401.h
new file mode 100644 (file)
index 0000000..8aa9f86
--- /dev/null
@@ -0,0 +1,215 @@
+/*  
+ *  Copyright Droids Corporation, Microb Technology, Eirbot (2009)
+ * 
+ *  This program 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program 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 this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ *  Revision : $Id $
+ *
+ */
+
+/* WARNING : this file is automatically generated by scripts.
+ * You should not edit it. If you find something wrong in it,
+ * write to zer0@droids-corp.org */
+
+
+/* prescalers timer 0 */
+
+
+
+/* available timers */
+
+/* overflow interrupt number */
+#define SIG_OVERFLOW_TOTAL_NUM 0
+
+/* output compare interrupt number */
+#define SIG_OUTPUT_COMPARE_TOTAL_NUM 0
+
+/* Pwm nums */
+#define PWM_TOTAL_NUM 0
+
+/* input capture interrupt number */
+#define SIG_INPUT_CAPTURE_TOTAL_NUM 0
+
+
+/* VCOTUNE */
+#define VCOTUNE0_REG         VCOTUNE
+#define VCOTUNE1_REG         VCOTUNE
+#define VCOTUNE2_REG         VCOTUNE
+#define VCOTUNE3_REG         VCOTUNE
+#define VCOTUNE4_REG         VCOTUNE
+#define VCOVDET0_REG         VCOTUNE
+#define VCOVDET1_REG         VCOTUNE
+
+/* BL_CONFIG */
+#define BL0_REG              BL_CONFIG
+#define BL1_REG              BL_CONFIG
+#define BL2_REG              BL_CONFIG
+#define BL3_REG              BL_CONFIG
+#define BL4_REG              BL_CONFIG
+#define BL5_REG              BL_CONFIG
+#define BLV_REG              BL_CONFIG
+#define BL_REG               BL_CONFIG
+
+/* DEEDR */
+#define ED0_REG              DEEDR
+#define ED1_REG              DEEDR
+#define ED2_REG              DEEDR
+#define ED3_REG              DEEDR
+#define ED4_REG              DEEDR
+#define ED5_REG              DEEDR
+#define ED6_REG              DEEDR
+#define ED7_REG              DEEDR
+
+/* WDTCR */
+#define WDP0_REG             WDTCR
+#define WDP1_REG             WDTCR
+#define WDP2_REG             WDTCR
+#define WDE_REG              WDTCR
+#define WDTOE_REG            WDTCR
+
+/* DEEAR */
+#define BA0_REG              DEEAR
+#define BA1_REG              DEEAR
+#define BA2_REG              DEEAR
+#define PA3_REG              DEEAR
+#define PA4_REG              DEEAR
+#define PA5_REG              DEEAR
+#define PA6_REG              DEEAR
+
+/* AVR_CONFIG */
+#define BBM_REG              AVR_CONFIG
+#define SLEEP_REG            AVR_CONFIG
+#define BLI_REG              AVR_CONFIG
+#define BD_REG               AVR_CONFIG
+#define TM_REG               AVR_CONFIG
+#define ACS0_REG             AVR_CONFIG
+#define ACS1_REG             AVR_CONFIG
+
+/* B_DET */
+#define BD0_REG              B_DET
+#define BD1_REG              B_DET
+#define BD2_REG              B_DET
+#define BD3_REG              B_DET
+#define BD4_REG              B_DET
+#define BD5_REG              B_DET
+
+/* LOCKDET2 */
+#define LC0_REG              LOCKDET2
+#define LC1_REG              LOCKDET2
+#define LC2_REG              LOCKDET2
+#define ULC0_REG             LOCKDET2
+#define ULC1_REG             LOCKDET2
+#define ULC2_REG             LOCKDET2
+#define LAT_REG              LOCKDET2
+#define EUD_REG              LOCKDET2
+
+/* TX_CNTL */
+#define LOC_REG              TX_CNTL
+#define TXK_REG              TX_CNTL
+#define TXE_REG              TX_CNTL
+#define FSK_REG              TX_CNTL
+
+/* BTCNT */
+#define C0_REG               BTCNT
+#define C1_REG               BTCNT
+#define C2_REG               BTCNT
+#define C3_REG               BTCNT
+#define C4_REG               BTCNT
+#define C5_REG               BTCNT
+#define C6_REG               BTCNT
+#define C7_REG               BTCNT
+
+/* SREG */
+#define C_REG                SREG
+#define Z_REG                SREG
+#define N_REG                SREG
+#define V_REG                SREG
+#define S_REG                SREG
+#define H_REG                SREG
+#define T_REG                SREG
+#define I_REG                SREG
+
+/* SPH */
+#define SP8_REG              SPH
+#define SP9_REG              SPH
+#define SP10_REG             SPH
+
+/* SPL */
+#define SP0_REG              SPL
+#define SP1_REG              SPL
+#define SP2_REG              SPL
+#define SP3_REG              SPL
+#define SP4_REG              SPL
+#define SP5_REG              SPL
+#define SP6_REG              SPL
+#define SP7_REG              SPL
+
+/* BTCR */
+#define F0_REG               BTCR
+#define DATA_REG             BTCR
+#define F2_REG               BTCR
+#define IE_REG               BTCR
+#define M0_REG               BTCR
+#define M1_REG               BTCR
+#define C8_REG               BTCR
+#define C9_REG               BTCR
+
+/* IO_DATIN */
+#define IOI0_REG             IO_DATIN
+#define IOI1_REG             IO_DATIN
+#define IOI2_REG             IO_DATIN
+#define IOI3_REG             IO_DATIN
+#define IOI4_REG             IO_DATIN
+#define IOI5_REG             IO_DATIN
+
+/* IO_ENAB */
+#define IOE0_REG             IO_ENAB
+#define IOE1_REG             IO_ENAB
+#define IOE2_REG             IO_ENAB
+#define IOE3_REG             IO_ENAB
+#define IOE4_REG             IO_ENAB
+#define IOE5_REG             IO_ENAB
+
+/* LOCKDET1 */
+#define CS0_REG              LOCKDET1
+#define CS1_REG              LOCKDET1
+#define BOD_REG              LOCKDET1
+#define ENKO_REG             LOCKDET1
+#define UPOK_REG             LOCKDET1
+
+/* IO_DATOUT */
+#define IOO0_REG             IO_DATOUT
+#define IOO1_REG             IO_DATOUT
+#define IOO2_REG             IO_DATOUT
+#define IOO3_REG             IO_DATOUT
+#define IOO4_REG             IO_DATOUT
+#define IOO5_REG             IO_DATOUT
+
+/* DEECR */
+#define EER_REG              DEECR
+#define EEL_REG              DEECR
+#define EEU_REG              DEECR
+#define BSY_REG              DEECR
+
+/* PWR_ATTEN */
+#define PCF0_REG             PWR_ATTEN
+#define PCF1_REG             PWR_ATTEN
+#define PCF2_REG             PWR_ATTEN
+#define PCC0_REG             PWR_ATTEN
+#define PCC1_REG             PWR_ATTEN
+#define PCC2_REG             PWR_ATTEN
+
+/* pins mapping */
+
diff --git a/aversive/parts/AT89S51.h b/aversive/parts/AT89S51.h
new file mode 100644 (file)
index 0000000..f808b9c
--- /dev/null
@@ -0,0 +1,74 @@
+/*  
+ *  Copyright Droids Corporation, Microb Technology, Eirbot (2009)
+ * 
+ *  This program 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program 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 this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ *  Revision : $Id $
+ *
+ */
+
+/* WARNING : this file is automatically generated by scripts.
+ * You should not edit it. If you find something wrong in it,
+ * write to zer0@droids-corp.org */
+
+
+
+/* available timers */
+
+/* overflow interrupt number */
+#define SIG_OVERFLOW_TOTAL_NUM 0
+
+/* output compare interrupt number */
+#define SIG_OUTPUT_COMPARE_TOTAL_NUM 0
+
+/* Pwm nums */
+#define PWM_TOTAL_NUM 0
+
+/* input capture interrupt number */
+#define SIG_INPUT_CAPTURE_TOTAL_NUM 0
+
+
+/* PINA */
+#define PINA0_REG            PINA
+#define PINA1_REG            PINA
+#define PINA2_REG            PINA
+#define PINA3_REG            PINA
+#define PINA4_REG            PINA
+#define PINA5_REG            PINA
+#define PINA6_REG            PINA
+#define PINA7_REG            PINA
+
+/* DDRA */
+#define DDA0_REG             DDRA
+#define DDA1_REG             DDRA
+#define DDA2_REG             DDRA
+#define DDA3_REG             DDRA
+#define DDA4_REG             DDRA
+#define DDA5_REG             DDRA
+#define DDA6_REG             DDRA
+#define DDA7_REG             DDRA
+
+/* PORTA */
+#define PORTA0_REG           PORTA
+#define PORTA1_REG           PORTA
+#define PORTA2_REG           PORTA
+#define PORTA3_REG           PORTA
+#define PORTA4_REG           PORTA
+#define PORTA5_REG           PORTA
+#define PORTA6_REG           PORTA
+#define PORTA7_REG           PORTA
+
+/* pins mapping */
+
diff --git a/aversive/parts/AT89S52.h b/aversive/parts/AT89S52.h
new file mode 100644 (file)
index 0000000..f808b9c
--- /dev/null
@@ -0,0 +1,74 @@
+/*  
+ *  Copyright Droids Corporation, Microb Technology, Eirbot (2009)
+ * 
+ *  This program 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program 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 this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ *  Revision : $Id $
+ *
+ */
+
+/* WARNING : this file is automatically generated by scripts.
+ * You should not edit it. If you find something wrong in it,
+ * write to zer0@droids-corp.org */
+
+
+
+/* available timers */
+
+/* overflow interrupt number */
+#define SIG_OVERFLOW_TOTAL_NUM 0
+
+/* output compare interrupt number */
+#define SIG_OUTPUT_COMPARE_TOTAL_NUM 0
+
+/* Pwm nums */
+#define PWM_TOTAL_NUM 0
+
+/* input capture interrupt number */
+#define SIG_INPUT_CAPTURE_TOTAL_NUM 0
+
+
+/* PINA */
+#define PINA0_REG            PINA
+#define PINA1_REG            PINA
+#define PINA2_REG            PINA
+#define PINA3_REG            PINA
+#define PINA4_REG            PINA
+#define PINA5_REG            PINA
+#define PINA6_REG            PINA
+#define PINA7_REG            PINA
+
+/* DDRA */
+#define DDA0_REG             DDRA
+#define DDA1_REG             DDRA
+#define DDA2_REG             DDRA
+#define DDA3_REG             DDRA
+#define DDA4_REG             DDRA
+#define DDA5_REG             DDRA
+#define DDA6_REG             DDRA
+#define DDA7_REG             DDRA
+
+/* PORTA */
+#define PORTA0_REG           PORTA
+#define PORTA1_REG           PORTA
+#define PORTA2_REG           PORTA
+#define PORTA3_REG           PORTA
+#define PORTA4_REG           PORTA
+#define PORTA5_REG           PORTA
+#define PORTA6_REG           PORTA
+#define PORTA7_REG           PORTA
+
+/* pins mapping */
+
diff --git a/aversive/parts/AT90CAN128.h b/aversive/parts/AT90CAN128.h
new file mode 100644 (file)
index 0000000..84fee1a
--- /dev/null
@@ -0,0 +1,1622 @@
+/*  
+ *  Copyright Droids Corporation, Microb Technology, Eirbot (2009)
+ * 
+ *  This program 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program 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 this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ *  Revision : $Id $
+ *
+ */
+
+/* WARNING : this file is automatically generated by scripts.
+ * You should not edit it. If you find something wrong in it,
+ * write to zer0@droids-corp.org */
+
+
+/* prescalers timer 0 */
+#define TIMER0_PRESCALER_DIV_0          0
+#define TIMER0_PRESCALER_DIV_1          1
+#define TIMER0_PRESCALER_DIV_8          2
+#define TIMER0_PRESCALER_DIV_64         3
+#define TIMER0_PRESCALER_DIV_256        4
+#define TIMER0_PRESCALER_DIV_1024       5
+#define TIMER0_PRESCALER_DIV_FALL       6
+#define TIMER0_PRESCALER_DIV_RISE       7
+
+#define TIMER0_PRESCALER_REG_0          0
+#define TIMER0_PRESCALER_REG_1          1
+#define TIMER0_PRESCALER_REG_2          8
+#define TIMER0_PRESCALER_REG_3          64
+#define TIMER0_PRESCALER_REG_4          256
+#define TIMER0_PRESCALER_REG_5          1024
+#define TIMER0_PRESCALER_REG_6          -1
+#define TIMER0_PRESCALER_REG_7          -2
+
+/* prescalers timer 1 */
+#define TIMER1_PRESCALER_DIV_0          0
+#define TIMER1_PRESCALER_DIV_1          1
+#define TIMER1_PRESCALER_DIV_8          2
+#define TIMER1_PRESCALER_DIV_64         3
+#define TIMER1_PRESCALER_DIV_256        4
+#define TIMER1_PRESCALER_DIV_1024       5
+#define TIMER1_PRESCALER_DIV_FALL       6
+#define TIMER1_PRESCALER_DIV_RISE       7
+
+#define TIMER1_PRESCALER_REG_0          0
+#define TIMER1_PRESCALER_REG_1          1
+#define TIMER1_PRESCALER_REG_2          8
+#define TIMER1_PRESCALER_REG_3          64
+#define TIMER1_PRESCALER_REG_4          256
+#define TIMER1_PRESCALER_REG_5          1024
+#define TIMER1_PRESCALER_REG_6          -1
+#define TIMER1_PRESCALER_REG_7          -2
+
+/* prescalers timer 2 */
+#define TIMER2_PRESCALER_DIV_0          0
+#define TIMER2_PRESCALER_DIV_1          1
+#define TIMER2_PRESCALER_DIV_8          2
+#define TIMER2_PRESCALER_DIV_32         3
+#define TIMER2_PRESCALER_DIV_64         4
+#define TIMER2_PRESCALER_DIV_128        5
+#define TIMER2_PRESCALER_DIV_256        6
+#define TIMER2_PRESCALER_DIV_1024       7
+
+#define TIMER2_PRESCALER_REG_0          0
+#define TIMER2_PRESCALER_REG_1          1
+#define TIMER2_PRESCALER_REG_2          8
+#define TIMER2_PRESCALER_REG_3          32
+#define TIMER2_PRESCALER_REG_4          64
+#define TIMER2_PRESCALER_REG_5          128
+#define TIMER2_PRESCALER_REG_6          256
+#define TIMER2_PRESCALER_REG_7          1024
+
+/* prescalers timer 3 */
+#define TIMER3_PRESCALER_DIV_0          0
+#define TIMER3_PRESCALER_DIV_1          1
+#define TIMER3_PRESCALER_DIV_8          2
+#define TIMER3_PRESCALER_DIV_64         3
+#define TIMER3_PRESCALER_DIV_256        4
+#define TIMER3_PRESCALER_DIV_1024       5
+#define TIMER3_PRESCALER_DIV_FALL       6
+#define TIMER3_PRESCALER_DIV_RISE       7
+
+#define TIMER3_PRESCALER_REG_0          0
+#define TIMER3_PRESCALER_REG_1          1
+#define TIMER3_PRESCALER_REG_2          8
+#define TIMER3_PRESCALER_REG_3          64
+#define TIMER3_PRESCALER_REG_4          256
+#define TIMER3_PRESCALER_REG_5          1024
+#define TIMER3_PRESCALER_REG_6          -1
+#define TIMER3_PRESCALER_REG_7          -2
+
+
+/* available timers */
+#define TIMER0_AVAILABLE
+#define TIMER1_AVAILABLE
+#define TIMER1A_AVAILABLE
+#define TIMER1B_AVAILABLE
+#define TIMER1C_AVAILABLE
+#define TIMER2_AVAILABLE
+#define TIMER3_AVAILABLE
+#define TIMER3A_AVAILABLE
+#define TIMER3B_AVAILABLE
+#define TIMER3C_AVAILABLE
+
+/* overflow interrupt number */
+#define SIG_OVERFLOW0_NUM 0
+#define SIG_OVERFLOW1_NUM 1
+#define SIG_OVERFLOW2_NUM 2
+#define SIG_OVERFLOW3_NUM 3
+#define SIG_OVERFLOW_TOTAL_NUM 4
+
+/* output compare interrupt number */
+#define SIG_OUTPUT_COMPARE0_NUM 0
+#define SIG_OUTPUT_COMPARE1A_NUM 1
+#define SIG_OUTPUT_COMPARE1B_NUM 2
+#define SIG_OUTPUT_COMPARE1C_NUM 3
+#define SIG_OUTPUT_COMPARE2_NUM 4
+#define SIG_OUTPUT_COMPARE3A_NUM 5
+#define SIG_OUTPUT_COMPARE3B_NUM 6
+#define SIG_OUTPUT_COMPARE3C_NUM 7
+#define SIG_OUTPUT_COMPARE_TOTAL_NUM 8
+
+/* Pwm nums */
+#define PWM0_NUM 0
+#define PWM1A_NUM 1
+#define PWM1B_NUM 2
+#define PWM1C_NUM 3
+#define PWM2_NUM 4
+#define PWM3A_NUM 5
+#define PWM3B_NUM 6
+#define PWM3C_NUM 7
+#define PWM_TOTAL_NUM 8
+
+/* input capture interrupt number */
+#define SIG_INPUT_CAPTURE1_NUM 0
+#define SIG_INPUT_CAPTURE3_NUM 1
+#define SIG_INPUT_CAPTURE_TOTAL_NUM 2
+
+
+/* WDTCR */
+#define WDP0_REG             WDTCR
+#define WDP1_REG             WDTCR
+#define WDP2_REG             WDTCR
+#define WDE_REG              WDTCR
+#define WDCE_REG             WDTCR
+
+/* ADMUX */
+#define MUX0_REG             ADMUX
+#define MUX1_REG             ADMUX
+#define MUX2_REG             ADMUX
+#define MUX3_REG             ADMUX
+#define MUX4_REG             ADMUX
+#define ADLAR_REG            ADMUX
+#define REFS0_REG            ADMUX
+#define REFS1_REG            ADMUX
+
+/* EEDR */
+#define EEDR0_REG            EEDR
+#define EEDR1_REG            EEDR
+#define EEDR2_REG            EEDR
+#define EEDR3_REG            EEDR
+#define EEDR4_REG            EEDR
+#define EEDR5_REG            EEDR
+#define EEDR6_REG            EEDR
+#define EEDR7_REG            EEDR
+
+/* RAMPZ */
+#define RAMPZ0_REG           RAMPZ
+
+/* OCR2A */
+#define OCR2A0_REG           OCR2A
+#define OCR2A1_REG           OCR2A
+#define OCR2A2_REG           OCR2A
+#define OCR2A3_REG           OCR2A
+#define OCR2A4_REG           OCR2A
+#define OCR2A5_REG           OCR2A
+#define OCR2A6_REG           OCR2A
+#define OCR2A7_REG           OCR2A
+
+/* SPDR */
+#define SPDR0_REG            SPDR
+#define SPDR1_REG            SPDR
+#define SPDR2_REG            SPDR
+#define SPDR3_REG            SPDR
+#define SPDR4_REG            SPDR
+#define SPDR5_REG            SPDR
+#define SPDR6_REG            SPDR
+#define SPDR7_REG            SPDR
+
+/* SPSR */
+#define SPI2X_REG            SPSR
+#define WCOL_REG             SPSR
+#define SPIF_REG             SPSR
+
+/* ICR1H */
+#define ICR1H0_REG           ICR1H
+#define ICR1H1_REG           ICR1H
+#define ICR1H2_REG           ICR1H
+#define ICR1H3_REG           ICR1H
+#define ICR1H4_REG           ICR1H
+#define ICR1H5_REG           ICR1H
+#define ICR1H6_REG           ICR1H
+#define ICR1H7_REG           ICR1H
+
+/* ICR1L */
+#define ICR1L0_REG           ICR1L
+#define ICR1L1_REG           ICR1L
+#define ICR1L2_REG           ICR1L
+#define ICR1L3_REG           ICR1L
+#define ICR1L4_REG           ICR1L
+#define ICR1L5_REG           ICR1L
+#define ICR1L6_REG           ICR1L
+#define ICR1L7_REG           ICR1L
+
+/* EEARH */
+#define EEAR8_REG            EEARH
+#define EEAR9_REG            EEARH
+#define EEAR10_REG           EEARH
+#define EEAR11_REG           EEARH
+
+/* CANGSTA */
+#define ERRP_REG             CANGSTA
+#define BOFF_REG             CANGSTA
+#define ENFG_REG             CANGSTA
+#define RXBSY_REG            CANGSTA
+#define TXBSY_REG            CANGSTA
+#define OVRG_REG             CANGSTA
+
+/* CANGCON */
+#define SWRES_REG            CANGCON
+#define ENASTB_REG           CANGCON
+#define TEST_REG             CANGCON
+#define LISTEN_REG           CANGCON
+#define SYNTTC_REG           CANGCON
+#define TTC_REG              CANGCON
+#define OVRQ_REG             CANGCON
+#define ABRQ_REG             CANGCON
+
+/* PORTG */
+#define PORTG0_REG           PORTG
+#define PORTG1_REG           PORTG
+#define PORTG2_REG           PORTG
+#define PORTG3_REG           PORTG
+#define PORTG4_REG           PORTG
+
+/* UCSR0C */
+#define UCPOL0_REG           UCSR0C
+#define UCSZ00_REG           UCSR0C
+#define UCSZ01_REG           UCSR0C
+#define USBS0_REG            UCSR0C
+#define UPM00_REG            UCSR0C
+#define UPM01_REG            UCSR0C
+#define UMSEL0_REG           UCSR0C
+
+/* UCSR0B */
+#define TXB80_REG            UCSR0B
+#define RXB80_REG            UCSR0B
+#define UCSZ02_REG           UCSR0B
+#define TXEN0_REG            UCSR0B
+#define RXEN0_REG            UCSR0B
+#define UDRIE0_REG           UCSR0B
+#define TXCIE0_REG           UCSR0B
+#define RXCIE0_REG           UCSR0B
+
+/* TCNT1H */
+#define TCNT1H0_REG          TCNT1H
+#define TCNT1H1_REG          TCNT1H
+#define TCNT1H2_REG          TCNT1H
+#define TCNT1H3_REG          TCNT1H
+#define TCNT1H4_REG          TCNT1H
+#define TCNT1H5_REG          TCNT1H
+#define TCNT1H6_REG          TCNT1H
+#define TCNT1H7_REG          TCNT1H
+
+/* PORTC */
+#define PORTC0_REG           PORTC
+#define PORTC1_REG           PORTC
+#define PORTC2_REG           PORTC
+#define PORTC3_REG           PORTC
+#define PORTC4_REG           PORTC
+#define PORTC5_REG           PORTC
+#define PORTC6_REG           PORTC
+#define PORTC7_REG           PORTC
+
+/* PORTA */
+#define PORTA0_REG           PORTA
+#define PORTA1_REG           PORTA
+#define PORTA2_REG           PORTA
+#define PORTA3_REG           PORTA
+#define PORTA4_REG           PORTA
+#define PORTA5_REG           PORTA
+#define PORTA6_REG           PORTA
+#define PORTA7_REG           PORTA
+
+/* EEARL */
+#define EEARL0_REG           EEARL
+#define EEARL1_REG           EEARL
+#define EEARL2_REG           EEARL
+#define EEARL3_REG           EEARL
+#define EEARL4_REG           EEARL
+#define EEARL5_REG           EEARL
+#define EEARL6_REG           EEARL
+#define EEARL7_REG           EEARL
+
+/* EIMSK */
+#define INT0_REG             EIMSK
+#define INT1_REG             EIMSK
+#define INT2_REG             EIMSK
+#define INT3_REG             EIMSK
+#define INT4_REG             EIMSK
+#define INT5_REG             EIMSK
+#define INT6_REG             EIMSK
+#define INT7_REG             EIMSK
+
+/* UDR1 */
+#define UDR10_REG            UDR1
+#define UDR11_REG            UDR1
+#define UDR12_REG            UDR1
+#define UDR13_REG            UDR1
+#define UDR14_REG            UDR1
+#define UDR15_REG            UDR1
+#define UDR16_REG            UDR1
+#define UDR17_REG            UDR1
+
+/* UDR0 */
+#define UDR00_REG            UDR0
+#define UDR01_REG            UDR0
+#define UDR02_REG            UDR0
+#define UDR03_REG            UDR0
+#define UDR04_REG            UDR0
+#define UDR05_REG            UDR0
+#define UDR06_REG            UDR0
+#define UDR07_REG            UDR0
+
+/* GPIOR2 */
+#define GPIOR20_REG          GPIOR2
+#define GPIOR21_REG          GPIOR2
+#define GPIOR22_REG          GPIOR2
+#define GPIOR23_REG          GPIOR2
+#define GPIOR24_REG          GPIOR2
+#define GPIOR25_REG          GPIOR2
+#define GPIOR26_REG          GPIOR2
+#define GPIOR27_REG          GPIOR2
+
+/* EICRB */
+#define ISC40_REG            EICRB
+#define ISC41_REG            EICRB
+#define ISC50_REG            EICRB
+#define ISC51_REG            EICRB
+#define ISC60_REG            EICRB
+#define ISC61_REG            EICRB
+#define ISC70_REG            EICRB
+#define ISC71_REG            EICRB
+
+/* EICRA */
+#define ISC00_REG            EICRA
+#define ISC01_REG            EICRA
+#define ISC10_REG            EICRA
+#define ISC11_REG            EICRA
+#define ISC20_REG            EICRA
+#define ISC21_REG            EICRA
+#define ISC30_REG            EICRA
+#define ISC31_REG            EICRA
+
+/* DIDR0 */
+#define ADC0D_REG            DIDR0
+#define ADC1D_REG            DIDR0
+#define ADC2D_REG            DIDR0
+#define ADC3D_REG            DIDR0
+#define ADC4D_REG            DIDR0
+#define ADC5D_REG            DIDR0
+#define ADC6D_REG            DIDR0
+#define ADC7D_REG            DIDR0
+
+/* DIDR1 */
+#define AIN0D_REG            DIDR1
+#define AIN1D_REG            DIDR1
+
+/* DDRF */
+#define DDF0_REG             DDRF
+#define DDF1_REG             DDRF
+#define DDF2_REG             DDRF
+#define DDF3_REG             DDRF
+#define DDF4_REG             DDRF
+#define DDF5_REG             DDRF
+#define DDF6_REG             DDRF
+#define DDF7_REG             DDRF
+
+/* ASSR */
+#define TCR2UB_REG           ASSR
+#define OCR2UB_REG           ASSR
+#define TCN2UB_REG           ASSR
+#define AS2_REG              ASSR
+#define EXCLK_REG            ASSR
+
+/* CLKPR */
+#define CLKPS0_REG           CLKPR
+#define CLKPS1_REG           CLKPR
+#define CLKPS2_REG           CLKPR
+#define CLKPS3_REG           CLKPR
+#define CLKPCE_REG           CLKPR
+
+/* SREG */
+#define C_REG                SREG
+#define Z_REG                SREG
+#define N_REG                SREG
+#define V_REG                SREG
+#define S_REG                SREG
+#define H_REG                SREG
+#define T_REG                SREG
+#define I_REG                SREG
+
+/* CANIDM1 */
+#define IDMSK21_REG          CANIDM1
+#define IDMSK22_REG          CANIDM1
+#define IDMSK23_REG          CANIDM1
+#define IDMSK24_REG          CANIDM1
+#define IDMSK25_REG          CANIDM1
+#define IDMSK26_REG          CANIDM1
+#define IDMSK27_REG          CANIDM1
+#define IDMSK28_REG          CANIDM1
+
+/* CANIDM3 */
+#define IDMSK5_REG           CANIDM3
+#define IDMSK6_REG           CANIDM3
+#define IDMSK7_REG           CANIDM3
+#define IDMSK8_REG           CANIDM3
+#define IDMSK9_REG           CANIDM3
+#define IDMSK10_REG          CANIDM3
+#define IDMSK11_REG          CANIDM3
+#define IDMSK12_REG          CANIDM3
+
+/* CANIDM2 */
+#define IDMSK13_REG          CANIDM2
+#define IDMSK14_REG          CANIDM2
+#define IDMSK15_REG          CANIDM2
+#define IDMSK16_REG          CANIDM2
+#define IDMSK17_REG          CANIDM2
+#define IDMSK18_REG          CANIDM2
+#define IDMSK19_REG          CANIDM2
+#define IDMSK20_REG          CANIDM2
+
+/* CANIDM4 */
+#define IDEMSK_REG           CANIDM4
+#define RTRMSK_REG           CANIDM4
+#define IDMSK0_REG           CANIDM4
+#define IDMSK1_REG           CANIDM4
+#define IDMSK2_REG           CANIDM4
+#define IDMSK3_REG           CANIDM4
+#define IDMSK4_REG           CANIDM4
+
+/* UBRR1L */
+/* #define UBRR0_REG            UBRR1L */ /* dup in UBRR0L */
+/* #define UBRR1_REG            UBRR1L */ /* dup in UBRR0L */
+/* #define UBRR2_REG            UBRR1L */ /* dup in UBRR0L */
+/* #define UBRR3_REG            UBRR1L */ /* dup in UBRR0L */
+/* #define UBRR4_REG            UBRR1L */ /* dup in UBRR0L */
+/* #define UBRR5_REG            UBRR1L */ /* dup in UBRR0L */
+/* #define UBRR6_REG            UBRR1L */ /* dup in UBRR0L */
+/* #define UBRR7_REG            UBRR1L */ /* dup in UBRR0L */
+
+/* DDRC */
+#define DDC0_REG             DDRC
+#define DDC1_REG             DDRC
+#define DDC2_REG             DDRC
+#define DDC3_REG             DDRC
+#define DDC4_REG             DDRC
+#define DDC5_REG             DDRC
+#define DDC6_REG             DDRC
+#define DDC7_REG             DDRC
+
+/* OCR3AL */
+#define OCR3AL0_REG          OCR3AL
+#define OCR3AL1_REG          OCR3AL
+#define OCR3AL2_REG          OCR3AL
+#define OCR3AL3_REG          OCR3AL
+#define OCR3AL4_REG          OCR3AL
+#define OCR3AL5_REG          OCR3AL
+#define OCR3AL6_REG          OCR3AL
+#define OCR3AL7_REG          OCR3AL
+
+/* DDRA */
+#define DDA0_REG             DDRA
+#define DDA1_REG             DDRA
+#define DDA2_REG             DDRA
+#define DDA3_REG             DDRA
+#define DDA4_REG             DDRA
+#define DDA5_REG             DDRA
+#define DDA6_REG             DDRA
+#define DDA7_REG             DDRA
+
+/* UBRR1H */
+/* #define UBRR8_REG            UBRR1H */ /* dup in UBRR0H */
+/* #define UBRR9_REG            UBRR1H */ /* dup in UBRR0H */
+/* #define UBRR10_REG           UBRR1H */ /* dup in UBRR0H */
+/* #define UBRR11_REG           UBRR1H */ /* dup in UBRR0H */
+
+/* DDRG */
+#define DDG0_REG             DDRG
+#define DDG1_REG             DDRG
+#define DDG2_REG             DDRG
+#define DDG3_REG             DDRG
+#define DDG4_REG             DDRG
+
+/* OCR3AH */
+#define OCR3AH0_REG          OCR3AH
+#define OCR3AH1_REG          OCR3AH
+#define OCR3AH2_REG          OCR3AH
+#define OCR3AH3_REG          OCR3AH
+#define OCR3AH4_REG          OCR3AH
+#define OCR3AH5_REG          OCR3AH
+#define OCR3AH6_REG          OCR3AH
+#define OCR3AH7_REG          OCR3AH
+
+/* TCCR1B */
+#define CS10_REG             TCCR1B
+#define CS11_REG             TCCR1B
+#define CS12_REG             TCCR1B
+#define WGM12_REG            TCCR1B
+#define WGM13_REG            TCCR1B
+#define ICES1_REG            TCCR1B
+#define ICNC1_REG            TCCR1B
+
+/* OSCCAL */
+#define CAL0_REG             OSCCAL
+#define CAL1_REG             OSCCAL
+#define CAL2_REG             OSCCAL
+#define CAL3_REG             OSCCAL
+#define CAL4_REG             OSCCAL
+#define CAL5_REG             OSCCAL
+#define CAL6_REG             OSCCAL
+
+/* DDRD */
+#define DDD0_REG             DDRD
+#define DDD1_REG             DDRD
+#define DDD2_REG             DDRD
+#define DDD3_REG             DDRD
+#define DDD4_REG             DDRD
+#define DDD5_REG             DDRD
+#define DDD6_REG             DDRD
+#define DDD7_REG             DDRD
+
+/* GPIOR1 */
+#define GPIOR10_REG          GPIOR1
+#define GPIOR11_REG          GPIOR1
+#define GPIOR12_REG          GPIOR1
+#define GPIOR13_REG          GPIOR1
+#define GPIOR14_REG          GPIOR1
+#define GPIOR15_REG          GPIOR1
+#define GPIOR16_REG          GPIOR1
+#define GPIOR17_REG          GPIOR1
+
+/* GPIOR0 */
+#define GPIOR00_REG          GPIOR0
+#define GPIOR01_REG          GPIOR0
+#define GPIOR02_REG          GPIOR0
+#define GPIOR03_REG          GPIOR0
+#define GPIOR04_REG          GPIOR0
+#define GPIOR05_REG          GPIOR0
+#define GPIOR06_REG          GPIOR0
+#define GPIOR07_REG          GPIOR0
+
+/* TWBR */
+#define TWBR0_REG            TWBR
+#define TWBR1_REG            TWBR
+#define TWBR2_REG            TWBR
+#define TWBR3_REG            TWBR
+#define TWBR4_REG            TWBR
+#define TWBR5_REG            TWBR
+#define TWBR6_REG            TWBR
+#define TWBR7_REG            TWBR
+
+/* CANGIT */
+#define AERG_REG             CANGIT
+#define FERG_REG             CANGIT
+#define CERG_REG             CANGIT
+#define SERG_REG             CANGIT
+#define BXOK_REG             CANGIT
+#define OVRTIM_REG           CANGIT
+#define BOFFIT_REG           CANGIT
+#define CANIT_REG            CANGIT
+
+/* TCNT2 */
+#define TCNT2_0_REG          TCNT2
+#define TCNT2_1_REG          TCNT2
+#define TCNT2_2_REG          TCNT2
+#define TCNT2_3_REG          TCNT2
+#define TCNT2_4_REG          TCNT2
+#define TCNT2_5_REG          TCNT2
+#define TCNT2_6_REG          TCNT2
+#define TCNT2_7_REG          TCNT2
+
+/* CANGIE */
+#define ENOVRT_REG           CANGIE
+#define ENERG_REG            CANGIE
+#define ENBX_REG             CANGIE
+#define ENERR_REG            CANGIE
+#define ENTX_REG             CANGIE
+#define ENRX_REG             CANGIE
+#define ENBOFF_REG           CANGIE
+#define ENIT_REG             CANGIE
+
+/* TCNT0 */
+#define TCNT0_0_REG          TCNT0
+#define TCNT0_1_REG          TCNT0
+#define TCNT0_2_REG          TCNT0
+#define TCNT0_3_REG          TCNT0
+#define TCNT0_4_REG          TCNT0
+#define TCNT0_5_REG          TCNT0
+#define TCNT0_6_REG          TCNT0
+#define TCNT0_7_REG          TCNT0
+
+/* TWAR */
+#define TWGCE_REG            TWAR
+#define TWA0_REG             TWAR
+#define TWA1_REG             TWAR
+#define TWA2_REG             TWAR
+#define TWA3_REG             TWAR
+#define TWA4_REG             TWAR
+#define TWA5_REG             TWAR
+#define TWA6_REG             TWAR
+
+/* CANIE2 */
+#define IEMOB0_REG           CANIE2
+#define IEMOB1_REG           CANIE2
+#define IEMOB2_REG           CANIE2
+#define IEMOB3_REG           CANIE2
+#define IEMOB4_REG           CANIE2
+#define IEMOB5_REG           CANIE2
+#define IEMOB6_REG           CANIE2
+#define IEMOB7_REG           CANIE2
+
+/* TCCR3C */
+#define FOC3C_REG            TCCR3C
+#define FOC3B_REG            TCCR3C
+#define FOC3A_REG            TCCR3C
+
+/* CANIE1 */
+#define IEMOB8_REG           CANIE1
+#define IEMOB9_REG           CANIE1
+#define IEMOB10_REG          CANIE1
+#define IEMOB11_REG          CANIE1
+#define IEMOB12_REG          CANIE1
+#define IEMOB13_REG          CANIE1
+#define IEMOB14_REG          CANIE1
+
+/* TCCR0A */
+#define CS00_REG             TCCR0A
+#define CS01_REG             TCCR0A
+#define CS02_REG             TCCR0A
+#define WGM01_REG            TCCR0A
+#define COM0A0_REG           TCCR0A
+#define COM0A1_REG           TCCR0A
+#define WGM00_REG            TCCR0A
+#define FOC0A_REG            TCCR0A
+
+/* TIFR2 */
+#define TOV2_REG             TIFR2
+#define OCF2A_REG            TIFR2
+
+/* TIFR3 */
+#define TOV3_REG             TIFR3
+#define OCF3A_REG            TIFR3
+#define OCF3B_REG            TIFR3
+#define OCF3C_REG            TIFR3
+#define ICF3_REG             TIFR3
+
+/* SPCR */
+#define SPR0_REG             SPCR
+#define SPR1_REG             SPCR
+#define CPHA_REG             SPCR
+#define CPOL_REG             SPCR
+#define MSTR_REG             SPCR
+#define DORD_REG             SPCR
+#define SPE_REG              SPCR
+#define SPIE_REG             SPCR
+
+/* TIFR1 */
+#define TOV1_REG             TIFR1
+#define OCF1A_REG            TIFR1
+#define OCF1B_REG            TIFR1
+#define OCF1C_REG            TIFR1
+#define ICF1_REG             TIFR1
+
+/* CANIDT4 */
+#define RB0TAG_REG           CANIDT4
+#define RB1TAG_REG           CANIDT4
+#define RTRTAG_REG           CANIDT4
+#define IDT0_REG             CANIDT4
+#define IDT1_REG             CANIDT4
+#define IDT2_REG             CANIDT4
+#define IDT3_REG             CANIDT4
+#define IDT4_REG             CANIDT4
+
+/* CANIDT2 */
+#define IDT13_REG            CANIDT2
+#define IDT14_REG            CANIDT2
+#define IDT15_REG            CANIDT2
+#define IDT16_REG            CANIDT2
+#define IDT17_REG            CANIDT2
+#define IDT18_REG            CANIDT2
+#define IDT19_REG            CANIDT2
+#define IDT20_REG            CANIDT2
+
+/* CANIDT3 */
+#define IDT5_REG             CANIDT3
+#define IDT6_REG             CANIDT3
+#define IDT7_REG             CANIDT3
+#define IDT8_REG             CANIDT3
+#define IDT9_REG             CANIDT3
+#define IDT10_REG            CANIDT3
+#define IDT11_REG            CANIDT3
+#define IDT12_REG            CANIDT3
+
+/* CANIDT1 */
+#define IDT21_REG            CANIDT1
+#define IDT22_REG            CANIDT1
+#define IDT23_REG            CANIDT1
+#define IDT24_REG            CANIDT1
+#define IDT25_REG            CANIDT1
+#define IDT26_REG            CANIDT1
+#define IDT27_REG            CANIDT1
+#define IDT28_REG            CANIDT1
+
+/* CANSIT1 */
+#define SIT8_REG             CANSIT1
+#define SIT9_REG             CANSIT1
+#define SIT10_REG            CANSIT1
+#define SIT11_REG            CANSIT1
+#define SIT12_REG            CANSIT1
+#define SIT13_REG            CANSIT1
+#define SIT14_REG            CANSIT1
+
+/* OCR3CH */
+#define OCR3CH0_REG          OCR3CH
+#define OCR3CH1_REG          OCR3CH
+#define OCR3CH2_REG          OCR3CH
+#define OCR3CH3_REG          OCR3CH
+#define OCR3CH4_REG          OCR3CH
+#define OCR3CH5_REG          OCR3CH
+#define OCR3CH6_REG          OCR3CH
+#define OCR3CH7_REG          OCR3CH
+
+/* OCR3CL */
+#define OCR3CL0_REG          OCR3CL
+#define OCR3CL1_REG          OCR3CL
+#define OCR3CL2_REG          OCR3CL
+#define OCR3CL3_REG          OCR3CL
+#define OCR3CL4_REG          OCR3CL
+#define OCR3CL5_REG          OCR3CL
+#define OCR3CL6_REG          OCR3CL
+#define OCR3CL7_REG          OCR3CL
+
+/* GTCCR */
+#define PSR310_REG           GTCCR
+#define TSM_REG              GTCCR
+#define PSR2_REG             GTCCR
+
+/* CANCDMOB */
+#define DLC0_REG             CANCDMOB
+#define DLC1_REG             CANCDMOB
+#define DLC2_REG             CANCDMOB
+#define DLC3_REG             CANCDMOB
+#define IDE_REG              CANCDMOB
+#define RPLV_REG             CANCDMOB
+#define CONMOB0_REG          CANCDMOB
+#define CONMOB1_REG          CANCDMOB
+
+/* SPH */
+#define SP8_REG              SPH
+#define SP9_REG              SPH
+#define SP10_REG             SPH
+#define SP11_REG             SPH
+#define SP12_REG             SPH
+#define SP13_REG             SPH
+#define SP14_REG             SPH
+#define SP15_REG             SPH
+
+/* CANSIT2 */
+#define SIT0_REG             CANSIT2
+#define SIT1_REG             CANSIT2
+#define SIT2_REG             CANSIT2
+#define SIT3_REG             CANSIT2
+#define SIT4_REG             CANSIT2
+#define SIT5_REG             CANSIT2
+#define SIT6_REG             CANSIT2
+#define SIT7_REG             CANSIT2
+
+/* CANHPMOB */
+#define CGP0_REG             CANHPMOB
+#define CGP1_REG             CANHPMOB
+#define CGP2_REG             CANHPMOB
+#define CGP3_REG             CANHPMOB
+#define HPMOB0_REG           CANHPMOB
+#define HPMOB1_REG           CANHPMOB
+#define HPMOB2_REG           CANHPMOB
+#define HPMOB3_REG           CANHPMOB
+
+/* TCCR3B */
+#define CS30_REG             TCCR3B
+#define CS31_REG             TCCR3B
+#define CS32_REG             TCCR3B
+#define WGM32_REG            TCCR3B
+#define WGM33_REG            TCCR3B
+#define ICES3_REG            TCCR3B
+#define ICNC3_REG            TCCR3B
+
+/* TCCR3A */
+#define WGM30_REG            TCCR3A
+#define WGM31_REG            TCCR3A
+#define COM3C0_REG           TCCR3A
+#define COM3C1_REG           TCCR3A
+#define COM3B0_REG           TCCR3A
+#define COM3B1_REG           TCCR3A
+#define COM3A0_REG           TCCR3A
+#define COM3A1_REG           TCCR3A
+
+/* PORTF */
+#define PORTF0_REG           PORTF
+#define PORTF1_REG           PORTF
+#define PORTF2_REG           PORTF
+#define PORTF3_REG           PORTF
+#define PORTF4_REG           PORTF
+#define PORTF5_REG           PORTF
+#define PORTF6_REG           PORTF
+#define PORTF7_REG           PORTF
+
+/* OCR1BL */
+#define OCR1BL0_REG          OCR1BL
+#define OCR1BL1_REG          OCR1BL
+#define OCR1BL2_REG          OCR1BL
+#define OCR1BL3_REG          OCR1BL
+#define OCR1BL4_REG          OCR1BL
+#define OCR1BL5_REG          OCR1BL
+#define OCR1BL6_REG          OCR1BL
+#define OCR1BL7_REG          OCR1BL
+
+/* TCNT3H */
+#define TCNT3H0_REG          TCNT3H
+#define TCNT3H1_REG          TCNT3H
+#define TCNT3H2_REG          TCNT3H
+#define TCNT3H3_REG          TCNT3H
+#define TCNT3H4_REG          TCNT3H
+#define TCNT3H5_REG          TCNT3H
+#define TCNT3H6_REG          TCNT3H
+#define TCNT3H7_REG          TCNT3H
+
+/* OCR1BH */
+#define OCR1BH0_REG          OCR1BH
+#define OCR1BH1_REG          OCR1BH
+#define OCR1BH2_REG          OCR1BH
+#define OCR1BH3_REG          OCR1BH
+#define OCR1BH4_REG          OCR1BH
+#define OCR1BH5_REG          OCR1BH
+#define OCR1BH6_REG          OCR1BH
+#define OCR1BH7_REG          OCR1BH
+
+/* TCNT3L */
+#define TCNT3L0_REG          TCNT3L
+#define TCNT3L1_REG          TCNT3L
+#define TCNT3L2_REG          TCNT3L
+#define TCNT3L3_REG          TCNT3L
+#define TCNT3L4_REG          TCNT3L
+#define TCNT3L5_REG          TCNT3L
+#define TCNT3L6_REG          TCNT3L
+#define TCNT3L7_REG          TCNT3L
+
+/* SPL */
+#define SP0_REG              SPL
+#define SP1_REG              SPL
+#define SP2_REG              SPL
+#define SP3_REG              SPL
+#define SP4_REG              SPL
+#define SP5_REG              SPL
+#define SP6_REG              SPL
+#define SP7_REG              SPL
+
+/* MCUSR */
+#define JTRF_REG             MCUSR
+#define PORF_REG             MCUSR
+#define EXTRF_REG            MCUSR
+#define BORF_REG             MCUSR
+#define WDRF_REG             MCUSR
+
+/* EECR */
+#define EERE_REG             EECR
+#define EEWE_REG             EECR
+#define EEMWE_REG            EECR
+#define EERIE_REG            EECR
+
+/* SMCR */
+#define SE_REG               SMCR
+#define SM0_REG              SMCR
+#define SM1_REG              SMCR
+#define SM2_REG              SMCR
+
+/* TWCR */
+#define TWIE_REG             TWCR
+#define TWEN_REG             TWCR
+#define TWWC_REG             TWCR
+#define TWSTO_REG            TWCR
+#define TWSTA_REG            TWCR
+#define TWEA_REG             TWCR
+#define TWINT_REG            TWCR
+
+/* TCCR2A */
+#define CS20_REG             TCCR2A
+#define CS21_REG             TCCR2A
+#define CS22_REG             TCCR2A
+#define WGM21_REG            TCCR2A
+#define COM2A0_REG           TCCR2A
+#define COM2A1_REG           TCCR2A
+#define WGM20_REG            TCCR2A
+#define FOC2A_REG            TCCR2A
+
+/* UBRR0H */
+/* #define UBRR8_REG            UBRR0H */ /* dup in UBRR1H */
+/* #define UBRR9_REG            UBRR0H */ /* dup in UBRR1H */
+/* #define UBRR10_REG           UBRR0H */ /* dup in UBRR1H */
+/* #define UBRR11_REG           UBRR0H */ /* dup in UBRR1H */
+
+/* UBRR0L */
+/* #define UBRR0_REG            UBRR0L */ /* dup in UBRR1L */
+/* #define UBRR1_REG            UBRR0L */ /* dup in UBRR1L */
+/* #define UBRR2_REG            UBRR0L */ /* dup in UBRR1L */
+/* #define UBRR3_REG            UBRR0L */ /* dup in UBRR1L */
+/* #define UBRR4_REG            UBRR0L */ /* dup in UBRR1L */
+/* #define UBRR5_REG            UBRR0L */ /* dup in UBRR1L */
+/* #define UBRR6_REG            UBRR0L */ /* dup in UBRR1L */
+/* #define UBRR7_REG            UBRR0L */ /* dup in UBRR1L */
+
+/* TWSR */
+#define TWPS0_REG            TWSR
+#define TWPS1_REG            TWSR
+#define TWS3_REG             TWSR
+#define TWS4_REG             TWSR
+#define TWS5_REG             TWSR
+#define TWS6_REG             TWSR
+#define TWS7_REG             TWSR
+
+/* CANPAGE */
+#define INDX0_REG            CANPAGE
+#define INDX1_REG            CANPAGE
+#define INDX2_REG            CANPAGE
+#define AINC_REG             CANPAGE
+#define MOBNB0_REG           CANPAGE
+#define MOBNB1_REG           CANPAGE
+#define MOBNB2_REG           CANPAGE
+#define MOBNB3_REG           CANPAGE
+
+/* MCUCR */
+#define JTD_REG              MCUCR
+#define IVCE_REG             MCUCR
+#define IVSEL_REG            MCUCR
+#define PUD_REG              MCUCR
+
+/* PINC */
+#define PINC0_REG            PINC
+#define PINC1_REG            PINC
+#define PINC2_REG            PINC
+#define PINC3_REG            PINC
+#define PINC4_REG            PINC
+#define PINC5_REG            PINC
+#define PINC6_REG            PINC
+#define PINC7_REG            PINC
+
+/* OCR1CL */
+#define OCR1CL0_REG          OCR1CL
+#define OCR1CL1_REG          OCR1CL
+#define OCR1CL2_REG          OCR1CL
+#define OCR1CL3_REG          OCR1CL
+#define OCR1CL4_REG          OCR1CL
+#define OCR1CL5_REG          OCR1CL
+#define OCR1CL6_REG          OCR1CL
+#define OCR1CL7_REG          OCR1CL
+
+/* OCR1CH */
+#define OCR1CH0_REG          OCR1CH
+#define OCR1CH1_REG          OCR1CH
+#define OCR1CH2_REG          OCR1CH
+#define OCR1CH3_REG          OCR1CH
+#define OCR1CH4_REG          OCR1CH
+#define OCR1CH5_REG          OCR1CH
+#define OCR1CH6_REG          OCR1CH
+#define OCR1CH7_REG          OCR1CH
+
+/* OCDR */
+#define OCDR0_REG            OCDR
+#define OCDR1_REG            OCDR
+#define OCDR2_REG            OCDR
+#define OCDR3_REG            OCDR
+#define OCDR4_REG            OCDR
+#define OCDR5_REG            OCDR
+#define OCDR6_REG            OCDR
+#define OCDR7_REG            OCDR
+
+/* PINA */
+#define PINA0_REG            PINA
+#define PINA1_REG            PINA
+#define PINA2_REG            PINA
+#define PINA3_REG            PINA
+#define PINA4_REG            PINA
+#define PINA5_REG            PINA
+#define PINA6_REG            PINA
+#define PINA7_REG            PINA
+
+/* CANSTMOB */
+#define AERR_REG             CANSTMOB
+#define FERR_REG             CANSTMOB
+#define CERR_REG             CANSTMOB
+#define SERR_REG             CANSTMOB
+#define BERR_REG             CANSTMOB
+#define RXOK_REG             CANSTMOB
+#define TXOK_REG             CANSTMOB
+#define DLCW_REG             CANSTMOB
+
+/* UCSR1B */
+#define TXB81_REG            UCSR1B
+#define RXB81_REG            UCSR1B
+#define UCSZ12_REG           UCSR1B
+#define TXEN1_REG            UCSR1B
+#define RXEN1_REG            UCSR1B
+#define UDRIE1_REG           UCSR1B
+#define TXCIE1_REG           UCSR1B
+#define RXCIE1_REG           UCSR1B
+
+/* UCSR1C */
+#define UCPOL1_REG           UCSR1C
+#define UCSZ10_REG           UCSR1C
+#define UCSZ11_REG           UCSR1C
+#define USBS1_REG            UCSR1C
+#define UPM10_REG            UCSR1C
+#define UPM11_REG            UCSR1C
+#define UMSEL1_REG           UCSR1C
+
+/* UCSR1A */
+#define MPCM1_REG            UCSR1A
+#define U2X1_REG             UCSR1A
+#define UPE1_REG             UCSR1A
+#define DOR1_REG             UCSR1A
+#define FE1_REG              UCSR1A
+#define UDRE1_REG            UCSR1A
+#define TXC1_REG             UCSR1A
+#define RXC1_REG             UCSR1A
+
+/* DDRB */
+#define DDB0_REG             DDRB
+#define DDB1_REG             DDRB
+#define DDB2_REG             DDRB
+#define DDB3_REG             DDRB
+#define DDB4_REG             DDRB
+#define DDB5_REG             DDRB
+#define DDB6_REG             DDRB
+#define DDB7_REG             DDRB
+
+/* TWDR */
+#define TWD0_REG             TWDR
+#define TWD1_REG             TWDR
+#define TWD2_REG             TWDR
+#define TWD3_REG             TWDR
+#define TWD4_REG             TWDR
+#define TWD5_REG             TWDR
+#define TWD6_REG             TWDR
+#define TWD7_REG             TWDR
+
+/* PORTB */
+#define PORTB0_REG           PORTB
+#define PORTB1_REG           PORTB
+#define PORTB2_REG           PORTB
+#define PORTB3_REG           PORTB
+#define PORTB4_REG           PORTB
+#define PORTB5_REG           PORTB
+#define PORTB6_REG           PORTB
+#define PORTB7_REG           PORTB
+
+/* ADCSRA */
+#define ADPS0_REG            ADCSRA
+#define ADPS1_REG            ADCSRA
+#define ADPS2_REG            ADCSRA
+#define ADIE_REG             ADCSRA
+#define ADIF_REG             ADCSRA
+#define ADATE_REG            ADCSRA
+#define ADSC_REG             ADCSRA
+#define ADEN_REG             ADCSRA
+
+/* CANEN2 */
+#define ENMOB0_REG           CANEN2
+#define ENMOB1_REG           CANEN2
+#define ENMOB2_REG           CANEN2
+#define ENMOB3_REG           CANEN2
+#define ENMOB4_REG           CANEN2
+#define ENMOB5_REG           CANEN2
+#define ENMOB6_REG           CANEN2
+#define ENMOB7_REG           CANEN2
+
+/* CANEN1 */
+#define ENMOB8_REG           CANEN1
+#define ENMOB9_REG           CANEN1
+#define ENMOB10_REG          CANEN1
+#define ENMOB11_REG          CANEN1
+#define ENMOB12_REG          CANEN1
+#define ENMOB13_REG          CANEN1
+#define ENMOB14_REG          CANEN1
+
+/* ADCSRB */
+#define ADTS0_REG            ADCSRB
+#define ADTS1_REG            ADCSRB
+#define ADTS2_REG            ADCSRB
+#define ADHSM_REG            ADCSRB
+#define ACME_REG             ADCSRB
+
+/* TCCR1A */
+#define WGM10_REG            TCCR1A
+#define WGM11_REG            TCCR1A
+#define COM1C0_REG           TCCR1A
+#define COM1C1_REG           TCCR1A
+#define COM1B0_REG           TCCR1A
+#define COM1B1_REG           TCCR1A
+#define COM1A0_REG           TCCR1A
+#define COM1A1_REG           TCCR1A
+
+/* OCR0A */
+#define OCR0A0_REG           OCR0A
+#define OCR0A1_REG           OCR0A
+#define OCR0A2_REG           OCR0A
+#define OCR0A3_REG           OCR0A
+#define OCR0A4_REG           OCR0A
+#define OCR0A5_REG           OCR0A
+#define OCR0A6_REG           OCR0A
+#define OCR0A7_REG           OCR0A
+
+/* ACSR */
+#define ACIS0_REG            ACSR
+#define ACIS1_REG            ACSR
+#define ACIC_REG             ACSR
+#define ACIE_REG             ACSR
+#define ACI_REG              ACSR
+#define ACO_REG              ACSR
+#define ACBG_REG             ACSR
+#define ACD_REG              ACSR
+
+/* UCSR0A */
+#define MPCM0_REG            UCSR0A
+#define U2X0_REG             UCSR0A
+#define UPE0_REG             UCSR0A
+#define DOR0_REG             UCSR0A
+#define FE0_REG              UCSR0A
+#define UDRE0_REG            UCSR0A
+#define TXC0_REG             UCSR0A
+#define RXC0_REG             UCSR0A
+
+/* TCCR1C */
+#define FOC1C_REG            TCCR1C
+#define FOC1B_REG            TCCR1C
+#define FOC1A_REG            TCCR1C
+
+/* ICR3H */
+#define ICR3H0_REG           ICR3H
+#define ICR3H1_REG           ICR3H
+#define ICR3H2_REG           ICR3H
+#define ICR3H3_REG           ICR3H
+#define ICR3H4_REG           ICR3H
+#define ICR3H5_REG           ICR3H
+#define ICR3H6_REG           ICR3H
+#define ICR3H7_REG           ICR3H
+
+/* DDRE */
+#define DDE0_REG             DDRE
+#define DDE1_REG             DDRE
+#define DDE2_REG             DDRE
+#define DDE3_REG             DDRE
+#define DDE4_REG             DDRE
+#define DDE5_REG             DDRE
+#define DDE6_REG             DDRE
+#define DDE7_REG             DDRE
+
+/* PORTD */
+#define PORTD0_REG           PORTD
+#define PORTD1_REG           PORTD
+#define PORTD2_REG           PORTD
+#define PORTD3_REG           PORTD
+#define PORTD4_REG           PORTD
+#define PORTD5_REG           PORTD
+#define PORTD6_REG           PORTD
+#define PORTD7_REG           PORTD
+
+/* ICR3L */
+#define ICR3L0_REG           ICR3L
+#define ICR3L1_REG           ICR3L
+#define ICR3L2_REG           ICR3L
+#define ICR3L3_REG           ICR3L
+#define ICR3L4_REG           ICR3L
+#define ICR3L5_REG           ICR3L
+#define ICR3L6_REG           ICR3L
+#define ICR3L7_REG           ICR3L
+
+/* PORTE */
+#define PORTE0_REG           PORTE
+#define PORTE1_REG           PORTE
+#define PORTE2_REG           PORTE
+#define PORTE3_REG           PORTE
+#define PORTE4_REG           PORTE
+#define PORTE5_REG           PORTE
+#define PORTE6_REG           PORTE
+#define PORTE7_REG           PORTE
+
+/* SPMCSR */
+#define SPMEN_REG            SPMCSR
+#define PGERS_REG            SPMCSR
+#define PGWRT_REG            SPMCSR
+#define BLBSET_REG           SPMCSR
+#define RWWSRE_REG           SPMCSR
+#define RWWSB_REG            SPMCSR
+#define SPMIE_REG            SPMCSR
+
+/* CANBT2 */
+#define PRS0_REG             CANBT2
+#define PRS1_REG             CANBT2
+#define PRS2_REG             CANBT2
+#define SJW0_REG             CANBT2
+#define SJW1_REG             CANBT2
+
+/* CANBT3 */
+#define SMP_REG              CANBT3
+#define PHS10_REG            CANBT3
+#define PHS11_REG            CANBT3
+#define PHS12_REG            CANBT3
+#define PHS20_REG            CANBT3
+#define PHS21_REG            CANBT3
+#define PHS22_REG            CANBT3
+
+/* ADCL */
+#define ADCL0_REG            ADCL
+#define ADCL1_REG            ADCL
+#define ADCL2_REG            ADCL
+#define ADCL3_REG            ADCL
+#define ADCL4_REG            ADCL
+#define ADCL5_REG            ADCL
+#define ADCL6_REG            ADCL
+#define ADCL7_REG            ADCL
+
+/* CANBT1 */
+#define BRP0_REG             CANBT1
+#define BRP1_REG             CANBT1
+#define BRP2_REG             CANBT1
+#define BRP3_REG             CANBT1
+#define BRP4_REG             CANBT1
+#define BRP5_REG             CANBT1
+
+/* ADCH */
+#define ADCH0_REG            ADCH
+#define ADCH1_REG            ADCH
+#define ADCH2_REG            ADCH
+#define ADCH3_REG            ADCH
+#define ADCH4_REG            ADCH
+#define ADCH5_REG            ADCH
+#define ADCH6_REG            ADCH
+#define ADCH7_REG            ADCH
+
+/* OCR3BL */
+#define OCR3BL0_REG          OCR3BL
+#define OCR3BL1_REG          OCR3BL
+#define OCR3BL2_REG          OCR3BL
+#define OCR3BL3_REG          OCR3BL
+#define OCR3BL4_REG          OCR3BL
+#define OCR3BL5_REG          OCR3BL
+#define OCR3BL6_REG          OCR3BL
+#define OCR3BL7_REG          OCR3BL
+
+/* OCR3BH */
+#define OCR3BH0_REG          OCR3BH
+#define OCR3BH1_REG          OCR3BH
+#define OCR3BH2_REG          OCR3BH
+#define OCR3BH3_REG          OCR3BH
+#define OCR3BH4_REG          OCR3BH
+#define OCR3BH5_REG          OCR3BH
+#define OCR3BH6_REG          OCR3BH
+#define OCR3BH7_REG          OCR3BH
+
+/* TIMSK2 */
+#define TOIE2_REG            TIMSK2
+#define OCIE2A_REG           TIMSK2
+
+/* TIMSK3 */
+#define TOIE3_REG            TIMSK3
+#define OCIE3A_REG           TIMSK3
+#define OCIE3B_REG           TIMSK3
+#define OCIE3C_REG           TIMSK3
+#define ICIE3_REG            TIMSK3
+
+/* TIMSK0 */
+#define TOIE0_REG            TIMSK0
+#define OCIE0A_REG           TIMSK0
+
+/* TIMSK1 */
+#define TOIE1_REG            TIMSK1
+#define OCIE1A_REG           TIMSK1
+#define OCIE1B_REG           TIMSK1
+#define OCIE1C_REG           TIMSK1
+#define ICIE1_REG            TIMSK1
+
+/* XMCRB */
+#define XMM0_REG             XMCRB
+#define XMM1_REG             XMCRB
+#define XMM2_REG             XMCRB
+#define XMBK_REG             XMCRB
+
+/* XMCRA */
+#define SRW00_REG            XMCRA
+#define SRW01_REG            XMCRA
+#define SRW10_REG            XMCRA
+#define SRW11_REG            XMCRA
+#define SRL0_REG             XMCRA
+#define SRL1_REG             XMCRA
+#define SRL2_REG             XMCRA
+#define SRE_REG              XMCRA
+
+/* TCNT1L */
+#define TCNT1L0_REG          TCNT1L
+#define TCNT1L1_REG          TCNT1L
+#define TCNT1L2_REG          TCNT1L
+#define TCNT1L3_REG          TCNT1L
+#define TCNT1L4_REG          TCNT1L
+#define TCNT1L5_REG          TCNT1L
+#define TCNT1L6_REG          TCNT1L
+#define TCNT1L7_REG          TCNT1L
+
+/* PINB */
+#define PINB0_REG            PINB
+#define PINB1_REG            PINB
+#define PINB2_REG            PINB
+#define PINB3_REG            PINB
+#define PINB4_REG            PINB
+#define PINB5_REG            PINB
+#define PINB6_REG            PINB
+#define PINB7_REG            PINB
+
+/* EIFR */
+#define INTF0_REG            EIFR
+#define INTF1_REG            EIFR
+#define INTF2_REG            EIFR
+#define INTF3_REG            EIFR
+#define INTF4_REG            EIFR
+#define INTF5_REG            EIFR
+#define INTF6_REG            EIFR
+#define INTF7_REG            EIFR
+
+/* PING */
+#define PING0_REG            PING
+#define PING1_REG            PING
+#define PING2_REG            PING
+#define PING3_REG            PING
+#define PING4_REG            PING
+
+/* PINF */
+#define PINF0_REG            PINF
+#define PINF1_REG            PINF
+#define PINF2_REG            PINF
+#define PINF3_REG            PINF
+#define PINF4_REG            PINF
+#define PINF5_REG            PINF
+#define PINF6_REG            PINF
+#define PINF7_REG            PINF
+
+/* PINE */
+#define PINE0_REG            PINE
+#define PINE1_REG            PINE
+#define PINE2_REG            PINE
+#define PINE3_REG            PINE
+#define PINE4_REG            PINE
+#define PINE5_REG            PINE
+#define PINE6_REG            PINE
+#define PINE7_REG            PINE
+
+/* PIND */
+#define PIND0_REG            PIND
+#define PIND1_REG            PIND
+#define PIND2_REG            PIND
+#define PIND3_REG            PIND
+#define PIND4_REG            PIND
+#define PIND5_REG            PIND
+#define PIND6_REG            PIND
+#define PIND7_REG            PIND
+
+/* OCR1AH */
+#define OCR1AH0_REG          OCR1AH
+#define OCR1AH1_REG          OCR1AH
+#define OCR1AH2_REG          OCR1AH
+#define OCR1AH3_REG          OCR1AH
+#define OCR1AH4_REG          OCR1AH
+#define OCR1AH5_REG          OCR1AH
+#define OCR1AH6_REG          OCR1AH
+#define OCR1AH7_REG          OCR1AH
+
+/* OCR1AL */
+#define OCR1AL0_REG          OCR1AL
+#define OCR1AL1_REG          OCR1AL
+#define OCR1AL2_REG          OCR1AL
+#define OCR1AL3_REG          OCR1AL
+#define OCR1AL4_REG          OCR1AL
+#define OCR1AL5_REG          OCR1AL
+#define OCR1AL6_REG          OCR1AL
+#define OCR1AL7_REG          OCR1AL
+
+/* TIFR0 */
+#define TOV0_REG             TIFR0
+#define OCF0A_REG            TIFR0
+
+/* pins mapping */
+#define AD0_PORT PORTA
+#define AD0_BIT 0
+
+#define AD1_PORT PORTA
+#define AD1_BIT 1
+
+#define AD2_PORT PORTA
+#define AD2_BIT 2
+
+#define AD3_PORT PORTA
+#define AD3_BIT 3
+
+#define AD4_PORT PORTA
+#define AD4_BIT 4
+
+#define AD5_PORT PORTA
+#define AD5_BIT 5
+
+#define AD6_PORT PORTA
+#define AD6_BIT 6
+
+#define AD7_PORT PORTA
+#define AD7_BIT 7
+
+#define SS_PORT PORTB
+#define SS_BIT 0
+
+#define SCK_PORT PORTB
+#define SCK_BIT 1
+
+#define MOSI_PORT PORTB
+#define MOSI_BIT 2
+
+#define MISO_PORT PORTB
+#define MISO_BIT 3
+
+#define OC0_PORT PORTB
+#define OC0_BIT 4
+#define PWM0_PORT PORTB
+#define PWM0_BIT 4
+
+#define OC1A_PORT PORTB
+#define OC1A_BIT 5
+#define PWM1A_PORT PORTB
+#define PWM1A_BIT 5
+
+#define OC1B_PORT PORTB
+#define OC1B_BIT 6
+#define PWM1B_PORT PORTB
+#define PWM1B_BIT 6
+
+#define OC2_PORT PORTB
+#define OC2_BIT 7
+#define PWM2_PORT PORTB
+#define PWM2_BIT 7
+#define OC1C_PORT PORTB
+#define OC1C_BIT 7
+
+#define A8_PORT PORTC
+#define A8_BIT 0
+
+#define A9_PORT PORTC
+#define A9_BIT 1
+
+#define A10_PORT PORTC
+#define A10_BIT 2
+
+#define A11_PORT PORTC
+#define A11_BIT 3
+
+#define A12_PORT PORTC
+#define A12_BIT 4
+
+#define A13_PORT PORTC
+#define A13_BIT 5
+
+#define A14_PORT PORTC
+#define A14_BIT 6
+
+#define A15_PORT PORTC
+#define A15_BIT 7
+
+#define SCL_PORT PORTD
+#define SCL_BIT 0
+#define INT0_PORT PORTD
+#define INT0_BIT 0
+
+#define SDA_PORT PORTD
+#define SDA_BIT 1
+#define INT1_PORT PORTD
+#define INT1_BIT 1
+
+#define RXD1_PORT PORTD
+#define RXD1_BIT 2
+#define INT2_PORT PORTD
+#define INT2_BIT 2
+
+#define TXD1_PORT PORTD
+#define TXD1_BIT 3
+#define INT3_PORT PORTD
+#define INT3_BIT 3
+
+#define IC1_PORT PORTD
+#define IC1_BIT 4
+
+#define XCK1_PORT PORTD
+#define XCK1_BIT 5
+
+#define T1_PORT PORTD
+#define T1_BIT 6
+
+#define T2_PORT PORTD
+#define T2_BIT 7
+
+#define RXD0_PORT PORTE
+#define RXD0_BIT 0
+#define PDI_PORT PORTE
+#define PDI_BIT 0
+
+#define TXD0_PORT PORTE
+#define TXD0_BIT 1
+#define PDO_PORT PORTE
+#define PDO_BIT 1
+
+#define XCK0_PORT PORTE
+#define XCK0_BIT 2
+#define AIN0_PORT PORTE
+#define AIN0_BIT 2
+
+#define OC3A_PORT PORTE
+#define OC3A_BIT 3
+#define AIN1_PORT PORTE
+#define AIN1_BIT 3
+
+#define OC3B_PORT PORTE
+#define OC3B_BIT 4
+#define INT4_PORT PORTE
+#define INT4_BIT 4
+
+#define OC3C_PORT PORTE
+#define OC3C_BIT 5
+#define INT5_PORT PORTE
+#define INT5_BIT 5
+
+#define T3_PORT PORTE
+#define T3_BIT 6
+#define INT6_PORT PORTE
+#define INT6_BIT 6
+
+#define IC3_PORT PORTE
+#define IC3_BIT 7
+#define INT7_PORT PORTE
+#define INT7_BIT 7
+
+#define ADC0_PORT PORTF
+#define ADC0_BIT 0
+
+#define ADC1_PORT PORTF
+#define ADC1_BIT 1
+
+#define ADC2_PORT PORTF
+#define ADC2_BIT 2
+
+#define ADC3_PORT PORTF
+#define ADC3_BIT 3
+
+#define ADC4_PORT PORTF
+#define ADC4_BIT 4
+#define TCK_PORT PORTF
+#define TCK_BIT 4
+
+#define ADC5_PORT PORTF
+#define ADC5_BIT 5
+#define TMS_PORT PORTF
+#define TMS_BIT 5
+
+#define ADC6_PORT PORTF
+#define ADC6_BIT 6
+#define TD0_PORT PORTF
+#define TD0_BIT 6
+
+#define ADC7_PORT PORTF
+#define ADC7_BIT 7
+#define TDI_PORT PORTF
+#define TDI_BIT 7
+
+#define WR_PORT PORTG
+#define WR_BIT 0
+
+#define RD_PORT PORTG
+#define RD_BIT 1
+
+#define ALE_PORT PORTG
+#define ALE_BIT 2
+
+#define TOSC2_PORT PORTG
+#define TOSC2_BIT 3
+
+#define TOSC1_PORT PORTG
+#define TOSC1_BIT 4
+
+
diff --git a/aversive/parts/AT90CAN32.h b/aversive/parts/AT90CAN32.h
new file mode 100644 (file)
index 0000000..84fee1a
--- /dev/null
@@ -0,0 +1,1622 @@
+/*  
+ *  Copyright Droids Corporation, Microb Technology, Eirbot (2009)
+ * 
+ *  This program 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program 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 this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ *  Revision : $Id $
+ *
+ */
+
+/* WARNING : this file is automatically generated by scripts.
+ * You should not edit it. If you find something wrong in it,
+ * write to zer0@droids-corp.org */
+
+
+/* prescalers timer 0 */
+#define TIMER0_PRESCALER_DIV_0          0
+#define TIMER0_PRESCALER_DIV_1          1
+#define TIMER0_PRESCALER_DIV_8          2
+#define TIMER0_PRESCALER_DIV_64         3
+#define TIMER0_PRESCALER_DIV_256        4
+#define TIMER0_PRESCALER_DIV_1024       5
+#define TIMER0_PRESCALER_DIV_FALL       6
+#define TIMER0_PRESCALER_DIV_RISE       7
+
+#define TIMER0_PRESCALER_REG_0          0
+#define TIMER0_PRESCALER_REG_1          1
+#define TIMER0_PRESCALER_REG_2          8
+#define TIMER0_PRESCALER_REG_3          64
+#define TIMER0_PRESCALER_REG_4          256
+#define TIMER0_PRESCALER_REG_5          1024
+#define TIMER0_PRESCALER_REG_6          -1
+#define TIMER0_PRESCALER_REG_7          -2
+
+/* prescalers timer 1 */
+#define TIMER1_PRESCALER_DIV_0          0
+#define TIMER1_PRESCALER_DIV_1          1
+#define TIMER1_PRESCALER_DIV_8          2
+#define TIMER1_PRESCALER_DIV_64         3
+#define TIMER1_PRESCALER_DIV_256        4
+#define TIMER1_PRESCALER_DIV_1024       5
+#define TIMER1_PRESCALER_DIV_FALL       6
+#define TIMER1_PRESCALER_DIV_RISE       7
+
+#define TIMER1_PRESCALER_REG_0          0
+#define TIMER1_PRESCALER_REG_1          1
+#define TIMER1_PRESCALER_REG_2          8
+#define TIMER1_PRESCALER_REG_3          64
+#define TIMER1_PRESCALER_REG_4          256
+#define TIMER1_PRESCALER_REG_5          1024
+#define TIMER1_PRESCALER_REG_6          -1
+#define TIMER1_PRESCALER_REG_7          -2
+
+/* prescalers timer 2 */
+#define TIMER2_PRESCALER_DIV_0          0
+#define TIMER2_PRESCALER_DIV_1          1
+#define TIMER2_PRESCALER_DIV_8          2
+#define TIMER2_PRESCALER_DIV_32         3
+#define TIMER2_PRESCALER_DIV_64         4
+#define TIMER2_PRESCALER_DIV_128        5
+#define TIMER2_PRESCALER_DIV_256        6
+#define TIMER2_PRESCALER_DIV_1024       7
+
+#define TIMER2_PRESCALER_REG_0          0
+#define TIMER2_PRESCALER_REG_1          1
+#define TIMER2_PRESCALER_REG_2          8
+#define TIMER2_PRESCALER_REG_3          32
+#define TIMER2_PRESCALER_REG_4          64
+#define TIMER2_PRESCALER_REG_5          128
+#define TIMER2_PRESCALER_REG_6          256
+#define TIMER2_PRESCALER_REG_7          1024
+
+/* prescalers timer 3 */
+#define TIMER3_PRESCALER_DIV_0          0
+#define TIMER3_PRESCALER_DIV_1          1
+#define TIMER3_PRESCALER_DIV_8          2
+#define TIMER3_PRESCALER_DIV_64         3
+#define TIMER3_PRESCALER_DIV_256        4
+#define TIMER3_PRESCALER_DIV_1024       5
+#define TIMER3_PRESCALER_DIV_FALL       6
+#define TIMER3_PRESCALER_DIV_RISE       7
+
+#define TIMER3_PRESCALER_REG_0          0
+#define TIMER3_PRESCALER_REG_1          1
+#define TIMER3_PRESCALER_REG_2          8
+#define TIMER3_PRESCALER_REG_3          64
+#define TIMER3_PRESCALER_REG_4          256
+#define TIMER3_PRESCALER_REG_5          1024
+#define TIMER3_PRESCALER_REG_6          -1
+#define TIMER3_PRESCALER_REG_7          -2
+
+
+/* available timers */
+#define TIMER0_AVAILABLE
+#define TIMER1_AVAILABLE
+#define TIMER1A_AVAILABLE
+#define TIMER1B_AVAILABLE
+#define TIMER1C_AVAILABLE
+#define TIMER2_AVAILABLE
+#define TIMER3_AVAILABLE
+#define TIMER3A_AVAILABLE
+#define TIMER3B_AVAILABLE
+#define TIMER3C_AVAILABLE
+
+/* overflow interrupt number */
+#define SIG_OVERFLOW0_NUM 0
+#define SIG_OVERFLOW1_NUM 1
+#define SIG_OVERFLOW2_NUM 2
+#define SIG_OVERFLOW3_NUM 3
+#define SIG_OVERFLOW_TOTAL_NUM 4
+
+/* output compare interrupt number */
+#define SIG_OUTPUT_COMPARE0_NUM 0
+#define SIG_OUTPUT_COMPARE1A_NUM 1
+#define SIG_OUTPUT_COMPARE1B_NUM 2
+#define SIG_OUTPUT_COMPARE1C_NUM 3
+#define SIG_OUTPUT_COMPARE2_NUM 4
+#define SIG_OUTPUT_COMPARE3A_NUM 5
+#define SIG_OUTPUT_COMPARE3B_NUM 6
+#define SIG_OUTPUT_COMPARE3C_NUM 7
+#define SIG_OUTPUT_COMPARE_TOTAL_NUM 8
+
+/* Pwm nums */
+#define PWM0_NUM 0
+#define PWM1A_NUM 1
+#define PWM1B_NUM 2
+#define PWM1C_NUM 3
+#define PWM2_NUM 4
+#define PWM3A_NUM 5
+#define PWM3B_NUM 6
+#define PWM3C_NUM 7
+#define PWM_TOTAL_NUM 8
+
+/* input capture interrupt number */
+#define SIG_INPUT_CAPTURE1_NUM 0
+#define SIG_INPUT_CAPTURE3_NUM 1
+#define SIG_INPUT_CAPTURE_TOTAL_NUM 2
+
+
+/* WDTCR */
+#define WDP0_REG             WDTCR
+#define WDP1_REG             WDTCR
+#define WDP2_REG             WDTCR
+#define WDE_REG              WDTCR
+#define WDCE_REG             WDTCR
+
+/* ADMUX */
+#define MUX0_REG             ADMUX
+#define MUX1_REG             ADMUX
+#define MUX2_REG             ADMUX
+#define MUX3_REG             ADMUX
+#define MUX4_REG             ADMUX
+#define ADLAR_REG            ADMUX
+#define REFS0_REG            ADMUX
+#define REFS1_REG            ADMUX
+
+/* EEDR */
+#define EEDR0_REG            EEDR
+#define EEDR1_REG            EEDR
+#define EEDR2_REG            EEDR
+#define EEDR3_REG            EEDR
+#define EEDR4_REG            EEDR
+#define EEDR5_REG            EEDR
+#define EEDR6_REG            EEDR
+#define EEDR7_REG            EEDR
+
+/* RAMPZ */
+#define RAMPZ0_REG           RAMPZ
+
+/* OCR2A */
+#define OCR2A0_REG           OCR2A
+#define OCR2A1_REG           OCR2A
+#define OCR2A2_REG           OCR2A
+#define OCR2A3_REG           OCR2A
+#define OCR2A4_REG           OCR2A
+#define OCR2A5_REG           OCR2A
+#define OCR2A6_REG           OCR2A
+#define OCR2A7_REG           OCR2A
+
+/* SPDR */
+#define SPDR0_REG            SPDR
+#define SPDR1_REG            SPDR
+#define SPDR2_REG            SPDR
+#define SPDR3_REG            SPDR
+#define SPDR4_REG            SPDR
+#define SPDR5_REG            SPDR
+#define SPDR6_REG            SPDR
+#define SPDR7_REG            SPDR
+
+/* SPSR */
+#define SPI2X_REG            SPSR
+#define WCOL_REG             SPSR
+#define SPIF_REG             SPSR
+
+/* ICR1H */
+#define ICR1H0_REG           ICR1H
+#define ICR1H1_REG           ICR1H
+#define ICR1H2_REG           ICR1H
+#define ICR1H3_REG           ICR1H
+#define ICR1H4_REG           ICR1H
+#define ICR1H5_REG           ICR1H
+#define ICR1H6_REG           ICR1H
+#define ICR1H7_REG           ICR1H
+
+/* ICR1L */
+#define ICR1L0_REG           ICR1L
+#define ICR1L1_REG           ICR1L
+#define ICR1L2_REG           ICR1L
+#define ICR1L3_REG           ICR1L
+#define ICR1L4_REG           ICR1L
+#define ICR1L5_REG           ICR1L
+#define ICR1L6_REG           ICR1L
+#define ICR1L7_REG           ICR1L
+
+/* EEARH */
+#define EEAR8_REG            EEARH
+#define EEAR9_REG            EEARH
+#define EEAR10_REG           EEARH
+#define EEAR11_REG           EEARH
+
+/* CANGSTA */
+#define ERRP_REG             CANGSTA
+#define BOFF_REG             CANGSTA
+#define ENFG_REG             CANGSTA
+#define RXBSY_REG            CANGSTA
+#define TXBSY_REG            CANGSTA
+#define OVRG_REG             CANGSTA
+
+/* CANGCON */
+#define SWRES_REG            CANGCON
+#define ENASTB_REG           CANGCON
+#define TEST_REG             CANGCON
+#define LISTEN_REG           CANGCON
+#define SYNTTC_REG           CANGCON
+#define TTC_REG              CANGCON
+#define OVRQ_REG             CANGCON
+#define ABRQ_REG             CANGCON
+
+/* PORTG */
+#define PORTG0_REG           PORTG
+#define PORTG1_REG           PORTG
+#define PORTG2_REG           PORTG
+#define PORTG3_REG           PORTG
+#define PORTG4_REG           PORTG
+
+/* UCSR0C */
+#define UCPOL0_REG           UCSR0C
+#define UCSZ00_REG           UCSR0C
+#define UCSZ01_REG           UCSR0C
+#define USBS0_REG            UCSR0C
+#define UPM00_REG            UCSR0C
+#define UPM01_REG            UCSR0C
+#define UMSEL0_REG           UCSR0C
+
+/* UCSR0B */
+#define TXB80_REG            UCSR0B
+#define RXB80_REG            UCSR0B
+#define UCSZ02_REG           UCSR0B
+#define TXEN0_REG            UCSR0B
+#define RXEN0_REG            UCSR0B
+#define UDRIE0_REG           UCSR0B
+#define TXCIE0_REG           UCSR0B
+#define RXCIE0_REG           UCSR0B
+
+/* TCNT1H */
+#define TCNT1H0_REG          TCNT1H
+#define TCNT1H1_REG          TCNT1H
+#define TCNT1H2_REG          TCNT1H
+#define TCNT1H3_REG          TCNT1H
+#define TCNT1H4_REG          TCNT1H
+#define TCNT1H5_REG          TCNT1H
+#define TCNT1H6_REG          TCNT1H
+#define TCNT1H7_REG          TCNT1H
+
+/* PORTC */
+#define PORTC0_REG           PORTC
+#define PORTC1_REG           PORTC
+#define PORTC2_REG           PORTC
+#define PORTC3_REG           PORTC
+#define PORTC4_REG           PORTC
+#define PORTC5_REG           PORTC
+#define PORTC6_REG           PORTC
+#define PORTC7_REG           PORTC
+
+/* PORTA */
+#define PORTA0_REG           PORTA
+#define PORTA1_REG           PORTA
+#define PORTA2_REG           PORTA
+#define PORTA3_REG           PORTA
+#define PORTA4_REG           PORTA
+#define PORTA5_REG           PORTA
+#define PORTA6_REG           PORTA
+#define PORTA7_REG           PORTA
+
+/* EEARL */
+#define EEARL0_REG           EEARL
+#define EEARL1_REG           EEARL
+#define EEARL2_REG           EEARL
+#define EEARL3_REG           EEARL
+#define EEARL4_REG           EEARL
+#define EEARL5_REG           EEARL
+#define EEARL6_REG           EEARL
+#define EEARL7_REG           EEARL
+
+/* EIMSK */
+#define INT0_REG             EIMSK
+#define INT1_REG             EIMSK
+#define INT2_REG             EIMSK
+#define INT3_REG             EIMSK
+#define INT4_REG             EIMSK
+#define INT5_REG             EIMSK
+#define INT6_REG             EIMSK
+#define INT7_REG             EIMSK
+
+/* UDR1 */
+#define UDR10_REG            UDR1
+#define UDR11_REG            UDR1
+#define UDR12_REG            UDR1
+#define UDR13_REG            UDR1
+#define UDR14_REG            UDR1
+#define UDR15_REG            UDR1
+#define UDR16_REG            UDR1
+#define UDR17_REG            UDR1
+
+/* UDR0 */
+#define UDR00_REG            UDR0
+#define UDR01_REG            UDR0
+#define UDR02_REG            UDR0
+#define UDR03_REG            UDR0
+#define UDR04_REG            UDR0
+#define UDR05_REG            UDR0
+#define UDR06_REG            UDR0
+#define UDR07_REG            UDR0
+
+/* GPIOR2 */
+#define GPIOR20_REG          GPIOR2
+#define GPIOR21_REG          GPIOR2
+#define GPIOR22_REG          GPIOR2
+#define GPIOR23_REG          GPIOR2
+#define GPIOR24_REG          GPIOR2
+#define GPIOR25_REG          GPIOR2
+#define GPIOR26_REG          GPIOR2
+#define GPIOR27_REG          GPIOR2
+
+/* EICRB */
+#define ISC40_REG            EICRB
+#define ISC41_REG            EICRB
+#define ISC50_REG            EICRB
+#define ISC51_REG            EICRB
+#define ISC60_REG            EICRB
+#define ISC61_REG            EICRB
+#define ISC70_REG            EICRB
+#define ISC71_REG            EICRB
+
+/* EICRA */
+#define ISC00_REG            EICRA
+#define ISC01_REG            EICRA
+#define ISC10_REG            EICRA
+#define ISC11_REG            EICRA
+#define ISC20_REG            EICRA
+#define ISC21_REG            EICRA
+#define ISC30_REG            EICRA
+#define ISC31_REG            EICRA
+
+/* DIDR0 */
+#define ADC0D_REG            DIDR0
+#define ADC1D_REG            DIDR0
+#define ADC2D_REG            DIDR0
+#define ADC3D_REG            DIDR0
+#define ADC4D_REG            DIDR0
+#define ADC5D_REG            DIDR0
+#define ADC6D_REG            DIDR0
+#define ADC7D_REG            DIDR0
+
+/* DIDR1 */
+#define AIN0D_REG            DIDR1
+#define AIN1D_REG            DIDR1
+
+/* DDRF */
+#define DDF0_REG             DDRF
+#define DDF1_REG             DDRF
+#define DDF2_REG             DDRF
+#define DDF3_REG             DDRF
+#define DDF4_REG             DDRF
+#define DDF5_REG             DDRF
+#define DDF6_REG             DDRF
+#define DDF7_REG             DDRF
+
+/* ASSR */
+#define TCR2UB_REG           ASSR
+#define OCR2UB_REG           ASSR
+#define TCN2UB_REG           ASSR
+#define AS2_REG              ASSR
+#define EXCLK_REG            ASSR
+
+/* CLKPR */
+#define CLKPS0_REG           CLKPR
+#define CLKPS1_REG           CLKPR
+#define CLKPS2_REG           CLKPR
+#define CLKPS3_REG           CLKPR
+#define CLKPCE_REG           CLKPR
+
+/* SREG */
+#define C_REG                SREG
+#define Z_REG                SREG
+#define N_REG                SREG
+#define V_REG                SREG
+#define S_REG                SREG
+#define H_REG                SREG
+#define T_REG                SREG
+#define I_REG                SREG
+
+/* CANIDM1 */
+#define IDMSK21_REG          CANIDM1
+#define IDMSK22_REG          CANIDM1
+#define IDMSK23_REG          CANIDM1
+#define IDMSK24_REG          CANIDM1
+#define IDMSK25_REG          CANIDM1
+#define IDMSK26_REG          CANIDM1
+#define IDMSK27_REG          CANIDM1
+#define IDMSK28_REG          CANIDM1
+
+/* CANIDM3 */
+#define IDMSK5_REG           CANIDM3
+#define IDMSK6_REG           CANIDM3
+#define IDMSK7_REG           CANIDM3
+#define IDMSK8_REG           CANIDM3
+#define IDMSK9_REG           CANIDM3
+#define IDMSK10_REG          CANIDM3
+#define IDMSK11_REG          CANIDM3
+#define IDMSK12_REG          CANIDM3
+
+/* CANIDM2 */
+#define IDMSK13_REG          CANIDM2
+#define IDMSK14_REG          CANIDM2
+#define IDMSK15_REG          CANIDM2
+#define IDMSK16_REG          CANIDM2
+#define IDMSK17_REG          CANIDM2
+#define IDMSK18_REG          CANIDM2
+#define IDMSK19_REG          CANIDM2
+#define IDMSK20_REG          CANIDM2
+
+/* CANIDM4 */
+#define IDEMSK_REG           CANIDM4
+#define RTRMSK_REG           CANIDM4
+#define IDMSK0_REG           CANIDM4
+#define IDMSK1_REG           CANIDM4
+#define IDMSK2_REG           CANIDM4
+#define IDMSK3_REG           CANIDM4
+#define IDMSK4_REG           CANIDM4
+
+/* UBRR1L */
+/* #define UBRR0_REG            UBRR1L */ /* dup in UBRR0L */
+/* #define UBRR1_REG            UBRR1L */ /* dup in UBRR0L */
+/* #define UBRR2_REG            UBRR1L */ /* dup in UBRR0L */
+/* #define UBRR3_REG            UBRR1L */ /* dup in UBRR0L */
+/* #define UBRR4_REG            UBRR1L */ /* dup in UBRR0L */
+/* #define UBRR5_REG            UBRR1L */ /* dup in UBRR0L */
+/* #define UBRR6_REG            UBRR1L */ /* dup in UBRR0L */
+/* #define UBRR7_REG            UBRR1L */ /* dup in UBRR0L */
+
+/* DDRC */
+#define DDC0_REG             DDRC
+#define DDC1_REG             DDRC
+#define DDC2_REG             DDRC
+#define DDC3_REG             DDRC
+#define DDC4_REG             DDRC
+#define DDC5_REG             DDRC
+#define DDC6_REG             DDRC
+#define DDC7_REG             DDRC
+
+/* OCR3AL */
+#define OCR3AL0_REG          OCR3AL
+#define OCR3AL1_REG          OCR3AL
+#define OCR3AL2_REG          OCR3AL
+#define OCR3AL3_REG          OCR3AL
+#define OCR3AL4_REG          OCR3AL
+#define OCR3AL5_REG          OCR3AL
+#define OCR3AL6_REG          OCR3AL
+#define OCR3AL7_REG          OCR3AL
+
+/* DDRA */
+#define DDA0_REG             DDRA
+#define DDA1_REG             DDRA
+#define DDA2_REG             DDRA
+#define DDA3_REG             DDRA
+#define DDA4_REG             DDRA
+#define DDA5_REG             DDRA
+#define DDA6_REG             DDRA
+#define DDA7_REG             DDRA
+
+/* UBRR1H */
+/* #define UBRR8_REG            UBRR1H */ /* dup in UBRR0H */
+/* #define UBRR9_REG            UBRR1H */ /* dup in UBRR0H */
+/* #define UBRR10_REG           UBRR1H */ /* dup in UBRR0H */
+/* #define UBRR11_REG           UBRR1H */ /* dup in UBRR0H */
+
+/* DDRG */
+#define DDG0_REG             DDRG
+#define DDG1_REG             DDRG
+#define DDG2_REG             DDRG
+#define DDG3_REG             DDRG
+#define DDG4_REG             DDRG
+
+/* OCR3AH */
+#define OCR3AH0_REG          OCR3AH
+#define OCR3AH1_REG          OCR3AH
+#define OCR3AH2_REG          OCR3AH
+#define OCR3AH3_REG          OCR3AH
+#define OCR3AH4_REG          OCR3AH
+#define OCR3AH5_REG          OCR3AH
+#define OCR3AH6_REG          OCR3AH
+#define OCR3AH7_REG          OCR3AH
+
+/* TCCR1B */
+#define CS10_REG             TCCR1B
+#define CS11_REG             TCCR1B
+#define CS12_REG             TCCR1B
+#define WGM12_REG            TCCR1B
+#define WGM13_REG            TCCR1B
+#define ICES1_REG            TCCR1B
+#define ICNC1_REG            TCCR1B
+
+/* OSCCAL */
+#define CAL0_REG             OSCCAL
+#define CAL1_REG             OSCCAL
+#define CAL2_REG             OSCCAL
+#define CAL3_REG             OSCCAL
+#define CAL4_REG             OSCCAL
+#define CAL5_REG             OSCCAL
+#define CAL6_REG             OSCCAL
+
+/* DDRD */
+#define DDD0_REG             DDRD
+#define DDD1_REG             DDRD
+#define DDD2_REG             DDRD
+#define DDD3_REG             DDRD
+#define DDD4_REG             DDRD
+#define DDD5_REG             DDRD
+#define DDD6_REG             DDRD
+#define DDD7_REG             DDRD
+
+/* GPIOR1 */
+#define GPIOR10_REG          GPIOR1
+#define GPIOR11_REG          GPIOR1
+#define GPIOR12_REG          GPIOR1
+#define GPIOR13_REG          GPIOR1
+#define GPIOR14_REG          GPIOR1
+#define GPIOR15_REG          GPIOR1
+#define GPIOR16_REG          GPIOR1
+#define GPIOR17_REG          GPIOR1
+
+/* GPIOR0 */
+#define GPIOR00_REG          GPIOR0
+#define GPIOR01_REG          GPIOR0
+#define GPIOR02_REG          GPIOR0
+#define GPIOR03_REG          GPIOR0
+#define GPIOR04_REG          GPIOR0
+#define GPIOR05_REG          GPIOR0
+#define GPIOR06_REG          GPIOR0
+#define GPIOR07_REG          GPIOR0
+
+/* TWBR */
+#define TWBR0_REG            TWBR
+#define TWBR1_REG            TWBR
+#define TWBR2_REG            TWBR
+#define TWBR3_REG            TWBR
+#define TWBR4_REG            TWBR
+#define TWBR5_REG            TWBR
+#define TWBR6_REG            TWBR
+#define TWBR7_REG            TWBR
+
+/* CANGIT */
+#define AERG_REG             CANGIT
+#define FERG_REG             CANGIT
+#define CERG_REG             CANGIT
+#define SERG_REG             CANGIT
+#define BXOK_REG             CANGIT
+#define OVRTIM_REG           CANGIT
+#define BOFFIT_REG           CANGIT
+#define CANIT_REG            CANGIT
+
+/* TCNT2 */
+#define TCNT2_0_REG          TCNT2
+#define TCNT2_1_REG          TCNT2
+#define TCNT2_2_REG          TCNT2
+#define TCNT2_3_REG          TCNT2
+#define TCNT2_4_REG          TCNT2
+#define TCNT2_5_REG          TCNT2
+#define TCNT2_6_REG          TCNT2
+#define TCNT2_7_REG          TCNT2
+
+/* CANGIE */
+#define ENOVRT_REG           CANGIE
+#define ENERG_REG            CANGIE
+#define ENBX_REG             CANGIE
+#define ENERR_REG            CANGIE
+#define ENTX_REG             CANGIE
+#define ENRX_REG             CANGIE
+#define ENBOFF_REG           CANGIE
+#define ENIT_REG             CANGIE
+
+/* TCNT0 */
+#define TCNT0_0_REG          TCNT0
+#define TCNT0_1_REG          TCNT0
+#define TCNT0_2_REG          TCNT0
+#define TCNT0_3_REG          TCNT0
+#define TCNT0_4_REG          TCNT0
+#define TCNT0_5_REG          TCNT0
+#define TCNT0_6_REG          TCNT0
+#define TCNT0_7_REG          TCNT0
+
+/* TWAR */
+#define TWGCE_REG            TWAR
+#define TWA0_REG             TWAR
+#define TWA1_REG             TWAR
+#define TWA2_REG             TWAR
+#define TWA3_REG             TWAR
+#define TWA4_REG             TWAR
+#define TWA5_REG             TWAR
+#define TWA6_REG             TWAR
+
+/* CANIE2 */
+#define IEMOB0_REG           CANIE2
+#define IEMOB1_REG           CANIE2
+#define IEMOB2_REG           CANIE2
+#define IEMOB3_REG           CANIE2
+#define IEMOB4_REG           CANIE2
+#define IEMOB5_REG           CANIE2
+#define IEMOB6_REG           CANIE2
+#define IEMOB7_REG           CANIE2
+
+/* TCCR3C */
+#define FOC3C_REG            TCCR3C
+#define FOC3B_REG            TCCR3C
+#define FOC3A_REG            TCCR3C
+
+/* CANIE1 */
+#define IEMOB8_REG           CANIE1
+#define IEMOB9_REG           CANIE1
+#define IEMOB10_REG          CANIE1
+#define IEMOB11_REG          CANIE1
+#define IEMOB12_REG          CANIE1
+#define IEMOB13_REG          CANIE1
+#define IEMOB14_REG          CANIE1
+
+/* TCCR0A */
+#define CS00_REG             TCCR0A
+#define CS01_REG             TCCR0A
+#define CS02_REG             TCCR0A
+#define WGM01_REG            TCCR0A
+#define COM0A0_REG           TCCR0A
+#define COM0A1_REG           TCCR0A
+#define WGM00_REG            TCCR0A
+#define FOC0A_REG            TCCR0A
+
+/* TIFR2 */
+#define TOV2_REG             TIFR2
+#define OCF2A_REG            TIFR2
+
+/* TIFR3 */
+#define TOV3_REG             TIFR3
+#define OCF3A_REG            TIFR3
+#define OCF3B_REG            TIFR3
+#define OCF3C_REG            TIFR3
+#define ICF3_REG             TIFR3
+
+/* SPCR */
+#define SPR0_REG             SPCR
+#define SPR1_REG             SPCR
+#define CPHA_REG             SPCR
+#define CPOL_REG             SPCR
+#define MSTR_REG             SPCR
+#define DORD_REG             SPCR
+#define SPE_REG              SPCR
+#define SPIE_REG             SPCR
+
+/* TIFR1 */
+#define TOV1_REG             TIFR1
+#define OCF1A_REG            TIFR1
+#define OCF1B_REG            TIFR1
+#define OCF1C_REG            TIFR1
+#define ICF1_REG             TIFR1
+
+/* CANIDT4 */
+#define RB0TAG_REG           CANIDT4
+#define RB1TAG_REG           CANIDT4
+#define RTRTAG_REG           CANIDT4
+#define IDT0_REG             CANIDT4
+#define IDT1_REG             CANIDT4
+#define IDT2_REG             CANIDT4
+#define IDT3_REG             CANIDT4
+#define IDT4_REG             CANIDT4
+
+/* CANIDT2 */
+#define IDT13_REG            CANIDT2
+#define IDT14_REG            CANIDT2
+#define IDT15_REG            CANIDT2
+#define IDT16_REG            CANIDT2
+#define IDT17_REG            CANIDT2
+#define IDT18_REG            CANIDT2
+#define IDT19_REG            CANIDT2
+#define IDT20_REG            CANIDT2
+
+/* CANIDT3 */
+#define IDT5_REG             CANIDT3
+#define IDT6_REG             CANIDT3
+#define IDT7_REG             CANIDT3
+#define IDT8_REG             CANIDT3
+#define IDT9_REG             CANIDT3
+#define IDT10_REG            CANIDT3
+#define IDT11_REG            CANIDT3
+#define IDT12_REG            CANIDT3
+
+/* CANIDT1 */
+#define IDT21_REG            CANIDT1
+#define IDT22_REG            CANIDT1
+#define IDT23_REG            CANIDT1
+#define IDT24_REG            CANIDT1
+#define IDT25_REG            CANIDT1
+#define IDT26_REG            CANIDT1
+#define IDT27_REG            CANIDT1
+#define IDT28_REG            CANIDT1
+
+/* CANSIT1 */
+#define SIT8_REG             CANSIT1
+#define SIT9_REG             CANSIT1
+#define SIT10_REG            CANSIT1
+#define SIT11_REG            CANSIT1
+#define SIT12_REG            CANSIT1
+#define SIT13_REG            CANSIT1
+#define SIT14_REG            CANSIT1
+
+/* OCR3CH */
+#define OCR3CH0_REG          OCR3CH
+#define OCR3CH1_REG          OCR3CH
+#define OCR3CH2_REG          OCR3CH
+#define OCR3CH3_REG          OCR3CH
+#define OCR3CH4_REG          OCR3CH
+#define OCR3CH5_REG          OCR3CH
+#define OCR3CH6_REG          OCR3CH
+#define OCR3CH7_REG          OCR3CH
+
+/* OCR3CL */
+#define OCR3CL0_REG          OCR3CL
+#define OCR3CL1_REG          OCR3CL
+#define OCR3CL2_REG          OCR3CL
+#define OCR3CL3_REG          OCR3CL
+#define OCR3CL4_REG          OCR3CL
+#define OCR3CL5_REG          OCR3CL
+#define OCR3CL6_REG          OCR3CL
+#define OCR3CL7_REG          OCR3CL
+
+/* GTCCR */
+#define PSR310_REG           GTCCR
+#define TSM_REG              GTCCR
+#define PSR2_REG             GTCCR
+
+/* CANCDMOB */
+#define DLC0_REG             CANCDMOB
+#define DLC1_REG             CANCDMOB
+#define DLC2_REG             CANCDMOB
+#define DLC3_REG             CANCDMOB
+#define IDE_REG              CANCDMOB
+#define RPLV_REG             CANCDMOB
+#define CONMOB0_REG          CANCDMOB
+#define CONMOB1_REG          CANCDMOB
+
+/* SPH */
+#define SP8_REG              SPH
+#define SP9_REG              SPH
+#define SP10_REG             SPH
+#define SP11_REG             SPH
+#define SP12_REG             SPH
+#define SP13_REG             SPH
+#define SP14_REG             SPH
+#define SP15_REG             SPH
+
+/* CANSIT2 */
+#define SIT0_REG             CANSIT2
+#define SIT1_REG             CANSIT2
+#define SIT2_REG             CANSIT2
+#define SIT3_REG             CANSIT2
+#define SIT4_REG             CANSIT2
+#define SIT5_REG             CANSIT2
+#define SIT6_REG             CANSIT2
+#define SIT7_REG             CANSIT2
+
+/* CANHPMOB */
+#define CGP0_REG             CANHPMOB
+#define CGP1_REG             CANHPMOB
+#define CGP2_REG             CANHPMOB
+#define CGP3_REG             CANHPMOB
+#define HPMOB0_REG           CANHPMOB
+#define HPMOB1_REG           CANHPMOB
+#define HPMOB2_REG           CANHPMOB
+#define HPMOB3_REG           CANHPMOB
+
+/* TCCR3B */
+#define CS30_REG             TCCR3B
+#define CS31_REG             TCCR3B
+#define CS32_REG             TCCR3B
+#define WGM32_REG            TCCR3B
+#define WGM33_REG            TCCR3B
+#define ICES3_REG            TCCR3B
+#define ICNC3_REG            TCCR3B
+
+/* TCCR3A */
+#define WGM30_REG            TCCR3A
+#define WGM31_REG            TCCR3A
+#define COM3C0_REG           TCCR3A
+#define COM3C1_REG           TCCR3A
+#define COM3B0_REG           TCCR3A
+#define COM3B1_REG           TCCR3A
+#define COM3A0_REG           TCCR3A
+#define COM3A1_REG           TCCR3A
+
+/* PORTF */
+#define PORTF0_REG           PORTF
+#define PORTF1_REG           PORTF
+#define PORTF2_REG           PORTF
+#define PORTF3_REG           PORTF
+#define PORTF4_REG           PORTF
+#define PORTF5_REG           PORTF
+#define PORTF6_REG           PORTF
+#define PORTF7_REG           PORTF
+
+/* OCR1BL */
+#define OCR1BL0_REG          OCR1BL
+#define OCR1BL1_REG          OCR1BL
+#define OCR1BL2_REG          OCR1BL
+#define OCR1BL3_REG          OCR1BL
+#define OCR1BL4_REG          OCR1BL
+#define OCR1BL5_REG          OCR1BL
+#define OCR1BL6_REG          OCR1BL
+#define OCR1BL7_REG          OCR1BL
+
+/* TCNT3H */
+#define TCNT3H0_REG          TCNT3H
+#define TCNT3H1_REG          TCNT3H
+#define TCNT3H2_REG          TCNT3H
+#define TCNT3H3_REG          TCNT3H
+#define TCNT3H4_REG          TCNT3H
+#define TCNT3H5_REG          TCNT3H
+#define TCNT3H6_REG          TCNT3H
+#define TCNT3H7_REG          TCNT3H
+
+/* OCR1BH */
+#define OCR1BH0_REG          OCR1BH
+#define OCR1BH1_REG          OCR1BH
+#define OCR1BH2_REG          OCR1BH
+#define OCR1BH3_REG          OCR1BH
+#define OCR1BH4_REG          OCR1BH
+#define OCR1BH5_REG          OCR1BH
+#define OCR1BH6_REG          OCR1BH
+#define OCR1BH7_REG          OCR1BH
+
+/* TCNT3L */
+#define TCNT3L0_REG          TCNT3L
+#define TCNT3L1_REG          TCNT3L
+#define TCNT3L2_REG          TCNT3L
+#define TCNT3L3_REG          TCNT3L
+#define TCNT3L4_REG          TCNT3L
+#define TCNT3L5_REG          TCNT3L
+#define TCNT3L6_REG          TCNT3L
+#define TCNT3L7_REG          TCNT3L
+
+/* SPL */
+#define SP0_REG              SPL
+#define SP1_REG              SPL
+#define SP2_REG              SPL
+#define SP3_REG              SPL
+#define SP4_REG              SPL
+#define SP5_REG              SPL
+#define SP6_REG              SPL
+#define SP7_REG              SPL
+
+/* MCUSR */
+#define JTRF_REG             MCUSR
+#define PORF_REG             MCUSR
+#define EXTRF_REG            MCUSR
+#define BORF_REG             MCUSR
+#define WDRF_REG             MCUSR
+
+/* EECR */
+#define EERE_REG             EECR
+#define EEWE_REG             EECR
+#define EEMWE_REG            EECR
+#define EERIE_REG            EECR
+
+/* SMCR */
+#define SE_REG               SMCR
+#define SM0_REG              SMCR
+#define SM1_REG              SMCR
+#define SM2_REG              SMCR
+
+/* TWCR */
+#define TWIE_REG             TWCR
+#define TWEN_REG             TWCR
+#define TWWC_REG             TWCR
+#define TWSTO_REG            TWCR
+#define TWSTA_REG            TWCR
+#define TWEA_REG             TWCR
+#define TWINT_REG            TWCR
+
+/* TCCR2A */
+#define CS20_REG             TCCR2A
+#define CS21_REG             TCCR2A
+#define CS22_REG             TCCR2A
+#define WGM21_REG            TCCR2A
+#define COM2A0_REG           TCCR2A
+#define COM2A1_REG           TCCR2A
+#define WGM20_REG            TCCR2A
+#define FOC2A_REG            TCCR2A
+
+/* UBRR0H */
+/* #define UBRR8_REG            UBRR0H */ /* dup in UBRR1H */
+/* #define UBRR9_REG            UBRR0H */ /* dup in UBRR1H */
+/* #define UBRR10_REG           UBRR0H */ /* dup in UBRR1H */
+/* #define UBRR11_REG           UBRR0H */ /* dup in UBRR1H */
+
+/* UBRR0L */
+/* #define UBRR0_REG            UBRR0L */ /* dup in UBRR1L */
+/* #define UBRR1_REG            UBRR0L */ /* dup in UBRR1L */
+/* #define UBRR2_REG            UBRR0L */ /* dup in UBRR1L */
+/* #define UBRR3_REG            UBRR0L */ /* dup in UBRR1L */
+/* #define UBRR4_REG            UBRR0L */ /* dup in UBRR1L */
+/* #define UBRR5_REG            UBRR0L */ /* dup in UBRR1L */
+/* #define UBRR6_REG            UBRR0L */ /* dup in UBRR1L */
+/* #define UBRR7_REG            UBRR0L */ /* dup in UBRR1L */
+
+/* TWSR */
+#define TWPS0_REG            TWSR
+#define TWPS1_REG            TWSR
+#define TWS3_REG             TWSR
+#define TWS4_REG             TWSR
+#define TWS5_REG             TWSR
+#define TWS6_REG             TWSR
+#define TWS7_REG             TWSR
+
+/* CANPAGE */
+#define INDX0_REG            CANPAGE
+#define INDX1_REG            CANPAGE
+#define INDX2_REG            CANPAGE
+#define AINC_REG             CANPAGE
+#define MOBNB0_REG           CANPAGE
+#define MOBNB1_REG           CANPAGE
+#define MOBNB2_REG           CANPAGE
+#define MOBNB3_REG           CANPAGE
+
+/* MCUCR */
+#define JTD_REG              MCUCR
+#define IVCE_REG             MCUCR
+#define IVSEL_REG            MCUCR
+#define PUD_REG              MCUCR
+
+/* PINC */
+#define PINC0_REG            PINC
+#define PINC1_REG            PINC
+#define PINC2_REG            PINC
+#define PINC3_REG            PINC
+#define PINC4_REG            PINC
+#define PINC5_REG            PINC
+#define PINC6_REG            PINC
+#define PINC7_REG            PINC
+
+/* OCR1CL */
+#define OCR1CL0_REG          OCR1CL
+#define OCR1CL1_REG          OCR1CL
+#define OCR1CL2_REG          OCR1CL
+#define OCR1CL3_REG          OCR1CL
+#define OCR1CL4_REG          OCR1CL
+#define OCR1CL5_REG          OCR1CL