42 #ifndef CFS_COFFEE_ARCH_H
43 #define CFS_COFFEE_ARCH_H
45 #include "contiki-conf.h"
51 #define COFFEE_DEVICE 3
54 #if COFFEE_DEVICE==1 //1=eeprom for static file system
55 #define COFFEE_INGA_EEPROM 1
56 #define COFFEE_STATIC 1
57 #elif COFFEE_DEVICE==2 //2=eeprom for full file system
58 #define COFFEE_INGA_EEPROM 1
59 #elif COFFEE_DEVICE==3 //3=program flash for static file system
60 #define COFFEE_INGA_FLASH 1
61 #define COFFEE_STATIC 1
62 #elif COFFEE_DEVICE==4 //4=program flash with full file system
63 #define COFFEE_INGA_FLASH 1
64 #elif COFFEE_DEVICE==5 //5=use external onboard flash with full file system
65 #define COFFEE_INGA_EXTERNAL 1
66 #elif COFFEE_DEVICE==6 //6=sdcard flash for full file system
67 #define COFFEE_INGA_SDCARD 1
70 #ifdef COFFEE_INGA_EEPROM
74 #if COFFEE_ADDRESS==DEFAULT //Make can pass starting address with COFFEE_ADDRESS=0xnnnnnnnn
76 #ifdef CFS_EEPROM_CONF_OFFSET //Else use the platform default
77 #define COFFEE_ADDRESS CFS_EEPROM_CONF_OFFSET
78 #else //Use zero if no default defined
79 #define COFFEE_ADDRESS 0
84 #define COFFEE_PAGE_SIZE 16UL
85 #define COFFEE_START COFFEE_ADDRESS
86 #define COFFEE_SIZE ((3 * 1024U) - COFFEE_START)
88 #define COFFEE_SECTOR_SIZE (COFFEE_PAGE_SIZE*4)
89 #define COFFEE_NAME_LENGTH 16
91 #define COFFEE_MAX_OPEN_FILES 4
92 #define COFFEE_FD_SET_SIZE 8
93 #define COFFEE_LOG_TABLE_LIMIT 16
94 #define COFFEE_DYN_SIZE (COFFEE_PAGE_SIZE * 4)
95 #define COFFEE_LOG_SIZE 128
97 typedef int16_t coffee_page_t;
98 typedef uint16_t coffee_offset_t;
100 #define COFFEE_ERASE(sector) avr_eeprom_erase(sector)
101 void avr_eeprom_erase(uint16_t sector);
103 #define COFFEE_WRITE(buf, size, offset) \
104 eeprom_write(COFFEE_START + (offset), (unsigned char *)(buf), (size))
106 #define COFFEE_READ(buf, size, offset) \
107 eeprom_read (COFFEE_START + (offset), (unsigned char *)(buf), (size))
110 #elif defined COFFEE_INGA_FLASH
117 #define COFFEE_PAGE_SIZE (2*SPM_PAGESIZE)
118 #ifndef COFFEE_ADDRESS //Make can pass starting address with COFFEE_ADDRESS=0xnnnnnnnn, default is 64KB for webserver
119 #define COFFEE_ADDRESS 0x10000
121 #define COFFEE_PAGES (512-(COFFEE_ADDRESS/COFFEE_PAGE_SIZE)-32)
122 #define COFFEE_START (COFFEE_ADDRESS & ~(COFFEE_PAGE_SIZE-1))
124 #define COFFEE_SIZE (COFFEE_PAGES*COFFEE_PAGE_SIZE)
127 #define COFFEE_SECTOR_SIZE (COFFEE_PAGE_SIZE*1)
128 #define COFFEE_NAME_LENGTH 16
132 #define FLASH_WORD_READS 1
134 #define FLASH_COMPLEMENT_DATA 1
138 #define COFFEE_MAX_OPEN_FILES 4
139 #define COFFEE_FD_SET_SIZE 8
140 #define COFFEE_LOG_TABLE_LIMIT 16
141 #define COFFEE_DYN_SIZE (COFFEE_PAGE_SIZE*1)
142 #define COFFEE_MICRO_LOGS 0
143 #define COFFEE_LOG_SIZE 128
151 #define coffee_page_t uint8_t
152 #define CFS_CONF_OFFSET_TYPE uint16_t
155 #define COFFEE_WRITE(buf, size, offset) \
156 avr_flash_write(offset, (uint8_t *) buf, size)
158 #define COFFEE_READ(buf, size, offset) \
159 avr_flash_read(offset, (uint8_t *) buf, size)
161 #define COFFEE_ERASE(sector) avr_flash_erase(sector)
163 void avr_flash_erase(coffee_page_t sector);
168 #elif defined COFFEE_INGA_EXTERNAL
171 #define COFFEE_PAGE_SIZE 528UL
172 #ifndef COFFEE_ADDRESS
173 #define COFFEE_ADDRESS 0x0
175 #define COFFEE_PAGES 4096UL
176 #define COFFEE_START (COFFEE_ADDRESS)
177 #define COFFEE_SIZE 2162688UL
180 #define COFFEE_SECTOR_SIZE COFFEE_PAGE_SIZE
181 #define COFFEE_NAME_LENGTH 16
185 #define COFFEE_MAX_OPEN_FILES 6
186 #define COFFEE_FD_SET_SIZE 8
187 #define COFFEE_LOG_TABLE_LIMIT 16
188 #define COFFEE_DYN_SIZE (COFFEE_PAGE_SIZE*1)
189 #define COFFEE_MICRO_LOGS 0
190 #define COFFEE_LOG_SIZE 128
198 #define coffee_page_t uint16_t
199 #define CFS_CONF_OFFSET_TYPE uint32_t
201 #define COFFEE_WRITE(buf, size, offset) \
202 external_flash_write((CFS_CONF_OFFSET_TYPE) offset, (uint8_t *) buf, (CFS_CONF_OFFSET_TYPE) size)
204 #define COFFEE_READ(buf, size, offset) \
205 external_flash_read((CFS_CONF_OFFSET_TYPE) offset, (uint8_t *) buf, (CFS_CONF_OFFSET_TYPE) size)
207 #define COFFEE_ERASE(sector) \
208 external_flash_erase((coffee_page_t) sector)
216 void external_flash_erase(coffee_page_t sector);
219 #elif defined COFFEE_INGA_SDCARD
221 #define COFFEE_PAGE_SIZE 512
222 #ifndef COFFEE_ADDRESS
223 #define COFFEE_ADDRESS 0x0
225 #define COFFEE_PAGES 500UL
226 #define COFFEE_START (COFFEE_ADDRESS)
227 #define COFFEE_SIZE (COFFEE_PAGES * COFFEE_PAGE_SIZE)
230 #define COFFEE_SECTOR_SIZE COFFEE_PAGE_SIZE
231 #define COFFEE_NAME_LENGTH 16
235 #define COFFEE_MAX_OPEN_FILES 6
236 #define COFFEE_FD_SET_SIZE 8
237 #define COFFEE_LOG_TABLE_LIMIT 16
238 #define COFFEE_DYN_SIZE (COFFEE_PAGE_SIZE*1)
239 #define COFFEE_MICRO_LOGS 0
240 #define COFFEE_LOG_SIZE 128
248 #define coffee_page_t uint32_t
249 #define CFS_CONF_OFFSET_TYPE uint32_t
251 #define COFFEE_WRITE(buf, size, offset) \
252 sd_write(offset, (uint8_t *) buf, size)
254 #define COFFEE_READ(buf, size, offset) \
255 sd_read(offset, (uint8_t *) buf, size)
257 #define COFFEE_ERASE(sector) \
264 void sd_erase(coffee_page_t sector);
267 #error No coffee device defined
270 int coffee_file_test(
void);