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:
Thu Nov 12 21:21:48 2015 +0000
Revision:
7:dc29f6647486
Parent:
5:13c70bcde7f6
Child:
12:a89096944f20
f746 patch used

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