sentral tester

Dependencies:   mbed

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?

UserRevisionLine numberNew 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