Project

Dependencies:   Hotboards_keypad TextLCD eeprom

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers i2ceeprom.cpp Source File

i2ceeprom.cpp

00001 
00002 #include "mbed.h"
00003 #include <string>
00004 #include "eeprom.h"
00005 #include "i2ceeprom.h"
00006 
00007 #define EEPROM_ADDR 0x0   // I2c EEPROM address is 0x00
00008 
00009 #define SDA D14           // I2C SDA pin
00010 #define SCL D15           // I2C SCL pin
00011 
00012 #define MIN(X,Y) ((X) < (Y) ? (X) : (Y))
00013 #define MAX(X,Y) ((X) > (Y) ? (X) : (Y))
00014 
00015 #define MB_ID 0x00
00016 #define NO_OF_DEV 0x01
00017 #define DEV_1_ID 0x02
00018 #define DEV_1_ST 0x03
00019 #define DEV_1_VAL 0x04
00020 #define DEV_2_ID 0x05
00021 #define DEV_2_ST 0x06
00022 #define DEV_2_VAL 0x07
00023 #define DEV_3_ID 0x08
00024 #define DEV_3_VAL 0x09
00025 #define DEV_4_ID 0x0A
00026 #define DEV_4_ST 0x0B
00027 #define DEV_4_VAL 0x0C
00028 
00029 int mb_ID = 0x00;
00030 int NOno_of_dev = 0x00;
00031 int dev_1_id = 0x00;
00032 int dev_1_st = 0x00;
00033 int dev_1_val = 0x00;
00034 int dev_2_id = 0x00;
00035 int dev_2_st = 0x00;
00036 int dev_2_val = 0x00;
00037 int dev_3_id = 0x00;
00038 int dev_3_st = 0x00;
00039 int dev_3_val = 0x00;
00040 int dev_4_id = 0x00;
00041 int dev_5_st = 0x00;
00042 int dev_6_val = 0x00;
00043 
00044 extern float G_time;
00045 extern float Y_time;
00046 extern float R_time;
00047 
00048 
00049 int32_t eeprom_size,max_size;
00050 typedef struct _MyData {
00051                          int16_t sdata;
00052                          int32_t idata;
00053                          float fdata;
00054                        } MyData;
00055 
00056 static void myerror(std::string msg)
00057 {
00058   printf("Error %s\n",msg.c_str());
00059   exit(1);
00060 }
00061 
00062 void StoreCurrentMode(int32_t idata)
00063 {
00064   EEPROM ep(SDA,SCL,EEPROM_ADDR,EEPROM::T24C32);  // 24C64 eeprom with sda = p9 and scl = p10  
00065   eeprom_size = ep.getSize();
00066   max_size = MAX(eeprom_size,256);
00067   ep.write(10,(int32_t)idata); // long write at address eeprom_size - 12
00068   if(ep.getError() != 0)
00069     myerror(ep.getErrorMessage());
00070     printf("\n");    
00071     ep.read(10,(int32_t&)idata);
00072 //   printf("TransDC Read %d\r\n",idata);
00073 }
00074 
00075 
00076 
00077 int32_t readCurrentMode()
00078 {
00079   int32_t idata;
00080   EEPROM ep(SDA,SCL,EEPROM_ADDR,EEPROM::T24C32);  // 24C64 eeprom with sda = p9 and scl = p10
00081     eeprom_size = ep.getSize();
00082   max_size = MAX(eeprom_size,256);
00083   printf(" Max Size =:%d\r\n",max_size);
00084  ep.read(10,(int32_t&)idata);
00085  
00086  if(ep.getError() != 0)
00087     myerror(ep.getErrorMessage());
00088    //printf("\n");
00089 //   printf("Trans Down Count Read %d\r\n",idata);
00090    return idata;
00091 }
00092 
00093 bool WriteCorresspondingTimes(uint32_t currentMode, float gTime,float yTime,float rTime)
00094 {
00095   EEPROM ep(SDA,SCL,EEPROM_ADDR,EEPROM::T24C32);  // 24C64 eeprom with sda = p9 and scl = p10
00096   eeprom_size = ep.getSize();
00097   max_size =  MAX(eeprom_size-200,256);
00098   
00099     uint32_t addr = 100*currentMode;
00100   ep.write(addr,(float)gTime); // float write at address eeprom_size - 8
00101   if(ep.getError() != 0)
00102     myerror(ep.getErrorMessage());
00103   
00104   // Test read short, long, float
00105   printf("\nGreen Time : (%f) :\n",gTime);  
00106  
00107   
00108   addr = 100*currentMode +4;
00109   ep.write(addr,(float)yTime); // float write at address eeprom_size - 8
00110   if(ep.getError() != 0)
00111     myerror(ep.getErrorMessage());
00112   
00113   // Test read short, long, float
00114   printf("\nYellow Time : (%f) :\n",yTime);  
00115   
00116      addr = 100*currentMode +8;
00117   ep.write(addr,(float)rTime); // float write at address eeprom_size - 8
00118   if(ep.getError() != 0)
00119     myerror(ep.getErrorMessage());
00120   
00121   // Test read short, long, float
00122   printf("\nRed Time : (%f) :\n",rTime);  
00123 
00124 
00125 }
00126 
00127 
00128 bool ReadCorresspondingTimes(uint32_t currentMode, float *gTime,float *yTime,float *rTime)
00129 {
00130   float fdata=0.0;
00131   EEPROM ep(SDA,SCL,EEPROM_ADDR,EEPROM::T24C32);  // 24C64 eeprom with sda = p9 and scl = p10
00132     eeprom_size = ep.getSize();
00133     printf("Size is : %d",eeprom_size);
00134   max_size = MAX(eeprom_size-200,256);
00135   printf(" Here 1\r\n");
00136   uint32_t addr=currentMode*100;
00137   ep.read(addr,fdata);  
00138   *gTime=fdata;
00139   
00140   fdata=0;
00141   addr = 100*currentMode +4;
00142 //   ep.read((uint32_t)(max_size - ((currentMode*12)-4)),fdata);  
00143    ep.read(addr,fdata);  
00144   *yTime=fdata;
00145   fdata=0;
00146   addr = 100*currentMode +8;
00147 //   ep.read((uint32_t)(max_size - ((currentMode*12)-8)),fdata); 
00148 ep.read(addr,fdata);   
00149   *rTime=fdata;
00150   printf("1 : %f\r\n",*gTime);
00151   printf("2 : %f\r\n",*yTime);
00152   printf("3 : %f\r\n",*rTime);
00153    
00154  if(ep.getError() != 0)
00155     myerror(ep.getErrorMessage());
00156 
00157  
00158 }
00159 
00160 
00161 
00162 void Last_Saved_Mode()
00163 {
00164   //float Gtime=0,Ytime=0, Rtime=0;
00165   int32_t CurrentMode= readCurrentMode();  
00166   bool flag= ReadCorresspondingTimes( CurrentMode, &G_time,&Y_time, &R_time);   
00167 }