Modifications in 4DGL library. Added CDU_hw_sw.h for version info. Added pins.h for hardware pin remapping

Dependencies:   4DGL-UC MODSERIAL mbed mbos

Fork of CDU_Mbed_30 by Engravity-CDU

Revision:
21:f348e6f0f7d4
Parent:
20:150afde94910
--- a/main.cpp	Thu Sep 25 11:34:21 2014 +0000
+++ b/main.cpp	Fri Oct 10 18:23:36 2014 +0000
@@ -6,13 +6,15 @@
 #include "mbed.h"
 #include "MODSERIAL.h"
 #include "mbos.h"
-#include "mbos_def2.h"   // : Mbos tasks, timer and resource definitions
+#include "mbos_def3.h"   // : Mbos tasks, timer and resource definitions
 #include "pins.h"
 
 // Setup USB communication defined by Mbed USB TX and RX lines
 // with TX and RX ringbuffers :
-MODSERIAL USB(USBTX, USBRX, 256, 1024);
+MODSERIAL USB(USBTX, USBRX, 256, 2048);
 DigitalOut alive_led( HEARTBEAT ); // : LED 1 on Mbed board toggles when CDU is alive
+DigitalOut PWR_led( PWR_ON );      // : LED 4 on Mbed board is ON when external power applied to board
+InterruptIn PWR_MON( PWR_IN );     // : Power monitor: input is connected to +5V and indirect to +12V
 
 //void test_update_flags(); // << for testing only << !!!!!!!
 
@@ -51,11 +53,14 @@
 void CDU_ScreenAlign(void);
 void CDU_StartScreen(void);
 void CDU_LogoScreen(void);
+void CDU_Waiting(void);
 void CDU_TVSCreen(void);
 void CDU_Page(void);
 void CDU_DSP_CSS(void);
 void CDU_displayclear(void);
 
+void CDU_BOOT();    //reboot CDU
+
 //------ USB buffer overflow interrupt handling: -------------
 void rx_buf_overflow(MODSERIAL_IRQ_INFO *q)
 {   // This functiom will be called when RX buffer overflows.
@@ -80,8 +85,51 @@
     USB.attach(&tx_buf_overflow, MODSERIAL::TxOvIrq); // : attach function to call when USB TX buffer overflows
 }
 
+char CheckExtPower()
+{
+    char ExtPower =0;
+    
+    ExtPower = PWR_MON; //check on power input: if +5V is ON return 1 else 0
+    PWR_led=1;
+    alive_led=1;
+    wait_ms(100);
+    PWR_led=0;
+    alive_led=0;
+    wait_ms(100);
+    PWR_led=PWR_MON;
+
+    return ExtPower;
+}
+
+void EXT_PWR_DN()
+{
+    //external power failed, reboot CDU after power up
+    while (! CheckExtPower()); //wait for power up....
+    CDU_BOOT();
+}
+
 main() // : MBOS main() 
 {
+    /* Check for a valid external power flag during boot sequence
+       When no external power is applied the VGA board and Keyboard chip are not operational
+       After initialization disconnecting external power will trigger interrupt to reboot.
+    */    
+    char PWR_OK=0;
+    
+    PWR_MON.mode( PullDown );    //create a solid 0 when no external power supplied
+    PWR_MON.fall(&EXT_PWR_DN);   //Bind function to handle interrupt when external power fails 
+         
+    PWR_OK = PWR_MON;        //use as boot flag           
+
+    if (! PWR_OK )
+    {
+        while (! CheckExtPower() );   //wait for external power to come up
+        CDU_BOOT();
+    }
+ 
+    PWR_led = PWR_MON ;          //switch on LED for external power indicator
+ 
+       
     init_USB();  // : setup USB communication to FS
      
     // CDU keyboard initialisation and keyboard interrrupt setup:
@@ -92,10 +140,11 @@
     // CDU display initialisation:
     CDU_InitDisplay();
     //CDU_StartScreen();
-    CDU_LogoScreen();
+    //CDU_LogoScreen();
     wait(0.2);
     //CDU_Page();
-    CDU_ScreenAlign();
+    //CDU_ScreenAlign();
+    CDU_Waiting();
             
     set_initial_data(); //: fill FS datastructures with initial data