Testsoftware for SC16IS750

Dependencies:   SC16IS750 USBDevice mbed

Fork of SC16IS750_Test by Wim Huiskamp

Revision:
1:f0d3984f2586
Parent:
0:d83a90125711
Child:
2:8aba07490dce
--- a/main.cpp	Wed Jan 22 16:40:03 2014 +0000
+++ b/main.cpp	Sun Feb 09 14:58:33 2014 +0000
@@ -4,22 +4,166 @@
 //SPI Version
 SPI spi(PTD2, PTD3, PTD1); //MOSI, MISO, SCK
 //DigitalOut CS(PTD0);       //CS 
-SC16IS750_SPI serial_spi(&spi, PTD0);
+SC16IS750_SPI serial_bridge(&spi, PTD0);
 
 //I2C Version
-I2C i2c(PTE0, PTE1);       //SDA, SCL
-SC16IS750_I2C serial_i2c(&i2c, DEFAULT_SC16IS750_ADDR);
+//I2C i2c(PTE0, PTE1);       //SDA, SCL
+//SC16IS750_I2C serial_bridge(&i2c, DEFAULT_SC16IS750_ADDR);
 
 DigitalOut myled1(LED_RED);
-DigitalOut myled2(LED_GREEN);
-//DigitalOut myled3(LED_BLUE);  //same as PTD1 (SCK)
+//DigitalOut myled2(LED_GREEN); 
+//DigitalOut myled3(LED_BLUE);  // Same as PTD1 (SCK)
+DigitalOut heartbeatLED(LED_GREEN);
  
 Serial pc(USBTX,USBRX);
 
+void show_menu() {
+    pc.printf("0: Exit\n\r");
+    pc.printf("1: Show Menu\n\r");    
+    pc.printf("2: Init\n\r"); 
+    pc.printf("3: IO Out\n\r");     
+    pc.printf("4: Echo Text\n\r");        
+
+ #if(0)
+
+    pc.printf("5: \n\r");            
+    pc.printf("6: \n\r");                
+    pc.printf("7: \n\r");                    
+    pc.printf("8: \n\r");                        
+    pc.printf("9: \n\r");                            
+    pc.printf("A: \n\r");                    
+    pc.printf("B: \n\r");                        
+    pc.printf("C: \n\r");                    
+    pc.printf("D: \n\r");                           
+    pc.printf("P: \n\r");                        
+#endif    
+    pc.printf("\n\r");                
+}
+
+// Variables for Heartbeat and Status monitoring
+Ticker heartbeat;
+bool heartbeatflag=false;
+
+// Local functions
+void clear_screen() {
+//ANSI Terminal Commands
+    pc.printf("\x1B[2J");
+    pc.printf("\x1B[H");
+}
+
+   
+// Heartbeat monitor
+void pulse() {
+  heartbeatLED = !heartbeatLED;
+}
+
+void heartbeat_start() {
+  heartbeat.attach(&pulse, 0.5);
+}
+
+void heartbeat_stop() {
+  heartbeat.detach();
+}
+
+
 int main() {
-  pc.printf("\nHello World!\n");
+  bool running=true;
+  char command;
+  int i=0;
+   
+  pc.printf("\nHello World!\n\r");
+
+  heartbeat_start();     
+
+  myled1 = 1; // LED Off
+
+ // We need to enable flow control or we overflow buffers and
+  // lose data when used with the WiFly. Note that flow control 
+  // needs to be enabled on the WiFly for this to work but it's
+  // possible to do that with flow control enabled here but not there.
+//  serial_bridge.set_flow_control(SC16IS750::RTSCTS);
+
+    serial_bridge.ioSetDirection(0xFF); // All outputs
+    serial_bridge.ioSetState(0x00);     // All On
+
+    show_menu();
+      
+    while(running) {
      
-  myled1 = 1; // LED Off
+       if(pc.readable()) {
+         command = pc.getc();       
+         pc.printf("command= %c \n\r", command);         
+
+         switch (command) {
+          case '0' :
+                     pc.printf("Done\n\r");                    
+                     running = false;  
+                     break;
+                     
+          case '1' :
+                     show_menu();
+                     break;
+
+          case '2' :
+                     pc.printf("Init\n\r");                    
+                     serial_bridge._init();                      
+                     break;
+          
+          case '3' :        
+                     pc.printf("IO Out\n\r");                    
+                     
+                     i=0;
+                     while (!pc.readable()) {
+                       serial_bridge.ioSetState(~i); 
+                       serial_bridge.ioGetState() ;                       //test
+                       wait(0.5);
+                       pc.putc('*');                
+                       i=(i+1) & 0xFF;
+                     }
+                     
+                     pc.getc();
+                     pc.printf("IO Out Done\n\r");                                         
+                     break;
+
+          case '4' :        
+                     pc.printf("Echo Text, Enter '$' to quit...\n\r");                    
+                     
+                     char ch;
+                     bool running_test=true;
+                      
+                     while (running_test) {
+                       // From SPI/I2C to serial                       
+                       while (running_test && pc.readable()) {
+                         ch = pc.getc();
+                         running_test = (ch != '$');
+                         serial_bridge.putc(ch);
+                       }
+                       
+                       // From Serial to SPI/I2C 
+                       while (running_test && serial_bridge.readable()) {
+                         ch = serial_bridge.getc();
+                         running_test = (ch != '$');
+                         pc.putc(ch);
+                       }
+                       
+                     }
+                     
+                     pc.printf("\n\rEcho Text Done\n\r");                                         
+                     break;
+
+          default :
+                    break;                     
+
+         } //switch
+       } //if  
+    } //while
+
+
+
+
+#if(0)
+
+
 //  CS = 1;
  
   spi.format(8, 0);          
@@ -27,17 +171,9 @@
 //    spi.frequency(500000);    
   spi.frequency(1000000);
 //    spi.frequency(1500000);    
-        
-  while(1) {
-//    serial_spi.writeRegister(SC16IS750::IODIR, 0x81);  // direct call to new method
-    
-    serial_spi.ioSetState(0x00);    // indirect call to new method
-//    wait(0.5);
-    pc.putc('*');                
-  }
 
 
-#if(0)
+
   while(1) {
     CS=0;
     spi.write(0xAA);