I2C EEProm library

Fork of eeprom by FRA221_2015

Files at this revision

API Documentation at this revision

Comitter:
sweilz
Date:
Sat Nov 14 14:27:06 2015 +0000
Parent:
2:c648c5e93d5e
Child:
4:0f09fbac7613
Commit message:
EEPROM 24LC64

Changed in this revision

eeprom.cpp Show annotated file Show diff for this revision Revisions of this file
eeprom.h Show annotated file Show diff for this revision Revisions of this file
--- a/eeprom.cpp	Mon Oct 26 16:43:07 2015 +0000
+++ b/eeprom.cpp	Sat Nov 14 14:27:06 2015 +0000
@@ -10,818 +10,807 @@
 #define BIT_TEST(x,n) (x & (0x01<<n))
 #define BIT_CLEAR(x,n) (x=x & ~(0x01<<n))
 
-EEPROM::EEPROM(PinName sda, PinName scl, uint8_t address, TypeEeprom type) : _i2c(sda, scl) 
+EEPROM::EEPROM(PinName sda, PinName scl, uint8_t address, TypeEeprom type) : _i2c(sda, scl)
 {
-  
-  _errnum = EEPROM_NoError;
-  _type = type;
-  
-  // Check address range
-  _address = address;
-  switch(type) {
-                 case T24C01 :
-                 case T24C02 :
-                    if(address > 7) {
-                      _errnum = EEPROM_BadAddress;
-                    }
-                    _address = _address << 1;
-                    _page_write = 8;
-                    _page_number = 1;
-                    break;
-                 case T24C04 :
-                    if(address > 7) {
-                      _errnum = EEPROM_BadAddress;
-                    }
-                    _address = (_address & 0xFE) << 1;
-                    _page_write = 16;
-                    _page_number = 2;
-                    break;
-                 case T24C08 :
-                    if(address > 7) {
-                      _errnum = EEPROM_BadAddress;
-                    }
-                    _address = (_address & 0xFC) << 1;
-                    _page_write = 16;
-                    _page_number = 4;
-                    break;
-                 case T24C16 :
-                    _address = 0;
-                    _page_write = 16;
-                    _page_number = 8;
-                    break;
-                  case T24C32 :
-                  case T24C64 :
-                  
-                    if(address > 7) {
-                      _errnum = EEPROM_BadAddress;
-                    }
-                    
-                    _address = _address << 1;
-                    
-                    
-                    _page_write = 32;
-                    _page_number = 1;
-                    break;
-                  case T24C128 :
-                  case T24C256 :
-                    if(address > 3) {
-                      _errnum = EEPROM_BadAddress;
-                    }
-                    _address = _address << 1;
-                    _page_write = 64;
-                    _page_number = 1;
-                    break;
-                 case T24C512 :
-                    if(address > 3) {
-                      _errnum = EEPROM_BadAddress;
-                    }
-                    _address = _address << 1;
-                    _page_write = 128;
-                    _page_number = 1;
-                    break;
-                 case T24C1024 :
-                    if(address > 7) {
-                      _errnum = EEPROM_BadAddress;
-                    }
-                    _address = (_address & 0xFE) << 1;
-                    _page_write = 128;
-                    _page_number = 2;
-                    break;
-                 case T24C1025 :
-                    if(address > 3) {
-                      _errnum = EEPROM_BadAddress;
-                    }
-                    _address = _address << 1;
-                    _page_write = 128;
-                    _page_number = 2;
-                    break;
-  }
-  
-  // Size in bytes
-  _size = _type;
-  if(_type == T24C1025)
-    _size = T24C1024;
-  
-  // Set I2C frequency
-  _i2c.frequency(100000);
+
+    _errnum = EEPROM_NoError;
+    _type = type;
+
+    // Check address range
+    _address = address;
+    switch(type) {
+        case T24C01 :
+        case T24C02 :
+            if(address > 7) {
+                _errnum = EEPROM_BadAddress;
+            }
+            _address = _address << 1;
+            _page_write = 8;
+            _page_number = 1;
+            break;
+        case T24C04 :
+            if(address > 7) {
+                _errnum = EEPROM_BadAddress;
+            }
+            _address = (_address & 0xFE) << 1;
+            _page_write = 16;
+            _page_number = 2;
+            break;
+        case T24C08 :
+            if(address > 7) {
+                _errnum = EEPROM_BadAddress;
+            }
+            _address = (_address & 0xFC) << 1;
+            _page_write = 16;
+            _page_number = 4;
+            break;
+        case T24C16 :
+            _address = 0;
+            _page_write = 16;
+            _page_number = 8;
+            break;
+        case T24C32 :
+        case T24C64 :
+            if(address > 7) {
+                _errnum = EEPROM_BadAddress;
+            }
+            _address = _address << 1;
+            _page_write = 32;
+            _page_number = 1;
+            break;
+        case T24C128 :
+        case T24C256 :
+            if(address > 3) {
+                _errnum = EEPROM_BadAddress;
+            }
+            _address = _address << 1;
+            _page_write = 64;
+            _page_number = 1;
+            break;
+        case T24C512 :
+            if(address > 3) {
+                _errnum = EEPROM_BadAddress;
+            }
+            _address = _address << 1;
+            _page_write = 128;
+            _page_number = 1;
+            break;
+        case T24C1024 :
+            if(address > 7) {
+                _errnum = EEPROM_BadAddress;
+            }
+            _address = (_address & 0xFE) << 1;
+            _page_write = 128;
+            _page_number = 2;
+            break;
+        case T24C1025 :
+            if(address > 3) {
+                _errnum = EEPROM_BadAddress;
+            }
+            _address = _address << 1;
+            _page_write = 128;
+            _page_number = 2;
+            break;
+    }
+
+    // Size in bytes
+    _size = _type;
+    if(_type == T24C1025)
+        _size = T24C1024;
+
+    // Set I2C frequency
+    _i2c.frequency(100000);
 }
 
 void EEPROM::write(uint16_t address, int8_t data)
 {
-  uint8_t page;
-  uint8_t addr;
-  uint8_t cmd[3];
-  int len;
-  int ack;
-  
-  // Check error
-  if(_errnum) 
-    return;
-    
-  // Check address
-  if(!checkAddress(address)) {
-    _errnum = EEPROM_OutOfRange;
-    return;
-  }
-  
-  // Compute page number
-  page = 0;
-  if(_type < T24C32)
-    page = (uint8_t) (address / 256); 
-  
-  // Device address
-  addr = EEPROM_Address | _address | (page << 1);
- 
-  if(_type < T24C32) {
-    len = 2;
-    
-    // Word address 
-    cmd[0] = (uint8_t) (address - page * 256);
-  
-    // Data
-    cmd[1] = (uint8_t) data;
-  }
-  else {
-    len = 3;
-    
-    // First word address (MSB)
-    cmd[0] = (uint8_t) (address >> 8);
-    
-    // Second word address (LSB)
-    cmd[1] = (uint8_t) address;
-    
-    // Data
-    cmd[2] = (uint8_t) data;
-  }
-  
- // printf("len %d address %02x cmd[0] %02x cmd[1] %02x cmd[2] %02x\n",len,addr,cmd[0],cmd[1],cmd[2]);
- 
-  ack = _i2c.write((int)addr,(char *)cmd,len);
-  if(ack != 0) {
-    _errnum = EEPROM_I2cError;
-    return;
-  }
-  
-  // Wait end of write
-  ready();
+    uint8_t page;
+    uint8_t addr;
+    uint8_t cmd[3];
+    int len;
+    int ack;
+
+    // Check error
+    if(_errnum)
+        return;
+
+    // Check address
+    if(!checkAddress(address)) {
+        _errnum = EEPROM_OutOfRange;
+        return;
+    }
+
+    // Compute page number
+    page = 0;
+    if(_type < T24C32)
+        page = (uint8_t) (address / 256);
+
+    // Device address
+    addr = EEPROM_Address | _address | (page << 1);
+
+    if(_type < T24C32) {
+        len = 2;
+
+        // Word address
+        cmd[0] = (uint8_t) (address - page * 256);
+
+        // Data
+        cmd[1] = (uint8_t) data;
+    } else {
+        len = 3;
+
+        // First word address (MSB)
+        cmd[0] = (uint8_t) (address >> 8);
+
+        // Second word address (LSB)
+        cmd[1] = (uint8_t) address;
+
+        // Data
+        cmd[2] = (uint8_t) data;
+    }
+
+// printf("len %d address %02x cmd[0] %02x cmd[1] %02x cmd[2] %02x\n",len,addr,cmd[0],cmd[1],cmd[2]);
+
+    ack = _i2c.write((int)addr,(char *)cmd,len);
+    if(ack != 0) {
+        _errnum = EEPROM_I2cError;
+        return;
+    }
+
+    // Wait end of write
+    ready();
 
 }
 
 void EEPROM::write(uint16_t address, int8_t data[], uint16_t length)
 {
-  uint8_t page;
-  uint8_t addr;
-  uint8_t blocs,remain;
-  uint8_t fpart,lpart;
-  uint8_t i,j,ind;
-  uint8_t cmd[129];
-  int ack;
-  
-  // Check error
-  if(_errnum) 
-    return;
-    
-  // Check address
-  if(!checkAddress(address)) {
-    _errnum = EEPROM_OutOfRange;
-    return;
-  }
-  
-  // Check length
-  if(!checkAddress(address + length - 1)) {
-    _errnum = EEPROM_OutOfRange;
-    return;
-  }
-  
-  // Compute blocs numbers
-  blocs = length / _page_write;
-  
-  // Compute remaining bytes
-  remain = length - blocs * _page_write;
-  
-  for(i = 0;i < blocs;i++) {
-     // Compute page number
-     page = 0;
-     if(_type < T24C32)
-       page = (uint8_t) (address / 256); 
-  
-     // Device address
-     addr = EEPROM_Address | _address | (page << 1);
-  
-     if(_type < T24C32) {
-       // Word address
-       cmd[0] = (uint8_t) (address - page * 256);
-     
-       if((uint8_t) ((address + _page_write) / 256) == page) { // Data fit in the same page
-         // Add data 
-         for(j = 0;j < _page_write;j++)
-            cmd[j + 1] = (uint8_t) data[i * _page_write + j];
-    
-         // Write data
-         ack = _i2c.write((int)addr,(char *)cmd,_page_write + 1);
-         if(ack != 0) {
-           _errnum = EEPROM_I2cError;
-           return;
-         }
-  
-         // Wait end of write
-         ready();
-       
-         // Increment address
-         address += _page_write;
-       }
-       else { // Data on 2 pages. We must split the write
-         // Number of bytes in current page
-         fpart = (page + 1) * 256 - address;
-       
-         // Add data for current page
-         for(j = 0;j < fpart;j++)
-            cmd[j + 1] = (uint8_t) data[i * _page_write + j];
-    
-         // Write data for current page
-         ack = _i2c.write((int)addr,(char *)cmd,fpart + 1);
-         if(ack != 0) {
-           _errnum = EEPROM_I2cError;
-           return;
-         }
-  
-         // Wait end of write
-         ready();
-       
-         // Increment address
-         address += fpart;
-       
-         if(page < _page_number - 1) {
-           // Increment page
-           page++;
-       
-           // Device address
-           addr = EEPROM_Address | _address | (page << 1);
-       
-           // Word address
-           cmd[0] = (uint8_t) (address - page * 256);
-       
-           // Data index
-           ind = i * _page_write + fpart;
-       
-           // Number of bytes in next page
-           lpart = _page_write - fpart;
-       
-           // Add data for next page
-           for(j = 0;j < lpart;j++)
-              cmd[j + 1] = (uint8_t) data[ind + j];
-    
-           // Write data for next page
-           ack = _i2c.write((int)addr,(char *)cmd,lpart + 1);
-           if(ack != 0) {
-             _errnum = EEPROM_I2cError;
-             return;
-           }
-  
-           // Wait end of write
-           ready();
-       
-           // Increment address
-           address += lpart;
-         }
-       }
-     }
-     else {
-       // First word address (MSB)
-       cmd[0] = (uint8_t) (address >> 8);
-       
-       // Second word address (LSB)
-       cmd[1] = (uint8_t) address;
-       
-       // Add data 
-       for(j = 0;j < _page_write;j++)
-          cmd[j + 2] = (uint8_t) data[i * _page_write + j];
-    
-       // Write data
-       ack = _i2c.write((int)addr,(char *)cmd,_page_write + 2);
-       if(ack != 0) {
-         _errnum = EEPROM_I2cError;
-         return;
-       }
-  
-       // Wait end of write
-       ready();
-       
-       // Increment address
-       address += _page_write;
-     }
-  }
-  
-  // Compute page number
-  page = 0;
-  if(_type < T24C32)
-    page = (uint8_t) (address / 256); 
-  
-  // Device address
-  addr = EEPROM_Address | _address | (page << 1);
-  
-  if(_type < T24C32) {
-    // Word address
-    cmd[0] = (uint8_t) (address - page * 256);
-  
-    if((uint8_t) ((address + remain) / 256) == page) { // Data fit in the same page
-      // Add data for the current page
-      for(j = 0;j < remain;j++)
-         cmd[j + 1] = (uint8_t) data[blocs * _page_write + j];
-    
-      // Write data for the current page
-      ack = _i2c.write((int)addr,(char *)cmd,remain + 1);
-      if(ack != 0) {
-        _errnum = EEPROM_I2cError;
+    uint8_t page;
+    uint8_t addr;
+    uint8_t blocs,remain;
+    uint8_t fpart,lpart;
+    uint8_t i,j,ind;
+    uint8_t cmd[129];
+    int ack;
+
+    // Check error
+    if(_errnum)
+        return;
+
+    // Check address
+    if(!checkAddress(address)) {
+        _errnum = EEPROM_OutOfRange;
         return;
-      }
-  
-      // Wait end of write
-      ready();
+    }
+
+    // Check length
+    if(!checkAddress(address + length - 1)) {
+        _errnum = EEPROM_OutOfRange;
+        return;
     }
-    else { // Data on 2 pages. We must split the write
-      // Number of bytes in current page
-      fpart = (page + 1) * 256 - address;
-    
-      // Add data for current page
-      for(j = 0;j < fpart;j++)
-         cmd[j + 1] = (uint8_t) data[blocs * _page_write + j];
-    
-      // Write data for current page
-      ack = _i2c.write((int)addr,(char *)cmd,fpart + 1);
-      if(ack != 0) {
-        _errnum = EEPROM_I2cError;
-        return;
-      }
-  
-      // Wait end of write
-      ready();
-    
-      // Increment address
-      address += fpart;
-       
-      if(page < _page_number - 1) {
-        // Increment page
-        page++;
-    
+
+    // Compute blocs numbers
+    blocs = length / _page_write;
+
+    // Compute remaining bytes
+    remain = length - blocs * _page_write;
+
+    for(i = 0; i < blocs; i++) {
+        // Compute page number
+        page = 0;
+        if(_type < T24C32)
+            page = (uint8_t) (address / 256);
+
         // Device address
         addr = EEPROM_Address | _address | (page << 1);
-    
+
+        if(_type < T24C32) {
+            // Word address
+            cmd[0] = (uint8_t) (address - page * 256);
+
+            if((uint8_t) ((address + _page_write) / 256) == page) { // Data fit in the same page
+                // Add data
+                for(j = 0; j < _page_write; j++)
+                    cmd[j + 1] = (uint8_t) data[i * _page_write + j];
+
+                // Write data
+                ack = _i2c.write((int)addr,(char *)cmd,_page_write + 1);
+                if(ack != 0) {
+                    _errnum = EEPROM_I2cError;
+                    return;
+                }
+
+                // Wait end of write
+                ready();
+
+                // Increment address
+                address += _page_write;
+            } else { // Data on 2 pages. We must split the write
+                // Number of bytes in current page
+                fpart = (page + 1) * 256 - address;
+
+                // Add data for current page
+                for(j = 0; j < fpart; j++)
+                    cmd[j + 1] = (uint8_t) data[i * _page_write + j];
+
+                // Write data for current page
+                ack = _i2c.write((int)addr,(char *)cmd,fpart + 1);
+                if(ack != 0) {
+                    _errnum = EEPROM_I2cError;
+                    return;
+                }
+
+                // Wait end of write
+                ready();
+
+                // Increment address
+                address += fpart;
+
+                if(page < _page_number - 1) {
+                    // Increment page
+                    page++;
+
+                    // Device address
+                    addr = EEPROM_Address | _address | (page << 1);
+
+                    // Word address
+                    cmd[0] = (uint8_t) (address - page * 256);
+
+                    // Data index
+                    ind = i * _page_write + fpart;
+
+                    // Number of bytes in next page
+                    lpart = _page_write - fpart;
+
+                    // Add data for next page
+                    for(j = 0; j < lpart; j++)
+                        cmd[j + 1] = (uint8_t) data[ind + j];
+
+                    // Write data for next page
+                    ack = _i2c.write((int)addr,(char *)cmd,lpart + 1);
+                    if(ack != 0) {
+                        _errnum = EEPROM_I2cError;
+                        return;
+                    }
+
+                    // Wait end of write
+                    ready();
+
+                    // Increment address
+                    address += lpart;
+                }
+            }
+        } else {
+            // First word address (MSB)
+            cmd[0] = (uint8_t) (address >> 8);
+
+            // Second word address (LSB)
+            cmd[1] = (uint8_t) address;
+
+            // Add data
+            for(j = 0; j < _page_write; j++)
+                cmd[j + 2] = (uint8_t) data[i * _page_write + j];
+
+            // Write data
+            ack = _i2c.write((int)addr,(char *)cmd,_page_write + 2);
+            if(ack != 0) {
+                _errnum = EEPROM_I2cError;
+                return;
+            }
+
+            // Wait end of write
+            ready();
+
+            // Increment address
+            address += _page_write;
+        }
+    }
+
+    // Compute page number
+    page = 0;
+    if(_type < T24C32)
+        page = (uint8_t) (address / 256);
+
+    // Device address
+    addr = EEPROM_Address | _address | (page << 1);
+
+    if(_type < T24C32) {
         // Word address
         cmd[0] = (uint8_t) (address - page * 256);
-    
-        // Data index
-        ind = blocs * _page_write + fpart;
-    
-        // Number of bytes in next page
-        lpart = remain - fpart;
-    
-        // Add data for next page
-        for(j = 0;j < lpart;j++)
-           cmd[j + 1] = (uint8_t) data[ind + j];
-    
-        // Write data for next page
-        ack = _i2c.write((int)addr,(char *)cmd,lpart + 1);
+
+        if((uint8_t) ((address + remain) / 256) == page) { // Data fit in the same page
+            // Add data for the current page
+            for(j = 0; j < remain; j++)
+                cmd[j + 1] = (uint8_t) data[blocs * _page_write + j];
+
+            // Write data for the current page
+            ack = _i2c.write((int)addr,(char *)cmd,remain + 1);
+            if(ack != 0) {
+                _errnum = EEPROM_I2cError;
+                return;
+            }
+
+            // Wait end of write
+            ready();
+        } else { // Data on 2 pages. We must split the write
+            // Number of bytes in current page
+            fpart = (page + 1) * 256 - address;
+
+            // Add data for current page
+            for(j = 0; j < fpart; j++)
+                cmd[j + 1] = (uint8_t) data[blocs * _page_write + j];
+
+            // Write data for current page
+            ack = _i2c.write((int)addr,(char *)cmd,fpart + 1);
+            if(ack != 0) {
+                _errnum = EEPROM_I2cError;
+                return;
+            }
+
+            // Wait end of write
+            ready();
+
+            // Increment address
+            address += fpart;
+
+            if(page < _page_number - 1) {
+                // Increment page
+                page++;
+
+                // Device address
+                addr = EEPROM_Address | _address | (page << 1);
+
+                // Word address
+                cmd[0] = (uint8_t) (address - page * 256);
+
+                // Data index
+                ind = blocs * _page_write + fpart;
+
+                // Number of bytes in next page
+                lpart = remain - fpart;
+
+                // Add data for next page
+                for(j = 0; j < lpart; j++)
+                    cmd[j + 1] = (uint8_t) data[ind + j];
+
+                // Write data for next page
+                ack = _i2c.write((int)addr,(char *)cmd,lpart + 1);
+                if(ack != 0) {
+                    _errnum = EEPROM_I2cError;
+                    return;
+                }
+
+                // Wait end of write
+                ready();
+            }
+        }
+    } else {
+        // Fist word address (MSB)
+        cmd[0] = (uint8_t) (address >> 8);
+
+        // Second word address (LSB)
+        cmd[1] = (uint8_t) address;
+
+        // Add data for the current page
+        for(j = 0; j < remain; j++)
+            cmd[j + 2] = (uint8_t) data[blocs * _page_write + j];
+
+        // Write data for the current page
+        ack = _i2c.write((int)addr,(char *)cmd,remain + 2);
         if(ack != 0) {
-          _errnum = EEPROM_I2cError;
-          return;
+            _errnum = EEPROM_I2cError;
+            return;
         }
-        
+
         // Wait end of write
         ready();
-      }
     }
-  }
-  else {
-    // Fist word address (MSB)
-    cmd[0] = (uint8_t) (address >> 8);
-    
-    // Second word address (LSB)
-    cmd[1] = (uint8_t) address;
 
-    // Add data for the current page
-    for(j = 0;j < remain;j++)
-       cmd[j + 2] = (uint8_t) data[blocs * _page_write + j];
-    
-    // Write data for the current page
-    ack = _i2c.write((int)addr,(char *)cmd,remain + 2);
-    if(ack != 0) {
-      _errnum = EEPROM_I2cError;
-      return;
-    }
-  
-    // Wait end of write
-    ready();
-  }
-  
 }
 
 void EEPROM::write(uint16_t address, int16_t data)
 {
-  int8_t cmd[2];
-  
-  // Check error
-  if(_errnum) 
-    return;
-    
-  // Check address
-  if(!checkAddress(address + 1)) {
-    _errnum = EEPROM_OutOfRange;
-    return;
-  }
-  
-  memcpy(cmd,&data,2);
-  
-  write(address,cmd,2);
-  
+    int8_t cmd[2];
+
+    // Check error
+    if(_errnum)
+        return;
+
+    // Check address
+    if(!checkAddress(address + 1)) {
+        _errnum = EEPROM_OutOfRange;
+        return;
+    }
+
+    memcpy(cmd,&data,2);
+
+    write(address,cmd,2);
+
 }
 
 void EEPROM::write(uint16_t address, int32_t data)
 {
-  int8_t cmd[4];
-  
-  // Check error
-  if(_errnum) 
-    return;
-    
-  // Check address
-  if(!checkAddress(address + 3)) {
-    _errnum = EEPROM_OutOfRange;
-    return;
-  }
-  
-  memcpy(cmd,&data,4);
-  
-  write(address,cmd,4);
+    int8_t cmd[4];
+
+    // Check error
+    if(_errnum)
+        return;
+
+    // Check address
+    if(!checkAddress(address + 3)) {
+        _errnum = EEPROM_OutOfRange;
+        return;
+    }
+
+    memcpy(cmd,&data,4);
+
+    write(address,cmd,4);
 
 }
 
 void EEPROM::write(uint16_t address, float data)
 {
-  int8_t cmd[4];
-  
-  // Check error
-  if(_errnum) 
-    return;
-    
-  // Check address
-  if(!checkAddress(address + 3)) {
-    _errnum = EEPROM_OutOfRange;
-    return;
-  }
-  
-  memcpy(cmd,&data,4);
-  
-  write(address,cmd,4);
-  
+    int8_t cmd[4];
+
+    // Check error
+    if(_errnum)
+        return;
+
+    // Check address
+    if(!checkAddress(address + 3)) {
+        _errnum = EEPROM_OutOfRange;
+        return;
+    }
+
+    memcpy(cmd,&data,4);
+
+    write(address,cmd,4);
+
 }
 
 void EEPROM::write(uint16_t address, void *data, uint16_t size)
 {
-  int8_t *cmd = NULL;
-  
-  // Check error
-  if(_errnum) 
-    return;
-    
-  // Check address
-  if(!checkAddress(address + size - 1)) {
-    _errnum = EEPROM_OutOfRange;
-    return;
-  }
-  
-  cmd = (int8_t *)malloc(size);
-  if(cmd == NULL) {
-    _errnum = EEPROM_MallocError;
-    return;
-  }
-    
-  memcpy(cmd,data,size);
-  
-  write(address,cmd,size);
-  
-  free(cmd);
-  
+    int8_t *cmd = NULL;
+
+    // Check error
+    if(_errnum)
+        return;
+
+    // Check address
+    if(!checkAddress(address + size - 1)) {
+        _errnum = EEPROM_OutOfRange;
+        return;
+    }
+
+    cmd = (int8_t *)malloc(size);
+    if(cmd == NULL) {
+        _errnum = EEPROM_MallocError;
+        return;
+    }
+
+    memcpy(cmd,data,size);
+
+    write(address,cmd,size);
+
+    free(cmd);
+
 }
 
 void EEPROM::read(uint16_t address, int8_t& data)
 {
-  uint8_t page;
-  uint8_t addr;
-  uint8_t cmd[2];
-  uint8_t len;
-  int ack;
-  
-  // Check error
-  if(_errnum) 
-    return;
-    
-  // Check address
-  if(!checkAddress(address)) {
-    _errnum = EEPROM_OutOfRange;
-    return;
-  }
-  
-  // Compute page number
-  page = 0;
-  if(_type < T24C32)
-    page = (uint8_t) (address / 256); 
-  
-  // Device address
-  addr = EEPROM_Address | _address | (page << 1);
-  
-  if(_type < T24C32) {
-    len = 1;
-    
-    // Word address
-    cmd[0] = (uint8_t) (address - page * 256);
-  }
-  else {
-    len = 2;
-    
-    // First word address (MSB)
-    cmd[0] = (uint8_t) (address >> 8);
-    
-    // Second word address (LSB)
-    cmd[1] = (uint8_t)address;
-  }
-  
-  // Write command
-  ack = _i2c.write((int)addr,(char *)cmd,len,true);
-  if(ack != 0) {
-    _errnum = EEPROM_I2cError;
-    return;
-  }
-  
-  // Read data
-  ack = _i2c.read((int)addr,(char *)&data,sizeof(data));
-  if(ack != 0) {
-    _errnum = EEPROM_I2cError;
-    return;
-  }
-  
+    uint8_t page;
+    uint8_t addr;
+    uint8_t cmd[2];
+    uint8_t len;
+    int ack;
+
+    // Check error
+    if(_errnum)
+        return;
+
+    // Check address
+    if(!checkAddress(address)) {
+        _errnum = EEPROM_OutOfRange;
+        return;
+    }
+
+    // Compute page number
+    page = 0;
+    if(_type < T24C32)
+        page = (uint8_t) (address / 256);
+
+    // Device address
+    addr = EEPROM_Address | _address | (page << 1);
+
+    if(_type < T24C32) {
+        len = 1;
+
+        // Word address
+        cmd[0] = (uint8_t) (address - page * 256);
+    } else {
+        len = 2;
+
+        // First word address (MSB)
+        cmd[0] = (uint8_t) (address >> 8);
+
+        // Second word address (LSB)
+        cmd[1] = (uint8_t)address;
+    }
+
+    // Write command
+    ack = _i2c.write((int)addr,(char *)cmd,len,true);
+    if(ack != 0) {
+        _errnum = EEPROM_I2cError;
+        return;
+    }
+
+    // Read data
+    ack = _i2c.read((int)addr,(char *)&data,sizeof(data));
+    if(ack != 0) {
+        _errnum = EEPROM_I2cError;
+        return;
+    }
+
 }
 
 void EEPROM::read(uint16_t address, int8_t *data, uint16_t size)
 {
-  uint8_t page;
-  uint8_t addr;
-  uint8_t cmd[2];
-  uint8_t len;
-  int ack;
-  
-  // Check error
-  if(_errnum) 
-    return;
-    
-  // Check address
-  if(!checkAddress(address)) {
-    _errnum = EEPROM_OutOfRange;
-    return;
-  }
-  
-  // Check size
-  if(!checkAddress(address + size - 1)) {
-    _errnum = EEPROM_OutOfRange; 
-    return;
-  }
-  
-  // Compute page number
-  page = 0;
-  if(_type < T24C32)
-    page = (uint8_t) (address / 256); 
-  
-  // Device address
-  addr = EEPROM_Address | _address | (page << 1);
-  
-  if(_type < T24C32) {
-    len = 1;
-    
-    // Word address
-    cmd[0] = (uint8_t) (address - page * 256);
-  }
-  else {
-    len = 2;
-    
-    // First word address (MSB)
-    cmd[0] = (uint8_t) (address >> 8);
-    
-    // Second word address (LSB)
-    cmd[1] = (uint8_t) address;
-  }
-  
-  // Write command 
-  ack = _i2c.write((int)addr,(char *)cmd,len,true);
-  if(ack != 0) {
-    _errnum = EEPROM_I2cError;
-    return;
-  }
-  
-  // Sequential read
-  ack = _i2c.read((int)addr,(char *)data,size);
-  if(ack != 0) {
-    _errnum = EEPROM_I2cError;
-    return;
-  }
-  
+    uint8_t page;
+    uint8_t addr;
+    uint8_t cmd[2];
+    uint8_t len;
+    int ack;
+
+    // Check error
+    if(_errnum)
+        return;
+
+    // Check address
+    if(!checkAddress(address)) {
+        _errnum = EEPROM_OutOfRange;
+        return;
+    }
+
+    // Check size
+    if(!checkAddress(address + size - 1)) {
+        _errnum = EEPROM_OutOfRange;
+        return;
+    }
+
+    // Compute page number
+    page = 0;
+    if(_type < T24C32)
+        page = (uint8_t) (address / 256);
+
+    // Device address
+    addr = EEPROM_Address | _address | (page << 1);
+
+    if(_type < T24C32) {
+        len = 1;
+
+        // Word address
+        cmd[0] = (uint8_t) (address - page * 256);
+    } else {
+        len = 2;
+
+        // First word address (MSB)
+        cmd[0] = (uint8_t) (address >> 8);
+
+        // Second word address (LSB)
+        cmd[1] = (uint8_t) address;
+    }
+
+    // Write command
+    ack = _i2c.write((int)addr,(char *)cmd,len,true);
+    if(ack != 0) {
+        _errnum = EEPROM_I2cError;
+        return;
+    }
+
+    // Sequential read
+    ack = _i2c.read((int)addr,(char *)data,size);
+    if(ack != 0) {
+        _errnum = EEPROM_I2cError;
+        return;
+    }
+
 }
 
 void EEPROM::read(int8_t& data)
 {
-  uint8_t addr;
-  int ack;
-  
-  // Check error
-  if(_errnum) 
-    return;
-  
-  // Device address
-  addr = EEPROM_Address | _address;
+    uint8_t addr;
+    int ack;
+
+    // Check error
+    if(_errnum)
+        return;
 
-  // Read data
-  ack = _i2c.read((int)addr,(char *)&data,sizeof(data));
-  if(ack != 0) {
-    _errnum = EEPROM_I2cError;
-    return;
-  }
-  
+    // Device address
+    addr = EEPROM_Address | _address;
+
+    // Read data
+    ack = _i2c.read((int)addr,(char *)&data,sizeof(data));
+    if(ack != 0) {
+        _errnum = EEPROM_I2cError;
+        return;
+    }
+
 }
 
 void EEPROM::read(uint16_t address, int16_t& data)
 {
-  int8_t cmd[2];
-  
-  // Check error
-  if(_errnum) 
-    return;
-    
-  // Check address
-  if(!checkAddress(address + 1)) {
-    _errnum = EEPROM_OutOfRange;
-    return;
-  }
- 
-  read(address,cmd,2);
-  
-  memcpy(&data,cmd,2);
-  
+    int8_t cmd[2];
+
+    // Check error
+    if(_errnum)
+        return;
+
+    // Check address
+    if(!checkAddress(address + 1)) {
+        _errnum = EEPROM_OutOfRange;
+        return;
+    }
+
+    read(address,cmd,2);
+
+    memcpy(&data,cmd,2);
+
 }
 
 void EEPROM::read(uint16_t address, int32_t& data)
 {
-  int8_t cmd[4];
-  
-  // Check error
-  if(_errnum) 
-    return;
-    
-  // Check address
-  if(!checkAddress(address + 3)) {
-    _errnum = EEPROM_OutOfRange;
-    return;
-  }
- 
-  read(address,cmd,4);
-  
-  memcpy(&data,cmd,4);
-  
+    int8_t cmd[4];
+
+    // Check error
+    if(_errnum)
+        return;
+
+    // Check address
+    if(!checkAddress(address + 3)) {
+        _errnum = EEPROM_OutOfRange;
+        return;
+    }
+
+    read(address,cmd,4);
+
+    memcpy(&data,cmd,4);
+
 }
 
 void EEPROM::read(uint16_t address, float& data)
 {
-  int8_t cmd[4];
-  
-  // Check error
-  if(_errnum) 
-    return;
-    
-  // Check address
-  if(!checkAddress(address + 3)) {
-    _errnum = EEPROM_OutOfRange;
-    return;
-  }
-  
-  read(address,cmd,4);
-  
-  memcpy(&data,cmd,4);
-  
+    int8_t cmd[4];
+
+    // Check error
+    if(_errnum)
+        return;
+
+    // Check address
+    if(!checkAddress(address + 3)) {
+        _errnum = EEPROM_OutOfRange;
+        return;
+    }
+
+    read(address,cmd,4);
+
+    memcpy(&data,cmd,4);
+
 }
 
 void EEPROM::read(uint16_t address, void *data, uint16_t size)
 {
-  int8_t *cmd = NULL;
-  
-  // Check error
-  if(_errnum) 
-    return;
-    
-  // Check address
-  if(!checkAddress(address + size - 1)) {
-    _errnum = EEPROM_OutOfRange;
-    return;
-  }
-  
-  cmd = (int8_t *)malloc(size);
-  if(cmd == NULL) {
-    _errnum = EEPROM_MallocError;
-    return;
-  }
-  
-  read(address,cmd,size);
-  
-  memcpy(data,cmd,size);
-  
-  free(cmd);
-  
+    int8_t *cmd = NULL;
+
+    // Check error
+    if(_errnum)
+        return;
+
+    // Check address
+    if(!checkAddress(address + size - 1)) {
+        _errnum = EEPROM_OutOfRange;
+        return;
+    }
+
+    cmd = (int8_t *)malloc(size);
+    if(cmd == NULL) {
+        _errnum = EEPROM_MallocError;
+        return;
+    }
+
+    read(address,cmd,size);
+
+    memcpy(data,cmd,size);
+
+    free(cmd);
+
 }
 
 void EEPROM::ready(void)
 {
-  int ack;
-  uint8_t addr;
-  uint8_t cmd;
-  
-  // Check error
-  if(_errnum) 
-    return;
-  
-  // Device address
-  addr = EEPROM_Address | _address;
-  
-  cmd = 0;
-  /*
-  // Wait end of write
-  do {
-       ack = _i2c.write((int)addr,(char *)cmd,0);
-  } while(ack != 0);
-*/
+    int ack;
+    uint8_t addr;
+    uint8_t cmd;
+
+    // Check error
+    if(_errnum)
+        return;
+
+    // Device address
+    addr = EEPROM_Address | _address;
+
+    cmd = 0;
+    /*
+    // Wait end of write
+    do {
+         ack = _i2c.write((int)addr,(char *)cmd,0);
+    } while(ack != 0);
+    */
     wait_ms(5);
 }
 
 uint32_t EEPROM::getSize(void)
 {
-  return(_size);
+    return(_size);
 }
 
 uint8_t EEPROM::getError(void)
 {
-  return(_errnum);
+    return(_errnum);
 }
 
 bool EEPROM::checkAddress(uint16_t address)
 {
-  bool ret = true;
-  
-  switch(_type) {
-                  case T24C01 :
-                     if(address >= T24C01)
-                       ret = false;
-                     break;
-                  case T24C02 :
-                     if(address >= T24C02)
-                       ret = false;
-                     break;
-                  case T24C04 :
-                     if(address >= T24C04)
-                       ret = false;
-                     break;
-                  case T24C08 :
-                     if(address >= T24C08)
-                       ret = false;
-                     break;
-                  case T24C16 :
-                     if(address >= T24C16)
-                       ret = false;
-                     break;
-                  case T24C32 :
-                     if(address >= T24C32)
-                       ret = false;
-                     break;
-                  case T24C64 :
-                     if(address >= T24C64)
-                       ret = false;
-                     break;
-                  case T24C128 :
-                     if(address >= T24C128)
-                       ret = false;
-                     break;
-                  case T24C256 :
-                     if(address >= T24C256)
-                       ret = false;
-                     break;
-                  case T24C512 :
-                     if(address >= T24C512)
-                       ret = false;
-                     break;
-                  case T24C1024 :
-                     if(address >= T24C1024)
-                       ret = false;
-                     break;
-                  case T24C1025 :
-                     if(address >= T24C1025 - 1)
-                       ret = false;
-                     break;
-  }
-  
-  return(ret);
-}  
\ No newline at end of file
+    bool ret = true;
+
+    switch(_type) {
+        case T24C01 :
+            if(address >= T24C01)
+                ret = false;
+            break;
+        case T24C02 :
+            if(address >= T24C02)
+                ret = false;
+            break;
+        case T24C04 :
+            if(address >= T24C04)
+                ret = false;
+            break;
+        case T24C08 :
+            if(address >= T24C08)
+                ret = false;
+            break;
+        case T24C16 :
+            if(address >= T24C16)
+                ret = false;
+            break;
+        case T24C32 :
+            if(address >= T24C32)
+                ret = false;
+            break;
+        case T24C64 :
+            if(address >= T24C64)
+                ret = false;
+            break;
+        case T24C128 :
+            if(address >= T24C128)
+                ret = false;
+            break;
+        case T24C256 :
+            if(address >= T24C256)
+                ret = false;
+            break;
+        case T24C512 :
+            if(address >= T24C512)
+                ret = false;
+            break;
+        case T24C1024 :
+            if(address >= T24C1024)
+                ret = false;
+            break;
+        case T24C1025 :
+            if(address >= T24C1025 - 1)
+                ret = false;
+            break;
+    }
+
+    return(ret);
+}
\ No newline at end of file
--- a/eeprom.h	Mon Oct 26 16:43:07 2015 +0000
+++ b/eeprom.h	Sat Nov 14 14:27:06 2015 +0000
@@ -2,16 +2,11 @@
 #define __EEPROM__H_
 
 // Includes
-#include <string> 
-
+#include <string>
 #include "mbed.h"
 
-// Example
-/*
-*/
-
 // Defines
-#define EEPROM_Address     0xa0
+#define EEPROM_Address     0xA0
 
 #define EEPROM_NoError     0x00
 #define EEPROM_BadAddress  0x01
@@ -22,32 +17,32 @@
 
 #define EEPROM_MaxError       6
 
-static std::string _ErrorMessageEEPROM[EEPROM_MaxError] = {
-                                                            "",
+static std::string _ErrorMessageEEPROM[EEPROM_MaxError] = { "",
                                                             "Bad chip address",
                                                             "I2C error (nack)",
                                                             "Invalid parameter",
                                                             "Data address out of range",
-                                                            "Memory allocation error"
-                                                          };
+                                                            "Memory allocation error"};
 
 // Class
-class EEPROM {
+class EEPROM
+{
 public:
     enum TypeEeprom {T24C01=128,T24C02=256,T24C04=512,T24C08=1024,T24C16=2048,
                      T24C32=4096,T24C64=8192,T24C128=16384,T24C256=32768,
-                     T24C512=65536,T24C1024=131072,T24C1025=131073} Type;
-    
+                     T24C512=65536,T24C1024=131072,T24C1025=131073
+                    } Type;
+
     /*
      * Constructor, initialize the eeprom on i2c interface.
      * @param sda : sda i2c pin (PinName)
      * @param scl : scl i2c pin (PinName)
      * @param address : eeprom address, according to eeprom type (uint8_t)
-     * @param type : eeprom type (TypeEeprom) 
+     * @param type : eeprom type (TypeEeprom)
      * @return none
     */
     EEPROM(PinName sda, PinName scl, uint8_t address, TypeEeprom type=T24C64);
-    
+
     /*
      * Random read byte
      * @param address : start address (uint16_t)
@@ -55,7 +50,7 @@
      * @return none
     */
     void read(uint16_t address, int8_t& data);
-    
+
     /*
      * Random read short
      * @param address : start address (uint16_t)
@@ -63,7 +58,7 @@
      * @return none
     */
     void read(uint16_t address, int16_t& data);
-    
+
     /*
      * Random read long
      * @param address : start address (uint16_t)
@@ -71,7 +66,7 @@
      * @return none
     */
     void read(uint16_t address, int32_t& data);
-    
+
     /*
      * Random read float
      * @param address : start address (uint16_t)
@@ -79,7 +74,7 @@
      * @return none
     */
     void read(uint16_t address, float& data);
-    
+
     /*
      * Random read anything
      * @param address : start address (uint16_t)
@@ -88,14 +83,14 @@
      * @return none
     */
     void read(uint16_t address, void *data, uint16_t size);
-    
+
     /*
      * Current address read byte
      * @param data : byte to read (int8_t&)
      * @return none
     */
     void read(int8_t& data);
-    
+
     /*
      * Sequential read byte
      * @param address : start address (uint16_t)
@@ -104,7 +99,7 @@
      * @return none
     */
     void read(uint16_t address, int8_t *data, uint16_t size);
-    
+
     /*
      * Write byte
      * @param address : start address (uint16_t)
@@ -112,7 +107,7 @@
      * @return none
     */
     void write(uint16_t address, int8_t data);
-    
+
     /*
      * Write short
      * @param address : start address (uint16_t)
@@ -120,7 +115,7 @@
      * @return none
     */
     void write(uint16_t address, int16_t data);
-    
+
     /*
      * Write long
      * @param address : start address (uint16_t)
@@ -128,7 +123,7 @@
      * @return none
     */
     void write(uint16_t address, int32_t data);
-    
+
     /*
      * Write float
      * @param address : start address (uint16_t)
@@ -136,7 +131,7 @@
      * @return error number if > 0 (uint8_t)
     */
     void write(uint16_t address, float data);
-    
+
     /*
      * Write anything
      * @param address : start address (uint16_t)
@@ -145,7 +140,7 @@
      * @return none
     */
     void write(uint16_t address, void *data, uint16_t size);
-    
+
     /*
      * Write page
      * @param address : start address (uint16_t)
@@ -154,38 +149,37 @@
      * @return none
     */
     void write(uint16_t address, int8_t data[], uint16_t size);
-    
+
     /*
      * Wait eeprom ready
      * @param : none
      * @return none
     */
     void ready(void);
-    
+
     /*
      * Get eeprom size in bytes
      * @param : none
      * @return size in bytes (uint16_t)
     */
     uint32_t getSize(void);
-    
-     /*
-     * Get the current error number (EEPROM_NoError if no error)
-     * @param  : none
-     * @return current error number (uint8_t)
+
+    /*
+    * Get the current error number (EEPROM_NoError if no error)
+    * @param  : none
+    * @return current error number (uint8_t)
     */
     uint8_t getError(void);
-    
+
     /*
      * Get current error message
      * @param  : none
      * @return current error message(std::string)
     */
-    std::string getErrorMessage(void)
-    { 
-      return(_ErrorMessageEEPROM[_errnum]);
+    std::string getErrorMessage(void) {
+        return(_ErrorMessageEEPROM[_errnum]);
     }
-    
+
 //---------- local variables ----------
 private:
     I2C _i2c;             // Local i2c communication interface instance