Andrew Miller
/
EV_0_test
sentral tester
main.cpp@1:29e57acc058b, 2016-05-20 (annotated)
- Committer:
- awmiller
- Date:
- Fri May 20 17:23:07 2016 +0000
- Revision:
- 1:29e57acc058b
- Parent:
- 0:6834f1402927
sentral tester
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
awmiller | 0:6834f1402927 | 1 | #include "mbed.h" |
awmiller | 0:6834f1402927 | 2 | #include <stdio.h> |
awmiller | 0:6834f1402927 | 3 | #include "Sentral.h" |
awmiller | 0:6834f1402927 | 4 | #include "Test_Routines.h" |
awmiller | 0:6834f1402927 | 5 | |
awmiller | 1:29e57acc058b | 6 | #define EV_ALT 1 |
awmiller | 1:29e57acc058b | 7 | |
awmiller | 0:6834f1402927 | 8 | typedef char* string; |
awmiller | 0:6834f1402927 | 9 | |
awmiller | 0:6834f1402927 | 10 | AnalogIn VDD_Check(p15); |
awmiller | 0:6834f1402927 | 11 | |
awmiller | 0:6834f1402927 | 12 | PwmOut led1(LED1); |
awmiller | 0:6834f1402927 | 13 | PwmOut led2(LED2); |
awmiller | 0:6834f1402927 | 14 | PwmOut led3(LED3); |
awmiller | 0:6834f1402927 | 15 | PwmOut led4(LED4); |
awmiller | 0:6834f1402927 | 16 | |
awmiller | 0:6834f1402927 | 17 | DigitalIn POWER(p22); |
awmiller | 0:6834f1402927 | 18 | |
awmiller | 1:29e57acc058b | 19 | #ifdef EV_ALT |
awmiller | 1:29e57acc058b | 20 | #if EV_ALT |
awmiller | 1:29e57acc058b | 21 | I2C master(p9,p10); |
awmiller | 1:29e57acc058b | 22 | #else |
awmiller | 0:6834f1402927 | 23 | I2C master(p28, p27); |
awmiller | 0:6834f1402927 | 24 | I2CSlave slave(p9,p10); |
awmiller | 1:29e57acc058b | 25 | #endif |
awmiller | 1:29e57acc058b | 26 | #endif |
awmiller | 0:6834f1402927 | 27 | |
awmiller | 0:6834f1402927 | 28 | Serial pc(USBTX,USBRX); |
awmiller | 0:6834f1402927 | 29 | |
awmiller | 0:6834f1402927 | 30 | LocalFileSystem local("local"); // Create the local filesystem under the name "local" |
awmiller | 0:6834f1402927 | 31 | |
awmiller | 0:6834f1402927 | 32 | void RX_int_cb(); |
awmiller | 0:6834f1402927 | 33 | |
awmiller | 0:6834f1402927 | 34 | void VDD_read_request(); |
awmiller | 0:6834f1402927 | 35 | |
awmiller | 0:6834f1402927 | 36 | void find_PROM(I2C i2c,int &address); |
awmiller | 0:6834f1402927 | 37 | int hex_read_line(FILE *hexfile); |
awmiller | 0:6834f1402927 | 38 | char ascii_hex2byte(char* ascii); |
awmiller | 0:6834f1402927 | 39 | |
awmiller | 0:6834f1402927 | 40 | int EEPROM_ADDR; |
awmiller | 0:6834f1402927 | 41 | int reading,readhex; |
awmiller | 0:6834f1402927 | 42 | |
awmiller | 0:6834f1402927 | 43 | void find_sentral(); |
awmiller | 0:6834f1402927 | 44 | //void sentral_startup(); |
awmiller | 0:6834f1402927 | 45 | |
awmiller | 0:6834f1402927 | 46 | |
awmiller | 0:6834f1402927 | 47 | int main() { |
awmiller | 0:6834f1402927 | 48 | |
awmiller | 0:6834f1402927 | 49 | |
awmiller | 0:6834f1402927 | 50 | Set_SA0(); |
awmiller | 0:6834f1402927 | 51 | Sentral_Power(0); |
awmiller | 0:6834f1402927 | 52 | led1 =0; |
awmiller | 0:6834f1402927 | 53 | led2 =0.25; |
awmiller | 0:6834f1402927 | 54 | led3 =0.5; |
awmiller | 0:6834f1402927 | 55 | led4 =0.75; |
awmiller | 0:6834f1402927 | 56 | |
awmiller | 0:6834f1402927 | 57 | pc.attach(&RX_int_cb); |
awmiller | 0:6834f1402927 | 58 | pc.baud(115200); |
awmiller | 0:6834f1402927 | 59 | pc.printf("Hello, press 't' to test a module \r\n"); |
awmiller | 0:6834f1402927 | 60 | |
awmiller | 0:6834f1402927 | 61 | reading =1; |
awmiller | 0:6834f1402927 | 62 | readhex=0; |
awmiller | 0:6834f1402927 | 63 | |
awmiller | 0:6834f1402927 | 64 | |
awmiller | 0:6834f1402927 | 65 | |
awmiller | 0:6834f1402927 | 66 | |
awmiller | 0:6834f1402927 | 67 | |
awmiller | 0:6834f1402927 | 68 | //pc.attach(&RX_int_cb); |
awmiller | 0:6834f1402927 | 69 | |
awmiller | 0:6834f1402927 | 70 | while(1){ |
awmiller | 0:6834f1402927 | 71 | |
awmiller | 0:6834f1402927 | 72 | if(led1 = 1) |
awmiller | 0:6834f1402927 | 73 | led1 =0; |
awmiller | 0:6834f1402927 | 74 | if(led2 = 1) |
awmiller | 0:6834f1402927 | 75 | led2 =0; |
awmiller | 0:6834f1402927 | 76 | if(led3 = 1) |
awmiller | 0:6834f1402927 | 77 | led3 =0; |
awmiller | 0:6834f1402927 | 78 | if(led4 = 1) |
awmiller | 0:6834f1402927 | 79 | led4 =0; |
awmiller | 0:6834f1402927 | 80 | |
awmiller | 0:6834f1402927 | 81 | led1 = led1 + 0.01; |
awmiller | 0:6834f1402927 | 82 | led2 = led2 + 0.01; |
awmiller | 0:6834f1402927 | 83 | led3 = led3 + 0.01; |
awmiller | 0:6834f1402927 | 84 | led4 = led4 + 0.01; |
awmiller | 1:29e57acc058b | 85 | |
awmiller | 1:29e57acc058b | 86 | #ifdef EV_ALT |
awmiller | 1:29e57acc058b | 87 | #if EV_ALT |
awmiller | 1:29e57acc058b | 88 | #else |
awmiller | 0:6834f1402927 | 89 | if(POWER==0) |
awmiller | 0:6834f1402927 | 90 | { |
awmiller | 0:6834f1402927 | 91 | pc.attach(NULL); |
awmiller | 0:6834f1402927 | 92 | while(Sentral_Power(0)); |
awmiller | 0:6834f1402927 | 93 | pc.printf("MODULE POWER DISABLED \r\n"); |
awmiller | 0:6834f1402927 | 94 | VDD_read_request(); |
awmiller | 0:6834f1402927 | 95 | wait_ms(10); |
awmiller | 0:6834f1402927 | 96 | pc.printf("ENABLE POWER TO CONTINUE \r\n"); |
awmiller | 0:6834f1402927 | 97 | while(!POWER); |
awmiller | 0:6834f1402927 | 98 | while(!Sentral_Power(1)); |
awmiller | 0:6834f1402927 | 99 | wait_ms(10); |
awmiller | 0:6834f1402927 | 100 | pc.attach(&RX_int_cb); |
awmiller | 0:6834f1402927 | 101 | pc.printf("MODULE POWER ENABLED\r\n"); |
awmiller | 0:6834f1402927 | 102 | VDD_read_request(); |
awmiller | 0:6834f1402927 | 103 | } |
awmiller | 1:29e57acc058b | 104 | #endif |
awmiller | 1:29e57acc058b | 105 | #endif |
awmiller | 1:29e57acc058b | 106 | } |
awmiller | 1:29e57acc058b | 107 | |
awmiller | 0:6834f1402927 | 108 | |
awmiller | 0:6834f1402927 | 109 | //find_PROM(master, EEPROM_ADDR); |
awmiller | 0:6834f1402927 | 110 | /* |
awmiller | 0:6834f1402927 | 111 | FILE *fp = fopen("/local/TEST.hex", "r"); // Open "out.txt" on the local file system for writing |
awmiller | 0:6834f1402927 | 112 | //hex_read_line(FILE *hexfile); |
awmiller | 0:6834f1402927 | 113 | |
awmiller | 0:6834f1402927 | 114 | while(reading) |
awmiller | 0:6834f1402927 | 115 | if(readhex) |
awmiller | 0:6834f1402927 | 116 | { |
awmiller | 0:6834f1402927 | 117 | if(feof(fp)) |
awmiller | 0:6834f1402927 | 118 | { |
awmiller | 0:6834f1402927 | 119 | reading=0; |
awmiller | 0:6834f1402927 | 120 | break; |
awmiller | 0:6834f1402927 | 121 | } |
awmiller | 0:6834f1402927 | 122 | |
awmiller | 0:6834f1402927 | 123 | string input; fgets(input,2,fp); |
awmiller | 0:6834f1402927 | 124 | if(input[1] == ':') |
awmiller | 0:6834f1402927 | 125 | |
awmiller | 0:6834f1402927 | 126 | pc.printf("%X",ascii_hex2byte(input)); |
awmiller | 0:6834f1402927 | 127 | |
awmiller | 0:6834f1402927 | 128 | readhex =0; |
awmiller | 0:6834f1402927 | 129 | } |
awmiller | 0:6834f1402927 | 130 | |
awmiller | 0:6834f1402927 | 131 | fclose(fp); |
awmiller | 0:6834f1402927 | 132 | pc.printf("File Closed \r\n"); |
awmiller | 0:6834f1402927 | 133 | */ |
awmiller | 0:6834f1402927 | 134 | } |
awmiller | 0:6834f1402927 | 135 | |
awmiller | 0:6834f1402927 | 136 | void RX_int_cb() { |
awmiller | 0:6834f1402927 | 137 | |
awmiller | 0:6834f1402927 | 138 | switch(pc.getc()) { |
awmiller | 0:6834f1402927 | 139 | |
awmiller | 0:6834f1402927 | 140 | case 'r': |
awmiller | 0:6834f1402927 | 141 | VDD_read_request(); |
awmiller | 0:6834f1402927 | 142 | break; |
awmiller | 0:6834f1402927 | 143 | /* |
awmiller | 0:6834f1402927 | 144 | case 'l': |
awmiller | 0:6834f1402927 | 145 | if(reading){ |
awmiller | 0:6834f1402927 | 146 | if(!hex_read_line(FILE *hexfile)){ |
awmiller | 0:6834f1402927 | 147 | reading =0; |
awmiller | 0:6834f1402927 | 148 | pc.printf("EOF\r\n");} |
awmiller | 0:6834f1402927 | 149 | }else pc.printf("no file open\r\n"); |
awmiller | 0:6834f1402927 | 150 | break; |
awmiller | 0:6834f1402927 | 151 | */ |
awmiller | 0:6834f1402927 | 152 | case 'h': |
awmiller | 0:6834f1402927 | 153 | if(reading) |
awmiller | 0:6834f1402927 | 154 | { |
awmiller | 0:6834f1402927 | 155 | readhex = 1; |
awmiller | 0:6834f1402927 | 156 | |
awmiller | 0:6834f1402927 | 157 | } |
awmiller | 0:6834f1402927 | 158 | break; |
awmiller | 0:6834f1402927 | 159 | |
awmiller | 0:6834f1402927 | 160 | case 'f': |
awmiller | 0:6834f1402927 | 161 | find_sentral(); |
awmiller | 0:6834f1402927 | 162 | break; |
awmiller | 0:6834f1402927 | 163 | |
awmiller | 0:6834f1402927 | 164 | case 's': |
awmiller | 0:6834f1402927 | 165 | pc.printf("Sentral Starting up. \r\n"); |
awmiller | 0:6834f1402927 | 166 | //find_sentral(); |
awmiller | 0:6834f1402927 | 167 | if(!SentralSetup(pc,master)) |
awmiller | 0:6834f1402927 | 168 | //pc.printf("returning to loop\r\n"); |
awmiller | 0:6834f1402927 | 169 | //else |
awmiller | 0:6834f1402927 | 170 | pc.printf("Sentral Start exit failure\r\n"); |
awmiller | 0:6834f1402927 | 171 | break; |
awmiller | 0:6834f1402927 | 172 | |
awmiller | 0:6834f1402927 | 173 | case 't': |
awmiller | 0:6834f1402927 | 174 | pc.printf("Begginng module test...\r\n"); |
awmiller | 0:6834f1402927 | 175 | pc.printf("Sentral Starting up. \r\n"); |
awmiller | 0:6834f1402927 | 176 | //find_sentral(); |
awmiller | 0:6834f1402927 | 177 | if(!SentralSetup(pc,master)) |
awmiller | 0:6834f1402927 | 178 | //pc.printf("returning to loop\r\n"); |
awmiller | 0:6834f1402927 | 179 | //else |
awmiller | 0:6834f1402927 | 180 | pc.printf("Sentral exit failure\r\n"); |
awmiller | 0:6834f1402927 | 181 | |
awmiller | 0:6834f1402927 | 182 | else if(EV0_test(pc,master)) pc.printf("Module PASS\r\n"); |
awmiller | 0:6834f1402927 | 183 | |
awmiller | 0:6834f1402927 | 184 | break; |
awmiller | 0:6834f1402927 | 185 | |
awmiller | 0:6834f1402927 | 186 | default: |
awmiller | 0:6834f1402927 | 187 | pc.printf("undefined command \r\n"); |
awmiller | 0:6834f1402927 | 188 | break; |
awmiller | 0:6834f1402927 | 189 | } |
awmiller | 0:6834f1402927 | 190 | |
awmiller | 0:6834f1402927 | 191 | } |
awmiller | 0:6834f1402927 | 192 | |
awmiller | 0:6834f1402927 | 193 | void VDD_read_request() { |
awmiller | 0:6834f1402927 | 194 | |
awmiller | 0:6834f1402927 | 195 | pc.printf("Moudle Voltage: %f \r\n",(VDD_Check.read()*3.3f)); |
awmiller | 0:6834f1402927 | 196 | |
awmiller | 0:6834f1402927 | 197 | } |
awmiller | 0:6834f1402927 | 198 | |
awmiller | 0:6834f1402927 | 199 | void find_PROM(I2C i2c,int &EEPROM_ADDR) { |
awmiller | 0:6834f1402927 | 200 | |
awmiller | 0:6834f1402927 | 201 | int eeprom_success =1 ; |
awmiller | 0:6834f1402927 | 202 | |
awmiller | 0:6834f1402927 | 203 | for(EEPROM_ADDR = 0xA0;(eeprom_success && EEPROM_ADDR < 0xB0); EEPROM_ADDR+=0x02) |
awmiller | 0:6834f1402927 | 204 | { |
awmiller | 0:6834f1402927 | 205 | i2c.start(); |
awmiller | 0:6834f1402927 | 206 | eeprom_success = !(master.write(EEPROM_ADDR + 0x01)); |
awmiller | 0:6834f1402927 | 207 | i2c.stop(); |
awmiller | 0:6834f1402927 | 208 | } |
awmiller | 0:6834f1402927 | 209 | |
awmiller | 0:6834f1402927 | 210 | if(EEPROM_ADDR < 0xB0) |
awmiller | 0:6834f1402927 | 211 | pc.printf("EEPROM found at %X \r\n", EEPROM_ADDR-2); |
awmiller | 0:6834f1402927 | 212 | else |
awmiller | 0:6834f1402927 | 213 | pc.printf("No EEPROM found ... \r\n"); |
awmiller | 0:6834f1402927 | 214 | EEPROM_ADDR -= 2; |
awmiller | 0:6834f1402927 | 215 | |
awmiller | 0:6834f1402927 | 216 | pc.printf("Testing %X, Writing '!' to 0x00 ... ", EEPROM_ADDR); |
awmiller | 0:6834f1402927 | 217 | |
awmiller | 0:6834f1402927 | 218 | |
awmiller | 0:6834f1402927 | 219 | char cmd[10]; |
awmiller | 0:6834f1402927 | 220 | cmd[0] = 0x00; |
awmiller | 0:6834f1402927 | 221 | cmd[1] = 0x00; |
awmiller | 0:6834f1402927 | 222 | cmd[2] = '!'; |
awmiller | 0:6834f1402927 | 223 | i2c.write(EEPROM_ADDR, cmd, 3); |
awmiller | 0:6834f1402927 | 224 | |
awmiller | 0:6834f1402927 | 225 | cmd[2] = 0; |
awmiller | 0:6834f1402927 | 226 | |
awmiller | 0:6834f1402927 | 227 | wait(0.5); |
awmiller | 0:6834f1402927 | 228 | |
awmiller | 0:6834f1402927 | 229 | i2c.write(EEPROM_ADDR, cmd, 2); |
awmiller | 0:6834f1402927 | 230 | i2c.read(EEPROM_ADDR, cmd, 1); |
awmiller | 0:6834f1402927 | 231 | |
awmiller | 0:6834f1402927 | 232 | pc.printf("Reading Back: %c \r\n",cmd[0]) ; |
awmiller | 0:6834f1402927 | 233 | } |
awmiller | 0:6834f1402927 | 234 | /* |
awmiller | 0:6834f1402927 | 235 | int hex_read_line(FILE *hexfile) { |
awmiller | 0:6834f1402927 | 236 | |
awmiller | 0:6834f1402927 | 237 | char c; |
awmiller | 0:6834f1402927 | 238 | |
awmiller | 0:6834f1402927 | 239 | do{ |
awmiller | 0:6834f1402927 | 240 | c = fgetc(hexfile); |
awmiller | 0:6834f1402927 | 241 | }while(!feof(hexfile) && c !=':'); |
awmiller | 0:6834f1402927 | 242 | |
awmiller | 0:6834f1402927 | 243 | if(foef(hexfile)){ |
awmiller | 0:6834f1402927 | 244 | pc.printf("EOF"); |
awmiller | 0:6834f1402927 | 245 | return 0; |
awmiller | 0:6834f1402927 | 246 | } |
awmiller | 0:6834f1402927 | 247 | else |
awmiller | 0:6834f1402927 | 248 | { |
awmiller | 0:6834f1402927 | 249 | string hexbyte; |
awmiller | 0:6834f1402927 | 250 | fgets(hexbyte,2,hexfile); |
awmiller | 0:6834f1402927 | 251 | ascii_hex2byte(hexbyte); |
awmiller | 0:6834f1402927 | 252 | } |
awmiller | 0:6834f1402927 | 253 | |
awmiller | 0:6834f1402927 | 254 | pc.printf("Done"); |
awmiller | 0:6834f1402927 | 255 | |
awmiller | 0:6834f1402927 | 256 | } |
awmiller | 0:6834f1402927 | 257 | */ |
awmiller | 0:6834f1402927 | 258 | char ascii_hex2byte(char* ascii){ |
awmiller | 0:6834f1402927 | 259 | |
awmiller | 0:6834f1402927 | 260 | if(ascii[1]>'Z') |
awmiller | 0:6834f1402927 | 261 | ascii[1] = ascii[1] - 'a' + 10; |
awmiller | 0:6834f1402927 | 262 | else if(ascii[1] > '9') |
awmiller | 0:6834f1402927 | 263 | ascii[1] = ascii[1] - 'A' + 10; |
awmiller | 0:6834f1402927 | 264 | else if((ascii[1] >= '0') && (ascii[1] <= '9')) |
awmiller | 0:6834f1402927 | 265 | ascii[1] = ascii[1] - '0'; |
awmiller | 0:6834f1402927 | 266 | else |
awmiller | 0:6834f1402927 | 267 | pc.printf("Bad Hex Word: ascii[1]"); |
awmiller | 0:6834f1402927 | 268 | |
awmiller | 0:6834f1402927 | 269 | if(ascii[0]>'Z') |
awmiller | 0:6834f1402927 | 270 | ascii[0] = ascii[1] - 'a' + 10; |
awmiller | 0:6834f1402927 | 271 | else if(ascii[0] > '9') |
awmiller | 0:6834f1402927 | 272 | ascii[0] = ascii[0] - 'A' + 10; |
awmiller | 0:6834f1402927 | 273 | else if((ascii[0] >= '0') && (ascii[1] <= '9')) |
awmiller | 0:6834f1402927 | 274 | ascii[0] = ascii[0] - '0'; |
awmiller | 0:6834f1402927 | 275 | else |
awmiller | 0:6834f1402927 | 276 | pc.printf("Bad Hex Word: ascii[0]"); |
awmiller | 0:6834f1402927 | 277 | |
awmiller | 0:6834f1402927 | 278 | return (ascii[0] *16 )+ ascii[1]; |
awmiller | 0:6834f1402927 | 279 | |
awmiller | 0:6834f1402927 | 280 | |
awmiller | 0:6834f1402927 | 281 | } |
awmiller | 0:6834f1402927 | 282 | |
awmiller | 0:6834f1402927 | 283 | void find_sentral(){ |
awmiller | 0:6834f1402927 | 284 | char inbuff[2],obuff[2]; |
awmiller | 0:6834f1402927 | 285 | obuff[0] = 0x37; |
awmiller | 0:6834f1402927 | 286 | int check[2]; |
awmiller | 0:6834f1402927 | 287 | |
awmiller | 0:6834f1402927 | 288 | check[0] = master.write(0x50, obuff, 1); |
awmiller | 0:6834f1402927 | 289 | check[1] = master.read(0x50, inbuff, 1); |
awmiller | 0:6834f1402927 | 290 | pc.printf("finding sentral... \r\nwrite %s \r\n",check[0] ? "Fail" : "Pass" ); |
awmiller | 0:6834f1402927 | 291 | |
awmiller | 0:6834f1402927 | 292 | pc.printf("read %s \r\n reading back: %X \r\n",check[1] ? "Fail" : "Pass" , inbuff[0]); |
awmiller | 0:6834f1402927 | 293 | |
awmiller | 0:6834f1402927 | 294 | if(!check[0] && !check[1]){ |
awmiller | 0:6834f1402927 | 295 | pc.printf("Sentral Status: \r\n"); |
awmiller | 0:6834f1402927 | 296 | pc.printf("NEEPROM: %d \r\n", (int)((inbuff[0] & 16)>0)); |
awmiller | 0:6834f1402927 | 297 | pc.printf("StbyState: %d \r\n", (int)((inbuff[0] & 8)>0)); |
awmiller | 0:6834f1402927 | 298 | pc.printf("UploadErr: %d \r\n", (int)((inbuff[0] & 4)>0)); |
awmiller | 0:6834f1402927 | 299 | pc.printf("UploadCPT: %d \r\n", (int)((inbuff[0] & 2)>0)); |
awmiller | 0:6834f1402927 | 300 | pc.printf("EEPROMDTC: %d \r\n", (int)((inbuff[0] & 1)>0));} |
awmiller | 0:6834f1402927 | 301 | |
awmiller | 0:6834f1402927 | 302 | //pc.printf("Sentral Status: %X",cmd[0]); |
awmiller | 0:6834f1402927 | 303 | } |
awmiller | 0:6834f1402927 | 304 | /* |
awmiller | 0:6834f1402927 | 305 | void sentral_startup() |
awmiller | 0:6834f1402927 | 306 | { |
awmiller | 0:6834f1402927 | 307 | //reset request : 50.9c.01 |
awmiller | 0:6834f1402927 | 308 | |
awmiller | 0:6834f1402927 | 309 | //readback status, looking for xxxx x01x -- while((byte & 0x06) !=2)) |
awmiller | 0:6834f1402927 | 310 | |
awmiller | 0:6834f1402927 | 311 | wait(100) |
awmiller | 0:6834f1402927 | 312 | |
awmiller | 0:6834f1402927 | 313 | }*/ |
awmiller | 0:6834f1402927 | 314 | //EOL |