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
Diff: main.cpp
- 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