Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

v2.0 - 25986 bytes out of 30720

Welcome to version 2! We've moved from Roland Riegel's FAT library to Bill Greiman's sdfatlib. OpenLog now works with SD cards up to 16GB (that is the current largest microSD card we can get our hands on). OpenLog automatically detects and works with FAT16/FAT32 file systems. It also automatically works with normal SD cards as well as SDHC cards.

Almost all the previous commands have been ported from v1 to v2. The current commands that do not work:
cd.. - does not work. You can change to an upper directory, but you cannot navigate back down the tree.
cat - this command was depricated. HEX printing is now done with the 'read' command. We've added a 5th argument to select between ASCII and HEX printing.
Wild cards do not yet work. So rm and ls do not have wild cards enabled - yet.
  • Loading branch information...
commit 160a8320be3e8b32fadfed77678dd4d2d756d91e 1 parent f0e24d1
unknown authored
Showing with 12,678 additions and 10,989 deletions.
  1. +611 −0 Code/ArduinoPins.h
  2. +0 −92 Code/ChangeLog
  3. +0 −1,311 Code/Doxyfile
  4. +394 −0 Code/FatStructs.h
  5. +0 −682 Code/Makefile
  6. +2,022 −0 Code/OpenLog_v2.pde
  7. +562 −0 Code/Sd2Card.cpp
  8. +226 −0 Code/Sd2Card.h
  9. +1,590 −0 Code/SdFat.cpp
  10. +419 −0 Code/SdFat.h
  11. +73 −0 Code/SdFatUtil.h
  12. +202 −0 Code/SdFatmainpage.h
  13. +234 −0 Code/SdInfo.h
  14. +0 −62 Code/byteordering.c
  15. +0 −148 Code/byteordering.h
  16. +0 −2,346 Code/fat.c
  17. +0 −130 Code/fat.h
  18. +0 −110 Code/fat_config.h
  19. +0 −2,495 Code/main.c
  20. +0 −1,572 Code/main.hex
  21. +0 −160 Code/partition.c
  22. +0 −212 Code/partition.h
  23. +0 −44 Code/partition_config.h
  24. +0 −55 Code/sd-reader_config.h
  25. +0 −996 Code/sd_raw.c
  26. +0 −148 Code/sd_raw.h
  27. +0 −146 Code/sd_raw_config.h
  28. +0 −231 Code/uart.c
  29. +0 −46 Code/uart.h
  30. +611 −0 OpenLog_v2/ArduinoPins.h
  31. +394 −0 OpenLog_v2/FatStructs.h
  32. +2,029 −0 OpenLog_v2/OpenLog_v2.pde
  33. +562 −0 OpenLog_v2/Sd2Card.cpp
  34. +226 −0 OpenLog_v2/Sd2Card.h
  35. +1,590 −0 OpenLog_v2/SdFat.cpp
  36. +419 −0 OpenLog_v2/SdFat.h
  37. +73 −0 OpenLog_v2/SdFatUtil.h
  38. +202 −0 OpenLog_v2/SdFatmainpage.h
  39. +234 −0 OpenLog_v2/SdInfo.h
  40. +5 −3 README
View
611 Code/ArduinoPins.h
@@ -0,0 +1,611 @@
+// Map of Arduino pins to avr bit, ddr, port, pin
+// Credit Paul Stoffregen for idea
+#ifndef ArduinoPins_h
+#define ArduinoPins_h
+
+#define PIN_BITNUM(pin) (PIN ## pin ## _BITNUM)
+#define PIN_PORTREG(pin) (PIN ## pin ## _PORTREG)
+#define PIN_DDRREG(pin) (PIN ## pin ## _DDRREG)
+#define PIN_PINREG(pin) (PIN ## pin ## _PINREG)
+#ifndef _BV
+#define _BV(n) (1<<(n))
+#endif
+
+#if defined(__AVR_ATmega1280__)
+// Mega Arduino
+
+// Two Wire (aka I2C) ports
+#define SDA_PIN 20
+#define SCL_PIN 21
+
+// SPI port
+#define SS_PIN 53
+#define MOSI_PIN 51
+#define MISO_PIN 50
+#define SCK_PIN 52
+
+// bit number for all digital pins
+#define PIN0_BITNUM 0
+#define PIN1_BITNUM 1
+#define PIN2_BITNUM 4
+#define PIN3_BITNUM 5
+#define PIN4_BITNUM 5
+#define PIN5_BITNUM 3
+#define PIN6_BITNUM 3
+#define PIN7_BITNUM 4
+#define PIN8_BITNUM 5
+#define PIN9_BITNUM 6
+#define PIN10_BITNUM 4
+#define PIN11_BITNUM 5
+#define PIN12_BITNUM 6
+#define PIN13_BITNUM 7
+#define PIN14_BITNUM 1
+#define PIN15_BITNUM 0
+#define PIN16_BITNUM 1
+#define PIN17_BITNUM 0
+#define PIN18_BITNUM 3
+#define PIN19_BITNUM 2
+#define PIN20_BITNUM 1
+#define PIN21_BITNUM 0
+#define PIN22_BITNUM 0
+#define PIN23_BITNUM 1
+#define PIN24_BITNUM 2
+#define PIN25_BITNUM 3
+#define PIN26_BITNUM 4
+#define PIN27_BITNUM 5
+#define PIN28_BITNUM 6
+#define PIN29_BITNUM 7
+#define PIN30_BITNUM 7
+#define PIN31_BITNUM 6
+#define PIN32_BITNUM 5
+#define PIN33_BITNUM 4
+#define PIN34_BITNUM 3
+#define PIN35_BITNUM 2
+#define PIN36_BITNUM 1
+#define PIN37_BITNUM 0
+#define PIN38_BITNUM 7
+#define PIN39_BITNUM 2
+#define PIN40_BITNUM 1
+#define PIN41_BITNUM 0
+#define PIN42_BITNUM 7
+#define PIN43_BITNUM 6
+#define PIN44_BITNUM 5
+#define PIN45_BITNUM 4
+#define PIN46_BITNUM 3
+#define PIN47_BITNUM 2
+#define PIN48_BITNUM 1
+#define PIN49_BITNUM 0
+#define PIN50_BITNUM 3
+#define PIN51_BITNUM 2
+#define PIN52_BITNUM 1
+#define PIN53_BITNUM 0
+#define PIN54_BITNUM 0
+#define PIN55_BITNUM 1
+#define PIN56_BITNUM 2
+#define PIN57_BITNUM 3
+#define PIN58_BITNUM 4
+#define PIN59_BITNUM 5
+#define PIN60_BITNUM 6
+#define PIN61_BITNUM 7
+#define PIN62_BITNUM 0
+#define PIN63_BITNUM 1
+#define PIN64_BITNUM 2
+#define PIN65_BITNUM 3
+#define PIN66_BITNUM 4
+#define PIN67_BITNUM 5
+#define PIN68_BITNUM 6
+#define PIN69_BITNUM 7
+
+// output register for digital pins
+#define PIN0_PORTREG PORTE
+#define PIN1_PORTREG PORTE
+#define PIN2_PORTREG PORTE
+#define PIN3_PORTREG PORTE
+#define PIN4_PORTREG PORTG
+#define PIN5_PORTREG PORTE
+#define PIN6_PORTREG PORTH
+#define PIN7_PORTREG PORTH
+#define PIN8_PORTREG PORTH
+#define PIN9_PORTREG PORTH
+#define PIN10_PORTREG PORTB
+#define PIN11_PORTREG PORTB
+#define PIN12_PORTREG PORTB
+#define PIN13_PORTREG PORTB
+#define PIN14_PORTREG PORTJ
+#define PIN15_PORTREG PORTJ
+#define PIN16_PORTREG PORTH
+#define PIN17_PORTREG PORTH
+#define PIN18_PORTREG PORTD
+#define PIN19_PORTREG PORTD
+#define PIN20_PORTREG PORTD
+#define PIN21_PORTREG PORTD
+#define PIN22_PORTREG PORTA
+#define PIN23_PORTREG PORTA
+#define PIN24_PORTREG PORTA
+#define PIN25_PORTREG PORTA
+#define PIN26_PORTREG PORTA
+#define PIN27_PORTREG PORTA
+#define PIN28_PORTREG PORTA
+#define PIN29_PORTREG PORTA
+#define PIN30_PORTREG PORTC
+#define PIN31_PORTREG PORTC
+#define PIN32_PORTREG PORTC
+#define PIN33_PORTREG PORTC
+#define PIN34_PORTREG PORTC
+#define PIN35_PORTREG PORTC
+#define PIN36_PORTREG PORTC
+#define PIN37_PORTREG PORTC
+#define PIN38_PORTREG PORTD
+#define PIN39_PORTREG PORTG
+#define PIN40_PORTREG PORTG
+#define PIN41_PORTREG PORTG
+#define PIN42_PORTREG PORTL
+#define PIN43_PORTREG PORTL
+#define PIN44_PORTREG PORTL
+#define PIN45_PORTREG PORTL
+#define PIN46_PORTREG PORTL
+#define PIN47_PORTREG PORTL
+#define PIN48_PORTREG PORTL
+#define PIN49_PORTREG PORTL
+#define PIN50_PORTREG PORTB
+#define PIN51_PORTREG PORTB
+#define PIN52_PORTREG PORTB
+#define PIN53_PORTREG PORTB
+#define PIN54_PORTREG PORTF
+#define PIN55_PORTREG PORTF
+#define PIN56_PORTREG PORTF
+#define PIN57_PORTREG PORTF
+#define PIN58_PORTREG PORTF
+#define PIN59_PORTREG PORTF
+#define PIN60_PORTREG PORTF
+#define PIN61_PORTREG PORTF
+#define PIN62_PORTREG PORTK
+#define PIN63_PORTREG PORTK
+#define PIN64_PORTREG PORTK
+#define PIN65_PORTREG PORTK
+#define PIN66_PORTREG PORTK
+#define PIN67_PORTREG PORTK
+#define PIN68_PORTREG PORTK
+#define PIN69_PORTREG PORTK
+
+// direction control register for digital pins
+#define PIN0_DDRREG DDRE
+#define PIN1_DDRREG DDRE
+#define PIN2_DDRREG DDRE
+#define PIN3_DDRREG DDRE
+#define PIN4_DDRREG DDRG
+#define PIN5_DDRREG DDRE
+#define PIN6_DDRREG DDRH
+#define PIN7_DDRREG DDRH
+#define PIN8_DDRREG DDRH
+#define PIN9_DDRREG DDRH
+#define PIN10_DDRREG DDRB
+#define PIN11_DDRREG DDRB
+#define PIN12_DDRREG DDRB
+#define PIN13_DDRREG DDRB
+#define PIN14_DDRREG DDRJ
+#define PIN15_DDRREG DDRJ
+#define PIN16_DDRREG DDRH
+#define PIN17_DDRREG DDRH
+#define PIN18_DDRREG DDRD
+#define PIN19_DDRREG DDRD
+#define PIN20_DDRREG DDRD
+#define PIN21_DDRREG DDRD
+#define PIN22_DDRREG DDRA
+#define PIN23_DDRREG DDRA
+#define PIN24_DDRREG DDRA
+#define PIN25_DDRREG DDRA
+#define PIN26_DDRREG DDRA
+#define PIN27_DDRREG DDRA
+#define PIN28_DDRREG DDRA
+#define PIN29_DDRREG DDRA
+#define PIN30_DDRREG DDRC
+#define PIN31_DDRREG DDRC
+#define PIN32_DDRREG DDRC
+#define PIN33_DDRREG DDRC
+#define PIN34_DDRREG DDRC
+#define PIN35_DDRREG DDRC
+#define PIN36_DDRREG DDRC
+#define PIN37_DDRREG DDRC
+#define PIN38_DDRREG DDRD
+#define PIN39_DDRREG DDRG
+#define PIN40_DDRREG DDRG
+#define PIN41_DDRREG DDRG
+#define PIN42_DDRREG DDRL
+#define PIN43_DDRREG DDRL
+#define PIN44_DDRREG DDRL
+#define PIN45_DDRREG DDRL
+#define PIN46_DDRREG DDRL
+#define PIN47_DDRREG DDRL
+#define PIN48_DDRREG DDRL
+#define PIN49_DDRREG DDRL
+#define PIN50_DDRREG DDRB
+#define PIN51_DDRREG DDRB
+#define PIN52_DDRREG DDRB
+#define PIN53_DDRREG DDRB
+#define PIN54_DDRREG DDRF
+#define PIN55_DDRREG DDRF
+#define PIN56_DDRREG DDRF
+#define PIN57_DDRREG DDRF
+#define PIN58_DDRREG DDRF
+#define PIN59_DDRREG DDRF
+#define PIN60_DDRREG DDRF
+#define PIN61_DDRREG DDRF
+#define PIN62_DDRREG DDRK
+#define PIN63_DDRREG DDRK
+#define PIN64_DDRREG DDRK
+#define PIN65_DDRREG DDRK
+#define PIN66_DDRREG DDRK
+#define PIN67_DDRREG DDRK
+#define PIN68_DDRREG DDRK
+#define PIN69_DDRREG DDRK
+
+// input register for digital pins
+#define PIN0_PINREG PINE
+#define PIN1_PINREG PINE
+#define PIN2_PINREG PINE
+#define PIN3_PINREG PINE
+#define PIN4_PINREG PING
+#define PIN5_PINREG PINE
+#define PIN6_PINREG PINH
+#define PIN7_PINREG PINH
+#define PIN8_PINREG PINH
+#define PIN9_PINREG PINH
+#define PIN10_PINREG PINB
+#define PIN11_PINREG PINB
+#define PIN12_PINREG PINB
+#define PIN13_PINREG PINB
+#define PIN14_PINREG PINJ
+#define PIN15_PINREG PINJ
+#define PIN16_PINREG PINH
+#define PIN17_PINREG PINH
+#define PIN18_PINREG PIND
+#define PIN19_PINREG PIND
+#define PIN20_PINREG PIND
+#define PIN21_PINREG PIND
+#define PIN22_PINREG PINA
+#define PIN23_PINREG PINA
+#define PIN24_PINREG PINA
+#define PIN25_PINREG PINA
+#define PIN26_PINREG PINA
+#define PIN27_PINREG PINA
+#define PIN28_PINREG PINA
+#define PIN29_PINREG PINA
+#define PIN30_PINREG PINC
+#define PIN31_PINREG PINC
+#define PIN32_PINREG PINC
+#define PIN33_PINREG PINC
+#define PIN34_PINREG PINC
+#define PIN35_PINREG PINC
+#define PIN36_PINREG PINC
+#define PIN37_PINREG PINC
+#define PIN38_PINREG PIND
+#define PIN39_PINREG PING
+#define PIN40_PINREG PING
+#define PIN41_PINREG PING
+#define PIN42_PINREG PINL
+#define PIN43_PINREG PINL
+#define PIN44_PINREG PINL
+#define PIN45_PINREG PINL
+#define PIN46_PINREG PINL
+#define PIN47_PINREG PINL
+#define PIN48_PINREG PINL
+#define PIN49_PINREG PINL
+#define PIN50_PINREG PINB
+#define PIN51_PINREG PINB
+#define PIN52_PINREG PINB
+#define PIN53_PINREG PINB
+#define PIN54_PINREG PINF
+#define PIN55_PINREG PINF
+#define PIN56_PINREG PINF
+#define PIN57_PINREG PINF
+#define PIN58_PINREG PINF
+#define PIN59_PINREG PINF
+#define PIN60_PINREG PINF
+#define PIN61_PINREG PINF
+#define PIN62_PINREG PINK
+#define PIN63_PINREG PINK
+#define PIN64_PINREG PINK
+#define PIN65_PINREG PINK
+#define PIN66_PINREG PINK
+#define PIN67_PINREG PINK
+#define PIN68_PINREG PINK
+#define PIN69_PINREG PINK
+
+#elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__)
+// ATMEL ATMEGA644P / SANGUINO
+//
+// +---\/---+
+// INT0 (D 0) PB0 1| |40 PA0 (AI 0 / D31)
+// INT1 (D 1) PB1 2| |39 PA1 (AI 1 / D30)
+// INT2 (D 2) PB2 3| |38 PA2 (AI 2 / D29)
+// PWM (D 3) PB3 4| |37 PA3 (AI 3 / D28)
+// PWM (D 4) PB4 5| |36 PA4 (AI 4 / D27)
+// MOSI (D 5) PB5 6| |35 PA5 (AI 5 / D26)
+// MISO (D 6) PB6 7| |34 PA6 (AI 6 / D25)
+// SCK (D 7) PB7 8| |33 PA7 (AI 7 / D24)
+// RST 9| |32 AREF
+// VCC 10| |31 GND
+// GND 11| |30 AVCC
+// XTAL2 12| |29 PC7 (D 23)
+// XTAL1 13| |28 PC6 (D 22)
+// RX0 (D 8) PD0 14| |27 PC5 (D 21) TDI
+// TX0 (D 9) PD1 15| |26 PC4 (D 20) TDO
+// RX1 (D 10) PD2 16| |25 PC3 (D 19) TMS
+// TX1 (D 11) PD3 17| |24 PC2 (D 18) TCK
+// PWM (D 12) PD4 18| |23 PC1 (D 17) SDA
+// PWM (D 13) PD5 19| |22 PC0 (D 16) SCL
+// PWM (D 14) PD6 20| |21 PD7 (D 15) PWM
+// +--------+
+//
+
+#error Sanguino not tested
+
+// Two Wire (aka I2C) ports
+#define SDA_PIN 17
+#define SCL_PIN 18
+
+// SPI port
+#define SS_PIN 4
+#define MOSI_PIN 5
+#define MISO_PIN 6
+#define SCK_PIN 7
+
+// bit number for all digital pins
+#define PIN0_BITNUM 0
+#define PIN1_BITNUM 1
+#define PIN2_BITNUM 2
+#define PIN3_BITNUM 3
+#define PIN4_BITNUM 4
+#define PIN5_BITNUM 5
+#define PIN6_BITNUM 6
+#define PIN7_BITNUM 7
+#define PIN8_BITNUM 0
+#define PIN9_BITNUM 1
+#define PIN10_BITNUM 2
+#define PIN11_BITNUM 3
+#define PIN12_BITNUM 4
+#define PIN13_BITNUM 5
+#define PIN14_BITNUM 6
+#define PIN15_BITNUM 7
+#define PIN16_BITNUM 0
+#define PIN17_BITNUM 1
+#define PIN18_BITNUM 2
+#define PIN19_BITNUM 3
+#define PIN20_BITNUM 4
+#define PIN21_BITNUM 5
+#define PIN22_BITNUM 6
+#define PIN23_BITNUM 7
+#define PIN24_BITNUM 7
+#define PIN25_BITNUM 6
+#define PIN26_BITNUM 5
+#define PIN27_BITNUM 4
+#define PIN28_BITNUM 3
+#define PIN29_BITNUM 2
+#define PIN30_BITNUM 1
+#define PIN31_BITNUM0
+
+// output register for digital pins
+#define PIN0_PORTREG PORTB
+#define PIN1_PORTREG PORTB
+#define PIN2_PORTREG PORTB
+#define PIN3_PORTREG PORTB
+#define PIN4_PORTREG PORTB
+#define PIN5_PORTREG PORTB
+#define PIN6_PORTREG PORTB
+#define PIN7_PORTREG PORTB
+#define PIN8_PORTREG PORTD
+#define PIN9_PORTREG PORTD
+#define PIN10_PORTREG PORTD
+#define PIN11_PORTREG PORTD
+#define PIN12_PORTREG PORTD
+#define PIN13_PORTREG PORTD
+#define PIN14_PORTREG PORTD
+#define PIN15_PORTREG PORTD
+#define PIN16_PORTREG PORTC
+#define PIN17_PORTREG PORTC
+#define PIN18_PORTREG PORTC
+#define PIN19_PORTREG PORTC
+#define PIN20_PORTREG PORTC
+#define PIN21_PORTREG PORTC
+#define PIN22_PORTREG PORTC
+#define PIN23_PORTREG PORTC
+#define PIN24_PORTREG PORTA
+#define PIN25_PORTREG PORTA
+#define PIN26_PORTREG PORTA
+#define PIN27_PORTREG PORTA
+#define PIN28_PORTREG PORTA
+#define PIN29_PORTREG PORTA
+#define PIN30_PORTREG PORTA
+#define PIN31_PORTREG PORTA
+
+
+// direction control register for digital pins
+#define PIN0_DDRREG DDRB
+#define PIN1_DDRREG DDRB
+#define PIN2_DDRREG DDRB
+#define PIN3_DDRREG DDRB
+#define PIN4_DDRREG DDRB
+#define PIN5_DDRREG DDRB
+#define PIN6_DDRREG DDRB
+#define PIN7_DDRREG DDRB
+#define PIN8_DDRREG DDRD
+#define PIN9_DDRREG DDRD
+#define PIN10_DDRREG DDRD
+#define PIN11_DDRREG DDRD
+#define PIN12_DDRREG DDRD
+#define PIN13_DDRREG DDRD
+#define PIN14_DDRREG DDRD
+#define PIN15_DDRREG DDRD
+#define PIN16_DDRREG DDRC
+#define PIN17_DDRREG DDRC
+#define PIN18_DDRREG DDRC
+#define PIN19_DDRREG DDRC
+#define PIN20_DDRREG DDRC
+#define PIN21_DDRREG DDRC
+#define PIN22_DDRREG DDRC
+#define PIN23_DDRREG DDRC
+#define PIN24_DDRREG DDRA
+#define PIN25_DDRREG DDRA
+#define PIN26_DDRREG DDRA
+#define PIN27_DDRREG DDRA
+#define PIN28_DDRREG DDRA
+#define PIN29_DDRREG DDRA
+#define PIN30_DDRREG DDRA
+#define PIN31_DDRREG DDRA
+
+
+// input register for digital pins
+#define PIN0_PINREG PINB
+#define PIN1_PINREG PINB
+#define PIN2_PINREG PINB
+#define PIN3_PINREG PINB
+#define PIN4_PINREG PINB
+#define PIN5_PINREG PINB
+#define PIN6_PINREG PINB
+#define PIN7_PINREG PINB
+#define PIN8_PINREG PIND
+#define PIN9_PINREG PIND
+#define PIN10_PINREG PIND
+#define PIN11_PINREG PIND
+#define PIN12_PINREG PIND
+#define PIN13_PINREG PIND
+#define PIN14_PINREG PIND
+#define PIN15_PINREG PIND
+#define PIN16_PINREG PINC
+#define PIN17_PINREG PINC
+#define PIN18_PINREG PINC
+#define PIN19_PINREG PINC
+#define PIN20_PINREG PINC
+#define PIN21_PINREG PINC
+#define PIN22_PINREG PINC
+#define PIN23_PINREG PINC
+#define PIN24_PINREG PINA
+#define PIN25_PINREG PINA
+#define PIN26_PINREG PINA
+#define PIN27_PINREG PINA
+#define PIN28_PINREG PINA
+#define PIN29_PINREG PINA
+#define PIN30_PINREG PINA
+#define PIN31_PINREG PINA
+
+
+#else // defined(__AVR_ATmega1280__)
+// 168 and 328 Arduinos
+//
+// +-\/-+
+// PC6 1| |28 PC5 (AI 5 D 19) SCL
+// (D 0) PD0 2| |27 PC4 (AI 4 D 18) SDA
+// (D 1) PD1 3| |26 PC3 (AI 3 D 17)
+// (D 2) PD2 4| |25 PC2 (AI 2 D 16)
+// PWM+ (D 3) PD3 5| |24 PC1 (AI 1 D 15)
+// (D 4) PD4 6| |23 PC0 (AI 0 D 14)
+// VCC 7| |22 GND
+// GND 8| |21 AREF
+// PB6 9| |20 AVCC
+// PB7 10| |19 PB5 (D 13) SCK
+// PWM+ (D 5) PD5 11| |18 PB4 (D 12) MISO
+// PWM+ (D 6) PD6 12| |17 PB3 (D 11) MOSI PWM
+// (D 7) PD7 13| |16 PB2 (D 10) SS PWM
+// (D 8) PB0 14| |15 PB1 (D 9) PWM
+// +----+
+//
+// Two Wire (aka I2C) ports
+#define SDA_PIN 18
+#define SCL_PIN 19
+
+// SPI port
+#define SS_PIN 10
+#define MOSI_PIN 11
+#define MISO_PIN 12
+#define SCK_PIN 13
+
+// bit number for digital pins
+#define PIN0_BITNUM 0
+#define PIN1_BITNUM 1
+#define PIN2_BITNUM 2
+#define PIN3_BITNUM 3
+#define PIN4_BITNUM 4
+#define PIN5_BITNUM 5
+#define PIN6_BITNUM 6
+#define PIN7_BITNUM 7
+#define PIN8_BITNUM 0
+#define PIN9_BITNUM 1
+#define PIN10_BITNUM 2
+#define PIN11_BITNUM 3
+#define PIN12_BITNUM 4
+#define PIN13_BITNUM 5
+#define PIN14_BITNUM 0
+#define PIN15_BITNUM 1
+#define PIN16_BITNUM 2
+#define PIN17_BITNUM 3
+#define PIN18_BITNUM 4
+#define PIN19_BITNUM 5
+
+// output register for all pins
+#define PIN0_PORTREG PORTD
+#define PIN1_PORTREG PORTD
+#define PIN2_PORTREG PORTD
+#define PIN3_PORTREG PORTD
+#define PIN4_PORTREG PORTD
+#define PIN5_PORTREG PORTD
+#define PIN6_PORTREG PORTD
+#define PIN7_PORTREG PORTD
+#define PIN8_PORTREG PORTB
+#define PIN9_PORTREG PORTB
+#define PIN10_PORTREG PORTB
+#define PIN11_PORTREG PORTB
+#define PIN12_PORTREG PORTB
+#define PIN13_PORTREG PORTB
+#define PIN14_PORTREG PORTC
+#define PIN15_PORTREG PORTC
+#define PIN16_PORTREG PORTC
+#define PIN17_PORTREG PORTC
+#define PIN18_PORTREG PORTC
+#define PIN19_PORTREG PORTC
+
+// direction control register for digital pins
+#define PIN0_DDRREG DDRD
+#define PIN1_DDRREG DDRD
+#define PIN2_DDRREG DDRD
+#define PIN3_DDRREG DDRD
+#define PIN4_DDRREG DDRD
+#define PIN5_DDRREG DDRD
+#define PIN6_DDRREG DDRD
+#define PIN7_DDRREG DDRD
+#define PIN8_DDRREG DDRB
+#define PIN9_DDRREG DDRB
+#define PIN10_DDRREG DDRB
+#define PIN11_DDRREG DDRB
+#define PIN12_DDRREG DDRB
+#define PIN13_DDRREG DDRB
+#define PIN14_DDRREG DDRC
+#define PIN15_DDRREG DDRC
+#define PIN16_DDRREG DDRC
+#define PIN17_DDRREG DDRC
+#define PIN18_DDRREG DDRC
+#define PIN19_DDRREG DDRC
+
+// input register for digital pins
+#define PIN0_PINREG PIND
+#define PIN1_PINREG PIND
+#define PIN2_PINREG PIND
+#define PIN3_PINREG PIND
+#define PIN4_PINREG PIND
+#define PIN5_PINREG PIND
+#define PIN6_PINREG PIND
+#define PIN7_PINREG PIND
+#define PIN8_PINREG PINB
+#define PIN9_PINREG PINB
+#define PIN10_PINREG PINB
+#define PIN11_PINREG PINB
+#define PIN12_PINREG PINB
+#define PIN13_PINREG PINB
+#define PIN14_PINREG PINC
+#define PIN15_PINREG PINC
+#define PIN16_PINREG PINC
+#define PIN17_PINREG PINC
+#define PIN18_PINREG PINC
+#define PIN19_PINREG PINC
+#endif // defined(__AVR_ATmega1280__)
+#endif // ArduinoPins_h
View
92 Code/ChangeLog
@@ -1,92 +0,0 @@
-
-2009-03-30 sd-reader
- * Make 8.3 basename and/or extension lowercase when told by Windows NT and later.
- * Add ATmega328 pin configuration.
- * Fix MMC/SD/SDHC distinction.
- * Fix raw block read/write buffering (thanks to Kurt Sterckx).
- * Fix fat size calculation for FAT16 when configured with FAT32.
- * Fix compilation for read-only configurations.
- * Fix card lock detection.
- * Make it easier to link with a C++ application.
-
-2008-11-21 sd-reader
- * Support for SDHC cards (disabled by default).
- * Support for FAT32 (disabled by default).
-
-2008-06-08 sd-reader
- * New "init" command to allow reinitialization of memory card.
- * Fix searching through multi-cluster directories.
- * Fix reading directory entries spanning a cluster border (backport from mega-eth).
- * Do not abort the whole lfn entry when the file name is too long, just drop single characters (backport from mega-eth).
- * Change fat16_get_dir_entry_of_path() to ignore a slash at the end (backport from mega-eth).
- * Make listing a directory's content much faster (backport from mega-eth).
- * Shrink code size by centralizing cluster offset calculation (backport from mega-eth).
- * Some other small fixes and optimizations.
-
-2007-12-13 sd-reader
- * Dual-license the major implementation modules under GPL and LGPL.
-
-2007-06-03 sd-reader
- * Fix reading beyond cached block (by Benjamin Meier).
- * Implement support for reading and writing file modification dates/times.
- (Thanks to Torsten Seeboth for testing.)
-
-2007-03-01 sd-reader
- * Avoid LFN directory entries for the "." and ".." directory references.
- This prevented Windows from deleting directories.
- * Handle special case where the 8.3 filename begins with 0xe5.
- * Fix return value of fat16_delete_file() when deleting empty files.
- * Fix fat16_clear_cluster() which was zeroing only 16 of every 32 bytes.
-
-2007-01-20 sd-reader
- * Fix directory creation.
- - Correctly create "." and ".." directory entries (8.3 <-> lfn versions).
- - Correctly clear cluster containing the directory entries for new directory.
-
-2006-11-01 sd-reader
- * Implement creation and deletion of directories.
- * Clear the directory entries of new directory clusters.
- * Prevent linkage against printf().
- * Make the use of malloc()/free() optional.
-
-2006-09-01 sd-reader
- * Fix shortening files.
- * Fix free disk space calculation.
-
-2006-08-24 sd-reader
- * Improve sleep handling.
- * Display extended card information on boot and
- when executing the "disk" shell command.
- * Correctly determine FAT type by cluster count.
- * Fix cluster allocation beyond card capacity.
-
-2006-08-16 sd-reader
- * Provide FAT16 capacity and usage information.
- * Implement the backspace key in the mini shell.
- * Enter idle mode when waiting for uart activity.
- * Make the Card Select pin MCU dependent as well.
- * Add mini shell commands to documentation.
-
-2006-08-08 sd-reader
- * Thanks go to Torsten Seeboth for his ongoing efforts
- to test changes, fix regressions and give suggestions.
- Many of the changes below were initiated by him.
- * Much more reliable card initialization.
- * Highly improved performance
- - optional write buffering
- - better cluster handling
- - remove unneeded SPI access when reading from buffered block
- - use highest spi frequency after card initialization
- * Add superfloppy support.
- * Better checks when opening a FAT16 filesystem.
- * Provide SPI pin mappings for commonly used ATmegas.
- * Fix resizing files, hangs could occur.
- * Fix overflow when creating files with names longer than 31 characters.
- * Fix numerous other small things.
-
-2006-03-19 sd-reader
- * Fix speed regressions.
-
-2006-03-16 sd-reader
- * Initial release.
-
View
1,311 Code/Doxyfile
@@ -1,1311 +0,0 @@
-# Doxyfile 1.5.3-20071008
-
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project
-#
-# All text after a hash (#) is considered a comment and will be ignored
-# The format is:
-# TAG = value [value, ...]
-# For lists items can also be appended using:
-# TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (" ")
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-
-# This tag specifies the encoding used for all characters in the config file that
-# follow. The default is UTF-8 which is also the encoding used for all text before
-# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into
-# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of
-# possible encodings.
-
-DOXYFILE_ENCODING = UTF-8
-
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
-# by quotes) that should identify the project.
-
-PROJECT_NAME = sd-reader
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number.
-# This could be handy for archiving the generated documentation or
-# if some version control system is used.
-
-PROJECT_NUMBER =
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
-# base path where the generated documentation will be put.
-# If a relative path is entered, it will be relative to the location
-# where doxygen was started. If left blank the current directory will be used.
-
-OUTPUT_DIRECTORY = doc
-
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
-# 4096 sub-directories (in 2 levels) under the output directory of each output
-# format and will distribute the generated files over these directories.
-# Enabling this option can be useful when feeding doxygen a huge amount of
-# source files, where putting all generated files in the same directory would
-# otherwise cause performance problems for the file system.
-
-CREATE_SUBDIRS = NO
-
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all constant output in the proper language.
-# The default language is English, other supported languages are:
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
-# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian,
-# Italian, Japanese, Japanese-en (Japanese with English messages), Korean,
-# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian,
-# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
-
-OUTPUT_LANGUAGE = English
-
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
-# include brief member descriptions after the members that are listed in
-# the file and class documentation (similar to JavaDoc).
-# Set to NO to disable this.
-
-BRIEF_MEMBER_DESC = YES
-
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
-# the brief description of a member or function before the detailed description.
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
-# brief descriptions will be completely suppressed.
-
-REPEAT_BRIEF = YES
-
-# This tag implements a quasi-intelligent brief description abbreviator
-# that is used to form the text in various listings. Each string
-# in this list, if found as the leading text of the brief description, will be
-# stripped from the text and the result after processing the whole list, is
-# used as the annotated text. Otherwise, the brief description is used as-is.
-# If left blank, the following values are used ("$name" is automatically
-# replaced with the name of the entity): "The $name class" "The $name widget"
-# "The $name file" "is" "provides" "specifies" "contains"
-# "represents" "a" "an" "the"
-
-ABBREVIATE_BRIEF = "The $name class " \
- "The $name widget " \
- "The $name file " \
- is \
- provides \
- specifies \
- contains \
- represents \
- a \
- an \
- the
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# Doxygen will generate a detailed section even if there is only a brief
-# description.
-
-ALWAYS_DETAILED_SEC = NO
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
-# inherited members of a class in the documentation of that class as if those
-# members were ordinary class members. Constructors, destructors and assignment
-# operators of the base classes will not be shown.
-
-INLINE_INHERITED_MEMB = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
-# path before files name in the file list and in the header files. If set
-# to NO the shortest path that makes the file name unique will be used.
-
-FULL_PATH_NAMES = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
-# can be used to strip a user-defined part of the path. Stripping is
-# only done if one of the specified strings matches the left-hand part of
-# the path. The tag can be used to show relative paths in the file list.
-# If left blank the directory from which doxygen is run is used as the
-# path to strip.
-
-STRIP_FROM_PATH =
-
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
-# the path mentioned in the documentation of a class, which tells
-# the reader which header file to include in order to use a class.
-# If left blank only the name of the header file containing the class
-# definition is used. Otherwise one should specify the include paths that
-# are normally passed to the compiler using the -I flag.
-
-STRIP_FROM_INC_PATH =
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
-# (but less readable) file names. This can be useful is your file systems
-# doesn't support long names like on DOS, Mac, or CD-ROM.
-
-SHORT_NAMES = NO
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
-# will interpret the first line (until the first dot) of a JavaDoc-style
-# comment as the brief description. If set to NO, the JavaDoc
-# comments will behave just like regular Qt-style comments
-# (thus requiring an explicit @brief command for a brief description.)
-
-JAVADOC_AUTOBRIEF = YES
-
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
-# interpret the first line (until the first dot) of a Qt-style
-# comment as the brief description. If set to NO, the comments
-# will behave just like regular Qt-style comments (thus requiring
-# an explicit \brief command for a brief description.)
-
-QT_AUTOBRIEF = NO
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
-# treat a multi-line C++ special comment block (i.e. a block of //! or ///
-# comments) as a brief description. This used to be the default behaviour.
-# The new default is to treat a multi-line C++ comment block as a detailed
-# description. Set this tag to YES if you prefer the old behaviour instead.
-
-MULTILINE_CPP_IS_BRIEF = NO
-
-# If the DETAILS_AT_TOP tag is set to YES then Doxygen
-# will output the detailed description near the top, like JavaDoc.
-# If set to NO, the detailed description appears after the member
-# documentation.
-
-DETAILS_AT_TOP = YES
-
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
-# member inherits the documentation from any documented member that it
-# re-implements.
-
-INHERIT_DOCS = YES
-
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
-# a new page for each member. If set to NO, the documentation of a member will
-# be part of the file/class/namespace that contains it.
-
-SEPARATE_MEMBER_PAGES = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab.
-# Doxygen uses this value to replace tabs by spaces in code fragments.
-
-TAB_SIZE = 4
-
-# This tag can be used to specify a number of aliases that acts
-# as commands in the documentation. An alias has the form "name=value".
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to
-# put the command \sideeffect (or @sideeffect) in the documentation, which
-# will result in a user-defined paragraph with heading "Side Effects:".
-# You can put \n's in the value part of an alias to insert newlines.
-
-ALIASES =
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
-# sources only. Doxygen will then generate output that is more tailored for C.
-# For instance, some of the names that are used will be different. The list
-# of all members will be omitted, etc.
-
-OPTIMIZE_OUTPUT_FOR_C = YES
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
-# sources only. Doxygen will then generate output that is more tailored for Java.
-# For instance, namespaces will be presented as packages, qualified scopes
-# will look different, etc.
-
-OPTIMIZE_OUTPUT_JAVA = NO
-
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to
-# include (a tag file for) the STL sources as input, then you should
-# set this tag to YES in order to let doxygen match functions declarations and
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
-# func(std::string) {}). This also make the inheritance and collaboration
-# diagrams that involve STL classes more complete and accurate.
-
-BUILTIN_STL_SUPPORT = NO
-
-# If you use Microsoft's C++/CLI language, you should set this option to YES to
-# enable parsing support.
-
-CPP_CLI_SUPPORT = NO
-
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
-# Doxygen will parse them like normal C++ but will assume all classes use public
-# instead of private inheritance when no explicit protection keyword is present.
-
-SIP_SUPPORT = NO
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES, then doxygen will reuse the documentation of the first
-# member in the group (if any) for the other members of the group. By default
-# all members of a group must be documented explicitly.
-
-DISTRIBUTE_GROUP_DOC = NO
-
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
-# the same type (for instance a group of public functions) to be put as a
-# subgroup of that type (e.g. under the Public Functions section). Set it to
-# NO to prevent subgrouping. Alternatively, this can be done per class using
-# the \nosubgrouping command.
-
-SUBGROUPING = YES
-
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
-# documentation are documented, even if no documentation was available.
-# Private class members and static file members will be hidden unless
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
-
-EXTRACT_ALL = NO
-
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
-# will be included in the documentation.
-
-EXTRACT_PRIVATE = NO
-
-# If the EXTRACT_STATIC tag is set to YES all static members of a file
-# will be included in the documentation.
-
-EXTRACT_STATIC = NO
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
-# defined locally in source files will be included in the documentation.
-# If set to NO only classes defined in header files are included.
-
-EXTRACT_LOCAL_CLASSES = YES
-
-# This flag is only useful for Objective-C code. When set to YES local
-# methods, which are defined in the implementation section but not in
-# the interface are included in the documentation.
-# If set to NO (the default) only methods in the interface are included.
-
-EXTRACT_LOCAL_METHODS = NO
-
-# If this flag is set to YES, the members of anonymous namespaces will be extracted
-# and appear in the documentation as a namespace called 'anonymous_namespace{file}',
-# where file will be replaced with the base name of the file that contains the anonymous
-# namespace. By default anonymous namespace are hidden.
-
-EXTRACT_ANON_NSPACES = NO
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
-# undocumented members of documented classes, files or namespaces.
-# If set to NO (the default) these members will be included in the
-# various overviews, but no documentation section is generated.
-# This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_MEMBERS = YES
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
-# undocumented classes that are normally visible in the class hierarchy.
-# If set to NO (the default) these classes will be included in the various
-# overviews. This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_CLASSES = YES
-
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
-# friend (class|struct|union) declarations.
-# If set to NO (the default) these declarations will be included in the
-# documentation.
-
-HIDE_FRIEND_COMPOUNDS = NO
-
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
-# documentation blocks found inside the body of a function.
-# If set to NO (the default) these blocks will be appended to the
-# function's detailed documentation block.
-
-HIDE_IN_BODY_DOCS = NO
-
-# The INTERNAL_DOCS tag determines if documentation
-# that is typed after a \internal command is included. If the tag is set
-# to NO (the default) then the documentation will be excluded.
-# Set it to YES to include the internal documentation.
-
-INTERNAL_DOCS = NO
-
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
-# file names in lower-case letters. If set to YES upper-case letters are also
-# allowed. This is useful if you have classes or files whose names only differ
-# in case and if your file system supports case sensitive file names. Windows
-# and Mac users are advised to set this option to NO.
-
-CASE_SENSE_NAMES = YES
-
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
-# will show members with their full class and namespace scopes in the
-# documentation. If set to YES the scope will be hidden.
-
-HIDE_SCOPE_NAMES = NO
-
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
-# will put a list of the files that are included by a file in the documentation
-# of that file.
-
-SHOW_INCLUDE_FILES = NO
-
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
-# is inserted in the documentation for inline members.
-
-INLINE_INFO = YES
-
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
-# will sort the (detailed) documentation of file and class members
-# alphabetically by member name. If set to NO the members will appear in
-# declaration order.
-
-SORT_MEMBER_DOCS = YES
-
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
-# brief documentation of file, namespace and class members alphabetically
-# by member name. If set to NO (the default) the members will appear in
-# declaration order.
-
-SORT_BRIEF_DOCS = NO
-
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
-# sorted by fully-qualified names, including namespaces. If set to
-# NO (the default), the class list will be sorted only by class name,
-# not including the namespace part.
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the
-# alphabetical list.
-
-SORT_BY_SCOPE_NAME = NO
-
-# The GENERATE_TODOLIST tag can be used to enable (YES) or
-# disable (NO) the todo list. This list is created by putting \todo
-# commands in the documentation.
-
-GENERATE_TODOLIST = YES
-
-# The GENERATE_TESTLIST tag can be used to enable (YES) or
-# disable (NO) the test list. This list is created by putting \test
-# commands in the documentation.
-
-GENERATE_TESTLIST = YES
-
-# The GENERATE_BUGLIST tag can be used to enable (YES) or
-# disable (NO) the bug list. This list is created by putting \bug
-# commands in the documentation.
-
-GENERATE_BUGLIST = YES
-
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
-# disable (NO) the deprecated list. This list is created by putting
-# \deprecated commands in the documentation.
-
-GENERATE_DEPRECATEDLIST= YES
-
-# The ENABLED_SECTIONS tag can be used to enable conditional
-# documentation sections, marked by \if sectionname ... \endif.
-
-ENABLED_SECTIONS =
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
-# the initial value of a variable or define consists of for it to appear in
-# the documentation. If the initializer consists of more lines than specified
-# here it will be hidden. Use a value of 0 to hide initializers completely.
-# The appearance of the initializer of individual variables and defines in the
-# documentation can be controlled using \showinitializer or \hideinitializer
-# command in the documentation regardless of this setting.
-
-MAX_INITIALIZER_LINES = 0
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
-# at the bottom of the documentation of classes and structs. If set to YES the
-# list will mention the files that were used to generate the documentation.
-
-SHOW_USED_FILES = NO
-
-# If the sources in your project are distributed over multiple directories
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
-# in the documentation. The default is NO.
-
-SHOW_DIRECTORIES = NO
-
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that
-# doxygen should invoke to get the current version for each file (typically from the
-# version control system). Doxygen will invoke the program by executing (via
-# popen()) the command <command> <input-file>, where <command> is the value of
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
-# provided by doxygen. Whatever the program writes to standard output
-# is used as the file version. See the manual for examples.
-
-FILE_VERSION_FILTER =
-
-#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-
-# The QUIET tag can be used to turn on/off the messages that are generated
-# by doxygen. Possible values are YES and NO. If left blank NO is used.
-
-QUIET = NO
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated by doxygen. Possible values are YES and NO. If left blank
-# NO is used.
-
-WARNINGS = YES
-
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
-# automatically be disabled.
-
-WARN_IF_UNDOCUMENTED = NO
-
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
-# potential errors in the documentation, such as not documenting some
-# parameters in a documented function, or documenting parameters that
-# don't exist or using markup commands wrongly.
-
-WARN_IF_DOC_ERROR = YES
-
-# This WARN_NO_PARAMDOC option can be abled to get warnings for
-# functions that are documented, but have no documentation for their parameters
-# or return value. If set to NO (the default) doxygen will only warn about
-# wrong or incomplete parameter documentation, but not about the absence of
-# documentation.
-
-WARN_NO_PARAMDOC = NO
-
-# The WARN_FORMAT tag determines the format of the warning messages that
-# doxygen can produce. The string should contain the $file, $line, and $text
-# tags, which will be replaced by the file and line number from which the
-# warning originated and the warning text. Optionally the format may contain
-# $version, which will be replaced by the version of the file (if it could
-# be obtained via FILE_VERSION_FILTER)
-
-WARN_FORMAT = "$file:$line: $text "
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning
-# and error messages should be written. If left blank the output is written
-# to stderr.
-
-WARN_LOGFILE =
-
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-
-# The INPUT tag can be used to specify the files and/or directories that contain
-# documented source files. You may enter file names like "myfile.cpp" or
-# directories like "/usr/src/myproject". Separate the files or directories
-# with spaces.
-
-INPUT = .
-
-# This tag can be used to specify the character encoding of the source files that
-# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default
-# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding.
-# See http://www.gnu.org/software/libiconv for the list of possible encodings.
-
-INPUT_ENCODING = UTF-8
-
-# If the value of the INPUT tag contains directories, you can use the
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank the following patterns are tested:
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
-
-FILE_PATTERNS = *.c \
- *.h
-
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories
-# should be searched for input files as well. Possible values are YES and NO.
-# If left blank NO is used.
-
-RECURSIVE = NO
-
-# The EXCLUDE tag can be used to specify files and/or directories that should
-# excluded from the INPUT source files. This way you can easily exclude a
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
-
-EXCLUDE =
-
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
-# directories that are symbolic links (a Unix filesystem feature) are excluded
-# from the input.
-
-EXCLUDE_SYMLINKS = NO
-
-# If the value of the INPUT tag contains directories, you can use the
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories. Note that the wildcards are matched
-# against the file with absolute path, so to exclude all test directories
-# for example use the pattern */test/*
-
-EXCLUDE_PATTERNS =
-
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
-# (namespaces, classes, functions, etc.) that should be excluded from the output.
-# The symbol name can be a fully qualified name, a word, or if the wildcard * is used,
-# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test
-
-EXCLUDE_SYMBOLS =
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or
-# directories that contain example code fragments that are included (see
-# the \include command).
-
-EXAMPLE_PATH =
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank all files are included.
-
-EXAMPLE_PATTERNS = *
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-# searched for input files to be used with the \include or \dontinclude
-# commands irrespective of the value of the RECURSIVE tag.
-# Possible values are YES and NO. If left blank NO is used.
-
-EXAMPLE_RECURSIVE = NO
-
-# The IMAGE_PATH tag can be used to specify one or more files or
-# directories that contain image that are included in the documentation (see
-# the \image command).
-
-IMAGE_PATH = doc
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should
-# invoke to filter for each input file. Doxygen will invoke the filter program
-# by executing (via popen()) the command <filter> <input-file>, where <filter>
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
-# input file. Doxygen will then use the output that the filter program writes
-# to standard output. If FILTER_PATTERNS is specified, this tag will be
-# ignored.
-
-INPUT_FILTER =
-
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
-# basis. Doxygen will compare the file name with each pattern and apply the
-# filter if there is a match. The filters are a list of the form:
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
-# is applied to all files.
-
-FILTER_PATTERNS =
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER) will be used to filter the input files when producing source
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).
-
-FILTER_SOURCE_FILES = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to source browsing
-#---------------------------------------------------------------------------
-
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will
-# be generated. Documented entities will be cross-referenced with these sources.
-# Note: To get rid of all source code in the generated output, make sure also
-# VERBATIM_HEADERS is set to NO. If you have enabled CALL_GRAPH or CALLER_GRAPH
-# then you must also enable this option. If you don't then doxygen will produce
-# a warning and turn it on anyway
-
-SOURCE_BROWSER = NO
-
-# Setting the INLINE_SOURCES tag to YES will include the body
-# of functions and classes directly in the documentation.
-
-INLINE_SOURCES = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
-# doxygen to hide any special comment blocks from generated source code
-# fragments. Normal C and C++ comments will always remain visible.
-
-STRIP_CODE_COMMENTS = YES
-
-# If the REFERENCED_BY_RELATION tag is set to YES (the default)
-# then for each documented function all documented
-# functions referencing it will be listed.
-
-REFERENCED_BY_RELATION = NO
-
-# If the REFERENCES_RELATION tag is set to YES (the default)
-# then for each documented function all documented entities
-# called/used by that function will be listed.
-
-REFERENCES_RELATION = NO
-
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
-# link to the source code. Otherwise they will link to the documentstion.
-
-REFERENCES_LINK_SOURCE = YES
-
-# If the USE_HTAGS tag is set to YES then the references to source code
-# will point to the HTML generated by the htags(1) tool instead of doxygen
-# built-in source browser. The htags tool is part of GNU's global source
-# tagging system (see http://www.gnu.org/software/global/global.html). You
-# will need version 4.8.6 or higher.
-
-USE_HTAGS = NO
-
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
-# will generate a verbatim copy of the header file for each class for
-# which an include is specified. Set to NO to disable this.
-
-VERBATIM_HEADERS = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
-# of all compounds will be generated. Enable this if the project
-# contains a lot of classes, structs, unions or interfaces.
-
-ALPHABETICAL_INDEX = NO
-
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
-# in which this list will be split (can be a number in the range [1..20])
-
-COLS_IN_ALPHA_INDEX = 5
-
-# In case all classes in a project start with a common prefix, all
-# classes will be put under the same header in the alphabetical index.
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
-# should be ignored while generating the index headers.
-
-IGNORE_PREFIX =
-
-#---------------------------------------------------------------------------
-# configuration options related to the HTML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
-# generate HTML output.
-
-GENERATE_HTML = YES
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `html' will be used as the default path.
-
-HTML_OUTPUT = html
-
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
-# doxygen will generate files with .html extension.
-
-HTML_FILE_EXTENSION = .html
-
-# The HTML_HEADER tag can be used to specify a personal HTML header for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard header.
-
-HTML_HEADER =
-
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard footer.
-
-HTML_FOOTER =
-
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
-# style sheet that is used by each HTML page. It can be used to
-# fine-tune the look of the HTML output. If the tag is left blank doxygen
-# will generate a default style sheet. Note that doxygen will try to copy
-# the style sheet file to the HTML output directory, so don't put your own
-# stylesheet in the HTML output directory as well, or it will be erased!
-
-HTML_STYLESHEET =
-
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
-# files or namespaces will be aligned in HTML using tables. If set to
-# NO a bullet list will be used.
-
-HTML_ALIGN_MEMBERS = YES
-
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files
-# will be generated that can be used as input for tools like the
-# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
-# of the generated HTML documentation.
-
-GENERATE_HTMLHELP = NO
-
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
-# documentation will contain sections that can be hidden and shown after the
-# page has loaded. For this to work a browser that supports
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
-
-HTML_DYNAMIC_SECTIONS = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
-# be used to specify the file name of the resulting .chm file. You
-# can add a path in front of the file if the result should not be
-# written to the html output directory.
-
-CHM_FILE =
-
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
-# be used to specify the location (absolute path including file name) of
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
-# the HTML help compiler on the generated index.hhp.
-
-HHC_LOCATION =
-
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
-# controls if a separate .chi index file is generated (YES) or that
-# it should be included in the master .chm file (NO).
-
-GENERATE_CHI = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
-# controls whether a binary table of contents is generated (YES) or a
-# normal table of contents (NO) in the .chm file.
-
-BINARY_TOC = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members
-# to the contents of the HTML help documentation and to the tree view.
-
-TOC_EXPAND = NO
-
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
-# top of each HTML page. The value NO (the default) enables the index and
-# the value YES disables it.
-
-DISABLE_INDEX = NO
-
-# This tag can be used to set the number of enum values (range [1..20])
-# that doxygen will group on one line in the generated HTML documentation.
-
-ENUM_VALUES_PER_LINE = 4
-
-# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
-# generated containing a tree-like index structure (just like the one that
-# is generated for HTML Help). For this to work a browser that supports
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
-# probably better off using the HTML help feature.
-
-GENERATE_TREEVIEW = NO
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
-# used to set the initial width (in pixels) of the frame in which the tree
-# is shown.
-
-TREEVIEW_WIDTH = 250
-
-#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
-# generate Latex output.
-
-GENERATE_LATEX = NO
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `latex' will be used as the default path.
-
-LATEX_OUTPUT = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked. If left blank `latex' will be used as the default command name.
-
-LATEX_CMD_NAME = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
-# generate index for LaTeX. If left blank `makeindex' will be used as the
-# default command name.
-
-MAKEINDEX_CMD_NAME = makeindex
-
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
-# LaTeX documents. This may be useful for small projects and may help to
-# save some trees in general.
-
-COMPACT_LATEX = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used
-# by the printer. Possible values are: a4, a4wide, letter, legal and
-# executive. If left blank a4wide will be used.
-
-PAPER_TYPE = a4wide
-
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
-# packages that should be included in the LaTeX output.
-
-EXTRA_PACKAGES =
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
-# the generated latex document. The header should contain everything until
-# the first chapter. If it is left blank doxygen will generate a
-# standard header. Notice: only use this tag if you know what you are doing!
-
-LATEX_HEADER =
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will
-# contain links (just like the HTML output) instead of page references
-# This makes the output suitable for online browsing using a pdf viewer.
-
-PDF_HYPERLINKS = NO
-
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
-# plain latex in the generated Makefile. Set this option to YES to get a
-# higher quality PDF documentation.
-
-USE_PDFLATEX = NO
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
-# command to the generated LaTeX files. This will instruct LaTeX to keep
-# running if errors occur, instead of asking the user for help.
-# This option is also used when generating formulas in HTML.
-
-LATEX_BATCHMODE = NO
-
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not
-# include the index chapters (such as File Index, Compound Index, etc.)
-# in the output.
-
-LATEX_HIDE_INDICES = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
-# The RTF output is optimized for Word 97 and may not look very pretty with
-# other RTF readers or editors.
-
-GENERATE_RTF = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `rtf' will be used as the default path.
-
-RTF_OUTPUT = rtf
-
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
-# RTF documents. This may be useful for small projects and may help to
-# save some trees in general.
-
-COMPACT_RTF = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
-# will contain hyperlink fields. The RTF file will
-# contain links (just like the HTML output) instead of page references.
-# This makes the output suitable for online browsing using WORD or other
-# programs which support those fields.
-# Note: wordpad (write) and others do not support links.
-
-RTF_HYPERLINKS = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's
-# config file, i.e. a series of assignments. You only have to provide
-# replacements, missing definitions are set to their default value.
-
-RTF_STYLESHEET_FILE =
-
-# Set optional variables used in the generation of an rtf document.
-# Syntax is similar to doxygen's config file.
-
-RTF_EXTENSIONS_FILE =
-
-#---------------------------------------------------------------------------
-# configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
-# generate man pages
-
-GENERATE_MAN = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `man' will be used as the default path.
-
-MAN_OUTPUT = man
-
-# The MAN_EXTENSION tag determines the extension that is added to
-# the generated man pages (default is the subroutine's section .3)
-
-MAN_EXTENSION = .3
-
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
-# then it will generate one additional man file for each entity
-# documented in the real man page(s). These additional files
-# only source the real man page, but without them the man command
-# would be unable to find the correct page. The default is NO.
-
-MAN_LINKS = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES Doxygen will
-# generate an XML file that captures the structure of
-# the code including all documentation.
-
-GENERATE_XML = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `xml' will be used as the default path.
-
-XML_OUTPUT = xml
-
-# The XML_SCHEMA tag can be used to specify an XML schema,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
-XML_SCHEMA =
-
-# The XML_DTD tag can be used to specify an XML DTD,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
-XML_DTD =
-
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
-# dump the program listings (including syntax highlighting
-# and cross-referencing information) to the XML output. Note that
-# enabling this will significantly increase the size of the XML output.
-
-XML_PROGRAMLISTING = YES
-
-#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
-# generate an AutoGen Definitions (see autogen.sf.net) file
-# that captures the structure of the code including all
-# documentation. Note that this feature is still experimental
-# and incomplete at the moment.
-
-GENERATE_AUTOGEN_DEF = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will
-# generate a Perl module file that captures the structure of
-# the code including all documentation. Note that this
-# feature is still experimental and incomplete at the
-# moment.
-
-GENERATE_PERLMOD = NO
-
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able
-# to generate PDF and DVI output from the Perl module output.
-
-PERLMOD_LATEX = NO
-
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
-# nicely formatted so it can be parsed by a human reader. This is useful
-# if you want to understand what is going on. On the other hand, if this
-# tag is set to NO the size of the Perl module output will be much smaller
-# and Perl will parse it just the same.
-
-PERLMOD_PRETTY = YES
-
-# The names of the make variables in the generated doxyrules.make file
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
-# This is useful so different doxyrules.make files included by the same
-# Makefile don't overwrite each other's variables.
-
-PERLMOD_MAKEVAR_PREFIX =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
-# evaluate all C-preprocessor directives found in the sources and include
-# files.
-
-ENABLE_PREPROCESSING = YES
-
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
-# names in the source code. If set to NO (the default) only conditional
-# compilation will be performed. Macro expansion can be done in a controlled
-# way by setting EXPAND_ONLY_PREDEF to YES.
-
-MACRO_EXPANSION = NO
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
-# then the macro expansion is limited to the macros specified with the
-# PREDEFINED and EXPAND_AS_DEFINED tags.
-
-EXPAND_ONLY_PREDEF = NO
-
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
-# in the INCLUDE_PATH (see below) will be search if a #include is found.
-
-SEARCH_INCLUDES = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by
-# the preprocessor.
-
-INCLUDE_PATH =
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will
-# be used.
-
-INCLUDE_FILE_PATTERNS =
-
-# The PREDEFINED tag can be used to specify one or more macro names that
-# are defined before the preprocessor is started (similar to the -D option of
-# gcc). The argument of the tag is a list of macros of the form: name
-# or name=definition (no spaces). If the definition and the = are
-# omitted =1 is assumed. To prevent a macro definition from being
-# undefined via #undef or recursively expanded use the := operator
-# instead of the = operator.
-
-PREDEFINED = DOXYGEN=1
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
-# this tag can be used to specify a list of macro names that should be expanded.
-# The macro definition that is found in the sources will be used.
-# Use the PREDEFINED tag if you want to use a different macro definition.
-
-EXPAND_AS_DEFINED =
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
-# doxygen's preprocessor will remove all function-like macros that are alone
-# on a line, have an all uppercase name, and do not end with a semicolon. Such
-# function macros are typically used for boiler-plate code, and will confuse
-# the parser if not removed.
-
-SKIP_FUNCTION_MACROS = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to external references
-#---------------------------------------------------------------------------
-
-# The TAGFILES option can be used to specify one or more tagfiles.
-# Optionally an initial location of the external documentation
-# can be added for each tagfile. The format of a tag file without
-# this location is as follows:
-# TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-# TAGFILES = file1=loc1 "file2 = loc2" ...
-# where "loc1" and "loc2" can be relative or absolute paths or
-# URLs. If a location is present for each tag, the installdox tool
-# does not have to be run to correct the links.
-# Note that each tag file must have a unique name
-# (where the name does NOT include the path)
-# If a tag file is not located in the directory in which doxygen
-# is run, you must also specify the path to the tagfile here.
-
-TAGFILES =
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create
-# a tag file that is based on the input files it reads.
-
-GENERATE_TAGFILE =
-
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed
-# in the class index. If set to NO only the inherited external classes
-# will be listed.
-
-ALLEXTERNALS = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
-# in the modules index. If set to NO, only the current project's groups will
-# be listed.
-
-EXTERNAL_GROUPS = YES
-
-# The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of `which perl').
-
-PERL_PATH = /usr/bin/perl
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
-# or super classes. Setting the tag to NO turns the diagrams off. Note that
-# this option is superseded by the HAVE_DOT option below. This is only a
-# fallback. It is recommended to install and use dot, since it yields more
-# powerful graphs.
-
-CLASS_DIAGRAMS = YES
-
-# You can define message sequence charts within doxygen comments using the \msc
-# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to
-# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to
-# specify the directory where the mscgen tool resides. If left empty the tool is assumed to
-# be found in the default search path.
-
-MSCGEN_PATH =
-
-# If set to YES, the inheritance and collaboration graphs will hide
-# inheritance and usage relations if the target is undocumented
-# or is not a class.
-
-HIDE_UNDOC_RELATIONS = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz, a graph visualization
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section
-# have no effect if this option is set to NO (the default)
-
-HAVE_DOT = NO
-
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect inheritance relations. Setting this tag to YES will force the
-# the CLASS_DIAGRAMS tag to NO.
-
-CLASS_GRAPH = YES
-
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect implementation dependencies (inheritance, containment, and
-# class references variables) of the class with other documented classes.
-
-COLLABORATION_GRAPH = YES
-
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for groups, showing the direct groups dependencies
-
-GROUP_GRAPHS = YES
-
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
-# Language.
-
-UML_LOOK = NO
-
-# If set to YES, the inheritance and collaboration graphs will show the
-# relations between templates and their instances.
-
-TEMPLATE_RELATIONS = NO
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
-# tags are set to YES then doxygen will generate a graph for each documented
-# file showing the direct and indirect include dependencies of the file with
-# other documented files.
-
-INCLUDE_GRAPH = YES
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
-# documented header file showing the documented files that directly or
-# indirectly include this file.
-
-INCLUDED_BY_GRAPH = YES
-
-# If the CALL_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will
-# generate a call dependency graph for every global function or class method.
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable call graphs for selected
-# functions only using the \callgraph command.
-
-CALL_GRAPH = NO
-
-# If the CALLER_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will
-# generate a caller dependency graph for every global function or class method.
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable caller graphs for selected
-# functions only using the \callergraph command.
-
-CALLER_GRAPH = NO
-
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
-# will graphical hierarchy of all classes instead of a textual one.
-
-GRAPHICAL_HIERARCHY = YES
-
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
-# then doxygen will show the dependencies a directory has on other directories
-# in a graphical way. The dependency relations are determined by the #include
-# relations between the files in the directories.
-
-DIRECTORY_GRAPH = YES
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot. Possible values are png, jpg, or gif
-# If left blank png will be used.
-
-DOT_IMAGE_FORMAT = png
-
-# The tag DOT_PATH can be used to specify the path where the dot tool can be
-# found. If left blank, it is assumed the dot tool can be found in the path.
-
-DOT_PATH =
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the
-# \dotfile command).
-
-DOTFILE_DIRS =
-
-# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
-# nodes that will be shown in the graph. If the number of nodes in a graph
-# becomes larger than this value, doxygen will truncate the graph, which is
-# visualized by representing a node as a red box. Note that doxygen if the number
-# of direct children of the root node in a graph is already larger than
-# MAX_DOT_GRAPH_NOTES then the graph will not be shown at all. Also note
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
-
-DOT_GRAPH_MAX_NODES = 50
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
-# graphs generated by dot. A depth value of 3 means that only nodes reachable
-# from the root by following a path via at most 3 edges will be shown. Nodes
-# that lay further from the root node will be omitted. Note that setting this
-# option to 1 or 2 may greatly reduce the computation time needed for large
-# code bases. Also note that the size of a graph can be further restricted by
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
-
-MAX_DOT_GRAPH_DEPTH = 1000
-
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is disabled by default, which results in a white background.
-# Warning: Depending on the platform used, enabling this option may lead to
-# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
-# read).
-
-DOT_TRANSPARENT = NO
-
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
-# files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10)
-# support this, this feature is disabled by default.
-
-DOT_MULTI_TARGETS = NO
-
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
-# generate a legend page explaining the meaning of the various boxes and
-# arrows in the dot generated graphs.
-
-GENERATE_LEGEND = YES
-
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
-# remove the intermediate dot files that are used to generate
-# the various graphs.
-
-DOT_CLEANUP = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to the search engine
-#---------------------------------------------------------------------------
-
-# The SEARCHENGINE tag specifies whether or not a search engine should be
-# used. If set to NO the values of all tags below this one will be ignored.
-
-SEARCHENGINE = NO
View
394 Code/FatStructs.h
@@ -0,0 +1,394 @@
+#ifndef FatStructs_h
+#define FatStructs_h
+/**
+ * \file
+ * FAT file structures
+ */
+/*
+ * mostly from Microsoft document fatgen103.doc
+ * http://www.microsoft.com/whdc/system/platform/firmware/fatgen.mspx
+ */
+//------------------------------------------------------------------------------
+ /** Value for byte 510 of boot block or MBR */
+#define BOOTSIG0 0X55
+ /** Value for byte 511 of boot block or MBR */
+#define BOOTSIG1 0XAA
+//------------------------------------------------------------------------------
+/**
+ * \struct partitionTable
+ * \brief MBR partition table entry
+ *
+ * A partition table entry for a MBR formatted storage device.
+ * The MBR partition table has four entries.
+ */
+struct partitionTable {
+ /**
+ * Boot Indicator . Indicates whether the volume is the active
+ * partition. Legal values include: 0X00. Do not use for booting.
+ * 0X80 Active partition.
+ */
+ uint8_t boot;
+ /**
+ * Head part of Cylinder-head-sector address of the first block in
+ * the partition. Legal values are 0-255. Only used in old PC BIOS.
+ */
+ uint8_t beginHead;
+ /**
+ * Sector part of Cylinder-head-sector address of the first block in
+ * the partition. Legal values are 1-63. Only used in old PC BIOS.
+ */
+ unsigned beginSector : 6;
+ /** High bits cylinder for first block in partition. */
+ unsigned beginCylinderHigh : 2;
+ /**
+ * Combine beginCylinderLow with beginCylinderHigh. Legal values
+ * are 0-1023. Only used in old PC BIOS.
+ */
+ uint8_t beginCylinderLow;
+ /**
+ * Partition type. See defines that begin with PART_TYPE_ for
+ * some Microsoft partition types.
+ */
+ uint8_t type;
+ /**
+ * head part of cylinder-head-sector address of the last sector in the
+ * partition. Legal values are 0-255. Only used in old PC BIOS.
+ */
+ uint8_t endHead;
+ /**
+ * Sector part of cylinder-head-sector address of the last sector in
+ * the partition. Legal values are 1-63. Only used in old PC BIOS.
+ */
+ unsigned endSector : 6;
+ /** High bits of end cylinder */
+ unsigned endCylinderHigh : 2;
+ /**
+ * Combine endCylinderLow with endCylinderHigh. Legal values
+ * are 0-1023. Only used in old PC BIOS.
+ */
+ uint8_t endCylinderLow;
+ /** Logical block address of the first block in the partition. */
+ uint32_t firstSector;
+ /** Length of the partition, in blocks. */
+ uint32_t totalSectors;
+};
+/** Type name for partitionTable */
+typedef struct partitionTable part_t;
+//------------------------------------------------------------------------------
+/**
+ * \struct masterBootRecord
+ *
+ * \brief Master Boot Record
+ *
+ * The first block of a storage device that is formatted with a MBR.
+ */
+struct masterBootRecord {
+ /** Code Area for master boot program. */
+ uint8_t codeArea[440];
+ /** Optional WindowsNT disk signature. May contain more boot code. */
+ uint32_t diskSignature;
+ /** Usually zero but may be more boot code. */
+ uint16_t usuallyZero;
+ /** Partition tables. */
+ part_t part[4];
+ /** First MBR signature byte. Must be 0X55 */
+ uint8_t mbrSig0;
+ /** Second MBR signature byte. Must be 0XAA */
+ uint8_t mbrSig1;
+};
+/** Type name for masterBootRecord */
+typedef struct masterBootRecord mbr_t;
+//------------------------------------------------------------------------------
+/**
+ * \struct biosParmBlock
+ *
+ * \brief BIOS parameter block
+ *
+ * The BIOS parameter block describes the physical layout of a FAT volume.
+ */
+struct biosParmBlock{
+ /**
+ * Count of bytes per sector. This value may take on only the
+ * following values: 512, 1024, 2048 or 4096
+ */
+ uint16_t bytesPerSector;
+ /**
+ * Number of sectors per allocation unit. This value must be a
+ * power of 2 that is greater than 0. The legal values are
+ * 1, 2, 4, 8, 16, 32, 64, and 128.
+ */
+ uint8_t sectorsPerCluster;
+ /**
+ * Number of sectors before the first FAT.
+ * This value must not be zero.
+ */
+ uint16_t reservedSectorCount;
+ /** The count of FAT data structures on the volume. This field should
+ * always contain the value 2 for any FAT volume of any type.
+ */
+ uint8_t fatCount;
+ /**
+ * For FAT12 and FAT16 volumes, this field contains the count of
+ * 32-byte directory entries in the root directory. For FAT32 volumes,
+ * this field must be set to 0. For FAT12 and FAT16 volumes, this
+ * value should always specify a count that when multiplied by 32
+ * results in a multiple of bytesPerSector. FAT16 volumes should
+ * use the value 512.
+ */
+ uint16_t rootDirEntryCount;
+ /**
+ * This field is the old 16-bit total count of sectors on the volume.
+ * This count includes the count of all sectors in all four regions
+ * of the volume. This field can be 0; if it is 0, then totalSectors32
+ * must be non-zero. For FAT32 volumes, this field must be 0. For
+ * FAT12 and FAT16 volumes, this field contains the sector count, and
+ * totalSectors32 is 0 if the total sector count fits
+ * (is less than 0x10000).
+ */
+ uint16_t totalSectors16;
+ /**
+ * This dates back to the old MS-DOS 1.x media determination and is
+ * no longer usually used for anything. 0xF8 is the standard value
+ * for fixed (non-removable) media. For removable media, 0xF0 is
+ * frequently used. Legal values are 0xF0 or 0xF8-0xFF.
+ */
+ uint8_t mediaType;
+ /**
+ * Count of sectors occupied by one FAT on FAT12/FAT16 volumes.
+ * On FAT32 volumes this field must be 0, and sectorsPerFat32
+ * contains the FAT size count.
+ */
+ uint16_t sectorsPerFat16;
+ /** Sectors per track for interrupt 0x13. Not used otherwise. */
+ uint16_t sectorsPerTrtack;
+ /** Number of heads for interrupt 0x13. Not used otherwise. */
+ uint16_t headCount;
+ /**
+ * Count of hidden sectors preceding the partition that contains this
+ * FAT volume. This field is generally only relevant for media
+ * visible on interrupt 0x13.
+ */
+ uint32_t hidddenSectors;
+ /**
+ * This field is the new 32-bit total count of sectors on the volume.
+ * This count includes the count of all sectors in all four regions
+ * of the volume. This field can be 0; if it is 0, then
+ * totalSectors16 must be non-zero.
+ */
+ uint32_t totalSectors32;
+ /**
+ * Count of sectors occupied by one FAT on FAT32 volumes.
+ */
+ uint32_t sectorsPerFat32;
+ /**
+ * This field is only defined for FAT32 media and does not exist on
+ * FAT12 and FAT16 media.
+ * Bits 0-3 -- Zero-based number of active FAT.
+ * Only valid if mirroring is disabled.
+ * Bits 4-6 -- Reserved.
+ * Bit 7 -- 0 means the FAT is mirrored at runtime into all FATs.
+ * -- 1 means only one FAT is active; it is the one referenced in bits 0-3.
+ * Bits 8-15 -- Reserved.
+ */
+ uint16_t fat32Flags;
+ /**
+ * FAT32 version. High byte is major revision number.
+ * Low byte is minor revision number. Only 0.0 define.
+ */
+ uint16_t fat32Version;
+ /**
+ * Cluster number of the first cluster of the root directory for FAT32.
+ * This usually 2 but not required to be 2.
+ */
+ uint32_t fat32RootCluster;
+ /**
+ * Sector number of FSINFO structure in the reserved area of the
+ * FAT32 volume. Usually 1.
+ */
+ uint16_t fat32FSInfo;
+ /**
+ * If non-zero, indicates the sector number in the reserved area
+ * of the volume of a copy of the boot record. Usually 6.
+ * No value other than 6 is recommended.
+ */
+ uint16_t fat32BackBootBlock;
+ /**
+ * Reserved for future expansion. Code that formats FAT32 volumes
+ * should always set all of the bytes of this field to 0.
+ */
+ uint8_t fat32Reserved[12];
+};
+/** Type name for biosParmBlock */
+typedef struct biosParmBlock bpb_t;
+//------------------------------------------------------------------------------
+/**
+ * \struct fat32BootSector
+ *
+ * \brief Boot sector for a FAT16 or FAT32 volume.
+ *
+ */
+struct fat32BootSector {
+ /** X86 jmp to boot program */
+ uint8_t jmpToBootCode[3];
+ /** informational only - don't depend on it */
+ char oemName[8];
+ /** BIOS Parameter Block */
+ bpb_t bpb;
+ /** for int0x13 use value 0X80 for hard drive */
+ uint8_t driveNumber;
+ /**used by Windows NT - should be zero for FAT */
+ uint8_t reserved1;
+ /** 0X29 if next three fields are valid */
+ uint8_t bootSignature;
+ /** usually generated by combining date and time */
+ uint32_t volumeSerialNumber;
+ /** should match volume label in root dir */
+ char volumeLabel[11];
+ /** informational only - don't depend on it */
+ char fileSystemType[8];
+ /** X86 boot code */
+ uint8_t bootCode[420];
+ /** must be 0X55 */
+ uint8_t bootSectorSig0;
+ /** must be 0XAA */
+ uint8_t bootSectorSig1;
+};
+//------------------------------------------------------------------------------
+// End Of Chain values for FAT entries
+ /** Minimum value for FAT16 EOC. Use to test for EOC. */
+#define FAT16EOC_MIN 0XFFF8
+ /** Minimum value for FAT32 EOC. Use to test for EOC. */
+#define FAT32EOC_MIN 0X0FFFFFF8
+ /** FAT16 end of chain value used by Microsoft. */
+#define FAT16EOC 0XFFFF
+ /** FAT32 end of chain value used by Microsoft. */
+#define FAT32EOC 0X0FFFFFFF
+ /** Mask a for FAT32 entry. Entries are 28 bits. */
+#define FAT32MASK 0X0FFFFFFF
+
+/** Type name for fat32BootSector */
+typedef struct fat32BootSector fbs_t;
+//------------------------------------------------------------------------------
+/**
+ * \struct directoryEntry
+ * \brief FAT short directory entry
+ *
+ * Short means short 8.3 name, not the entry size.
+ *
+ * Date Format. A FAT directory entry date stamp is a 16-bit field that is
+ * basically a date relative to the MS-DOS epoch of 01/01/1980. Here is the
+ * format (bit 0 is the LSB of the 16-bit word, bit 15 is the MSB of the
+ * 16-bit word):
+ *
+ * Bits 9-15: Count of years from 1980, valid value range 0-127
+ * inclusive (1980-2107).
+ *
+ * Bits 5-8: Month of year, 1 = January, valid value range 1-12 inclusive.
+ *
+ * Bits 0-4: Day of month, valid value range 1-31 inclusive.
+ *
+ * Time Format. A FAT directory entry time stamp is a 16-bit field that has
+ * a granularity of 2 seconds. Here is the format (bit 0 is the LSB of the
+ * 16-bit word, bit 15 is the MSB of the 16-bit word).
+ *
+ * Bits 11-15: Hours, valid value range 0-23 inclusive.
+ *
+ * Bits 5-10: Minutes, valid value range 0-59 inclusive.
+ *
+ * Bits 0-4: 2-second count, valid value range 0-29 inclusive (0 - 58 seconds).
+ *
+ * The valid time range is from Midnight 00:00:00 to 23:59:58.
+ */
+struct directoryEntry {
+ /**
+ * Short 8.3 name.
+ * The first eight bytes contain the file name with blank fill.
+ * The last three bytes contain the file extension with blank fill.
+ */
+ uint8_t name[11];
+ /** Entry attributes.
+ *
+ * The upper two bits of the attribute byte are reserved and should
+ * always be set to 0 when a file is created and never modified or
+ * looked at after that. See defines that begin with DIR_ATT_.
+ */
+ uint8_t attributes;
+ /**
+ * Reserved for use by Windows NT. Set value to 0 when a file is
+ * created and never modify or look at it after that.
+ */
+ uint8_t reservedNT;
+ /**
+ * The granularity of the seconds part of creationTime is 2 seconds
+ * so this field is a count of tenths of a second and its valid
+ * value range is 0-199 inclusive. (WHG note - seems to be hundredths)
+ */
+ uint8_t creationTimeTenths;
+ /** Time file was created. */
+ uint16_t creationTime;
+ /** Date file was created. */
+ uint16_t creationDate;
+ /**
+ * Last access date. Note that there is no last access time, only
+ * a date. This is the date of last read or write. In the case of
+ * a write, this should be set to the same date as lastWriteDate.
+ */
+ uint16_t lastAccessDate;
+ /**
+ * High word of this entry's first cluster number (always 0 for a
+ * FAT12 or FAT16 volume).
+ */
+ uint16_t firstClusterHigh;
+ /** Time of last write. File creation is considered a write. */
+ uint16_t lastWriteTime;
+ /** Date of last write. File creation is considered a write. */
+ uint16_t lastWriteDate;
+ /** Low word of this entry's first cluster number. */
+ uint16_t firstClusterLow;
+ /** 32-bit unsigned holding this file's size in bytes. */
+ uint32_t fileSize;
+};
+//------------------------------------------------------------------------------
+// Macros for directory entries
+//
+ /** Type name for directoryEntry */
+typedef struct directoryEntry dir_t;
+ /** escape for name[0] = 0XE5 */
+#define DIR_NAME_0XE5 0X05
+ /** name[0] value for entry that is free after being "deleted" */
+#define DIR_NAME_DELETED 0XE5
+ /** name[0] value for entry that is free and no allocated entries follow */
+#define DIR_NAME_FREE 0X00
+ /** file is read-only */
+#define DIR_ATT_READ_ONLY 0X01
+ /** File should hidden in directory listings */
+#define DIR_ATT_HIDDEN 0X02
+ /** Entry is for a system file */
+#define DIR_ATT_SYSTEM 0X04
+ /** Directory entry contains the volume label */
+#define DIR_ATT_VOLUME_ID 0X08
+ /** Entry is for a directory */
+#define DIR_ATT_DIRECTORY 0X10
+ /** Old DOS archive bit for backup support */
+#define DIR_ATT_ARCHIVE 0X20
+ /** Test value for long name entry. Test is
+ d->attributes & DIR_ATT_LONG_NAME_MASK) == DIR_ATT_LONG_NAME. */
+#define DIR_ATT_LONG_NAME 0X0F
+ /** Test mask for long name entry */
+#define DIR_ATT_LONG_NAME_MASK 0X3F
+ /** defined attribute bits */
+#define DIR_ATT_DEFINED_BITS 0X3F
+ /** Directory entry is part of a long name */
+#define DIR_IS_LONG_NAME(dir)\
+ (((dir).attributes & DIR_ATT_LONG_NAME_MASK) == DIR_ATT_LONG_NAME)
+ /** Mask for file/subdirectory tests */
+#define DIR_ATT_FILE_TYPE_MASK (DIR_ATT_VOLUME_ID | DIR_ATT_DIRECTORY)
+ /** Directory entry is for a file */
+#define DIR_IS_FILE(dir) (((dir).attributes & DIR_ATT_FILE_TYPE_MASK) == 0)
+ /** Directory entry is for a subdirectory */
+#define DIR_IS_SUBDIR(dir)\
+ (((dir).attributes & DIR_ATT_FILE_TYPE_MASK) == DIR_ATT_DIRECTORY)
+ /** Directory entry is for a file or subdirectory */
+#define DIR_IS_FILE_OR_SUBDIR(dir) (((dir).attributes & DIR_ATT_VOLUME_ID) == 0)
+
+#endif //FatStructs_h
View
682 Code/Makefile
@@ -1,682 +0,0 @@
-# Hey Emacs, this is a -*- makefile -*-
-#----------------------------------------------------------------------------
-# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
-#
-# Released to the Public Domain
-#
-# Additional material for this makefile was written by:
-# Peter Fleury
-# Tim Henigan
-# Colin O'Flynn
-# Reiner Patommel
-# Markus Pfaff
-# Sander Pool
-# Frederik Rouleau
-# Carlos Lamas
-#
-#----------------------------------------------------------------------------
-# On command line:
-#
-# make all = Make software.
-#
-# make clean = Clean out built project files.
-#
-# make coff = Convert ELF to AVR COFF.
-#
-# make extcoff = Convert ELF to AVR Extended COFF.
-#
-# make program = Download the hex file to the device, using avrdude.
-# Please customize the avrdude settings below first!
-#
-# make debug = Start either simulavr or avarice as specified for debugging,
-# with avr-gdb or avr-insight as the front end for debugging.
-#
-# make filename.s = Just compile filename.c into the assembler code only.
-#
-# make filename.i = Create a preprocessed source file for use in submitting
-# bug reports to the GCC project.
-#
-# To rebuild project do "make clean" then "make all".
-#----------------------------------------------------------------------------
-
-
-
-# MCU name
-MCU = atmega328p
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-# Typical values are:
-# F_CPU = 1000000
-# F_CPU = 1843200
-# F_CPU = 2000000
-# F_CPU = 3686400
-# F_CPU = 4000000
-# F_CPU = 7372800
-# F_CPU = 8000000
-# F_CPU = 11059200
-# F_CPU = 14745600
-# F_CPU = 16000000
-# F_CPU = 18432000
-# F_CPU = 20000000
-F_CPU = 16000000
-
-
-# Output format. (can be srec, ihex, binary)
-FORMAT = ihex
-
-
-# Target file name (without extension).
-TARGET = main
-
-
-# Object files directory
-# To put object files in current directory, use a dot (.), do NOT make
-# this an empty or blank macro!
-OBJDIR = .
-
-
-# List C source files here. (C dependencies are automatically generated.)
-SRC = $(TARGET).c
-SRC += byteordering.c
-SRC += partition.c
-SRC += sd_raw.c
-SRC += fat.c
-SRC += uart.c
-
-# List C++ source files here. (C dependencies are automatically generated.)
-CPPSRC =
-
-
-# List Assembler source files here.
-# Make them always end in a capital .S. Files ending in a lowercase .s
-# will not be considered source files but generated files (assembler
-# output from the compiler), and will be deleted upon "make clean"!
-# Even though the DOS/Win* filesystem matches both .s and .S the same,
-# it will preserve the spelling of the filenames, and gcc itself does
-# care about how the name is spelled on its command-line.
-ASRC =
-
-
-# Optimization level, can be [0, 1, 2, 3, s].
-# 0 = turn off optimization. s = optimize for size.
-# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
-#OPT = 0 //EEPROM functions fail at this level
-#OPT = 1 //EEPROM functions fail at this level
-#OPT = 2 //Ctrl+z doesn't work
-#OPT = 3 //Ctrl+z doesn't work - this causes the asm("nop"); to fail
-OPT = s
-
-
-# Debugging format.
-# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
-# AVR Studio 4.10 requires dwarf-2.
-# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
-DEBUG = dwarf-2
-
-
-# List any extra directories to look for include files here.
-# Each directory must be seperated by a space.
-# Use forward slashes for directory separators.
-# For a directory that has spaces, enclose it in quotes.
-EXTRAINCDIRS =
-
-
-# Compiler flag to set the C Standard level.
-# c89 = "ANSI" C
-# gnu89 = c89 plus GCC extensions
-# c99 = ISO C99 standard (not yet fully implemented)
-# gnu99 = c99 plus GCC extensions
-CSTANDARD = -std=gnu99
-
-
-# Place -D or -U options here for C sources
-CDEFS = -DF_CPU=$(F_CPU)UL
-
-
-# Place -D or -U options here for ASM sources
-ADEFS = -DF_CPU=$(F_CPU)
-
-
-# Place -D or -U options here for C++ sources
-CPPDEFS = -DF_CPU=$(F_CPU)UL
-#CPPDEFS += -D__STDC_LIMIT_MACROS
-#CPPDEFS += -D__STDC_CONSTANT_MACROS
-
-
-
-#---------------- Compiler Options C ----------------
-# -g*: generate debugging information
-# -O*: optimization level
-# -f...: tuning, see GCC manual and avr-libc documentation
-# -Wall...: warning level
-# -Wa,...: tell GCC to pass this to the assembler.