car chassis

Dependencies:   Servo mbed-rtos mbed

Committer:
mariob
Date:
Tue Oct 13 14:08:44 2015 +0000
Revision:
4:7fa7f78cbb92
Parent:
2:7dfc8dd6aab3
delete unused library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mariob 2:7dfc8dd6aab3 1 in main.cpp
mariob 2:7dfc8dd6aab3 2
mariob 2:7dfc8dd6aab3 3 /*
mariob 2:7dfc8dd6aab3 4 printf("INIT EEPROM\r\n");
mariob 2:7dfc8dd6aab3 5 init_eeprom();
mariob 2:7dfc8dd6aab3 6 */
mariob 2:7dfc8dd6aab3 7
mariob 2:7dfc8dd6aab3 8 /****************** EEPROM ******************/
mariob 2:7dfc8dd6aab3 9 /*
mariob 2:7dfc8dd6aab3 10 eeprom_t eeprom(p7, p5, p6, p9, PAGENUMBER, PAGESIZE);
mariob 2:7dfc8dd6aab3 11
mariob 2:7dfc8dd6aab3 12 t_eeprom_data eeprom_data[] = {
mariob 2:7dfc8dd6aab3 13 //SIZE, ADDR
mariob 2:7dfc8dd6aab3 14 { 2, 0}, //SOFTWARE VERSION
mariob 2:7dfc8dd6aab3 15 { 2, 2}, //DATA VERSION
mariob 2:7dfc8dd6aab3 16 { 4, 4}, //NUMBER OF STARTS
mariob 2:7dfc8dd6aab3 17 { 4, 20}, //T_MISSING
mariob 2:7dfc8dd6aab3 18 { 4, 40}, //ENGINE_LAST_MISSING
mariob 2:7dfc8dd6aab3 19 { 4, 44} //BODY_LAST_MISSING
mariob 2:7dfc8dd6aab3 20 };
mariob 2:7dfc8dd6aab3 21
mariob 2:7dfc8dd6aab3 22 void init_eeprom ()
mariob 2:7dfc8dd6aab3 23 {
mariob 2:7dfc8dd6aab3 24 eeprom.init(eeprom_data, sizeof(eeprom_data)/sizeof(t_eeprom_data));
mariob 2:7dfc8dd6aab3 25
mariob 2:7dfc8dd6aab3 26 uint16 sw = 0;
mariob 2:7dfc8dd6aab3 27 uint16 dd = 0;
mariob 2:7dfc8dd6aab3 28 uint32 num = 0;
mariob 2:7dfc8dd6aab3 29 if ((eeprom.read(EEPROM_DATA_SW_VERS, (uint8*)(&sw)) != 2) ||
mariob 2:7dfc8dd6aab3 30 (eeprom.read(EEPROM_DATA_DD_VERS, (uint8*)(&dd)) != 2) ||
mariob 2:7dfc8dd6aab3 31 (sw != SW_VERSION) || (dd != DD_VERSION))
mariob 2:7dfc8dd6aab3 32 {
mariob 2:7dfc8dd6aab3 33 //error
mariob 2:7dfc8dd6aab3 34 eeprom.reset();
mariob 2:7dfc8dd6aab3 35 sw = SW_VERSION;
mariob 2:7dfc8dd6aab3 36 eeprom.write(EEPROM_DATA_SW_VERS, (uint8*)(&sw));
mariob 2:7dfc8dd6aab3 37 dd = DD_VERSION;
mariob 2:7dfc8dd6aab3 38 eeprom.write(EEPROM_DATA_DD_VERS, (uint8*)(&dd));
mariob 2:7dfc8dd6aab3 39 }
mariob 2:7dfc8dd6aab3 40
mariob 2:7dfc8dd6aab3 41 if (eeprom.read(EEPROM_DATA_NSTARTS, (uint8*)(&num)) != 4)
mariob 2:7dfc8dd6aab3 42 num = 0xffffffff;
mariob 2:7dfc8dd6aab3 43 num++;
mariob 2:7dfc8dd6aab3 44 eeprom.write(EEPROM_DATA_NSTARTS, (unsigned char*)(&num));
mariob 2:7dfc8dd6aab3 45 }
mariob 2:7dfc8dd6aab3 46 */
mariob 2:7dfc8dd6aab3 47
mariob 2:7dfc8dd6aab3 48 in eeprom.hpp
mariob 2:7dfc8dd6aab3 49
mariob 2:7dfc8dd6aab3 50 #ifndef __EEPROM_H__
mariob 2:7dfc8dd6aab3 51 #define __EEPROM_H__
mariob 2:7dfc8dd6aab3 52 /*
mariob 2:7dfc8dd6aab3 53 #include "common_types.h"
mariob 2:7dfc8dd6aab3 54
mariob 2:7dfc8dd6aab3 55 #include "Ser25lcxxx.h"
mariob 2:7dfc8dd6aab3 56
mariob 2:7dfc8dd6aab3 57 #define EEPROM_ENTRY_NOT_VALID ((int8)(-1))
mariob 2:7dfc8dd6aab3 58 #define EEPROM_ERR_READ ((int8)(-2))
mariob 2:7dfc8dd6aab3 59 #define EEPROM_ERR_WRITE ((int8)(-3))
mariob 2:7dfc8dd6aab3 60
mariob 2:7dfc8dd6aab3 61 typedef struct {
mariob 2:7dfc8dd6aab3 62 uint8 size; // number of bytes
mariob 2:7dfc8dd6aab3 63 uint32 addr; // eeprom address
mariob 2:7dfc8dd6aab3 64 } t_eeprom_data;
mariob 2:7dfc8dd6aab3 65
mariob 2:7dfc8dd6aab3 66 class eeprom_t
mariob 2:7dfc8dd6aab3 67 {
mariob 2:7dfc8dd6aab3 68
mariob 2:7dfc8dd6aab3 69 t_eeprom_data *eeprom_data; // configuration table of the eeprom
mariob 2:7dfc8dd6aab3 70
mariob 2:7dfc8dd6aab3 71 Ser25LCxxx memory; // memory
mariob 2:7dfc8dd6aab3 72
mariob 2:7dfc8dd6aab3 73 uint32 n; // total number of stored items
mariob 2:7dfc8dd6aab3 74 uint32 max_pages; // total number of pages in eeprom
mariob 2:7dfc8dd6aab3 75 uint32 page_size; // size of each page
mariob 2:7dfc8dd6aab3 76
mariob 2:7dfc8dd6aab3 77 uint32 n_used_pages; // total number of used pages
mariob 2:7dfc8dd6aab3 78
mariob 2:7dfc8dd6aab3 79 public:
mariob 2:7dfc8dd6aab3 80
mariob 2:7dfc8dd6aab3 81 eeprom_t (PinName sck, PinName si, PinName so, PinName enable,
mariob 2:7dfc8dd6aab3 82 int pagenumber, int pagesize):
mariob 2:7dfc8dd6aab3 83 memory(sck, si, so, enable, pagenumber, pagesize)
mariob 2:7dfc8dd6aab3 84 {
mariob 2:7dfc8dd6aab3 85 max_pages = pagenumber;
mariob 2:7dfc8dd6aab3 86 page_size = pagesize;
mariob 2:7dfc8dd6aab3 87 }
mariob 2:7dfc8dd6aab3 88
mariob 2:7dfc8dd6aab3 89 bool init (t_eeprom_data *data, unsigned int num);
mariob 2:7dfc8dd6aab3 90
mariob 2:7dfc8dd6aab3 91 bool reset();
mariob 2:7dfc8dd6aab3 92
mariob 2:7dfc8dd6aab3 93 int8 read (uint32 id, uint8* dst);
mariob 2:7dfc8dd6aab3 94
mariob 2:7dfc8dd6aab3 95 int8 write (uint32 id, const uint8* src);
mariob 2:7dfc8dd6aab3 96
mariob 2:7dfc8dd6aab3 97 };
mariob 2:7dfc8dd6aab3 98 */
mariob 2:7dfc8dd6aab3 99 #endif //__EEPROM_H__
mariob 2:7dfc8dd6aab3 100
mariob 2:7dfc8dd6aab3 101 in eeprom.cpp
mariob 2:7dfc8dd6aab3 102
mariob 2:7dfc8dd6aab3 103 /*
mariob 2:7dfc8dd6aab3 104 #include "eeprom.hpp"
mariob 2:7dfc8dd6aab3 105
mariob 2:7dfc8dd6aab3 106 bool eeprom_t::init (t_eeprom_data *data, unsigned int num)
mariob 2:7dfc8dd6aab3 107 {
mariob 2:7dfc8dd6aab3 108 if (!memory.isFullyWritable())
mariob 2:7dfc8dd6aab3 109 memory.setFullyWritable();
mariob 2:7dfc8dd6aab3 110
mariob 2:7dfc8dd6aab3 111 n = num;
mariob 2:7dfc8dd6aab3 112 eeprom_data = data;
mariob 2:7dfc8dd6aab3 113 uint32 max_addr = 0;
mariob 2:7dfc8dd6aab3 114
mariob 2:7dfc8dd6aab3 115 for (int i = 0; i < n; i++) {
mariob 2:7dfc8dd6aab3 116 // unsigned int buffer = 0;
mariob 2:7dfc8dd6aab3 117 // unsigned int nread = memory.read(eeprom_data[i].addr,
mariob 2:7dfc8dd6aab3 118 // eeprom_data[i].size,
mariob 2:7dfc8dd6aab3 119 // (unsigned char*)(&buffer));
mariob 2:7dfc8dd6aab3 120 // if (nread == eeprom_data[i].size)
mariob 2:7dfc8dd6aab3 121 // local_values[i] = buffer;
mariob 2:7dfc8dd6aab3 122 if (eeprom_data[i].addr > max_addr)
mariob 2:7dfc8dd6aab3 123 max_addr = eeprom_data[i].addr + eeprom_data[i].size;
mariob 2:7dfc8dd6aab3 124 }
mariob 2:7dfc8dd6aab3 125
mariob 2:7dfc8dd6aab3 126 n_used_pages = max_addr / page_size + 1;
mariob 2:7dfc8dd6aab3 127
mariob 2:7dfc8dd6aab3 128 return true;
mariob 2:7dfc8dd6aab3 129 }
mariob 2:7dfc8dd6aab3 130
mariob 2:7dfc8dd6aab3 131 bool eeprom_t::reset ()
mariob 2:7dfc8dd6aab3 132 {
mariob 2:7dfc8dd6aab3 133 for (int i = 0; i <= n_used_pages; i++) {
mariob 2:7dfc8dd6aab3 134 __disable_irq();
mariob 2:7dfc8dd6aab3 135 memory.clearPage(i);
mariob 2:7dfc8dd6aab3 136 __enable_irq();
mariob 2:7dfc8dd6aab3 137 }
mariob 2:7dfc8dd6aab3 138
mariob 2:7dfc8dd6aab3 139 return true;
mariob 2:7dfc8dd6aab3 140 }
mariob 2:7dfc8dd6aab3 141
mariob 2:7dfc8dd6aab3 142 int8 eeprom_t::read (uint32 id, uint8* dst)
mariob 2:7dfc8dd6aab3 143 {
mariob 2:7dfc8dd6aab3 144 if (id >= n)
mariob 2:7dfc8dd6aab3 145 return EEPROM_ENTRY_NOT_VALID;
mariob 2:7dfc8dd6aab3 146
mariob 2:7dfc8dd6aab3 147 //critical section
mariob 2:7dfc8dd6aab3 148 __disable_irq();
mariob 2:7dfc8dd6aab3 149 int num = memory.read(eeprom_data[id].addr, eeprom_data[id].size, dst);
mariob 2:7dfc8dd6aab3 150 __enable_irq();
mariob 2:7dfc8dd6aab3 151 //critical section
mariob 2:7dfc8dd6aab3 152
mariob 2:7dfc8dd6aab3 153 if (num == eeprom_data[id].size)
mariob 2:7dfc8dd6aab3 154 return num;
mariob 2:7dfc8dd6aab3 155
mariob 2:7dfc8dd6aab3 156 return EEPROM_ERR_READ;
mariob 2:7dfc8dd6aab3 157 }
mariob 2:7dfc8dd6aab3 158
mariob 2:7dfc8dd6aab3 159 int8 eeprom_t::write (uint32 id, const uint8* src)
mariob 2:7dfc8dd6aab3 160 {
mariob 2:7dfc8dd6aab3 161 if (id >= n)
mariob 2:7dfc8dd6aab3 162 return EEPROM_ENTRY_NOT_VALID;
mariob 2:7dfc8dd6aab3 163
mariob 2:7dfc8dd6aab3 164 //critical section
mariob 2:7dfc8dd6aab3 165 __disable_irq();
mariob 2:7dfc8dd6aab3 166 int num = memory.write(eeprom_data[id].addr, eeprom_data[id].size, src);
mariob 2:7dfc8dd6aab3 167 __enable_irq();
mariob 2:7dfc8dd6aab3 168 //critical section
mariob 2:7dfc8dd6aab3 169
mariob 2:7dfc8dd6aab3 170 if (num != eeprom_data[id].size)
mariob 2:7dfc8dd6aab3 171 return EEPROM_ERR_WRITE;
mariob 2:7dfc8dd6aab3 172
mariob 2:7dfc8dd6aab3 173 return num;
mariob 2:7dfc8dd6aab3 174 }
mariob 2:7dfc8dd6aab3 175 */