Publishing for sharing with Harald

Dependencies:   csi059

Revision:
3:3e8c16b6620c
Parent:
2:c7229eac380b
Child:
4:1c48c9fa44fc
diff -r c7229eac380b -r 3e8c16b6620c main.cpp
--- a/main.cpp	Fri May 25 17:11:59 2018 +0000
+++ b/main.cpp	Thu Jun 21 22:11:25 2018 +0000
@@ -1,91 +1,161 @@
 #include "mbed.h"
 
 Serial pc(USBTX, USBRX);
-
-
-const int frequ = 500; //unit kHz
-const char dev_addr = 0x00; //1u
+const int frequ = 50; //unit kHz
+const char dev_addr = 0x00; //fixed
+const char version[4] = "0.0";
 
-char get_half_byte(int *flag) {
-    char cur_char;
-    cur_char = pc.getc();
-    if ( cur_char >= '0' && cur_char <= '9' ) {
-        cur_char = cur_char - '0';
-        *flag = 1;
-    }
-    else if ( cur_char >= 'a' && cur_char <= 'f') {
-        cur_char = cur_char - 'a'+10;
-        *flag = 1;
-    }
-    else if( cur_char >= 'A' && cur_char <= 'F') {
-        cur_char = cur_char - 'A'+10;
-        *flag = 1;
-    }
-    else *flag = 0; 
-    return cur_char;
-}   
+void testmode(void);
+void i2c_read(void);
+void i2c_write(void);
+void EasyFuse_prog(void);
+void hot_read(void);
+  
+void clear_screen() {
+    int i=0;
+    pc.printf("\033[%dm", 36);//change text color to cyan
+    pc.printf("\033[2J");//clears screen
+    pc.printf("\033[%d;%dH%c", 1, 1);//locate cursor to the 0,0
+    pc.printf("\n\r");    
+    //Print CSI059
+    pc.printf("\n\r     \332\304"); 
+    for ( i = 0; i<46; i++) pc.printf("\304");
+    pc.printf("\304\302");            
+    pc.printf("\n\r     \263\t\t\t\t\t\t      \263");
+    pc.printf("\n\r     \263   \334\334\334\t \334\334\334\t\334\334\334\t \334\334 \t\334\334\334\334\t \334\334   \263");
+    pc.printf("\n\r     \263  \333    \t\333   \t \333 \t\333  \333\t\333   \t\333  \333  \263");
+    pc.printf("\n\r     \263  \333    \t\337\337\334\334\t \333 \t\333  \333\t\337\337\337\334\t\337\334\334\333  \263");
+    pc.printf("\n\r     \263  \333    \t   \333\t \333 \t\333  \333\t   \333\t   \333  \263");
+    pc.printf("\n\r     \263   \337\337\337\t\337\337\337 \t\337\337\337\t \337\337 \t\337\337\337 \t\337\337\337   \263");
+    pc.printf("\n\r     \263\t\t\t\t\t\t      \263\n\r     \300\304");
+    for ( i = 0; i<46; i++) pc.printf("\304");
+    pc.printf("\304\331");
+    pc.printf("\n\n\n\r\tPROTYPE EVALUATION S/W");
+    pc.printf("\n\n\r\tVersion : %s",version);
+    pc.printf("\n\n\r   \315");   
+    for ( i = 0; i<80; i++) pc.printf("\315"); 
+    pc.printf("\n\n\n\r");
+    pc.printf("\033[%dm", 32);//change text color to green    
+}      
 
-void i2c_write() {
-    char reg_ptr = 0x55;
-    char reg_data = 0xaa;
-    char temp;
-    int flag1 = 0;
-    I2C i2c(p9,p10);
-    //Read Register Pointer
-    pc.printf("\n\n\r----------------------\n\n\rYahoooo! Lets program a Register");
-    while (!flag1) {
-        pc.printf("\n\n\rEnter Register Address in hex (0 to f): ");
-        reg_ptr = get_half_byte(&flag1);
-        if (flag1==0) pc.printf(" Invalid Chracter!! No worries, let us try again");
-    } 
-    //Read Register Data
-    flag1 = 0;
-    while (!flag1) {
-        pc.printf("\n\n\rEnter Data in hex (00 to ff): ");
-        reg_data = get_half_byte(&flag1); 
-        if (flag1 == 1) {
-            reg_data = reg_data << 4;
-            temp = get_half_byte(&flag1);
-            reg_data = (reg_data | temp);
-        }
-        if (flag1==0) pc.printf(" Invalid Chracter!! No worries, let us try again");
-    }                  
-    pc.printf("\n\n\rDevice Address (fixed) = 0x%2.2X ; Register Pointer = 0x%2.2X ; Register Data = 0x%2.2X ",dev_addr, reg_ptr, reg_data);
-    pc.printf("\n\n\rContinue Write? (y/n) : ");  
+void print_menu() {
+    int i=0;
+    pc.printf("\n\n\r\tWhat do you want to do next ?");
+    pc.printf("\033[%dm ", 31);//change text color to red
+    pc.printf("\n\n\n\r\t\332\304"); 
+    for ( i = 0; i<45; i++) pc.printf("\304");
+    pc.printf("\304\302");
+    pc.printf("\n\r\t\263\t\t\t\t\t\t\263");
+    pc.printf("\n\r\t\263  Press 't' : to generate Test-Mode Sequence\t\263");
+    pc.printf("\n\r\t\263\t\t\t\t\t\t\263");
+    pc.printf("\n\r\t\263  Press 'r' : to perform Register Read      \t\263");
+    pc.printf("\n\r\t\263\t\t\t\t\t\t\263");
+    pc.printf("\n\r\t\263  Press 'w' : to perform Register Write     \t\263");
+    pc.printf("\n\r\t\263\t\t\t\t\t\t\263");
+    pc.printf("\n\r\t\263  Press 'p' : to program Easy Fuse          \t\263");
+    pc.printf("\n\r\t\263\t\t\t\t\t\t\263");
+    pc.printf("\n\r\t\263  Press 'h' : to Perform Hot Register Read  \t\263");
+    pc.printf("\n\r\t\263\t\t\t\t\t\t\263"); 
+    pc.printf("\n\r\t\263  Press 'c' : to clear screen               \t\263");
+    pc.printf("\n\r\t\263\t\t\t\t\t\t\263"); 
+    pc.printf("\n\r\t\300\304");
+    for ( i = 0; i<45; i++) pc.printf("\304");
+    pc.printf("\304\331");
+    pc.printf("\033[%dm", 32);//change text color to green                
+    pc.printf("\n\n\n\r\tYour Selection : ");
+}         
+
+void draw_line() {
+    pc.printf("\033[%dm ", 33);//change text color to yellow
+    pc.printf("\n\n\n\n\r   \315");   
+    for ( int i = 0; i<80; i++) pc.printf("\315");
+    pc.printf("\033[%dm ", 32);//change text color to green
+    pc.printf("\n\n\r");
+}    
+
+void draw_bar() {
+    pc.printf("\033[%dm ", 33);//change text color to yellow
+    pc.printf("\n\n\n\n\r   \334");   
+    for ( int i = 0; i<80; i++) pc.printf("\334");
+    pc.printf("\033[%dm ", 32);//change text color to green
+    pc.printf("\n\n\r");
+}               
+
+void clear_screen_ques() {
+    int temp;
+    pc.printf("\n\n\r\tClear Screen (y/n) : ");  
     temp = 0;
     while ( temp!='y' && temp!='n') {
         temp = pc.getc();
     }
-    if (temp == 'n') {
-        pc.printf("\n\n\rAborting Register Write :(");
-        return;
+    if (temp == 'y') clear_screen();
+    else draw_bar();
+}
+                            
+char get_selection() {
+    char current_char;
+    int flag = 0;
+    while (flag == 0) {
+        current_char = pc.getc();
+        if ( current_char == 't' || current_char == 'r' || current_char == 'w' || current_char == 'p' || current_char == 'c' || current_char == 'h' ) flag = 1;
+        else {
+            pc.printf(" \033[%dm Invalid Chracter!! No worries, let us try again \033[%dm",41,40); 
+            pc.printf("\n\n\r\tYour Selection : "); 
+        }
     }
-    i2c.frequency(frequ*100);
-    i2c.stop(); //add a stop after hot-read
-    i2c.start();
-    flag1 = i2c.write(dev_addr);
-    if (flag1 != 1) pc.printf("\n\n\rNo Ack for dev addr :(");
-    flag1 = i2c.write(reg_ptr);
-    if (flag1 != 1) pc.printf("\n\n\rNo Ack reg pointer :(");    
-    flag1 = i2c.write(reg_data); 
-    if (flag1 != 1) pc.printf("\n\n\rNo Ack data :(");           
-    wait_us(5);
-    i2c.stop();
-    pc.printf("\n\n\rYeahhh! Register Write Complete\n\n\r---------- ");      
-    wait_us(5);
-    i2c.~I2C();   
+    return current_char;
+}   
+    
+void print_note() {
+    pc.printf("\033[%dm", 34);//change text color to blue
+    pc.printf("\n\n\r\tNote : ");
+    pc.printf("\n\r\t\304\304\304\304\304\304");
+    pc.printf("\n\n\r\t1. In Tera Term, enable 'Local echo' in Setup -> Terminal");
+    pc.printf("\n\n\r\t2. When not specified, please do not press 'enter' key after typing any entry ");
+    pc.printf("\033[%dm", 32);//change text color to green
+    draw_line();
 }  
 
 int main() {
-    char current_char=0;
-    pc.printf("\n\r---------------------------------\n\n\rReady to have fun!!\n\n\rEnter a character- 'w' to perform write operation: ");
-    while(current_char!='w') {
-        current_char=pc.getc();
-        //pc.putc(current_char);
-    }
-    current_char=0;
+    char current_char=0;  
+    clear_screen();
+    print_note();
     while(1) {
-        i2c_write();
-        wait_us(5); 
-    }
+        print_menu();
+        current_char = get_selection();
+        draw_line();
+        
+        switch (current_char) {
+            
+            case 't':
+                testmode();
+                clear_screen_ques();
+                break;
+                
+            case 'r':
+                i2c_read();
+                clear_screen_ques();
+                break;
+                                
+            case 'w':
+                i2c_write();
+                clear_screen_ques();
+                break; 
+                
+            case 'p':
+                EasyFuse_prog();
+                clear_screen_ques();
+                break;
+                
+            case 'h':
+                hot_read();
+                clear_screen_ques();
+                break;
+                                
+            case 'c':
+                clear_screen();
+                break;                                                           
+        
+        }      
+    }//end of while     
 }
\ No newline at end of file