mX mbed BaseBoard I2C 24LCxx

Dependencies:   mbed

Committer:
ashwin_athani
Date:
Wed Dec 08 06:25:10 2010 +0000
Revision:
0:73e0b64e28ab

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ashwin_athani 0:73e0b64e28ab 1 #include <stdio.h>
ashwin_athani 0:73e0b64e28ab 2 #include <stdlib.h>
ashwin_athani 0:73e0b64e28ab 3 #include <string>
ashwin_athani 0:73e0b64e28ab 4
ashwin_athani 0:73e0b64e28ab 5 #include "24LCxx_I2C.h"
ashwin_athani 0:73e0b64e28ab 6
ashwin_athani 0:73e0b64e28ab 7 /*
ashwin_athani 0:73e0b64e28ab 8 * Declare functions
ashwin_athani 0:73e0b64e28ab 9 */
ashwin_athani 0:73e0b64e28ab 10
ashwin_athani 0:73e0b64e28ab 11 void AvailableIndicator();
ashwin_athani 0:73e0b64e28ab 12 char DisplayMenuAndGetChoice(); // Display and get the user choice
ashwin_athani 0:73e0b64e28ab 13 void RunStateMachine_WithStdStringValue(); // Write and read a string
ashwin_athani 0:73e0b64e28ab 14 void RunStateMachine_WithByteValue(); // Write and read a byte
ashwin_athani 0:73e0b64e28ab 15 void RunStateMachine_WithShortValue(C2424LCXX_I2C::Mode p_mode); // Write and read a short
ashwin_athani 0:73e0b64e28ab 16 void RunStateMachine_WithIntegerValue(C2424LCXX_I2C::Mode p_mode); // Write and read an integer
ashwin_athani 0:73e0b64e28ab 17 void RunStateMachine_WithStdVectorOfByteValue(); // Write and read a buffer of bytes
ashwin_athani 0:73e0b64e28ab 18 void RunStateMachine_WithLengthPlusStdVectorOfByteValue(); // Write and read a buffer of bytes
ashwin_athani 0:73e0b64e28ab 19
ashwin_athani 0:73e0b64e28ab 20 /*
ashwin_athani 0:73e0b64e28ab 21 * Declare statics
ashwin_athani 0:73e0b64e28ab 22 */
ashwin_athani 0:73e0b64e28ab 23 enum States {
ashwin_athani 0:73e0b64e28ab 24 Idle,
ashwin_athani 0:73e0b64e28ab 25 Write,
ashwin_athani 0:73e0b64e28ab 26 Written,
ashwin_athani 0:73e0b64e28ab 27 Read
ashwin_athani 0:73e0b64e28ab 28 };
ashwin_athani 0:73e0b64e28ab 29 States g_state; // Process states for memory operations
ashwin_athani 0:73e0b64e28ab 30
ashwin_athani 0:73e0b64e28ab 31 DigitalOut g_availableLed(LED1); // To verify if program in running
ashwin_athani 0:73e0b64e28ab 32 Ticker g_available; // LED1 will flash with a period of 2s
ashwin_athani 0:73e0b64e28ab 33
ashwin_athani 0:73e0b64e28ab 34 C2424LCXX_I2C g_myEEPROM(p28, p27, 0x00, p5, 400000); // Create an instance of the class C2424LCXX_I2C, p28: SDA, p29:SDL, p5: wired to WP input of 24LCxx, address: A3=0,A2=0,A=1, on 3.3V I2C bus
ashwin_athani 0:73e0b64e28ab 35
ashwin_athani 0:73e0b64e28ab 36 int main() {
ashwin_athani 0:73e0b64e28ab 37
ashwin_athani 0:73e0b64e28ab 38 wait(1); // Needed after startup
ashwin_athani 0:73e0b64e28ab 39
ashwin_athani 0:73e0b64e28ab 40 // Launch available indocator
ashwin_athani 0:73e0b64e28ab 41 g_available.attach(&AvailableIndicator, 2.0);
ashwin_athani 0:73e0b64e28ab 42
ashwin_athani 0:73e0b64e28ab 43 g_myEEPROM.WriteProtect(false); // Disabe WP (pin 7) - See DS21203M - Clause 2.4 Write-Protect (WP)
ashwin_athani 0:73e0b64e28ab 44
ashwin_athani 0:73e0b64e28ab 45 while (true) { // Interrupt driven processing
ashwin_athani 0:73e0b64e28ab 46 g_state = Idle;
ashwin_athani 0:73e0b64e28ab 47 switch (DisplayMenuAndGetChoice()) {
ashwin_athani 0:73e0b64e28ab 48 case 'a':
ashwin_athani 0:73e0b64e28ab 49 do {
ashwin_athani 0:73e0b64e28ab 50 RunStateMachine_WithStdStringValue();
ashwin_athani 0:73e0b64e28ab 51 } while (g_state != Idle);
ashwin_athani 0:73e0b64e28ab 52 break;
ashwin_athani 0:73e0b64e28ab 53 case 'b':
ashwin_athani 0:73e0b64e28ab 54 do {
ashwin_athani 0:73e0b64e28ab 55 RunStateMachine_WithByteValue();
ashwin_athani 0:73e0b64e28ab 56 } while (g_state != Idle);
ashwin_athani 0:73e0b64e28ab 57 break;
ashwin_athani 0:73e0b64e28ab 58 case 'c':
ashwin_athani 0:73e0b64e28ab 59 do {
ashwin_athani 0:73e0b64e28ab 60 RunStateMachine_WithShortValue(C2424LCXX_I2C::BigEndian);
ashwin_athani 0:73e0b64e28ab 61 } while (g_state != Idle);
ashwin_athani 0:73e0b64e28ab 62 break;
ashwin_athani 0:73e0b64e28ab 63 case 'd':
ashwin_athani 0:73e0b64e28ab 64 do {
ashwin_athani 0:73e0b64e28ab 65 RunStateMachine_WithShortValue(C2424LCXX_I2C::LittleEndian);
ashwin_athani 0:73e0b64e28ab 66 } while (g_state != Idle);
ashwin_athani 0:73e0b64e28ab 67 break;
ashwin_athani 0:73e0b64e28ab 68 case 'e':
ashwin_athani 0:73e0b64e28ab 69 do {
ashwin_athani 0:73e0b64e28ab 70 RunStateMachine_WithIntegerValue(C2424LCXX_I2C::BigEndian);
ashwin_athani 0:73e0b64e28ab 71 } while (g_state != Idle);
ashwin_athani 0:73e0b64e28ab 72 break;
ashwin_athani 0:73e0b64e28ab 73 case 'f':
ashwin_athani 0:73e0b64e28ab 74 do {
ashwin_athani 0:73e0b64e28ab 75 RunStateMachine_WithIntegerValue(C2424LCXX_I2C::LittleEndian);
ashwin_athani 0:73e0b64e28ab 76 } while (g_state != Idle);
ashwin_athani 0:73e0b64e28ab 77 break;
ashwin_athani 0:73e0b64e28ab 78 case 'g':
ashwin_athani 0:73e0b64e28ab 79 do {
ashwin_athani 0:73e0b64e28ab 80 RunStateMachine_WithStdVectorOfByteValue();
ashwin_athani 0:73e0b64e28ab 81 } while (g_state != Idle);
ashwin_athani 0:73e0b64e28ab 82 break;
ashwin_athani 0:73e0b64e28ab 83 case 'h':
ashwin_athani 0:73e0b64e28ab 84 do {
ashwin_athani 0:73e0b64e28ab 85 RunStateMachine_WithLengthPlusStdVectorOfByteValue();
ashwin_athani 0:73e0b64e28ab 86 } while (g_state != Idle);
ashwin_athani 0:73e0b64e28ab 87 break;
ashwin_athani 0:73e0b64e28ab 88 default:
ashwin_athani 0:73e0b64e28ab 89 printf("Invalid user choice\r\n");
ashwin_athani 0:73e0b64e28ab 90 break;
ashwin_athani 0:73e0b64e28ab 91 } // End of 'switch' statement
ashwin_athani 0:73e0b64e28ab 92 } // End of 'while' statement
ashwin_athani 0:73e0b64e28ab 93 } // End of program - nerver reached
ashwin_athani 0:73e0b64e28ab 94
ashwin_athani 0:73e0b64e28ab 95 void AvailableIndicator()
ashwin_athani 0:73e0b64e28ab 96 {
ashwin_athani 0:73e0b64e28ab 97 g_availableLed = !g_availableLed;
ashwin_athani 0:73e0b64e28ab 98 } // End of AvailableIndicator
ashwin_athani 0:73e0b64e28ab 99
ashwin_athani 0:73e0b64e28ab 100 char DisplayMenuAndGetChoice()
ashwin_athani 0:73e0b64e28ab 101 {
ashwin_athani 0:73e0b64e28ab 102 printf("\r\n\r\n24LCxx_I2C v0.1\r\n");
ashwin_athani 0:73e0b64e28ab 103 printf("\tWrite/Read with std::string:\t\t\ta\r\n");
ashwin_athani 0:73e0b64e28ab 104 printf("\tWrite/Read with a byte:\t\t\t\tb\r\n");
ashwin_athani 0:73e0b64e28ab 105 printf("\tWrite/Read with a short (Big Endian):\t\tc\r\n");
ashwin_athani 0:73e0b64e28ab 106 printf("\tWrite/Read with a short (Little Endian):\td\r\n");
ashwin_athani 0:73e0b64e28ab 107 printf("\tWrite/Read with an integer (Big Endian):\te\r\n");
ashwin_athani 0:73e0b64e28ab 108 printf("\tWrite/Read with an integer (Little Endian):\tf\r\n");
ashwin_athani 0:73e0b64e28ab 109 printf("\tWrite/Read with std::vector<byte>:\t\tg\r\n");
ashwin_athani 0:73e0b64e28ab 110 printf("\tWrite/Read with std::vector<byte> + length:\th\r\n");
ashwin_athani 0:73e0b64e28ab 111 printf("Enter your choice:\r\n");
ashwin_athani 0:73e0b64e28ab 112 return getchar();
ashwin_athani 0:73e0b64e28ab 113 }
ashwin_athani 0:73e0b64e28ab 114
ashwin_athani 0:73e0b64e28ab 115 void RunStateMachine_WithStdStringValue()
ashwin_athani 0:73e0b64e28ab 116 {
ashwin_athani 0:73e0b64e28ab 117 DEBUG_ENTER("RunStateMachine_WithStdStringValue")
ashwin_athani 0:73e0b64e28ab 118
ashwin_athani 0:73e0b64e28ab 119 switch (g_state) {
ashwin_athani 0:73e0b64e28ab 120 case Idle:
ashwin_athani 0:73e0b64e28ab 121 g_state = Write;
ashwin_athani 0:73e0b64e28ab 122 break;
ashwin_athani 0:73e0b64e28ab 123 case Write: {
ashwin_athani 0:73e0b64e28ab 124 DEBUG("Writing data...");
ashwin_athani 0:73e0b64e28ab 125 time_t ctTime;
ashwin_athani 0:73e0b64e28ab 126 ctTime = time(NULL);
ashwin_athani 0:73e0b64e28ab 127 std::string str("Testing I2C EEPROM on NGX mbed-Xpresso BaseBoard");
ashwin_athani 0:73e0b64e28ab 128 //str += ctime(&ctTime);
ashwin_athani 0:73e0b64e28ab 129 //str += " UTC";
ashwin_athani 0:73e0b64e28ab 130 printf("RunStateMachine_WithStdStringValue: Write '%s'\r\n", str.c_str());
ashwin_athani 0:73e0b64e28ab 131 if (!g_myEEPROM.Write(256, str)) { // Write the string, including the length indicator
ashwin_athani 0:73e0b64e28ab 132 DEBUG_FATAL("RunStateMachine_WithStdStringValue: write failed at address 256")
ashwin_athani 0:73e0b64e28ab 133 g_state = Idle;
ashwin_athani 0:73e0b64e28ab 134 } else {
ashwin_athani 0:73e0b64e28ab 135 g_state = Written;
ashwin_athani 0:73e0b64e28ab 136 }
ashwin_athani 0:73e0b64e28ab 137 }
ashwin_athani 0:73e0b64e28ab 138 break;
ashwin_athani 0:73e0b64e28ab 139 case Written:
ashwin_athani 0:73e0b64e28ab 140 g_state = Read;
ashwin_athani 0:73e0b64e28ab 141 break;
ashwin_athani 0:73e0b64e28ab 142 case Read: {
ashwin_athani 0:73e0b64e28ab 143 DEBUG("Reading datas...");
ashwin_athani 0:73e0b64e28ab 144 std::string readtext;
ashwin_athani 0:73e0b64e28ab 145 if (!g_myEEPROM.Read(256, readtext)) { // Read the string, including the length indicator
ashwin_athani 0:73e0b64e28ab 146 #ifdef __DEBUG
ashwin_athani 0:73e0b64e28ab 147 DEBUG_FATAL("RunStateMachine_WithStdStringValue: write failed at address 256")
ashwin_athani 0:73e0b64e28ab 148 #else // __DEBUG
ashwin_athani 0:73e0b64e28ab 149 printf("RunStateMachine_WithStdStringValue: write failed at address 256\r\n");
ashwin_athani 0:73e0b64e28ab 150 #endif // __DEBUG
ashwin_athani 0:73e0b64e28ab 151 } else {
ashwin_athani 0:73e0b64e28ab 152 printf("RunStateMachine_WithStdStringValue: Read:'%s'\r\n", readtext.c_str());
ashwin_athani 0:73e0b64e28ab 153 }
ashwin_athani 0:73e0b64e28ab 154 }
ashwin_athani 0:73e0b64e28ab 155 g_state = Idle;
ashwin_athani 0:73e0b64e28ab 156 break;
ashwin_athani 0:73e0b64e28ab 157 default:
ashwin_athani 0:73e0b64e28ab 158 printf("RunStateMachine_WithStdStringValue: Default!\r\n");
ashwin_athani 0:73e0b64e28ab 159 g_state = Idle;
ashwin_athani 0:73e0b64e28ab 160 break;
ashwin_athani 0:73e0b64e28ab 161 }
ashwin_athani 0:73e0b64e28ab 162
ashwin_athani 0:73e0b64e28ab 163 DEBUG_LEAVE("RunStateMachine_WithStdStringValue")
ashwin_athani 0:73e0b64e28ab 164 }
ashwin_athani 0:73e0b64e28ab 165
ashwin_athani 0:73e0b64e28ab 166 void RunStateMachine_WithByteValue() {
ashwin_athani 0:73e0b64e28ab 167 DEBUG_ENTER("RunStateMachine_WithByteValue")
ashwin_athani 0:73e0b64e28ab 168
ashwin_athani 0:73e0b64e28ab 169 switch (g_state) {
ashwin_athani 0:73e0b64e28ab 170 case Idle:
ashwin_athani 0:73e0b64e28ab 171 g_state = Write;
ashwin_athani 0:73e0b64e28ab 172 break;
ashwin_athani 0:73e0b64e28ab 173 case Write:
ashwin_athani 0:73e0b64e28ab 174 DEBUG("Writing data...")
ashwin_athani 0:73e0b64e28ab 175 printf("RunStateMachine_WithByteValue: Write 0xaa\r\n");
ashwin_athani 0:73e0b64e28ab 176 if (!g_myEEPROM.Write(128, (unsigned char)0xaa)) {
ashwin_athani 0:73e0b64e28ab 177 #ifdef __DEBUG
ashwin_athani 0:73e0b64e28ab 178 DEBUG_FATAL("RunStateMachine_WithByteValue: write failed at address 128")
ashwin_athani 0:73e0b64e28ab 179 #else // __DEBUG
ashwin_athani 0:73e0b64e28ab 180 printf("RunStateMachine_WithByteValue: write failed at address 128\r\n");
ashwin_athani 0:73e0b64e28ab 181 #endif // __DEBUG
ashwin_athani 0:73e0b64e28ab 182 g_state = Idle;
ashwin_athani 0:73e0b64e28ab 183 } else {
ashwin_athani 0:73e0b64e28ab 184 g_state = Written;
ashwin_athani 0:73e0b64e28ab 185 }
ashwin_athani 0:73e0b64e28ab 186 break;
ashwin_athani 0:73e0b64e28ab 187 case Written:
ashwin_athani 0:73e0b64e28ab 188 g_state = Read;
ashwin_athani 0:73e0b64e28ab 189 break;
ashwin_athani 0:73e0b64e28ab 190 case Read: {
ashwin_athani 0:73e0b64e28ab 191 DEBUG("Reading datas...")
ashwin_athani 0:73e0b64e28ab 192 unsigned char value = 0x00;
ashwin_athani 0:73e0b64e28ab 193 if (!g_myEEPROM.Read(128, &value)) {
ashwin_athani 0:73e0b64e28ab 194 #ifdef __DEBUG
ashwin_athani 0:73e0b64e28ab 195 DEBUG_FATAL("RunStateMachine_WithByteValue: Read operation failed at address 128")
ashwin_athani 0:73e0b64e28ab 196 #else // __DEBUG
ashwin_athani 0:73e0b64e28ab 197 printf("RunStateMachine_WithByteValue: Read operation failed at address 128\r\n");
ashwin_athani 0:73e0b64e28ab 198 #endif // __DEBUG
ashwin_athani 0:73e0b64e28ab 199 } else {
ashwin_athani 0:73e0b64e28ab 200 printf("RunStateMachine_WithByteValue: Read '0x%02x'\r\n", value);
ashwin_athani 0:73e0b64e28ab 201 }
ashwin_athani 0:73e0b64e28ab 202 }
ashwin_athani 0:73e0b64e28ab 203 g_state = Idle;
ashwin_athani 0:73e0b64e28ab 204 break;
ashwin_athani 0:73e0b64e28ab 205 default:
ashwin_athani 0:73e0b64e28ab 206 printf("RunStateMachine_WithByteValue: Default!\r\n");
ashwin_athani 0:73e0b64e28ab 207 g_state = Idle;
ashwin_athani 0:73e0b64e28ab 208 break;
ashwin_athani 0:73e0b64e28ab 209 }
ashwin_athani 0:73e0b64e28ab 210
ashwin_athani 0:73e0b64e28ab 211 DEBUG_LEAVE("RunStateMachine_WithByteValue")
ashwin_athani 0:73e0b64e28ab 212 }
ashwin_athani 0:73e0b64e28ab 213
ashwin_athani 0:73e0b64e28ab 214 void RunStateMachine_WithShortValue(C2424LCXX_I2C::Mode p_mode) {
ashwin_athani 0:73e0b64e28ab 215 DEBUG_ENTER("RunStateMachine_WithShortValue")
ashwin_athani 0:73e0b64e28ab 216
ashwin_athani 0:73e0b64e28ab 217 switch (g_state) {
ashwin_athani 0:73e0b64e28ab 218 case Idle:
ashwin_athani 0:73e0b64e28ab 219 g_state = Write;
ashwin_athani 0:73e0b64e28ab 220 break;
ashwin_athani 0:73e0b64e28ab 221 case Write:
ashwin_athani 0:73e0b64e28ab 222 DEBUG("Writing data...")
ashwin_athani 0:73e0b64e28ab 223 printf("RunStateMachine_WithShortValue: Write 0xbeef\r\n");
ashwin_athani 0:73e0b64e28ab 224 if (!g_myEEPROM.Write(64, (short)0xbeef, p_mode)) { // See http://en.wikipedia.org/wiki/Hexspeak for more ideas on hexadecimal wording!!!
ashwin_athani 0:73e0b64e28ab 225 DEBUG_FATAL("RunStateMachine_WithShortValue: write failed at address 64")
ashwin_athani 0:73e0b64e28ab 226 g_state = Idle;
ashwin_athani 0:73e0b64e28ab 227 } else {
ashwin_athani 0:73e0b64e28ab 228 g_state = Written;
ashwin_athani 0:73e0b64e28ab 229 }
ashwin_athani 0:73e0b64e28ab 230 break;
ashwin_athani 0:73e0b64e28ab 231 case Written:
ashwin_athani 0:73e0b64e28ab 232 g_state = Read;
ashwin_athani 0:73e0b64e28ab 233 break;
ashwin_athani 0:73e0b64e28ab 234 case Read: {
ashwin_athani 0:73e0b64e28ab 235 DEBUG("Reading datas...");
ashwin_athani 0:73e0b64e28ab 236 short value = 0;
ashwin_athani 0:73e0b64e28ab 237 if (!g_myEEPROM.Read(64, &value, p_mode)) {
ashwin_athani 0:73e0b64e28ab 238 #ifdef __DEBUG
ashwin_athani 0:73e0b64e28ab 239 DEBUG_FATAL("RunStateMachine_WithShortValue: write failed at address 64")
ashwin_athani 0:73e0b64e28ab 240 #else // __DEBUG
ashwin_athani 0:73e0b64e28ab 241 printf("RunStateMachine_WithShortValue: write failed at address 64\r\n");
ashwin_athani 0:73e0b64e28ab 242 #endif // __DEBUG
ashwin_athani 0:73e0b64e28ab 243 } else {
ashwin_athani 0:73e0b64e28ab 244 printf("RunStateMachine_WithShortValue: Read '0x%04x' / '%hu'\r\n", value, (unsigned short)value);
ashwin_athani 0:73e0b64e28ab 245 }
ashwin_athani 0:73e0b64e28ab 246 }
ashwin_athani 0:73e0b64e28ab 247 g_state = Idle;
ashwin_athani 0:73e0b64e28ab 248 break;
ashwin_athani 0:73e0b64e28ab 249 default:
ashwin_athani 0:73e0b64e28ab 250 printf("RunStateMachine_WithShortValue: Default!\r\n");
ashwin_athani 0:73e0b64e28ab 251 g_state = Idle;
ashwin_athani 0:73e0b64e28ab 252 break;
ashwin_athani 0:73e0b64e28ab 253 }
ashwin_athani 0:73e0b64e28ab 254
ashwin_athani 0:73e0b64e28ab 255 DEBUG_LEAVE("RunStateMachine_WithShortValue")
ashwin_athani 0:73e0b64e28ab 256 }
ashwin_athani 0:73e0b64e28ab 257
ashwin_athani 0:73e0b64e28ab 258 void RunStateMachine_WithIntegerValue(C2424LCXX_I2C::Mode p_mode) {
ashwin_athani 0:73e0b64e28ab 259 DEBUG_ENTER("RunStateMachine_WithIntegerValue")
ashwin_athani 0:73e0b64e28ab 260
ashwin_athani 0:73e0b64e28ab 261 switch (g_state) {
ashwin_athani 0:73e0b64e28ab 262 case Idle:
ashwin_athani 0:73e0b64e28ab 263 g_state = Write;
ashwin_athani 0:73e0b64e28ab 264 break;
ashwin_athani 0:73e0b64e28ab 265 case Write:
ashwin_athani 0:73e0b64e28ab 266 DEBUG("Writing data...")
ashwin_athani 0:73e0b64e28ab 267 printf("RunStateMachine_WithIntegerValue: Write 0xdeaddead\r\n");
ashwin_athani 0:73e0b64e28ab 268 if (!g_myEEPROM.Write(32, (int)0xdeaddead, p_mode)) {
ashwin_athani 0:73e0b64e28ab 269 DEBUG_FATAL("RunStateMachine_WithIntegerValue: write failed at address 32")
ashwin_athani 0:73e0b64e28ab 270 g_state = Idle;
ashwin_athani 0:73e0b64e28ab 271 } else {
ashwin_athani 0:73e0b64e28ab 272 g_state = Written;
ashwin_athani 0:73e0b64e28ab 273 }
ashwin_athani 0:73e0b64e28ab 274 break;
ashwin_athani 0:73e0b64e28ab 275 case Written:
ashwin_athani 0:73e0b64e28ab 276 g_state = Read;
ashwin_athani 0:73e0b64e28ab 277 break;
ashwin_athani 0:73e0b64e28ab 278 case Read: {
ashwin_athani 0:73e0b64e28ab 279 DEBUG("Reading datas...")
ashwin_athani 0:73e0b64e28ab 280 int value = 0;
ashwin_athani 0:73e0b64e28ab 281 if (!g_myEEPROM.Read(32, &value, p_mode)) {
ashwin_athani 0:73e0b64e28ab 282 #ifdef __DEBUG
ashwin_athani 0:73e0b64e28ab 283 DEBUG_FATAL("RunStateMachine_WithIntegerValue: write failed at address 32")
ashwin_athani 0:73e0b64e28ab 284 #else // __DEBUG
ashwin_athani 0:73e0b64e28ab 285 printf("RunStateMachine_WithIntegerValue: write failed at address 32\r\n");
ashwin_athani 0:73e0b64e28ab 286 #endif // __DEBUG
ashwin_athani 0:73e0b64e28ab 287 } else {
ashwin_athani 0:73e0b64e28ab 288 printf("RunStateMachine_WithIntegerValue: Read '0x%08x' / '%d'\r\n", value, (unsigned int)value);
ashwin_athani 0:73e0b64e28ab 289 }
ashwin_athani 0:73e0b64e28ab 290 }
ashwin_athani 0:73e0b64e28ab 291 g_state = Idle;
ashwin_athani 0:73e0b64e28ab 292 break;
ashwin_athani 0:73e0b64e28ab 293 default:
ashwin_athani 0:73e0b64e28ab 294 printf("RunStateMachine_WithIntegerValue: Default!\r\n");
ashwin_athani 0:73e0b64e28ab 295 g_state = Idle;
ashwin_athani 0:73e0b64e28ab 296 break;
ashwin_athani 0:73e0b64e28ab 297 }
ashwin_athani 0:73e0b64e28ab 298
ashwin_athani 0:73e0b64e28ab 299 DEBUG_LEAVE("RunStateMachine_WithIntegerValue")
ashwin_athani 0:73e0b64e28ab 300 }
ashwin_athani 0:73e0b64e28ab 301
ashwin_athani 0:73e0b64e28ab 302 void RunStateMachine_WithStdVectorOfByteValue() {
ashwin_athani 0:73e0b64e28ab 303 DEBUG_ENTER("RunStateMachine_WithStdVectorOfByteValue")
ashwin_athani 0:73e0b64e28ab 304
ashwin_athani 0:73e0b64e28ab 305 switch (g_state) {
ashwin_athani 0:73e0b64e28ab 306 case Idle:
ashwin_athani 0:73e0b64e28ab 307 g_state = Write;
ashwin_athani 0:73e0b64e28ab 308 break;
ashwin_athani 0:73e0b64e28ab 309 case Write: {
ashwin_athani 0:73e0b64e28ab 310 std::vector<unsigned char> datas;
ashwin_athani 0:73e0b64e28ab 311 datas.push_back(0xfe);
ashwin_athani 0:73e0b64e28ab 312 datas.push_back(0xed);
ashwin_athani 0:73e0b64e28ab 313 datas.push_back(0xfa);
ashwin_athani 0:73e0b64e28ab 314 datas.push_back(0xce);
ashwin_athani 0:73e0b64e28ab 315 DEBUG("Writing data...")
ashwin_athani 0:73e0b64e28ab 316 printf("RunStateMachine_WithStdVectorOfByteValue: Write {0xfe, 0xed, 0xfa, 0xce}\r\n");
ashwin_athani 0:73e0b64e28ab 317 if (!g_myEEPROM.Write(16, datas, false)) { // Write the full buffer, not including the length indication
ashwin_athani 0:73e0b64e28ab 318 DEBUG_FATAL("RunStateMachine_WithStdVectorOfByteValue: write failed at address 16")
ashwin_athani 0:73e0b64e28ab 319 g_state = Idle;
ashwin_athani 0:73e0b64e28ab 320 } else {
ashwin_athani 0:73e0b64e28ab 321 g_state = Written;
ashwin_athani 0:73e0b64e28ab 322 }
ashwin_athani 0:73e0b64e28ab 323 }
ashwin_athani 0:73e0b64e28ab 324 break;
ashwin_athani 0:73e0b64e28ab 325 case Written:
ashwin_athani 0:73e0b64e28ab 326 g_state = Read;
ashwin_athani 0:73e0b64e28ab 327 break;
ashwin_athani 0:73e0b64e28ab 328 case Read: {
ashwin_athani 0:73e0b64e28ab 329 DEBUG("Reading datas...")
ashwin_athani 0:73e0b64e28ab 330 std::vector<unsigned char> datas(4);
ashwin_athani 0:73e0b64e28ab 331 if (!g_myEEPROM.Read(16, datas, false)) { // Read bytes, without the lenght indication, buffer size shall be set before the call
ashwin_athani 0:73e0b64e28ab 332 #ifdef __DEBUG
ashwin_athani 0:73e0b64e28ab 333 DEBUG_FATAL("RunStateMachine_WithStdVectorOfByteValue: write failed at address 16")
ashwin_athani 0:73e0b64e28ab 334 #else // __DEBUG
ashwin_athani 0:73e0b64e28ab 335 printf("RunStateMachine_WithStdVectorOfByteValue: write failed at address 16\r\n");
ashwin_athani 0:73e0b64e28ab 336 #endif // __DEBUG
ashwin_athani 0:73e0b64e28ab 337 } else {
ashwin_athani 0:73e0b64e28ab 338 printf("RunStateMachine_WithStdVectorOfByteValue: Read {%02x, %02x, %02x, %02x}\r\n", datas[0], datas[1], datas[2], datas[3]);
ashwin_athani 0:73e0b64e28ab 339 }
ashwin_athani 0:73e0b64e28ab 340 }
ashwin_athani 0:73e0b64e28ab 341 g_state = Idle;
ashwin_athani 0:73e0b64e28ab 342 break;
ashwin_athani 0:73e0b64e28ab 343 default:
ashwin_athani 0:73e0b64e28ab 344 printf("RunStateMachine_WithStdVectorOfByteValue: Default!\r\n");
ashwin_athani 0:73e0b64e28ab 345 g_state = Idle;
ashwin_athani 0:73e0b64e28ab 346 break;
ashwin_athani 0:73e0b64e28ab 347 }
ashwin_athani 0:73e0b64e28ab 348
ashwin_athani 0:73e0b64e28ab 349 DEBUG_LEAVE("RunStateMachine_WithStdVectorOfByteValue")
ashwin_athani 0:73e0b64e28ab 350 }
ashwin_athani 0:73e0b64e28ab 351
ashwin_athani 0:73e0b64e28ab 352 void RunStateMachine_WithLengthPlusStdVectorOfByteValue() {
ashwin_athani 0:73e0b64e28ab 353 DEBUG_ENTER("RunStateMachine_WithLengthPlusStdVectorOfByteValue")
ashwin_athani 0:73e0b64e28ab 354
ashwin_athani 0:73e0b64e28ab 355 switch (g_state) {
ashwin_athani 0:73e0b64e28ab 356 case Idle:
ashwin_athani 0:73e0b64e28ab 357 g_state = Write;
ashwin_athani 0:73e0b64e28ab 358 break;
ashwin_athani 0:73e0b64e28ab 359 case Write: {
ashwin_athani 0:73e0b64e28ab 360 DEBUG("Writing data...")
ashwin_athani 0:73e0b64e28ab 361 std::vector<unsigned char> datas;
ashwin_athani 0:73e0b64e28ab 362 datas.push_back(0xde);
ashwin_athani 0:73e0b64e28ab 363 datas.push_back(0x5e);
ashwin_athani 0:73e0b64e28ab 364 datas.push_back(0xa5);
ashwin_athani 0:73e0b64e28ab 365 datas.push_back(0xed);
ashwin_athani 0:73e0b64e28ab 366 printf("RunStateMachine_WithLengthPlusStdVectorOfByteValue: Write {0xde, 0x5e, 0xa5, 0xed}\r\n");
ashwin_athani 0:73e0b64e28ab 367 if (!g_myEEPROM.Write(8, datas)) { // Write the full buffer, including the length indication
ashwin_athani 0:73e0b64e28ab 368 DEBUG_FATAL("RunStateMachine_WithLengthPlusStdVectorOfByteValue: write failed at address 8")
ashwin_athani 0:73e0b64e28ab 369 g_state = Idle;
ashwin_athani 0:73e0b64e28ab 370 } else {
ashwin_athani 0:73e0b64e28ab 371 g_state = Written;
ashwin_athani 0:73e0b64e28ab 372 }
ashwin_athani 0:73e0b64e28ab 373 }
ashwin_athani 0:73e0b64e28ab 374 break;
ashwin_athani 0:73e0b64e28ab 375 case Written:
ashwin_athani 0:73e0b64e28ab 376 g_state = Read;
ashwin_athani 0:73e0b64e28ab 377 break;
ashwin_athani 0:73e0b64e28ab 378 case Read: {
ashwin_athani 0:73e0b64e28ab 379 DEBUG("Reading datas...")
ashwin_athani 0:73e0b64e28ab 380 std::vector<unsigned char> datas;
ashwin_athani 0:73e0b64e28ab 381 if (!g_myEEPROM.Read(8, datas)) { // Read bytes, including the lenght indication, buffer size is not set before the call
ashwin_athani 0:73e0b64e28ab 382 #ifdef __DEBUG
ashwin_athani 0:73e0b64e28ab 383 DEBUG_FATAL("RunStateMachine_WithStdVectorOfByteValue: write failed at address 8")
ashwin_athani 0:73e0b64e28ab 384 #else // __DEBUG
ashwin_athani 0:73e0b64e28ab 385 printf("RunStateMachine_WithStdVectorOfByteValue: write failed at address 8\r\n");
ashwin_athani 0:73e0b64e28ab 386 #endif // __DEBUG
ashwin_athani 0:73e0b64e28ab 387 } else {
ashwin_athani 0:73e0b64e28ab 388 printf("RunStateMachine_WithLengthPlusStdVectorOfByteValue: Read bytes: ");
ashwin_athani 0:73e0b64e28ab 389 vector<unsigned char>::iterator it;
ashwin_athani 0:73e0b64e28ab 390 for (it = datas.begin() ; it < datas.end(); it++) {
ashwin_athani 0:73e0b64e28ab 391 printf("0x%02x ", *it);
ashwin_athani 0:73e0b64e28ab 392 }
ashwin_athani 0:73e0b64e28ab 393 printf("\r\n");
ashwin_athani 0:73e0b64e28ab 394 }
ashwin_athani 0:73e0b64e28ab 395 }
ashwin_athani 0:73e0b64e28ab 396 g_state = Idle;
ashwin_athani 0:73e0b64e28ab 397 break;
ashwin_athani 0:73e0b64e28ab 398 default:
ashwin_athani 0:73e0b64e28ab 399 printf("RunStateMachine_WithLengthPlusStdVectorOfByteValue: Default!\r\n");
ashwin_athani 0:73e0b64e28ab 400 g_state = Idle;
ashwin_athani 0:73e0b64e28ab 401 break;
ashwin_athani 0:73e0b64e28ab 402 }
ashwin_athani 0:73e0b64e28ab 403
ashwin_athani 0:73e0b64e28ab 404 DEBUG_LEAVE("RunStateMachine_WithLengthPlusStdVectorOfByteValue")
ashwin_athani 0:73e0b64e28ab 405 }