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:
12:a89096944f20
Child:
14:2044ad5cd3fe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/UI_Time.cpp	Sun Jan 31 01:02:36 2016 +0000
@@ -0,0 +1,199 @@
+#include "WakeupLight.h"
+
+#include "Images/ic_date_range_white_48dp_1x.h"
+extern BYTE ic_query_builder_white_48dp_1x[];
+
+UI_STRUCT                       uiTimeAdjust;
+bool                            isDateAdjust;
+UI_BOX_LIST_ITEM_STRUCT         uiTimeItems[]=
+{
+    { "Date", ic_date_range_white_48dp_1x }, { "Time", ic_query_builder_white_48dp_1x }
+};
+
+void UI_TimeAdjustHandler(UI_REASON_ENUM reason,int32_t index,UI_STRUCT *ui)
+{
+    struct tm                   *tmStruct;
+
+    switch (reason)
+    {
+        case UR_CLICK:
+            DPrintf_("UI_WakeupAdjustHandler: %u.\r\n",index);
+            if (index==-1)
+            {
+                if (isDateAdjust==true)
+                {
+                    RTC_Get(&tmStruct);
+
+                    tmStruct->tm_mday=uiTimeAdjust.data.valueAdjust.values[0];
+                    tmStruct->tm_mon=uiTimeAdjust.data.valueAdjust.values[1]-1;
+                    tmStruct->tm_year=uiTimeAdjust.data.valueAdjust.values[2]+2000-1900;
+
+                    RTC_Set(tmStruct);
+                }
+                else
+                {
+                    RTC_Get(&tmStruct);
+
+                    tmStruct->tm_hour=uiTimeAdjust.data.valueAdjust.values[0];
+                    tmStruct->tm_min=(uiTimeAdjust.data.valueAdjust.values[1]*10) + (uiTimeAdjust.data.valueAdjust.values[2]);
+
+                    RTC_Set(tmStruct);
+                }
+
+                UI_TimeShow();
+                break;
+            }
+            else if (index==0)
+            {
+                uiTimeAdjust.data.valueAdjust.values[0]++;
+                if (isDateAdjust==true)
+                {
+                    if (uiTimeAdjust.data.valueAdjust.values[0]>=32)
+                        uiTimeAdjust.data.valueAdjust.values[0]=1;
+                }
+                else
+                {
+                    if (uiTimeAdjust.data.valueAdjust.values[0]>=23)
+                        uiTimeAdjust.data.valueAdjust.values[0]=0;
+                }
+            }   
+            else if (index==1)
+            {
+                uiTimeAdjust.data.valueAdjust.values[1]++;
+                if (isDateAdjust==true)
+                {
+                    if (uiTimeAdjust.data.valueAdjust.values[1]>=13)
+                        uiTimeAdjust.data.valueAdjust.values[1]=1;
+                }
+                else
+                {
+                    if (uiTimeAdjust.data.valueAdjust.values[1]>=6)
+                        uiTimeAdjust.data.valueAdjust.values[1]=0;
+                }
+            }
+            else if (index==2)
+            {
+                uiTimeAdjust.data.valueAdjust.values[2]++;
+                if (isDateAdjust==true)
+                {
+                    if (uiTimeAdjust.data.valueAdjust.values[2]>=30)
+                        uiTimeAdjust.data.valueAdjust.values[2]=16;
+                }
+                else
+                {
+                    if (uiTimeAdjust.data.valueAdjust.values[2]>=10)
+                        uiTimeAdjust.data.valueAdjust.values[2]=0;
+                }
+            }
+            else if (index==3)
+            {
+                uiTimeAdjust.data.valueAdjust.values[0]--;
+                if (isDateAdjust==true)
+                {
+                    if (uiTimeAdjust.data.valueAdjust.values[0]<1)
+                        uiTimeAdjust.data.valueAdjust.values[0]=31;
+                }
+                else
+                {
+                    if (uiTimeAdjust.data.valueAdjust.values[0]<0)
+                        uiTimeAdjust.data.valueAdjust.values[0]=23;
+                }
+            }
+            else if (index==4)
+            {
+                uiTimeAdjust.data.valueAdjust.values[1]--;
+                if (isDateAdjust==true)
+                {
+                    if (uiTimeAdjust.data.valueAdjust.values[1]<1)
+                        uiTimeAdjust.data.valueAdjust.values[1]=12;
+                }
+                else
+                {
+                    if (uiTimeAdjust.data.valueAdjust.values[1]<0)
+                        uiTimeAdjust.data.valueAdjust.values[1]=5;
+                }
+            }
+            else if (index==5)
+            {
+                uiTimeAdjust.data.valueAdjust.values[2]--;
+                if (isDateAdjust==true)
+                {
+                    if (uiTimeAdjust.data.valueAdjust.values[2]<16)
+                        uiTimeAdjust.data.valueAdjust.values[2]=30;
+                }
+                else
+                {
+                    if (uiTimeAdjust.data.valueAdjust.values[2]<0)
+                        uiTimeAdjust.data.valueAdjust.values[2]=9;
+                }
+            }
+            break;
+
+        case UR_SHOW:
+            break;
+    }
+}
+
+void UI_TimeHandler(UI_REASON_ENUM reason,int32_t index,UI_STRUCT *ui)
+{
+    struct tm                   *tmStruct;
+
+    switch (reason)
+    {
+        case UR_CLICK:
+            if (index==-1)
+            {
+                // back button
+                UI_Show(&uiMain);
+            }
+            else if (index==0)
+            {
+                // date
+                isDateAdjust=true;
+
+                memset(&uiTimeAdjust,0,sizeof(uiTimeAdjust));
+                uiTimeAdjust.flags=UI_FLAG_TYPE_VALUE_ADJUST;
+                uiTimeAdjust.handler=UI_TimeAdjustHandler;
+                uiTimeAdjust.data.valueAdjust.count=3;
+
+                RTC_Get(&tmStruct);
+                uiTimeAdjust.data.valueAdjust.values[0]=tmStruct->tm_mday;
+                uiTimeAdjust.data.valueAdjust.values[1]=tmStruct->tm_mon+1;
+                uiTimeAdjust.data.valueAdjust.values[2]=tmStruct->tm_year+1900-2000;
+
+                UI_Show(&uiTimeAdjust);
+            }
+            else if (index==1)
+            {
+                // time
+                isDateAdjust=false;
+
+                memset(&uiTimeAdjust,0,sizeof(uiTimeAdjust));
+                uiTimeAdjust.flags=UI_FLAG_TYPE_VALUE_ADJUST;
+                uiTimeAdjust.handler=UI_TimeAdjustHandler;
+                uiTimeAdjust.data.valueAdjust.count=3;
+                uiTimeAdjust.data.valueAdjust.isTime=true;
+
+                RTC_Get(&tmStruct);
+                uiTimeAdjust.data.valueAdjust.values[0]=tmStruct->tm_hour;
+                uiTimeAdjust.data.valueAdjust.values[1]=tmStruct->tm_min / 10;
+                uiTimeAdjust.data.valueAdjust.values[2]=tmStruct->tm_min % 10;
+
+                UI_Show(&uiTimeAdjust);
+            }
+            break;
+
+        case UR_TIMER:
+            break;
+    }
+}
+
+void UI_TimeShow(void)
+{
+    uiWakeup.flags=UI_FLAG_TYPE_BOX_LIST | UI_FLAG_HAS_BACK_BUTTON;
+    uiWakeup.handler=UI_TimeHandler;
+    uiWakeup.data.boxList.items=uiTimeItems;
+    uiWakeup.data.boxList.count=2;
+
+    UI_Show(&uiWakeup);
+}