Merge branch "preempt" in "trunk".
[bertos.git] / bertos / cpu / avr / drv / flash_avr.h
index 91de1e3cbfa9b8fc975c6aa3292c2a59bf6b6312..0897132c358809eb3c024c0c9779a739479a7345 100644 (file)
 
 #include <cfg/compiler.h>
 #include <kern/kfile.h>
+#include <avr/io.h>
+
+
+/**
+ * Definition of type for avr flash module.
+ */
+typedef uint16_t avr_page_t;
 
 
 /**
  * FlashAvr KFile context structure.
  */
-typedef struct KFileFlashAvr
+typedef struct FlashAvr
 {
-       KFile fd;                       ///< File descriptor.
-} KFileFlashAvr;
+       /**
+        * File descriptor.
+        */
+       KFile fd;
+
+       /**
+        * Current buffered page.
+        */
+       avr_page_t curr_page;
+
+       /**
+        * Flag for checking if current page is modified.
+        */
+       bool page_dirty;
+
+       /**
+        * Temporary buffer cointaing data block to
+        * write on flash.
+        */
+       uint8_t page_buf[SPM_PAGESIZE];
+
+
+} FlashAvr;
 
 
 
@@ -60,16 +88,16 @@ typedef struct KFileFlashAvr
 #define KFT_FLASHAVR MAKE_ID('F', 'L', 'A', 'V')
 
 /**
- * Convert + ASSERT from generic KFile to KFileFlashAvr.
+ * Convert + ASSERT from generic KFile to FlashAvr.
  */
-INLINE KFileFlashAvr * KFILEFLASHAVR(KFile *fd)
+INLINE FlashAvr * FLASHAVR_CAST(KFile *fd)
 {
        ASSERT(fd->_type == KFT_FLASHAVR);
-       return (KFileFlashAvr *)fd;
+       return (FlashAvr *)fd;
 }
 
 
-void flash_avr_init(struct KFileFlashAvr *fd);
+void flash_avr_init(struct FlashAvr *fd);