Allows my home wiz lights to be timed on and off according to a schedule.
wiz/wiz-list.c@7:3035a540ef65, 2021-06-09 (annotated)
- Committer:
- andrewboyson
- Date:
- Wed Jun 09 09:23:54 2021 +0000
- Revision:
- 7:3035a540ef65
- Parent:
- 3:d33dda272a7f
Changed WizSchedMinutesUtcToLocal function so that local midnight in summer is 00h00 rather than 24h00.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
andrewboyson | 0:9af80a39adcc | 1 | #include <stdint.h> |
andrewboyson | 0:9af80a39adcc | 2 | #include <string.h> |
andrewboyson | 0:9af80a39adcc | 3 | #include <stdlib.h> |
andrewboyson | 0:9af80a39adcc | 4 | |
andrewboyson | 0:9af80a39adcc | 5 | #include "http.h" |
andrewboyson | 0:9af80a39adcc | 6 | #include "mac.h" |
andrewboyson | 0:9af80a39adcc | 7 | #include "clk.h" |
andrewboyson | 0:9af80a39adcc | 8 | #include "clktime.h" |
andrewboyson | 0:9af80a39adcc | 9 | #include "mstimer.h" |
andrewboyson | 0:9af80a39adcc | 10 | #include "log.h" |
andrewboyson | 0:9af80a39adcc | 11 | #include "wiz.h" |
andrewboyson | 0:9af80a39adcc | 12 | #include "wiz-send.h" |
andrewboyson | 0:9af80a39adcc | 13 | #include "wiz-list.h" |
andrewboyson | 0:9af80a39adcc | 14 | #include "settings.h" |
andrewboyson | 0:9af80a39adcc | 15 | |
andrewboyson | 0:9af80a39adcc | 16 | #define TIME_TO_WAIT_FOR_SUCCESS_MS 500 |
andrewboyson | 0:9af80a39adcc | 17 | |
andrewboyson | 3:d33dda272a7f | 18 | #define DEBUG false |
andrewboyson | 0:9af80a39adcc | 19 | |
andrewboyson | 0:9af80a39adcc | 20 | #define DO_NOTHING 0 |
andrewboyson | 0:9af80a39adcc | 21 | #define DO_TURN_ON 1 |
andrewboyson | 0:9af80a39adcc | 22 | #define DO_TURN_OFF 2 |
andrewboyson | 0:9af80a39adcc | 23 | |
andrewboyson | 0:9af80a39adcc | 24 | static uint32_t msTimer = 0; |
andrewboyson | 0:9af80a39adcc | 25 | |
andrewboyson | 0:9af80a39adcc | 26 | struct wiz |
andrewboyson | 0:9af80a39adcc | 27 | { |
andrewboyson | 0:9af80a39adcc | 28 | char mac[6]; //Stored in FRAM |
andrewboyson | 0:9af80a39adcc | 29 | char name[WIZ_LIST_NAME_LENGTH]; //Stored in FRAM |
andrewboyson | 0:9af80a39adcc | 30 | char room[WIZ_LIST_NAME_LENGTH]; //Stored in FRAM |
andrewboyson | 0:9af80a39adcc | 31 | clktime nowtai; |
andrewboyson | 0:9af80a39adcc | 32 | int signal; |
andrewboyson | 0:9af80a39adcc | 33 | bool on; |
andrewboyson | 0:9af80a39adcc | 34 | int dimming; |
andrewboyson | 0:9af80a39adcc | 35 | int todo; |
andrewboyson | 0:9af80a39adcc | 36 | clktime requestMadeTai; |
andrewboyson | 0:9af80a39adcc | 37 | }; |
andrewboyson | 0:9af80a39adcc | 38 | |
andrewboyson | 0:9af80a39adcc | 39 | struct wiz items[WIZ_LIST_MAX_ITEMS]; |
andrewboyson | 0:9af80a39adcc | 40 | |
andrewboyson | 0:9af80a39adcc | 41 | int WizListGetIndexFromMac(char* mac) |
andrewboyson | 0:9af80a39adcc | 42 | { |
andrewboyson | 0:9af80a39adcc | 43 | if (!mac) return -1; |
andrewboyson | 0:9af80a39adcc | 44 | if (MacIsEmpty(mac)) return -1; |
andrewboyson | 0:9af80a39adcc | 45 | int i = 0; |
andrewboyson | 0:9af80a39adcc | 46 | while (i < WIZ_LIST_MAX_ITEMS) |
andrewboyson | 0:9af80a39adcc | 47 | { |
andrewboyson | 0:9af80a39adcc | 48 | if (MacIsSame(items[i].mac, mac)) return i; |
andrewboyson | 0:9af80a39adcc | 49 | i++; |
andrewboyson | 0:9af80a39adcc | 50 | } |
andrewboyson | 0:9af80a39adcc | 51 | return -1; |
andrewboyson | 0:9af80a39adcc | 52 | } |
andrewboyson | 0:9af80a39adcc | 53 | int getIndexFirstEmpty() |
andrewboyson | 0:9af80a39adcc | 54 | { |
andrewboyson | 0:9af80a39adcc | 55 | int i = 0; |
andrewboyson | 0:9af80a39adcc | 56 | while (i < WIZ_LIST_MAX_ITEMS) |
andrewboyson | 0:9af80a39adcc | 57 | { |
andrewboyson | 0:9af80a39adcc | 58 | if (MacIsEmpty(items[i].mac)) return i; |
andrewboyson | 0:9af80a39adcc | 59 | i++; |
andrewboyson | 0:9af80a39adcc | 60 | } |
andrewboyson | 0:9af80a39adcc | 61 | return -1; |
andrewboyson | 0:9af80a39adcc | 62 | } |
andrewboyson | 0:9af80a39adcc | 63 | char* WizListNameFromMac(char* mac) //Be careful that this returns NUL if not found and that the string returned may not be terminated if there is no room |
andrewboyson | 0:9af80a39adcc | 64 | { |
andrewboyson | 0:9af80a39adcc | 65 | if (!mac) return 0; |
andrewboyson | 0:9af80a39adcc | 66 | if (MacIsEmpty(mac)) return 0; |
andrewboyson | 0:9af80a39adcc | 67 | int i = 0; |
andrewboyson | 0:9af80a39adcc | 68 | while (i < WIZ_LIST_MAX_ITEMS) |
andrewboyson | 0:9af80a39adcc | 69 | { |
andrewboyson | 0:9af80a39adcc | 70 | if (MacIsSame(mac, items[i].mac)) return items[i].name; |
andrewboyson | 0:9af80a39adcc | 71 | i++; |
andrewboyson | 0:9af80a39adcc | 72 | } |
andrewboyson | 0:9af80a39adcc | 73 | return 0; |
andrewboyson | 0:9af80a39adcc | 74 | } |
andrewboyson | 0:9af80a39adcc | 75 | char* WizListNameToMac(char* name) //be careful that this returns NUL if not found |
andrewboyson | 0:9af80a39adcc | 76 | { |
andrewboyson | 0:9af80a39adcc | 77 | if (!name) return 0; |
andrewboyson | 0:9af80a39adcc | 78 | if (name[0] == 0) return 0; |
andrewboyson | 0:9af80a39adcc | 79 | int i = 0; |
andrewboyson | 0:9af80a39adcc | 80 | while (i < WIZ_LIST_MAX_ITEMS) |
andrewboyson | 0:9af80a39adcc | 81 | { |
andrewboyson | 0:9af80a39adcc | 82 | if (strncmp(name, items[i].name, WIZ_LIST_NAME_LENGTH) == 0) return items[i].mac; |
andrewboyson | 0:9af80a39adcc | 83 | i++; |
andrewboyson | 0:9af80a39adcc | 84 | } |
andrewboyson | 0:9af80a39adcc | 85 | return 0; |
andrewboyson | 0:9af80a39adcc | 86 | } |
andrewboyson | 0:9af80a39adcc | 87 | |
andrewboyson | 0:9af80a39adcc | 88 | void WizListSetMac (int i, char* mac ) { MacCopy(items[i].mac, mac); SetWizListMac (i, mac ); } |
andrewboyson | 0:9af80a39adcc | 89 | void WizListGetMac (int i, char* mac ) { MacCopy(mac, items[i].mac); } |
andrewboyson | 0:9af80a39adcc | 90 | void WizListSetName(int i, char* name) { strncpy(items[i].name, name, WIZ_LIST_NAME_LENGTH); SetWizListName(i, name); } |
andrewboyson | 0:9af80a39adcc | 91 | void WizListGetName(int i, char* name) { strncpy(name, items[i].name, WIZ_LIST_NAME_LENGTH); } |
andrewboyson | 0:9af80a39adcc | 92 | void WizListSetRoom(int i, char* room) { strncpy(items[i].room, room, WIZ_LIST_NAME_LENGTH); SetWizListRoom(i, room); } |
andrewboyson | 0:9af80a39adcc | 93 | void WizListGetRoom(int i, char* room) { strncpy(room, items[i].room, WIZ_LIST_NAME_LENGTH); } |
andrewboyson | 0:9af80a39adcc | 94 | |
andrewboyson | 0:9af80a39adcc | 95 | |
andrewboyson | 0:9af80a39adcc | 96 | void WizListStatusAdd(char* mac, char* rssi, char* state, char* sceneId, char* dimming) |
andrewboyson | 0:9af80a39adcc | 97 | { |
andrewboyson | 0:9af80a39adcc | 98 | int i = WizListGetIndexFromMac(mac); |
andrewboyson | 0:9af80a39adcc | 99 | if (i < 0) |
andrewboyson | 0:9af80a39adcc | 100 | { |
andrewboyson | 0:9af80a39adcc | 101 | i = getIndexFirstEmpty(); |
andrewboyson | 0:9af80a39adcc | 102 | if (i < 0) |
andrewboyson | 0:9af80a39adcc | 103 | { |
andrewboyson | 0:9af80a39adcc | 104 | LogTimeF("WIZ - no more spaces in lights list\r\n"); |
andrewboyson | 0:9af80a39adcc | 105 | return; |
andrewboyson | 0:9af80a39adcc | 106 | } |
andrewboyson | 0:9af80a39adcc | 107 | WizListSetMac(i, mac); |
andrewboyson | 0:9af80a39adcc | 108 | } |
andrewboyson | 0:9af80a39adcc | 109 | items[i].nowtai = ClkNowTai(); |
andrewboyson | 0:9af80a39adcc | 110 | items[i].signal = atoi(rssi); |
andrewboyson | 0:9af80a39adcc | 111 | items[i].on = state[0] == 't'; |
andrewboyson | 0:9af80a39adcc | 112 | items[i].dimming = atoi(dimming); |
andrewboyson | 0:9af80a39adcc | 113 | } |
andrewboyson | 0:9af80a39adcc | 114 | void WizListMoveUp(int i) |
andrewboyson | 0:9af80a39adcc | 115 | { |
andrewboyson | 0:9af80a39adcc | 116 | if (i <= 0) return; //Cannot move further up |
andrewboyson | 0:9af80a39adcc | 117 | struct wiz item; |
andrewboyson | 0:9af80a39adcc | 118 | MacCopy(item.mac, items[i].mac); |
andrewboyson | 0:9af80a39adcc | 119 | strncpy(item.name, items[i].name, WIZ_LIST_NAME_LENGTH); |
andrewboyson | 0:9af80a39adcc | 120 | strncpy(item.room, items[i].room, WIZ_LIST_NAME_LENGTH); |
andrewboyson | 0:9af80a39adcc | 121 | item.nowtai = items[i].nowtai; |
andrewboyson | 0:9af80a39adcc | 122 | item.signal = items[i].signal; |
andrewboyson | 0:9af80a39adcc | 123 | item.on = items[i].on; |
andrewboyson | 0:9af80a39adcc | 124 | item.dimming = items[i].dimming; |
andrewboyson | 0:9af80a39adcc | 125 | |
andrewboyson | 0:9af80a39adcc | 126 | WizListSetMac (i, items[i-1].mac ); |
andrewboyson | 0:9af80a39adcc | 127 | WizListSetName(i, items[i-1].name); |
andrewboyson | 0:9af80a39adcc | 128 | WizListSetRoom(i, items[i-1].room); |
andrewboyson | 0:9af80a39adcc | 129 | items[i].nowtai = items[i-1].nowtai; |
andrewboyson | 0:9af80a39adcc | 130 | items[i].signal = items[i-1].signal; |
andrewboyson | 0:9af80a39adcc | 131 | items[i].on = items[i-1].on; |
andrewboyson | 0:9af80a39adcc | 132 | items[i].dimming = items[i-1].dimming; |
andrewboyson | 0:9af80a39adcc | 133 | |
andrewboyson | 0:9af80a39adcc | 134 | WizListSetMac (i-1, item.mac ); |
andrewboyson | 0:9af80a39adcc | 135 | WizListSetName(i-1, item.name); |
andrewboyson | 0:9af80a39adcc | 136 | WizListSetRoom(i-1, item.room); |
andrewboyson | 0:9af80a39adcc | 137 | items[i-1].nowtai = item.nowtai; |
andrewboyson | 0:9af80a39adcc | 138 | items[i-1].signal = item.signal; |
andrewboyson | 0:9af80a39adcc | 139 | items[i-1].on = item.on; |
andrewboyson | 0:9af80a39adcc | 140 | items[i-1].dimming = item.dimming; |
andrewboyson | 0:9af80a39adcc | 141 | } |
andrewboyson | 0:9af80a39adcc | 142 | void WizListMoveDown(int i) |
andrewboyson | 0:9af80a39adcc | 143 | { |
andrewboyson | 0:9af80a39adcc | 144 | if (i >= WIZ_LIST_MAX_ITEMS - 1) return; //Cannot move further down |
andrewboyson | 0:9af80a39adcc | 145 | struct wiz item; |
andrewboyson | 0:9af80a39adcc | 146 | MacCopy(item.mac, items[i].mac); |
andrewboyson | 0:9af80a39adcc | 147 | strncpy(item.name, items[i].name, WIZ_LIST_NAME_LENGTH); |
andrewboyson | 0:9af80a39adcc | 148 | strncpy(item.room, items[i].room, WIZ_LIST_NAME_LENGTH); |
andrewboyson | 0:9af80a39adcc | 149 | item.nowtai = items[i].nowtai; |
andrewboyson | 0:9af80a39adcc | 150 | item.signal = items[i].signal; |
andrewboyson | 0:9af80a39adcc | 151 | item.on = items[i].on; |
andrewboyson | 0:9af80a39adcc | 152 | item.dimming = items[i].dimming; |
andrewboyson | 0:9af80a39adcc | 153 | |
andrewboyson | 0:9af80a39adcc | 154 | WizListSetMac (i, items[i+1].mac); |
andrewboyson | 0:9af80a39adcc | 155 | WizListSetName(i, items[i+1].name); |
andrewboyson | 0:9af80a39adcc | 156 | WizListSetRoom(i, items[i+1].room); |
andrewboyson | 0:9af80a39adcc | 157 | items[i].nowtai = items[i+1].nowtai; |
andrewboyson | 0:9af80a39adcc | 158 | items[i].signal = items[i+1].signal; |
andrewboyson | 0:9af80a39adcc | 159 | items[i].on = items[i+1].on; |
andrewboyson | 0:9af80a39adcc | 160 | items[i].dimming = items[i+1].dimming; |
andrewboyson | 0:9af80a39adcc | 161 | |
andrewboyson | 0:9af80a39adcc | 162 | WizListSetMac (i+1, item.mac); |
andrewboyson | 0:9af80a39adcc | 163 | WizListSetName(i+1, item.name); |
andrewboyson | 0:9af80a39adcc | 164 | WizListSetRoom(i+1, item.room); |
andrewboyson | 0:9af80a39adcc | 165 | items[i+1].nowtai = item.nowtai; |
andrewboyson | 0:9af80a39adcc | 166 | items[i+1].signal = item.signal; |
andrewboyson | 0:9af80a39adcc | 167 | items[i+1].on = item.on; |
andrewboyson | 0:9af80a39adcc | 168 | items[i+1].dimming = item.dimming; |
andrewboyson | 0:9af80a39adcc | 169 | } |
andrewboyson | 0:9af80a39adcc | 170 | void WizListHttp() |
andrewboyson | 0:9af80a39adcc | 171 | { |
andrewboyson | 0:9af80a39adcc | 172 | int i = 0; |
andrewboyson | 0:9af80a39adcc | 173 | while (i < WIZ_LIST_MAX_ITEMS) |
andrewboyson | 0:9af80a39adcc | 174 | { |
andrewboyson | 0:9af80a39adcc | 175 | if (!MacIsEmpty(items[i].mac)) |
andrewboyson | 0:9af80a39adcc | 176 | { |
andrewboyson | 0:9af80a39adcc | 177 | MacHttp ( items[i].mac ); HttpAddChar('\t'); //MAC |
andrewboyson | 0:9af80a39adcc | 178 | HttpAddTextN( items[i].name, WIZ_LIST_NAME_LENGTH); HttpAddChar('\t'); //Name |
andrewboyson | 0:9af80a39adcc | 179 | HttpAddTextN( items[i].room, WIZ_LIST_NAME_LENGTH); HttpAddChar('\t'); //Room |
andrewboyson | 0:9af80a39adcc | 180 | |
andrewboyson | 0:9af80a39adcc | 181 | if (items[i].nowtai) |
andrewboyson | 0:9af80a39adcc | 182 | { |
andrewboyson | 0:9af80a39adcc | 183 | clktime taiDiff = ClkNowTai() - items[i].nowtai; |
andrewboyson | 0:9af80a39adcc | 184 | int seconds = taiDiff >> CLK_TIME_ONE_SECOND_SHIFT; |
andrewboyson | 0:9af80a39adcc | 185 | HttpAddF("%d", seconds); |
andrewboyson | 0:9af80a39adcc | 186 | } |
andrewboyson | 0:9af80a39adcc | 187 | HttpAddChar('\t'); //Seconds since last status received |
andrewboyson | 0:9af80a39adcc | 188 | |
andrewboyson | 0:9af80a39adcc | 189 | HttpAddF("%d", items[i].signal ); HttpAddChar('\t'); //-127 to 0 |
andrewboyson | 0:9af80a39adcc | 190 | HttpAddF("%d", items[i].on ); HttpAddChar('\t'); //1 or 0 |
andrewboyson | 0:9af80a39adcc | 191 | HttpAddF("%d", items[i].dimming ); //0 to 100 |
andrewboyson | 0:9af80a39adcc | 192 | } |
andrewboyson | 0:9af80a39adcc | 193 | HttpAddChar('\n'); |
andrewboyson | 0:9af80a39adcc | 194 | i++; |
andrewboyson | 0:9af80a39adcc | 195 | } |
andrewboyson | 0:9af80a39adcc | 196 | } |
andrewboyson | 0:9af80a39adcc | 197 | void WizListInit() |
andrewboyson | 0:9af80a39adcc | 198 | { |
andrewboyson | 0:9af80a39adcc | 199 | msTimer = MsTimerCount; |
andrewboyson | 0:9af80a39adcc | 200 | for (int i = 0; i < WIZ_LIST_MAX_ITEMS; i++) |
andrewboyson | 0:9af80a39adcc | 201 | { |
andrewboyson | 0:9af80a39adcc | 202 | GetWizListMac (i, items[i].mac ); |
andrewboyson | 0:9af80a39adcc | 203 | GetWizListName(i, items[i].name); |
andrewboyson | 0:9af80a39adcc | 204 | GetWizListRoom(i, items[i].room); |
andrewboyson | 0:9af80a39adcc | 205 | items[i].nowtai = 0; |
andrewboyson | 0:9af80a39adcc | 206 | items[i].signal = 0; |
andrewboyson | 0:9af80a39adcc | 207 | items[i].on = 0; |
andrewboyson | 0:9af80a39adcc | 208 | items[i].dimming = 0; |
andrewboyson | 0:9af80a39adcc | 209 | items[i].todo = 0; |
andrewboyson | 0:9af80a39adcc | 210 | items[i].requestMadeTai = 0; |
andrewboyson | 0:9af80a39adcc | 211 | } |
andrewboyson | 0:9af80a39adcc | 212 | } |
andrewboyson | 0:9af80a39adcc | 213 | static void log(char* mac, char* text) |
andrewboyson | 0:9af80a39adcc | 214 | { |
andrewboyson | 3:d33dda272a7f | 215 | if (!DEBUG) return; |
andrewboyson | 0:9af80a39adcc | 216 | LogTimeF("Wiz"); |
andrewboyson | 0:9af80a39adcc | 217 | if (mac) |
andrewboyson | 0:9af80a39adcc | 218 | { |
andrewboyson | 0:9af80a39adcc | 219 | Log(" "); |
andrewboyson | 0:9af80a39adcc | 220 | MacLog(mac); |
andrewboyson | 0:9af80a39adcc | 221 | } |
andrewboyson | 0:9af80a39adcc | 222 | Log(" - "); |
andrewboyson | 0:9af80a39adcc | 223 | Log(text); |
andrewboyson | 0:9af80a39adcc | 224 | } |
andrewboyson | 0:9af80a39adcc | 225 | |
andrewboyson | 0:9af80a39adcc | 226 | void WizListMain() |
andrewboyson | 0:9af80a39adcc | 227 | { |
andrewboyson | 0:9af80a39adcc | 228 | if (WizSendBusy()) return; |
andrewboyson | 0:9af80a39adcc | 229 | if (MsTimerRepetitive(&msTimer, 1000)) |
andrewboyson | 0:9af80a39adcc | 230 | { |
andrewboyson | 0:9af80a39adcc | 231 | static int seconds = 0; |
andrewboyson | 0:9af80a39adcc | 232 | seconds++; |
andrewboyson | 0:9af80a39adcc | 233 | if (seconds > 20) |
andrewboyson | 0:9af80a39adcc | 234 | { |
andrewboyson | 0:9af80a39adcc | 235 | WizSendRegister(); //This will set WizSendBusy |
andrewboyson | 0:9af80a39adcc | 236 | seconds = 0; |
andrewboyson | 0:9af80a39adcc | 237 | return; |
andrewboyson | 0:9af80a39adcc | 238 | } |
andrewboyson | 0:9af80a39adcc | 239 | } |
andrewboyson | 0:9af80a39adcc | 240 | |
andrewboyson | 0:9af80a39adcc | 241 | static int i = -1; |
andrewboyson | 0:9af80a39adcc | 242 | i++; |
andrewboyson | 0:9af80a39adcc | 243 | if (i >= WIZ_LIST_MAX_ITEMS) i = 0; |
andrewboyson | 0:9af80a39adcc | 244 | |
andrewboyson | 0:9af80a39adcc | 245 | if (items[i].todo && !MacIsEmpty(items[i].mac)) |
andrewboyson | 0:9af80a39adcc | 246 | { |
andrewboyson | 0:9af80a39adcc | 247 | clktime taiDiff = ClkNowTai() - items[i].requestMadeTai; |
andrewboyson | 0:9af80a39adcc | 248 | int ms = taiDiff >> (CLK_TIME_ONE_SECOND_SHIFT - 10); //1 ==> 1 /1024 rather than 1/1000 seconds but its good enough |
andrewboyson | 0:9af80a39adcc | 249 | if (!items[i].requestMadeTai || ms > TIME_TO_WAIT_FOR_SUCCESS_MS) |
andrewboyson | 0:9af80a39adcc | 250 | { |
andrewboyson | 0:9af80a39adcc | 251 | switch(items[i].todo) |
andrewboyson | 0:9af80a39adcc | 252 | { |
andrewboyson | 0:9af80a39adcc | 253 | case DO_TURN_ON: |
andrewboyson | 0:9af80a39adcc | 254 | if (!items[i].requestMadeTai) log(items[i].mac, "Turn on\r\n"); |
andrewboyson | 0:9af80a39adcc | 255 | else log(items[i].mac, "Turn on repeat\r\n"); |
andrewboyson | 0:9af80a39adcc | 256 | WizSendTurnOneOn(items[i].mac); |
andrewboyson | 0:9af80a39adcc | 257 | items[i].requestMadeTai = ClkNowTai(); |
andrewboyson | 0:9af80a39adcc | 258 | break; |
andrewboyson | 0:9af80a39adcc | 259 | case DO_TURN_OFF: |
andrewboyson | 0:9af80a39adcc | 260 | if (!items[i].requestMadeTai) log(items[i].mac, "Turn off\r\n"); |
andrewboyson | 0:9af80a39adcc | 261 | else log(items[i].mac, "Turn off repeat\r\n"); |
andrewboyson | 0:9af80a39adcc | 262 | WizSendTurnOneOff(items[i].mac); |
andrewboyson | 0:9af80a39adcc | 263 | items[i].requestMadeTai = ClkNowTai(); |
andrewboyson | 0:9af80a39adcc | 264 | break; |
andrewboyson | 0:9af80a39adcc | 265 | } |
andrewboyson | 0:9af80a39adcc | 266 | } |
andrewboyson | 0:9af80a39adcc | 267 | } |
andrewboyson | 0:9af80a39adcc | 268 | } |
andrewboyson | 0:9af80a39adcc | 269 | void WizListTurnIndexOn(int i) |
andrewboyson | 0:9af80a39adcc | 270 | { |
andrewboyson | 0:9af80a39adcc | 271 | if (MacIsEmpty(items[i].mac)) return; |
andrewboyson | 0:9af80a39adcc | 272 | items[i].todo = DO_TURN_ON; |
andrewboyson | 0:9af80a39adcc | 273 | items[i].requestMadeTai = 0; |
andrewboyson | 0:9af80a39adcc | 274 | } |
andrewboyson | 0:9af80a39adcc | 275 | void WizListTurnIndexOff(int i) |
andrewboyson | 0:9af80a39adcc | 276 | { |
andrewboyson | 0:9af80a39adcc | 277 | if (MacIsEmpty(items[i].mac)) return; |
andrewboyson | 0:9af80a39adcc | 278 | items[i].todo = DO_TURN_OFF; |
andrewboyson | 0:9af80a39adcc | 279 | items[i].requestMadeTai = 0; |
andrewboyson | 0:9af80a39adcc | 280 | } |
andrewboyson | 0:9af80a39adcc | 281 | void WizListTurnMacOn (char* mac) |
andrewboyson | 0:9af80a39adcc | 282 | { |
andrewboyson | 0:9af80a39adcc | 283 | if (!mac) return; |
andrewboyson | 0:9af80a39adcc | 284 | if (MacIsEmpty(mac)) return; |
andrewboyson | 0:9af80a39adcc | 285 | int i = WizListGetIndexFromMac(mac); |
andrewboyson | 0:9af80a39adcc | 286 | if (i < 0) return; |
andrewboyson | 0:9af80a39adcc | 287 | items[i].todo = DO_TURN_ON; |
andrewboyson | 0:9af80a39adcc | 288 | items[i].requestMadeTai = 0; |
andrewboyson | 0:9af80a39adcc | 289 | } |
andrewboyson | 0:9af80a39adcc | 290 | void WizListTurnMacOff(char* mac) |
andrewboyson | 0:9af80a39adcc | 291 | { |
andrewboyson | 0:9af80a39adcc | 292 | if (!mac) return; |
andrewboyson | 0:9af80a39adcc | 293 | if (MacIsEmpty(mac)) return; |
andrewboyson | 0:9af80a39adcc | 294 | int i = WizListGetIndexFromMac(mac); |
andrewboyson | 0:9af80a39adcc | 295 | if (i < 0) return; |
andrewboyson | 0:9af80a39adcc | 296 | items[i].todo = DO_TURN_OFF; |
andrewboyson | 0:9af80a39adcc | 297 | items[i].requestMadeTai = 0; |
andrewboyson | 0:9af80a39adcc | 298 | } |
andrewboyson | 0:9af80a39adcc | 299 | void WizListTurnAllOn() |
andrewboyson | 0:9af80a39adcc | 300 | { |
andrewboyson | 0:9af80a39adcc | 301 | for (int i = 0; i < WIZ_LIST_MAX_ITEMS; i++) |
andrewboyson | 0:9af80a39adcc | 302 | { |
andrewboyson | 0:9af80a39adcc | 303 | if (!MacIsEmpty(items[i].mac)) |
andrewboyson | 0:9af80a39adcc | 304 | { |
andrewboyson | 0:9af80a39adcc | 305 | items[i].todo = DO_TURN_ON; |
andrewboyson | 0:9af80a39adcc | 306 | items[i].requestMadeTai = ClkNowTai(); |
andrewboyson | 0:9af80a39adcc | 307 | } |
andrewboyson | 0:9af80a39adcc | 308 | } |
andrewboyson | 0:9af80a39adcc | 309 | WizSendTurnAllOn(); |
andrewboyson | 0:9af80a39adcc | 310 | log(0, "Turn all on\r\n"); |
andrewboyson | 0:9af80a39adcc | 311 | } |
andrewboyson | 0:9af80a39adcc | 312 | void WizListTurnAllOff( ) |
andrewboyson | 0:9af80a39adcc | 313 | { |
andrewboyson | 0:9af80a39adcc | 314 | for (int i = 0; i < WIZ_LIST_MAX_ITEMS; i++) |
andrewboyson | 0:9af80a39adcc | 315 | { |
andrewboyson | 0:9af80a39adcc | 316 | if (!MacIsEmpty(items[i].mac)) |
andrewboyson | 0:9af80a39adcc | 317 | { |
andrewboyson | 0:9af80a39adcc | 318 | items[i].todo = DO_TURN_OFF; |
andrewboyson | 0:9af80a39adcc | 319 | items[i].requestMadeTai = ClkNowTai(); |
andrewboyson | 0:9af80a39adcc | 320 | } |
andrewboyson | 0:9af80a39adcc | 321 | } |
andrewboyson | 0:9af80a39adcc | 322 | WizSendTurnAllOff(); |
andrewboyson | 0:9af80a39adcc | 323 | log(0, "Turn all off\r\n"); |
andrewboyson | 0:9af80a39adcc | 324 | } |
andrewboyson | 0:9af80a39adcc | 325 | void WizListTurnRoomOn(char* room) |
andrewboyson | 0:9af80a39adcc | 326 | { |
andrewboyson | 0:9af80a39adcc | 327 | for (int i = 0; i < WIZ_LIST_MAX_ITEMS; i++) |
andrewboyson | 0:9af80a39adcc | 328 | { |
andrewboyson | 0:9af80a39adcc | 329 | if (!MacIsEmpty(items[i].mac) && strncmp(items[i].room, room, WIZ_LIST_NAME_LENGTH) == 0) |
andrewboyson | 0:9af80a39adcc | 330 | { |
andrewboyson | 0:9af80a39adcc | 331 | WizListTurnMacOn(items[i].mac); |
andrewboyson | 0:9af80a39adcc | 332 | } |
andrewboyson | 0:9af80a39adcc | 333 | } |
andrewboyson | 0:9af80a39adcc | 334 | } |
andrewboyson | 0:9af80a39adcc | 335 | void WizListTurnRoomOff(char* room) |
andrewboyson | 0:9af80a39adcc | 336 | { |
andrewboyson | 0:9af80a39adcc | 337 | for (int i = 0; i < WIZ_LIST_MAX_ITEMS; i++) |
andrewboyson | 0:9af80a39adcc | 338 | { |
andrewboyson | 0:9af80a39adcc | 339 | if (!MacIsEmpty(items[i].mac) && strncmp(items[i].room, room, WIZ_LIST_NAME_LENGTH) == 0) |
andrewboyson | 0:9af80a39adcc | 340 | { |
andrewboyson | 0:9af80a39adcc | 341 | WizListTurnMacOff(items[i].mac); |
andrewboyson | 0:9af80a39adcc | 342 | } |
andrewboyson | 0:9af80a39adcc | 343 | } |
andrewboyson | 0:9af80a39adcc | 344 | } |
andrewboyson | 0:9af80a39adcc | 345 | void WizListReceivedSuccess(char* mac) |
andrewboyson | 0:9af80a39adcc | 346 | { |
andrewboyson | 0:9af80a39adcc | 347 | if (!mac) return; |
andrewboyson | 0:9af80a39adcc | 348 | int i = WizListGetIndexFromMac(mac); |
andrewboyson | 0:9af80a39adcc | 349 | if (i < 0) return; |
andrewboyson | 0:9af80a39adcc | 350 | switch (items[i].todo) |
andrewboyson | 0:9af80a39adcc | 351 | { |
andrewboyson | 0:9af80a39adcc | 352 | case DO_TURN_ON: |
andrewboyson | 0:9af80a39adcc | 353 | items[i].on = true; |
andrewboyson | 0:9af80a39adcc | 354 | log(items[i].mac, "Turn on success\r\n"); |
andrewboyson | 0:9af80a39adcc | 355 | break; |
andrewboyson | 0:9af80a39adcc | 356 | case DO_TURN_OFF: |
andrewboyson | 0:9af80a39adcc | 357 | items[i].on = false; |
andrewboyson | 0:9af80a39adcc | 358 | log(items[i].mac, "Turn off success\r\n"); |
andrewboyson | 0:9af80a39adcc | 359 | break; |
andrewboyson | 0:9af80a39adcc | 360 | } |
andrewboyson | 0:9af80a39adcc | 361 | items[i].todo = DO_NOTHING; |
andrewboyson | 0:9af80a39adcc | 362 | items[i].requestMadeTai = 0; |
andrewboyson | 0:9af80a39adcc | 363 | } |