car chassis
Dependencies: Servo mbed-rtos mbed
old.inc
- Committer:
- mariob
- Date:
- 2015-10-13
- Revision:
- 4:7fa7f78cbb92
- Parent:
- 2:7dfc8dd6aab3
File content as of revision 4:7fa7f78cbb92:
in main.cpp /* printf("INIT EEPROM\r\n"); init_eeprom(); */ /****************** EEPROM ******************/ /* eeprom_t eeprom(p7, p5, p6, p9, PAGENUMBER, PAGESIZE); t_eeprom_data eeprom_data[] = { //SIZE, ADDR { 2, 0}, //SOFTWARE VERSION { 2, 2}, //DATA VERSION { 4, 4}, //NUMBER OF STARTS { 4, 20}, //T_MISSING { 4, 40}, //ENGINE_LAST_MISSING { 4, 44} //BODY_LAST_MISSING }; void init_eeprom () { eeprom.init(eeprom_data, sizeof(eeprom_data)/sizeof(t_eeprom_data)); uint16 sw = 0; uint16 dd = 0; uint32 num = 0; if ((eeprom.read(EEPROM_DATA_SW_VERS, (uint8*)(&sw)) != 2) || (eeprom.read(EEPROM_DATA_DD_VERS, (uint8*)(&dd)) != 2) || (sw != SW_VERSION) || (dd != DD_VERSION)) { //error eeprom.reset(); sw = SW_VERSION; eeprom.write(EEPROM_DATA_SW_VERS, (uint8*)(&sw)); dd = DD_VERSION; eeprom.write(EEPROM_DATA_DD_VERS, (uint8*)(&dd)); } if (eeprom.read(EEPROM_DATA_NSTARTS, (uint8*)(&num)) != 4) num = 0xffffffff; num++; eeprom.write(EEPROM_DATA_NSTARTS, (unsigned char*)(&num)); } */ in eeprom.hpp #ifndef __EEPROM_H__ #define __EEPROM_H__ /* #include "common_types.h" #include "Ser25lcxxx.h" #define EEPROM_ENTRY_NOT_VALID ((int8)(-1)) #define EEPROM_ERR_READ ((int8)(-2)) #define EEPROM_ERR_WRITE ((int8)(-3)) typedef struct { uint8 size; // number of bytes uint32 addr; // eeprom address } t_eeprom_data; class eeprom_t { t_eeprom_data *eeprom_data; // configuration table of the eeprom Ser25LCxxx memory; // memory uint32 n; // total number of stored items uint32 max_pages; // total number of pages in eeprom uint32 page_size; // size of each page uint32 n_used_pages; // total number of used pages public: eeprom_t (PinName sck, PinName si, PinName so, PinName enable, int pagenumber, int pagesize): memory(sck, si, so, enable, pagenumber, pagesize) { max_pages = pagenumber; page_size = pagesize; } bool init (t_eeprom_data *data, unsigned int num); bool reset(); int8 read (uint32 id, uint8* dst); int8 write (uint32 id, const uint8* src); }; */ #endif //__EEPROM_H__ in eeprom.cpp /* #include "eeprom.hpp" bool eeprom_t::init (t_eeprom_data *data, unsigned int num) { if (!memory.isFullyWritable()) memory.setFullyWritable(); n = num; eeprom_data = data; uint32 max_addr = 0; for (int i = 0; i < n; i++) { // unsigned int buffer = 0; // unsigned int nread = memory.read(eeprom_data[i].addr, // eeprom_data[i].size, // (unsigned char*)(&buffer)); // if (nread == eeprom_data[i].size) // local_values[i] = buffer; if (eeprom_data[i].addr > max_addr) max_addr = eeprom_data[i].addr + eeprom_data[i].size; } n_used_pages = max_addr / page_size + 1; return true; } bool eeprom_t::reset () { for (int i = 0; i <= n_used_pages; i++) { __disable_irq(); memory.clearPage(i); __enable_irq(); } return true; } int8 eeprom_t::read (uint32 id, uint8* dst) { if (id >= n) return EEPROM_ENTRY_NOT_VALID; //critical section __disable_irq(); int num = memory.read(eeprom_data[id].addr, eeprom_data[id].size, dst); __enable_irq(); //critical section if (num == eeprom_data[id].size) return num; return EEPROM_ERR_READ; } int8 eeprom_t::write (uint32 id, const uint8* src) { if (id >= n) return EEPROM_ENTRY_NOT_VALID; //critical section __disable_irq(); int num = memory.write(eeprom_data[id].addr, eeprom_data[id].size, src); __enable_irq(); //critical section if (num != eeprom_data[id].size) return EEPROM_ERR_WRITE; return num; } */