Merge branch "preempt" in "trunk".
[bertos.git] / bertos / drv / eeprom.c
index 6f0f8b59a96e6737e940d2a89ed5cce01337f2ec..01f483f20367cc7964c84b379f8aad633e16d808 100644 (file)
 #include "eeprom.h"
 
 #warning TODO:Test and complete this module for arm platform.
+#if !CPU_ARM
 
-#if 0
 #include <cfg/macros.h>  // MIN()
 #include <cfg/debug.h>
 #include <cfg/module.h>  // MOD_CHECK()
 
 #include <cpu/attr.h>
-#include CPU_HEADER(twi)
+#include <drv/i2c.h>
 
 #include <drv/wdt.h>
 
@@ -102,7 +102,7 @@ STATIC_ASSERT(countof(mem_info) == EEPROM_CNT);
  */
 static size_t eeprom_writeRaw(struct KFile *_fd, const void *buf, size_t size)
 {
-       Eeprom *fd = EEPROM(_fd);
+       Eeprom *fd = EEPROM_CAST(_fd);
        e2dev_addr_t dev_addr;
        uint8_t addr_buf[2];
        uint8_t addr_len;
@@ -114,7 +114,7 @@ static size_t eeprom_writeRaw(struct KFile *_fd, const void *buf, size_t size)
 
        /* clamp size to memory limit (otherwise may roll back) */
        ASSERT(_fd->seek_pos + size <= (kfile_off_t)_fd->size);
-       size = MIN((kfile_size_t)size, _fd->size - _fd->seek_pos);
+       size = MIN((kfile_off_t)size, _fd->size - _fd->seek_pos);
 
        if (mem_info[fd->type].has_dev_addr)
        {
@@ -147,15 +147,15 @@ static size_t eeprom_writeRaw(struct KFile *_fd, const void *buf, size_t size)
                }
 
 
-               if (!(twi_start_w(EEPROM_ADDR(dev_addr))
-                       && twi_send(addr_buf, addr_len)
-                       && twi_send(buf, count)))
+               if (!(i2c_start_w(EEPROM_ADDR(dev_addr))
+                       && i2c_send(addr_buf, addr_len)
+                       && i2c_send(buf, count)))
                {
-                       twi_stop();
+                       i2c_stop();
                        return wr_len;
                }
 
-               twi_stop();
+               i2c_stop();
 
                /* Update count and addr for next operation */
                size -= count;
@@ -175,9 +175,9 @@ static size_t eeprom_writeRaw(struct KFile *_fd, const void *buf, size_t size)
  */
 static size_t eeprom_writeVerify(struct KFile *_fd, const void *_buf, size_t size)
 {
-       Eeprom *fd = EEPROM(_fd);
+       Eeprom *fd = EEPROM_CAST(_fd);
        int retries = 5;
-       size_t wr_len;
+       size_t wr_len = 0;
 
        while (retries--)
        {
@@ -204,7 +204,7 @@ static size_t eeprom_writeVerify(struct KFile *_fd, const void *_buf, size_t siz
  */
 static size_t eeprom_read(struct KFile *_fd, void *_buf, size_t size)
 {
-       Eeprom *fd = EEPROM(_fd);
+       Eeprom *fd = EEPROM_CAST(_fd);
        uint8_t addr_buf[2];
        uint8_t addr_len;
        size_t rd_len = 0;
@@ -214,7 +214,7 @@ static size_t eeprom_read(struct KFile *_fd, void *_buf, size_t size)
 
        /* clamp size to memory limit (otherwise may roll back) */
        ASSERT(_fd->seek_pos + size <= (kfile_off_t)_fd->size);
-       size = MIN((kfile_size_t)size, _fd->size - _fd->seek_pos);
+       size = MIN((kfile_off_t)size, _fd->size - _fd->seek_pos);
 
        e2dev_addr_t dev_addr;
        if (mem_info[fd->type].has_dev_addr)
@@ -232,21 +232,21 @@ static size_t eeprom_read(struct KFile *_fd, void *_buf, size_t size)
        }
 
 
-       if (!(twi_start_w(EEPROM_ADDR(dev_addr))
-          && twi_send(addr_buf, addr_len)
-          && twi_start_r(EEPROM_ADDR(dev_addr))))
+       if (!(i2c_start_w(EEPROM_ADDR(dev_addr))
+          && i2c_send(addr_buf, addr_len)
+          && i2c_start_r(EEPROM_ADDR(dev_addr))))
        {
-               twi_stop();
+               i2c_stop();
                return 0;
        }
 
        while (size--)
        {
                /*
-                * The last byte read does not has an ACK
+                * The last byte read does not have an ACK
                 * to stop communication.
                 */
-               int c = twi_get(size);
+               int c = i2c_get(size);
 
                if (c == EOF)
                        break;
@@ -368,7 +368,7 @@ bool eeprom_erase(Eeprom *fd, e2addr_t addr, e2_size_t count)
  */
 void eeprom_init(Eeprom *fd, EepromType type, e2dev_addr_t addr, bool verify)
 {
-       MOD_CHECK(twi);
+       MOD_CHECK(i2c);
        ASSERT(type < EEPROM_CNT);
 
        memset(fd, 0, sizeof(*fd));
@@ -388,3 +388,5 @@ void eeprom_init(Eeprom *fd, EepromType type, e2dev_addr_t addr, bool verify)
 
        fd->fd.seek = kfile_genericSeek;
 }
+
+#endif