Ashwin Athani
/
mX_I2C_24LCxx
mX mbed BaseBoard I2C 24LCxx
main.cpp@0:73e0b64e28ab, 2010-12-08 (annotated)
- Committer:
- ashwin_athani
- Date:
- Wed Dec 08 06:25:10 2010 +0000
- Revision:
- 0:73e0b64e28ab
Who changed what in which revision?
User | Revision | Line number | New 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 | } |