Wakeup Light with touch user interface, anti-aliased Font, SD card access and RTC usage on STM32F746NG-DISCO board

Dependencies:   BSP_DISCO_F746NG_patch_fixed LCD_DISCO_F746NG TS_DISCO_F746NG FATFileSystem TinyJpgDec_interwork mbed-src

Revision:
1:35e2ad5cd1fe
Child:
3:ecf7f1f8d749
diff -r 995ae8b9afc8 -r 35e2ad5cd1fe LED.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LED.cpp	Thu Oct 29 05:00:04 2015 +0000
@@ -0,0 +1,71 @@
+#include "WakeupLight.h"
+
+#define COLOR_CREATE(_RED_,_GREEN_,_BLUE_,_WHITE_)          (_RED_ | (_GREEN_ << 8) | (_BLUE_ << 16) | (_WHITE_ <<24))
+#define COLOR_RED(_COLOR_)                                  (_COLOR_ & 0xFF)
+#define COLOR_GREEN(_COLOR_)                                ((_COLOR_ >> 8) & 0xFF)
+#define COLOR_BLUE(_COLOR_)                                 ((_COLOR_ >> 16) & 0xFF)
+#define COLOR_WHITE(_COLOR_)                                ((_COLOR_ >> 24) & 0xFF)
+
+#define LED_PERIOD                                          10
+
+PwmOut                                                      ledBlue(PB_15);
+PwmOut                                                      ledRed(PH_6);
+PwmOut                                                      ledGreen(PB_4);
+PwmOut                                                      ledWhite(PA_15);
+Ticker                                                      ledTicker;
+int32_t                                                     ledAnimationStep;
+LED_ANIMATION_ENUM                                          ledAnimation;
+
+void LED_SetColor(int32_t color)
+{
+    DPrintfCore("LED_SetColor: 0x%08X.\r\n",color);
+
+    ledRed.write(1.0 * COLOR_RED(color) / 255.0);
+    ledGreen.write(1.0 * COLOR_GREEN(color) / 255.0);
+    ledBlue.write(1.0 * COLOR_BLUE(color) / 255.0);
+    ledWhite.write(1.0 * COLOR_WHITE(color) / 255.0);
+}
+
+void LED_Callback()
+{
+    int32_t         color;
+
+    DPrintfCore("LED_Callback: Animation: %u, Step: %u.\r\n",ledAnimation,ledAnimationStep);
+
+    if (ledAnimation==LAE_WAKEUP)
+    {
+        if (ledAnimationStep<255)
+        {
+            ledAnimationStep++;
+            color=COLOR_CREATE((ledAnimationStep/2),ledAnimationStep,0,0);
+            LED_SetColor(color);
+        }
+        else if (ledAnimationStep<(255+180))
+        {
+            ledAnimationStep++;
+    
+            color=COLOR_CREATE(128,255,0,(ledAnimationStep-255));
+            LED_SetColor(color);
+        }
+    }
+}
+
+void LED_StartAnimation(LED_ANIMATION_ENUM animation)
+{
+    ledAnimationStep=0;
+    ledAnimation=animation;
+}
+
+void LED_Init(void)
+{
+    ledRed.period_ms(LED_PERIOD);
+    ledGreen.period_ms(LED_PERIOD);
+    ledBlue.period_ms(LED_PERIOD);
+    ledWhite.period_ms(LED_PERIOD);
+
+    LED_SetColor(COLOR_CREATE(0,0,0,0));
+
+    LED_StartAnimation(LAE_NONE);
+
+    ledTicker.attach(&LED_Callback,0.05);
+}