Allows my home wiz lights to be timed on and off according to a schedule.

Dependents:   heating

Committer:
andrewboyson
Date:
Wed Jun 09 09:23:54 2021 +0000
Revision:
7:3035a540ef65
Parent:
6:09ca95ef1cdd
Changed WizSchedMinutesUtcToLocal function so that local midnight in summer is 00h00 rather than 24h00.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
andrewboyson 0:9af80a39adcc 1 #include <stdint.h>
andrewboyson 0:9af80a39adcc 2 #include <string.h>
andrewboyson 0:9af80a39adcc 3
andrewboyson 0:9af80a39adcc 4 #include "wiz-list.h"
andrewboyson 0:9af80a39adcc 5 #include "wiz-sun.h"
andrewboyson 0:9af80a39adcc 6 #include "wiz-sched.h"
andrewboyson 0:9af80a39adcc 7 #include "settings.h"
andrewboyson 0:9af80a39adcc 8 #include "http.h"
andrewboyson 0:9af80a39adcc 9 #include "clk.h"
andrewboyson 0:9af80a39adcc 10 #include "log.h"
andrewboyson 0:9af80a39adcc 11 #include "mac.h"
andrewboyson 5:ec0498d7d2c1 12 #include "tm.h"
andrewboyson 0:9af80a39adcc 13
andrewboyson 0:9af80a39adcc 14 #define MINIMUM_DURATION_MINUTES 1
andrewboyson 0:9af80a39adcc 15
andrewboyson 3:d33dda272a7f 16 #define DEBUG false
andrewboyson 0:9af80a39adcc 17
andrewboyson 0:9af80a39adcc 18 struct item
andrewboyson 0:9af80a39adcc 19 {
andrewboyson 0:9af80a39adcc 20 char name[WIZ_LIST_NAME_LENGTH]; //Name or '*' for broadcast
andrewboyson 0:9af80a39adcc 21 char ondatum;
andrewboyson 0:9af80a39adcc 22 int16_t onminutes;
andrewboyson 0:9af80a39adcc 23 char offdatum;
andrewboyson 0:9af80a39adcc 24 int16_t offminutes;
andrewboyson 0:9af80a39adcc 25 };
andrewboyson 0:9af80a39adcc 26 static struct item items[WIZ_SCHED_MAX_ITEMS];
andrewboyson 0:9af80a39adcc 27
andrewboyson 0:9af80a39adcc 28 void WizSchedSetName (int i, char* name) { strncpy ( items[i].name, name, WIZ_LIST_NAME_LENGTH); SetWizSchedName (i, name ); }
andrewboyson 0:9af80a39adcc 29 void WizSchedSetOnEvent (int i, char datum, int16_t minutes)
andrewboyson 0:9af80a39adcc 30 {
andrewboyson 0:9af80a39adcc 31 items[i].ondatum = datum ;
andrewboyson 0:9af80a39adcc 32 items[i].onminutes = minutes;
andrewboyson 0:9af80a39adcc 33 SetWizSchedOnDatum (i, &datum );
andrewboyson 0:9af80a39adcc 34 SetWizSchedOnMinutes(i, &minutes);
andrewboyson 0:9af80a39adcc 35 }
andrewboyson 0:9af80a39adcc 36 void WizSchedSetOffEvent(int i, char datum, int16_t minutes)
andrewboyson 0:9af80a39adcc 37 {
andrewboyson 0:9af80a39adcc 38 items[i].offdatum = datum;
andrewboyson 0:9af80a39adcc 39 items[i].offminutes = minutes;
andrewboyson 0:9af80a39adcc 40 SetWizSchedOffDatum (i, &datum );
andrewboyson 0:9af80a39adcc 41 SetWizSchedOffMinutes(i, &minutes);
andrewboyson 0:9af80a39adcc 42 }
andrewboyson 0:9af80a39adcc 43
andrewboyson 0:9af80a39adcc 44 static int minutesTodayUtc;
andrewboyson 0:9af80a39adcc 45 static int minutesSunriseUtc;
andrewboyson 0:9af80a39adcc 46 static int minutesSunsetUtc;
andrewboyson 5:ec0498d7d2c1 47 static bool isDst;
andrewboyson 5:ec0498d7d2c1 48
andrewboyson 5:ec0498d7d2c1 49 int WizSchedMinutesUtcToLocal(int minutes)
andrewboyson 5:ec0498d7d2c1 50 {
andrewboyson 5:ec0498d7d2c1 51 if (isDst) minutes += TM_DST_OFFSET * 60;
andrewboyson 5:ec0498d7d2c1 52 else minutes += TM_STD_OFFSET * 60;
andrewboyson 7:3035a540ef65 53 if (minutes >= 1440) minutes -= 1440;
andrewboyson 5:ec0498d7d2c1 54 return minutes;
andrewboyson 5:ec0498d7d2c1 55 }
andrewboyson 5:ec0498d7d2c1 56 int WizSchedMinutesLocalToUtc(int minutes)
andrewboyson 5:ec0498d7d2c1 57 {
andrewboyson 5:ec0498d7d2c1 58 if (isDst) minutes -= TM_DST_OFFSET * 60;
andrewboyson 5:ec0498d7d2c1 59 else minutes -= TM_STD_OFFSET * 60;
andrewboyson 5:ec0498d7d2c1 60 if (minutes < 0) minutes += 1440;
andrewboyson 5:ec0498d7d2c1 61 return minutes;
andrewboyson 5:ec0498d7d2c1 62 }
andrewboyson 0:9af80a39adcc 63
andrewboyson 0:9af80a39adcc 64 static int getOnMinuteUtc(int i)
andrewboyson 0:9af80a39adcc 65 {
andrewboyson 0:9af80a39adcc 66 switch (items[i].ondatum)
andrewboyson 0:9af80a39adcc 67 {
andrewboyson 0:9af80a39adcc 68 case 'U': return items[i].onminutes;
andrewboyson 5:ec0498d7d2c1 69 case 'L': return WizSchedMinutesLocalToUtc(items[i].onminutes);
andrewboyson 0:9af80a39adcc 70 case 'R': return items[i].onminutes + minutesSunriseUtc;
andrewboyson 0:9af80a39adcc 71 case 'S': return items[i].onminutes + minutesSunsetUtc;
andrewboyson 0:9af80a39adcc 72 }
andrewboyson 0:9af80a39adcc 73 return -1;
andrewboyson 0:9af80a39adcc 74 }
andrewboyson 0:9af80a39adcc 75 static int getOffMinuteUtc(int i)
andrewboyson 0:9af80a39adcc 76 {
andrewboyson 0:9af80a39adcc 77 switch (items[i].offdatum)
andrewboyson 0:9af80a39adcc 78 {
andrewboyson 0:9af80a39adcc 79 case 'U': return items[i].offminutes;
andrewboyson 5:ec0498d7d2c1 80 case 'L': return WizSchedMinutesLocalToUtc(items[i].offminutes);
andrewboyson 0:9af80a39adcc 81 case 'R': return items[i].offminutes + minutesSunriseUtc;
andrewboyson 0:9af80a39adcc 82 case 'S': return items[i].offminutes + minutesSunsetUtc;
andrewboyson 0:9af80a39adcc 83 }
andrewboyson 0:9af80a39adcc 84 return -1;
andrewboyson 0:9af80a39adcc 85 }
andrewboyson 0:9af80a39adcc 86 static int subtractMinutes(int a, int b)
andrewboyson 0:9af80a39adcc 87 {
andrewboyson 0:9af80a39adcc 88 int d = a - b;
andrewboyson 0:9af80a39adcc 89 if (d >= 1080) d -= 1440; //Positive durations upto and including 18 hours are ok
andrewboyson 0:9af80a39adcc 90 if (d < -360) d += 1440; //Negative durations over 6 hours are assumed to be next day
andrewboyson 0:9af80a39adcc 91 return d;
andrewboyson 0:9af80a39adcc 92 }
andrewboyson 0:9af80a39adcc 93 static void onOffHttp(char datum, int minutes)
andrewboyson 0:9af80a39adcc 94 {
andrewboyson 0:9af80a39adcc 95 bool isNegative = minutes < 0;
andrewboyson 0:9af80a39adcc 96 if (isNegative) minutes = -minutes;
andrewboyson 0:9af80a39adcc 97 switch (datum)
andrewboyson 0:9af80a39adcc 98 {
andrewboyson 0:9af80a39adcc 99 case 'L':
andrewboyson 0:9af80a39adcc 100 if (isNegative) HttpAddChar('-') ;
andrewboyson 0:9af80a39adcc 101 HttpAddF("%02d", minutes / 60);
andrewboyson 0:9af80a39adcc 102 HttpAddChar('h');
andrewboyson 0:9af80a39adcc 103 HttpAddF("%02d", minutes % 60);
andrewboyson 0:9af80a39adcc 104 break;
andrewboyson 0:9af80a39adcc 105 case 'S':
andrewboyson 0:9af80a39adcc 106 case 'R':
andrewboyson 0:9af80a39adcc 107 HttpAddChar(datum);
andrewboyson 6:09ca95ef1cdd 108 if (minutes)
andrewboyson 0:9af80a39adcc 109 {
andrewboyson 6:09ca95ef1cdd 110 HttpAddChar(isNegative ? '-' : '+') ;
andrewboyson 6:09ca95ef1cdd 111 if (minutes < 60)
andrewboyson 6:09ca95ef1cdd 112 {
andrewboyson 6:09ca95ef1cdd 113 HttpAddF("%d", minutes);
andrewboyson 6:09ca95ef1cdd 114 }
andrewboyson 6:09ca95ef1cdd 115 else
andrewboyson 6:09ca95ef1cdd 116 {
andrewboyson 6:09ca95ef1cdd 117 HttpAddF("%02d", minutes / 60);
andrewboyson 6:09ca95ef1cdd 118 HttpAddChar('h');
andrewboyson 6:09ca95ef1cdd 119 HttpAddF("%02d", minutes % 60);
andrewboyson 6:09ca95ef1cdd 120 }
andrewboyson 0:9af80a39adcc 121 }
andrewboyson 0:9af80a39adcc 122 break;
andrewboyson 0:9af80a39adcc 123 case 'D':
andrewboyson 0:9af80a39adcc 124 HttpAddChar(isNegative ? '-' : '+') ;
andrewboyson 0:9af80a39adcc 125 HttpAddF("%02d", minutes / 60);
andrewboyson 0:9af80a39adcc 126 HttpAddChar('h');
andrewboyson 0:9af80a39adcc 127 HttpAddF("%02d", minutes % 60);
andrewboyson 0:9af80a39adcc 128 break;
andrewboyson 0:9af80a39adcc 129 }
andrewboyson 0:9af80a39adcc 130 }
andrewboyson 0:9af80a39adcc 131 void WizSchedParseEvent(char* text, char* pDatum, int16_t* pMinutes)
andrewboyson 0:9af80a39adcc 132 {
andrewboyson 0:9af80a39adcc 133 if (!text || !pDatum || !pMinutes) return;
andrewboyson 0:9af80a39adcc 134
andrewboyson 0:9af80a39adcc 135 *pDatum = 'L'; //Default to local
andrewboyson 0:9af80a39adcc 136 bool isNegative = false;
andrewboyson 0:9af80a39adcc 137 int minutes = 0;
andrewboyson 0:9af80a39adcc 138 int hours = 0;
andrewboyson 0:9af80a39adcc 139 for (int i = 0; i < 10 && text[i]; i++)
andrewboyson 0:9af80a39adcc 140 {
andrewboyson 0:9af80a39adcc 141 switch (text[i])
andrewboyson 0:9af80a39adcc 142 {
andrewboyson 0:9af80a39adcc 143 case 'H':
andrewboyson 0:9af80a39adcc 144 case 'h':
andrewboyson 0:9af80a39adcc 145 hours = minutes;
andrewboyson 0:9af80a39adcc 146 minutes = 0;
andrewboyson 0:9af80a39adcc 147 break;
andrewboyson 0:9af80a39adcc 148 case 'L':
andrewboyson 0:9af80a39adcc 149 case 'l':
andrewboyson 0:9af80a39adcc 150 *pDatum = 'L';
andrewboyson 0:9af80a39adcc 151 break;
andrewboyson 0:9af80a39adcc 152 case 'R':
andrewboyson 0:9af80a39adcc 153 case 'r':
andrewboyson 0:9af80a39adcc 154 *pDatum = 'R';
andrewboyson 0:9af80a39adcc 155 break;
andrewboyson 0:9af80a39adcc 156 case 'S':
andrewboyson 0:9af80a39adcc 157 case 's':
andrewboyson 0:9af80a39adcc 158 *pDatum = 'S';
andrewboyson 0:9af80a39adcc 159 break;
andrewboyson 0:9af80a39adcc 160 case '0': minutes = minutes * 10 + 0; break;
andrewboyson 0:9af80a39adcc 161 case '1': minutes = minutes * 10 + 1; break;
andrewboyson 0:9af80a39adcc 162 case '2': minutes = minutes * 10 + 2; break;
andrewboyson 0:9af80a39adcc 163 case '3': minutes = minutes * 10 + 3; break;
andrewboyson 0:9af80a39adcc 164 case '4': minutes = minutes * 10 + 4; break;
andrewboyson 0:9af80a39adcc 165 case '5': minutes = minutes * 10 + 5; break;
andrewboyson 0:9af80a39adcc 166 case '6': minutes = minutes * 10 + 6; break;
andrewboyson 0:9af80a39adcc 167 case '7': minutes = minutes * 10 + 7; break;
andrewboyson 0:9af80a39adcc 168 case '8': minutes = minutes * 10 + 8; break;
andrewboyson 0:9af80a39adcc 169 case '9': minutes = minutes * 10 + 9; break;
andrewboyson 0:9af80a39adcc 170 case '+': isNegative = false; break;
andrewboyson 0:9af80a39adcc 171 case '-': isNegative = true; break;
andrewboyson 0:9af80a39adcc 172 }
andrewboyson 0:9af80a39adcc 173 }
andrewboyson 0:9af80a39adcc 174 *pMinutes = hours * 60 + minutes;
andrewboyson 0:9af80a39adcc 175 if (isNegative) *pMinutes = -*pMinutes;
andrewboyson 0:9af80a39adcc 176 }
andrewboyson 0:9af80a39adcc 177
andrewboyson 0:9af80a39adcc 178 void WizSchedMoveUp(int i)
andrewboyson 0:9af80a39adcc 179 {
andrewboyson 0:9af80a39adcc 180 if (i <= 0) return; //Cannot move further up
andrewboyson 0:9af80a39adcc 181 struct item item;
andrewboyson 0:9af80a39adcc 182 strncpy ( item.name, items[i].name, WIZ_LIST_NAME_LENGTH);
andrewboyson 0:9af80a39adcc 183 item.ondatum = items[i].ondatum;
andrewboyson 0:9af80a39adcc 184 item.onminutes = items[i].onminutes;
andrewboyson 0:9af80a39adcc 185 item.offdatum = items[i].offdatum;
andrewboyson 0:9af80a39adcc 186 item.offminutes = items[i].offminutes;
andrewboyson 0:9af80a39adcc 187
andrewboyson 0:9af80a39adcc 188 WizSchedSetName (i, items[i-1].name);
andrewboyson 0:9af80a39adcc 189 WizSchedSetOnEvent (i, items[i-1].ondatum, items[i-1].onminutes);
andrewboyson 0:9af80a39adcc 190 WizSchedSetOffEvent(i, items[i-1].offdatum, items[i-1].offminutes);
andrewboyson 0:9af80a39adcc 191
andrewboyson 0:9af80a39adcc 192 WizSchedSetName (i-1, item.name );
andrewboyson 0:9af80a39adcc 193 WizSchedSetOnEvent (i-1, item.ondatum, item.onminutes);
andrewboyson 0:9af80a39adcc 194 WizSchedSetOffEvent(i-1, item.offdatum, item.offminutes);
andrewboyson 0:9af80a39adcc 195 }
andrewboyson 0:9af80a39adcc 196 void WizSchedMoveDown(int i)
andrewboyson 0:9af80a39adcc 197 {
andrewboyson 0:9af80a39adcc 198 if (i >= WIZ_LIST_MAX_ITEMS - 1) return; //Cannot move further down
andrewboyson 0:9af80a39adcc 199 struct item item;
andrewboyson 0:9af80a39adcc 200 strncpy ( item.name, items[i].name, WIZ_LIST_NAME_LENGTH);
andrewboyson 0:9af80a39adcc 201 item.ondatum = items[i].ondatum;
andrewboyson 0:9af80a39adcc 202 item.onminutes = items[i].onminutes;
andrewboyson 0:9af80a39adcc 203 item.offdatum = items[i].offdatum;
andrewboyson 0:9af80a39adcc 204 item.offminutes = items[i].offminutes;
andrewboyson 0:9af80a39adcc 205
andrewboyson 0:9af80a39adcc 206 WizSchedSetName (i, items[i+1].name);
andrewboyson 0:9af80a39adcc 207 WizSchedSetOnEvent (i, items[i+1].ondatum, items[i+1].onminutes);
andrewboyson 0:9af80a39adcc 208 WizSchedSetOffEvent(i, items[i+1].offdatum, items[i+1].offminutes);
andrewboyson 0:9af80a39adcc 209
andrewboyson 0:9af80a39adcc 210 WizSchedSetName (i+1, item.name );
andrewboyson 0:9af80a39adcc 211 WizSchedSetOnEvent (i+1, item.ondatum, item.onminutes);
andrewboyson 0:9af80a39adcc 212 WizSchedSetOffEvent(i+1, item.offdatum, item.offminutes);
andrewboyson 0:9af80a39adcc 213 }
andrewboyson 0:9af80a39adcc 214 void WizSchedHttp()
andrewboyson 0:9af80a39adcc 215 {
andrewboyson 0:9af80a39adcc 216 int i = 0;
andrewboyson 0:9af80a39adcc 217 while (i < WIZ_SCHED_MAX_ITEMS)
andrewboyson 0:9af80a39adcc 218 {
andrewboyson 0:9af80a39adcc 219 if (items[i].name[0])
andrewboyson 0:9af80a39adcc 220 {
andrewboyson 0:9af80a39adcc 221 HttpAddTextN(items[i].name, WIZ_LIST_NAME_LENGTH);
andrewboyson 0:9af80a39adcc 222 HttpAddChar('\t');
andrewboyson 0:9af80a39adcc 223
andrewboyson 0:9af80a39adcc 224 onOffHttp(items[i].ondatum, items[i].onminutes );
andrewboyson 0:9af80a39adcc 225 HttpAddChar('\t');
andrewboyson 0:9af80a39adcc 226
andrewboyson 0:9af80a39adcc 227 onOffHttp(items[i].offdatum, items[i].offminutes );
andrewboyson 0:9af80a39adcc 228 HttpAddChar('\t');
andrewboyson 0:9af80a39adcc 229
andrewboyson 0:9af80a39adcc 230 int onMinuteUtc = getOnMinuteUtc(i);
andrewboyson 0:9af80a39adcc 231 int offMinuteUtc = getOffMinuteUtc(i);
andrewboyson 0:9af80a39adcc 232 int duration = subtractMinutes(offMinuteUtc, onMinuteUtc);
andrewboyson 5:ec0498d7d2c1 233
andrewboyson 5:ec0498d7d2c1 234
andrewboyson 5:ec0498d7d2c1 235 onOffHttp('L', WizSchedMinutesUtcToLocal(onMinuteUtc));
andrewboyson 0:9af80a39adcc 236 HttpAddChar('\t');
andrewboyson 0:9af80a39adcc 237
andrewboyson 5:ec0498d7d2c1 238 onOffHttp('L', WizSchedMinutesUtcToLocal(offMinuteUtc));
andrewboyson 0:9af80a39adcc 239 HttpAddChar('\t');
andrewboyson 0:9af80a39adcc 240
andrewboyson 0:9af80a39adcc 241 onOffHttp('L', duration);
andrewboyson 0:9af80a39adcc 242 }
andrewboyson 0:9af80a39adcc 243 HttpAddChar('\n');
andrewboyson 0:9af80a39adcc 244 i++;
andrewboyson 0:9af80a39adcc 245 }
andrewboyson 0:9af80a39adcc 246 }
andrewboyson 0:9af80a39adcc 247 static void doSchedule(int i)
andrewboyson 0:9af80a39adcc 248 {
andrewboyson 0:9af80a39adcc 249 if (items[i].name[0] == 0) return;
andrewboyson 0:9af80a39adcc 250
andrewboyson 0:9af80a39adcc 251 int onMinuteUtc = getOnMinuteUtc(i);
andrewboyson 0:9af80a39adcc 252 int offMinuteUtc = getOffMinuteUtc(i);
andrewboyson 0:9af80a39adcc 253
andrewboyson 0:9af80a39adcc 254 //Don't switch on for short or negative durations durations
andrewboyson 0:9af80a39adcc 255 int duration = subtractMinutes(offMinuteUtc, onMinuteUtc);
andrewboyson 0:9af80a39adcc 256 if (duration < MINIMUM_DURATION_MINUTES) return;
andrewboyson 0:9af80a39adcc 257
andrewboyson 0:9af80a39adcc 258 if (onMinuteUtc == minutesTodayUtc)
andrewboyson 0:9af80a39adcc 259 {
andrewboyson 0:9af80a39adcc 260 if (items[i].name[0] == '*')
andrewboyson 0:9af80a39adcc 261 {
andrewboyson 0:9af80a39adcc 262 if (DEBUG) LogTimeF("Wiz schedule - turn all on\r\n");
andrewboyson 0:9af80a39adcc 263 WizListTurnAllOn();
andrewboyson 0:9af80a39adcc 264 }
andrewboyson 0:9af80a39adcc 265 else
andrewboyson 0:9af80a39adcc 266 {
andrewboyson 0:9af80a39adcc 267 if (DEBUG) LogTimeF("Wiz schedule - turn %s on\r\n", items[i].name);
andrewboyson 0:9af80a39adcc 268 WizListTurnRoomOn(items[i].name);
andrewboyson 0:9af80a39adcc 269 }
andrewboyson 0:9af80a39adcc 270 }
andrewboyson 0:9af80a39adcc 271 if (offMinuteUtc == minutesTodayUtc)
andrewboyson 0:9af80a39adcc 272 {
andrewboyson 0:9af80a39adcc 273 if (items[i].name[0] == '*')
andrewboyson 0:9af80a39adcc 274 {
andrewboyson 0:9af80a39adcc 275 if (DEBUG) LogTimeF("Wiz schedule - turn all off\r\n");
andrewboyson 0:9af80a39adcc 276 WizListTurnAllOff();
andrewboyson 0:9af80a39adcc 277 }
andrewboyson 0:9af80a39adcc 278 else
andrewboyson 0:9af80a39adcc 279 {
andrewboyson 0:9af80a39adcc 280 if (DEBUG) LogTimeF("Wiz schedule - turn %s off\r\n", items[i].name);
andrewboyson 0:9af80a39adcc 281 WizListTurnRoomOff(items[i].name);
andrewboyson 0:9af80a39adcc 282 }
andrewboyson 0:9af80a39adcc 283 }
andrewboyson 0:9af80a39adcc 284 }
andrewboyson 0:9af80a39adcc 285
andrewboyson 0:9af80a39adcc 286 void WizSchedMain()
andrewboyson 0:9af80a39adcc 287 {
andrewboyson 0:9af80a39adcc 288 if (!ClkTimeIsSet()) return;
andrewboyson 0:9af80a39adcc 289
andrewboyson 0:9af80a39adcc 290 struct tm tmUtc;
andrewboyson 0:9af80a39adcc 291 ClkNowTmUtc (&tmUtc);
andrewboyson 0:9af80a39adcc 292
andrewboyson 0:9af80a39adcc 293 minutesTodayUtc = tmUtc.tm_hour * 60 + tmUtc.tm_min;
andrewboyson 5:ec0498d7d2c1 294 isDst = tmUtc.tm_isdst;
andrewboyson 0:9af80a39adcc 295
andrewboyson 0:9af80a39adcc 296 minutesSunsetUtc = WizSunSetMinutes();
andrewboyson 0:9af80a39adcc 297 minutesSunriseUtc = WizSunRiseMinutes();
andrewboyson 0:9af80a39adcc 298
andrewboyson 0:9af80a39adcc 299 static int minutesLastScan = -1;
andrewboyson 0:9af80a39adcc 300 if (minutesLastScan == minutesTodayUtc) return; //Start of new minute one-shot
andrewboyson 0:9af80a39adcc 301 minutesLastScan = minutesTodayUtc;
andrewboyson 0:9af80a39adcc 302
andrewboyson 0:9af80a39adcc 303 for (int i = 0; i < WIZ_SCHED_MAX_ITEMS; i++) doSchedule(i);
andrewboyson 0:9af80a39adcc 304 }
andrewboyson 0:9af80a39adcc 305 void WizSchedInit()
andrewboyson 0:9af80a39adcc 306 {
andrewboyson 0:9af80a39adcc 307 for (int i = 0; i < WIZ_SCHED_MAX_ITEMS; i++)
andrewboyson 0:9af80a39adcc 308 {
andrewboyson 0:9af80a39adcc 309 GetWizSchedName (i, items[i].name );
andrewboyson 0:9af80a39adcc 310 GetWizSchedOnDatum (i, &items[i].ondatum );
andrewboyson 0:9af80a39adcc 311 GetWizSchedOnMinutes (i, &items[i].onminutes );
andrewboyson 0:9af80a39adcc 312 GetWizSchedOffDatum (i, &items[i].offdatum );
andrewboyson 0:9af80a39adcc 313 GetWizSchedOffMinutes(i, &items[i].offminutes);
andrewboyson 0:9af80a39adcc 314 }
andrewboyson 0:9af80a39adcc 315 }