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

Committer:
the_sz
Date:
Sun Feb 21 04:26:17 2016 +0000
Revision:
14:2044ad5cd3fe
Parent:
12:a89096944f20
all fonts are working

Who changed what in which revision?

UserRevisionLine numberNew contents of line
the_sz 3:ecf7f1f8d749 1 #include "WakeupLight.h"
the_sz 3:ecf7f1f8d749 2
the_sz 12:a89096944f20 3 extern BYTE ic_notifications_none_white_48dp_1x[];
the_sz 12:a89096944f20 4 #include "Images/ic_add_alert_white_48dp_1x.h"
the_sz 7:dc29f6647486 5
the_sz 7:dc29f6647486 6 #define ALARM_NAME_LENGTH 20
the_sz 7:dc29f6647486 7
the_sz 7:dc29f6647486 8 char alarm1[ALARM_NAME_LENGTH];
the_sz 7:dc29f6647486 9 char alarm2[ALARM_NAME_LENGTH];
the_sz 7:dc29f6647486 10 char alarm3[ALARM_NAME_LENGTH];
the_sz 7:dc29f6647486 11 char alarm4[ALARM_NAME_LENGTH];
the_sz 7:dc29f6647486 12 char alarm5[ALARM_NAME_LENGTH];
the_sz 7:dc29f6647486 13 char alarm6[ALARM_NAME_LENGTH];
the_sz 7:dc29f6647486 14 CONFIG_TYPE_ENUM currentConfigTime;
the_sz 7:dc29f6647486 15 CONFIG_TYPE_ENUM currentConfigMask;
the_sz 7:dc29f6647486 16 UI_STRUCT uiWakeupAdjust;
the_sz 7:dc29f6647486 17 UI_BOX_LIST_ITEM_STRUCT uiWakeupItems[]=
the_sz 7:dc29f6647486 18 {
the_sz 7:dc29f6647486 19 { alarm1, NULL }, { alarm2, NULL }, { alarm3, NULL }, { alarm4, NULL }, { alarm5, NULL }, { alarm6, NULL }
the_sz 7:dc29f6647486 20 };
the_sz 7:dc29f6647486 21
the_sz 7:dc29f6647486 22 void UI_WakeupAdjustHandler(UI_REASON_ENUM reason,int32_t index,UI_STRUCT *ui)
the_sz 7:dc29f6647486 23 {
the_sz 7:dc29f6647486 24 switch (reason)
the_sz 7:dc29f6647486 25 {
the_sz 7:dc29f6647486 26 case UR_CLICK:
the_sz 7:dc29f6647486 27 DPrintf_("UI_WakeupAdjustHandler: %u.\r\n",index);
the_sz 7:dc29f6647486 28 if (index==-1)
the_sz 7:dc29f6647486 29 {
the_sz 7:dc29f6647486 30 uint32_t value;
the_sz 7:dc29f6647486 31
the_sz 7:dc29f6647486 32 Config_Set(currentConfigTime,((uiWakeupAdjust.data.valueAdjust.values[0] << 8) | ((uiWakeupAdjust.data.valueAdjust.values[1] * 10) + uiWakeupAdjust.data.valueAdjust.values[2])));
the_sz 7:dc29f6647486 33
the_sz 7:dc29f6647486 34 value=0;
the_sz 7:dc29f6647486 35 if (uiWakeupAdjust.data.valueAdjust.values[3]!=0)
the_sz 7:dc29f6647486 36 value|=CONFIG_ALARM_MASK_MONDAY;
the_sz 7:dc29f6647486 37 if (uiWakeupAdjust.data.valueAdjust.values[4]!=0)
the_sz 7:dc29f6647486 38 value|=CONFIG_ALARM_MASK_TUESDAY;
the_sz 7:dc29f6647486 39 if (uiWakeupAdjust.data.valueAdjust.values[5]!=0)
the_sz 7:dc29f6647486 40 value|=CONFIG_ALARM_MASK_WEDNESDAY;
the_sz 7:dc29f6647486 41 if (uiWakeupAdjust.data.valueAdjust.values[6]!=0)
the_sz 7:dc29f6647486 42 value|=CONFIG_ALARM_MASK_THURSDAY;
the_sz 7:dc29f6647486 43 if (uiWakeupAdjust.data.valueAdjust.values[7]!=0)
the_sz 7:dc29f6647486 44 value|=CONFIG_ALARM_MASK_FRIDAY;
the_sz 7:dc29f6647486 45 if (uiWakeupAdjust.data.valueAdjust.values[8]!=0)
the_sz 7:dc29f6647486 46 value|=CONFIG_ALARM_MASK_SATURDAY;
the_sz 7:dc29f6647486 47 if (uiWakeupAdjust.data.valueAdjust.values[9]!=0)
the_sz 7:dc29f6647486 48 value|=CONFIG_ALARM_MASK_SUNDAY;
the_sz 7:dc29f6647486 49 Config_Set(currentConfigMask,value);
the_sz 7:dc29f6647486 50
the_sz 7:dc29f6647486 51 UI_WakeupShow();
the_sz 7:dc29f6647486 52 break;
the_sz 7:dc29f6647486 53 }
the_sz 7:dc29f6647486 54 else if (index==0)
the_sz 7:dc29f6647486 55 {
the_sz 7:dc29f6647486 56 uiWakeupAdjust.data.valueAdjust.values[0]++;
the_sz 7:dc29f6647486 57 if (uiWakeupAdjust.data.valueAdjust.values[0]>=23)
the_sz 7:dc29f6647486 58 uiWakeupAdjust.data.valueAdjust.values[0]=0;
the_sz 7:dc29f6647486 59 }
the_sz 7:dc29f6647486 60 else if (index==1)
the_sz 7:dc29f6647486 61 {
the_sz 7:dc29f6647486 62 uiWakeupAdjust.data.valueAdjust.values[1]++;
the_sz 7:dc29f6647486 63 if (uiWakeupAdjust.data.valueAdjust.values[1]>=6)
the_sz 7:dc29f6647486 64 uiWakeupAdjust.data.valueAdjust.values[1]=0;
the_sz 7:dc29f6647486 65 }
the_sz 7:dc29f6647486 66 else if (index==2)
the_sz 7:dc29f6647486 67 {
the_sz 7:dc29f6647486 68 uiWakeupAdjust.data.valueAdjust.values[2]++;
the_sz 7:dc29f6647486 69 if (uiWakeupAdjust.data.valueAdjust.values[2]>=10)
the_sz 7:dc29f6647486 70 uiWakeupAdjust.data.valueAdjust.values[2]=0;
the_sz 7:dc29f6647486 71 }
the_sz 7:dc29f6647486 72 else if (index==3)
the_sz 7:dc29f6647486 73 {
the_sz 7:dc29f6647486 74 uiWakeupAdjust.data.valueAdjust.values[0]--;
the_sz 7:dc29f6647486 75 if (uiWakeupAdjust.data.valueAdjust.values[0]<0)
the_sz 7:dc29f6647486 76 uiWakeupAdjust.data.valueAdjust.values[0]=23;
the_sz 7:dc29f6647486 77 }
the_sz 7:dc29f6647486 78 else if (index==4)
the_sz 7:dc29f6647486 79 {
the_sz 7:dc29f6647486 80 uiWakeupAdjust.data.valueAdjust.values[1]--;
the_sz 7:dc29f6647486 81 if (uiWakeupAdjust.data.valueAdjust.values[1]<0)
the_sz 7:dc29f6647486 82 uiWakeupAdjust.data.valueAdjust.values[1]=5;
the_sz 7:dc29f6647486 83 }
the_sz 7:dc29f6647486 84 else if (index==5)
the_sz 7:dc29f6647486 85 {
the_sz 7:dc29f6647486 86 uiWakeupAdjust.data.valueAdjust.values[2]--;
the_sz 7:dc29f6647486 87 if (uiWakeupAdjust.data.valueAdjust.values[2]<0)
the_sz 7:dc29f6647486 88 uiWakeupAdjust.data.valueAdjust.values[2]=9;
the_sz 7:dc29f6647486 89 }
the_sz 7:dc29f6647486 90 else if ((index>=6) && (index<=12))
the_sz 7:dc29f6647486 91 {
the_sz 7:dc29f6647486 92 if (uiWakeupAdjust.data.valueAdjust.values[index-3]==0)
the_sz 7:dc29f6647486 93 uiWakeupAdjust.data.valueAdjust.values[index-3]=1;
the_sz 7:dc29f6647486 94 else
the_sz 7:dc29f6647486 95 uiWakeupAdjust.data.valueAdjust.values[index-3]=0;
the_sz 7:dc29f6647486 96 }
the_sz 7:dc29f6647486 97 break;
the_sz 7:dc29f6647486 98
the_sz 7:dc29f6647486 99 case UR_SHOW:
the_sz 7:dc29f6647486 100 break;
the_sz 7:dc29f6647486 101 }
the_sz 7:dc29f6647486 102 }
the_sz 7:dc29f6647486 103
the_sz 5:13c70bcde7f6 104 void UI_WakeupHandler(UI_REASON_ENUM reason,int32_t index,UI_STRUCT *ui)
the_sz 3:ecf7f1f8d749 105 {
the_sz 3:ecf7f1f8d749 106 switch (reason)
the_sz 3:ecf7f1f8d749 107 {
the_sz 3:ecf7f1f8d749 108 case UR_CLICK:
the_sz 7:dc29f6647486 109 if (index==-1)
the_sz 7:dc29f6647486 110 {
the_sz 7:dc29f6647486 111 // back button
the_sz 7:dc29f6647486 112 UI_Show(&uiMain);
the_sz 7:dc29f6647486 113 }
the_sz 7:dc29f6647486 114 else
the_sz 7:dc29f6647486 115 {
the_sz 7:dc29f6647486 116 // adjust timer
the_sz 7:dc29f6647486 117 uint32_t value;
the_sz 7:dc29f6647486 118
the_sz 7:dc29f6647486 119 switch (index)
the_sz 7:dc29f6647486 120 {
the_sz 7:dc29f6647486 121 case 0: currentConfigTime=CT_ALARM_1_TIME; currentConfigMask=CT_ALARM_1_MASK; break;
the_sz 7:dc29f6647486 122 case 1: currentConfigTime=CT_ALARM_2_TIME; currentConfigMask=CT_ALARM_2_MASK; break;
the_sz 7:dc29f6647486 123 case 2: currentConfigTime=CT_ALARM_3_TIME; currentConfigMask=CT_ALARM_3_MASK; break;
the_sz 7:dc29f6647486 124 case 3: currentConfigTime=CT_ALARM_4_TIME; currentConfigMask=CT_ALARM_4_MASK; break;
the_sz 7:dc29f6647486 125 case 4: currentConfigTime=CT_ALARM_5_TIME; currentConfigMask=CT_ALARM_5_MASK; break;
the_sz 7:dc29f6647486 126 case 5: currentConfigTime=CT_ALARM_6_TIME; currentConfigMask=CT_ALARM_6_MASK; break;
the_sz 7:dc29f6647486 127 }
the_sz 7:dc29f6647486 128
the_sz 7:dc29f6647486 129 memset(&uiWakeupAdjust,0,sizeof(uiWakeupAdjust));
the_sz 7:dc29f6647486 130 uiWakeupAdjust.flags=UI_FLAG_TYPE_VALUE_ADJUST;
the_sz 7:dc29f6647486 131 uiWakeupAdjust.handler=UI_WakeupAdjustHandler;
the_sz 7:dc29f6647486 132 uiWakeupAdjust.data.valueAdjust.count=10;
the_sz 12:a89096944f20 133 uiWakeupAdjust.data.valueAdjust.isTime=true;
the_sz 7:dc29f6647486 134
the_sz 7:dc29f6647486 135 value=Config_Get(currentConfigTime);
the_sz 7:dc29f6647486 136 uiWakeupAdjust.data.valueAdjust.values[0]=((value >> 8) & 0xFF);
the_sz 7:dc29f6647486 137 uiWakeupAdjust.data.valueAdjust.values[1]=((value & 0xFF) / 10);
the_sz 7:dc29f6647486 138 uiWakeupAdjust.data.valueAdjust.values[2]=((value & 0xFF) % 10);
the_sz 7:dc29f6647486 139
the_sz 7:dc29f6647486 140 value=Config_Get(currentConfigMask);
the_sz 7:dc29f6647486 141 if (value==0)
the_sz 7:dc29f6647486 142 value=CONFIG_ALARM_MASK_MONDAY | CONFIG_ALARM_MASK_TUESDAY | CONFIG_ALARM_MASK_WEDNESDAY | CONFIG_ALARM_MASK_THURSDAY | CONFIG_ALARM_MASK_FRIDAY;
the_sz 7:dc29f6647486 143 if ((value & CONFIG_ALARM_MASK_MONDAY)!=0)
the_sz 7:dc29f6647486 144 uiWakeupAdjust.data.valueAdjust.values[3]=1;
the_sz 7:dc29f6647486 145 if ((value & CONFIG_ALARM_MASK_TUESDAY)!=0)
the_sz 7:dc29f6647486 146 uiWakeupAdjust.data.valueAdjust.values[4]=1;
the_sz 7:dc29f6647486 147 if ((value & CONFIG_ALARM_MASK_WEDNESDAY)!=0)
the_sz 7:dc29f6647486 148 uiWakeupAdjust.data.valueAdjust.values[5]=1;
the_sz 7:dc29f6647486 149 if ((value & CONFIG_ALARM_MASK_THURSDAY)!=0)
the_sz 7:dc29f6647486 150 uiWakeupAdjust.data.valueAdjust.values[6]=1;
the_sz 7:dc29f6647486 151 if ((value & CONFIG_ALARM_MASK_FRIDAY)!=0)
the_sz 7:dc29f6647486 152 uiWakeupAdjust.data.valueAdjust.values[7]=1;
the_sz 7:dc29f6647486 153 if ((value & CONFIG_ALARM_MASK_SATURDAY)!=0)
the_sz 7:dc29f6647486 154 uiWakeupAdjust.data.valueAdjust.values[8]=1;
the_sz 7:dc29f6647486 155 if ((value & CONFIG_ALARM_MASK_SUNDAY)!=0)
the_sz 7:dc29f6647486 156 uiWakeupAdjust.data.valueAdjust.values[9]=1;
the_sz 7:dc29f6647486 157
the_sz 7:dc29f6647486 158 UI_Show(&uiWakeupAdjust);
the_sz 7:dc29f6647486 159 }
the_sz 3:ecf7f1f8d749 160 break;
the_sz 3:ecf7f1f8d749 161
the_sz 3:ecf7f1f8d749 162 case UR_TIMER:
the_sz 3:ecf7f1f8d749 163 break;
the_sz 3:ecf7f1f8d749 164 }
the_sz 3:ecf7f1f8d749 165 }
the_sz 7:dc29f6647486 166
the_sz 7:dc29f6647486 167 void UI_WakeupAddAlarm(uint32_t index,CONFIG_TYPE_ENUM configTime,CONFIG_TYPE_ENUM configMask,bool *addAdded)
the_sz 7:dc29f6647486 168 {
the_sz 7:dc29f6647486 169 uint32_t alarmTime;
the_sz 7:dc29f6647486 170
the_sz 7:dc29f6647486 171 if ((Config_Get(configMask) & CONFIG_ALARM_MASK_DAYS)!=0)
the_sz 7:dc29f6647486 172 {
the_sz 7:dc29f6647486 173 // alarm enabled
the_sz 7:dc29f6647486 174 alarmTime=Config_Get(configTime);
the_sz 7:dc29f6647486 175 snprintf(uiWakeupItems[index].name,ALARM_NAME_LENGTH,"%u:%02u",((alarmTime >> 8) & 0xFF),(alarmTime & 0xFF));
the_sz 12:a89096944f20 176 uiWakeupItems[index].image=ic_notifications_none_white_48dp_1x;
the_sz 7:dc29f6647486 177 uiWakeup.data.boxList.count++;
the_sz 7:dc29f6647486 178 }
the_sz 7:dc29f6647486 179 else
the_sz 7:dc29f6647486 180 {
the_sz 7:dc29f6647486 181 // alarm disabled
the_sz 7:dc29f6647486 182 if ((*addAdded)==false)
the_sz 7:dc29f6647486 183 {
the_sz 7:dc29f6647486 184 snprintf(uiWakeupItems[index].name,ALARM_NAME_LENGTH,"New");
the_sz 12:a89096944f20 185 uiWakeupItems[index].image=ic_add_alert_white_48dp_1x;
the_sz 7:dc29f6647486 186 uiWakeup.data.boxList.count++;
the_sz 7:dc29f6647486 187 (*addAdded)=true;
the_sz 7:dc29f6647486 188 }
the_sz 7:dc29f6647486 189 }
the_sz 7:dc29f6647486 190 }
the_sz 7:dc29f6647486 191
the_sz 7:dc29f6647486 192 void UI_WakeupShow(void)
the_sz 7:dc29f6647486 193 {
the_sz 7:dc29f6647486 194 bool addAdded;
the_sz 7:dc29f6647486 195
the_sz 7:dc29f6647486 196 uiWakeup.flags=UI_FLAG_TYPE_BOX_LIST | UI_FLAG_HAS_BACK_BUTTON;
the_sz 7:dc29f6647486 197 uiWakeup.handler=UI_WakeupHandler;
the_sz 7:dc29f6647486 198 uiWakeup.data.boxList.items=uiWakeupItems;
the_sz 7:dc29f6647486 199 uiWakeup.data.boxList.count=0;
the_sz 7:dc29f6647486 200
the_sz 7:dc29f6647486 201 addAdded=false;
the_sz 7:dc29f6647486 202 UI_WakeupAddAlarm(0,CT_ALARM_1_TIME,CT_ALARM_1_MASK,&addAdded);
the_sz 7:dc29f6647486 203 UI_WakeupAddAlarm(1,CT_ALARM_2_TIME,CT_ALARM_2_MASK,&addAdded);
the_sz 7:dc29f6647486 204 UI_WakeupAddAlarm(2,CT_ALARM_3_TIME,CT_ALARM_3_MASK,&addAdded);
the_sz 7:dc29f6647486 205 UI_WakeupAddAlarm(3,CT_ALARM_4_TIME,CT_ALARM_4_MASK,&addAdded);
the_sz 7:dc29f6647486 206 UI_WakeupAddAlarm(4,CT_ALARM_5_TIME,CT_ALARM_5_MASK,&addAdded);
the_sz 7:dc29f6647486 207 UI_WakeupAddAlarm(5,CT_ALARM_6_TIME,CT_ALARM_6_MASK,&addAdded);
the_sz 7:dc29f6647486 208
the_sz 7:dc29f6647486 209 UI_Show(&uiWakeup);
the_sz 7:dc29f6647486 210 }