sentral tester

Dependencies:   mbed

Revision:
0:6834f1402927
Child:
1:29e57acc058b
diff -r 000000000000 -r 6834f1402927 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sat Jan 04 00:33:35 2014 +0000
@@ -0,0 +1,300 @@
+#include "mbed.h"
+#include <stdio.h>
+#include "Sentral.h"
+#include "Test_Routines.h"
+
+typedef char* string;
+
+AnalogIn VDD_Check(p15);
+
+PwmOut led1(LED1);
+PwmOut led2(LED2);
+PwmOut led3(LED3);
+PwmOut led4(LED4);
+
+DigitalIn POWER(p22);
+
+I2C master(p28, p27);
+I2CSlave slave(p9,p10);
+
+Serial pc(USBTX,USBRX);
+
+LocalFileSystem local("local");               // Create the local filesystem under the name "local"
+
+void RX_int_cb();
+
+void VDD_read_request();
+
+void find_PROM(I2C i2c,int &address);
+int hex_read_line(FILE *hexfile);
+char ascii_hex2byte(char* ascii);
+
+int EEPROM_ADDR;
+int reading,readhex;
+
+void find_sentral();
+//void sentral_startup();
+
+    
+int main() {
+    
+
+    Set_SA0();
+    Sentral_Power(0);
+    led1 =0;
+    led2 =0.25;
+    led3 =0.5;
+    led4 =0.75;
+    
+    pc.attach(&RX_int_cb);
+    pc.baud(115200);
+    pc.printf("Hello, press 't' to test a module \r\n");
+    
+    reading =1;
+    readhex=0;
+    
+    
+    
+    
+    
+    //pc.attach(&RX_int_cb);
+    
+    while(1){
+        
+        if(led1 = 1)
+            led1 =0;
+        if(led2 = 1)
+            led2 =0;
+        if(led3 = 1)
+            led3 =0;
+        if(led4 = 1)
+            led4 =0;
+            
+        led1 = led1 + 0.01;
+        led2 = led2 + 0.01;
+        led3 = led3 + 0.01;
+        led4 = led4 + 0.01;
+        
+        if(POWER==0)
+        {
+            pc.attach(NULL);
+            while(Sentral_Power(0));
+            pc.printf("MODULE POWER DISABLED \r\n");
+            VDD_read_request();
+            wait_ms(10);
+            pc.printf("ENABLE POWER TO CONTINUE \r\n");
+            while(!POWER);
+            while(!Sentral_Power(1));
+            wait_ms(10);   
+            pc.attach(&RX_int_cb);
+            pc.printf("MODULE POWER ENABLED\r\n");
+            VDD_read_request();
+        }
+        
+        }
+    //find_PROM(master, EEPROM_ADDR);
+    /*
+    FILE *fp = fopen("/local/TEST.hex", "r");  // Open "out.txt" on the local file system for writing  
+    //hex_read_line(FILE *hexfile);
+  
+    while(reading)
+        if(readhex)
+        {
+            if(feof(fp))
+            {
+                reading=0;
+                break;
+            }
+            
+            string input; fgets(input,2,fp);
+            if(input[1] == ':')
+            
+            pc.printf("%X",ascii_hex2byte(input));
+            
+            readhex =0;
+            }
+    
+    fclose(fp);
+    pc.printf("File Closed \r\n");
+    */
+}
+
+void RX_int_cb() {
+    
+    switch(pc.getc()) {
+        
+        case 'r':
+        VDD_read_request();
+        break;
+        /*
+        case 'l':
+        if(reading){
+            if(!hex_read_line(FILE *hexfile)){
+                reading =0;
+                pc.printf("EOF\r\n");}
+                }else pc.printf("no file open\r\n");
+        break;
+        */
+        case 'h':
+        if(reading)
+        {
+            readhex = 1;
+            
+            }
+            break;
+            
+        case 'f':
+            find_sentral();
+            break;
+            
+        case 's':
+            pc.printf("Sentral Starting up. \r\n");
+            //find_sentral();
+            if(!SentralSetup(pc,master))
+                //pc.printf("returning to loop\r\n");
+                //else 
+                pc.printf("Sentral Start exit failure\r\n");
+            break;
+            
+        case 't':
+            pc.printf("Begginng module test...\r\n");
+            pc.printf("Sentral Starting up. \r\n");
+            //find_sentral();
+            if(!SentralSetup(pc,master))
+                //pc.printf("returning to loop\r\n");
+                //else 
+                pc.printf("Sentral exit failure\r\n");
+                
+            else    if(EV0_test(pc,master)) pc.printf("Module PASS\r\n");
+            
+            break;
+            
+        default:
+        pc.printf("undefined command \r\n");
+        break;
+        }
+    
+    }
+
+void VDD_read_request() {
+    
+    pc.printf("Moudle Voltage: %f \r\n",(VDD_Check.read()*3.3f));
+    
+    }
+
+void find_PROM(I2C i2c,int &EEPROM_ADDR) {
+    
+    int eeprom_success =1 ;
+    
+    for(EEPROM_ADDR = 0xA0;(eeprom_success && EEPROM_ADDR < 0xB0); EEPROM_ADDR+=0x02)
+    {
+       i2c.start();
+       eeprom_success = !(master.write(EEPROM_ADDR + 0x01));
+       i2c.stop();
+    }
+    
+    if(EEPROM_ADDR < 0xB0)
+        pc.printf("EEPROM found at %X \r\n", EEPROM_ADDR-2);
+    else 
+        pc.printf("No EEPROM found ... \r\n");
+    EEPROM_ADDR -= 2;
+    
+    pc.printf("Testing %X, Writing '!' to 0x00 ... ", EEPROM_ADDR);
+    
+    
+    char cmd[10];
+    cmd[0] = 0x00;
+    cmd[1] = 0x00;
+    cmd[2] = '!';
+    i2c.write(EEPROM_ADDR, cmd, 3);
+ 
+    cmd[2] = 0;
+        
+    wait(0.5);
+    
+    i2c.write(EEPROM_ADDR, cmd, 2);
+    i2c.read(EEPROM_ADDR, cmd, 1);   
+        
+    pc.printf("Reading Back: %c \r\n",cmd[0]) ;
+    }
+/*
+int hex_read_line(FILE *hexfile) {
+    
+    char c;
+    
+    do{
+        c = fgetc(hexfile);
+    }while(!feof(hexfile) && c !=':');
+    
+    if(foef(hexfile)){
+        pc.printf("EOF");
+        return 0;
+    }
+    else 
+    {
+        string hexbyte;
+        fgets(hexbyte,2,hexfile);
+        ascii_hex2byte(hexbyte);
+    }
+    
+    pc.printf("Done");
+    
+    }
+    */
+char ascii_hex2byte(char* ascii){
+    
+    if(ascii[1]>'Z')
+        ascii[1] = ascii[1] - 'a' + 10;
+    else if(ascii[1] > '9')
+        ascii[1] = ascii[1] - 'A' + 10;
+    else if((ascii[1] >= '0') && (ascii[1] <= '9'))
+        ascii[1] = ascii[1] - '0';
+    else
+        pc.printf("Bad Hex Word: ascii[1]");
+        
+    if(ascii[0]>'Z')
+        ascii[0] = ascii[1] - 'a' + 10;
+    else if(ascii[0] > '9')
+        ascii[0] = ascii[0] - 'A' + 10;
+    else if((ascii[0] >= '0') && (ascii[1] <= '9'))
+        ascii[0] = ascii[0] - '0';
+    else
+        pc.printf("Bad Hex Word: ascii[0]");
+        
+    return (ascii[0] *16 )+ ascii[1];
+        
+    
+    }
+    
+void find_sentral(){
+    char inbuff[2],obuff[2];
+    obuff[0] = 0x37;
+    int check[2];
+    
+    check[0] = master.write(0x50, obuff, 1);
+    check[1] = master.read(0x50, inbuff, 1);
+    pc.printf("finding sentral... \r\nwrite %s \r\n",check[0] ? "Fail" : "Pass" );
+    
+    pc.printf("read %s \r\n reading back: %X \r\n",check[1] ? "Fail" : "Pass" , inbuff[0]);
+    
+    if(!check[0] && !check[1]){
+    pc.printf("Sentral Status: \r\n");
+    pc.printf("NEEPROM:   %d \r\n", (int)((inbuff[0] & 16)>0));
+    pc.printf("StbyState: %d \r\n", (int)((inbuff[0] & 8)>0));
+    pc.printf("UploadErr: %d \r\n", (int)((inbuff[0] & 4)>0));
+    pc.printf("UploadCPT: %d \r\n", (int)((inbuff[0] & 2)>0));
+    pc.printf("EEPROMDTC: %d \r\n", (int)((inbuff[0] & 1)>0));}
+    
+    //pc.printf("Sentral Status: %X",cmd[0]);
+}
+/*
+void sentral_startup()
+{   
+    //reset request : 50.9c.01
+    
+    //readback status, looking for xxxx x01x -- while((byte & 0x06) !=2)) 
+    
+    wait(100)
+    
+    }*/
+//EOL