lab_cactus
/
csi059
06/21/18
Fork of rtos_threading_with_callback by
Diff: main.cpp
- Revision:
- 3:3e8c16b6620c
- Parent:
- 2:c7229eac380b
- Child:
- 4:61f1412310af
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