Updated checkTimedResets()
converted checkedTimeResets() from two-pass logic that first computes the required size of SpanBuf to a single-pass that utilizes vector<SpanBuf> instead. Much cleaner and easier.
This commit is contained in:
parent
4f6f249357
commit
698592b7a3
|
|
@ -51,7 +51,6 @@ struct DEV_AirQualitySensor : Service::AirQualitySensor { // A standalone Ai
|
||||||
airQuality->setVal((int)random(1,6));
|
airQuality->setVal((int)random(1,6));
|
||||||
o3Density->setVal((double)random(200,500));
|
o3Density->setVal((double)random(200,500));
|
||||||
if(!random(2)){
|
if(!random(2)){
|
||||||
Serial.println("HERE\n");
|
|
||||||
no2Density->setVal((double)random(600,800));
|
no2Density->setVal((double)random(600,800));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
63
src/HAP.cpp
63
src/HAP.cpp
|
|
@ -1108,14 +1108,13 @@ void HAPClient::checkEvents(){
|
||||||
sb.characteristic=homeSpan.Events[i]->service->Characteristics[j]; // set characteristic
|
sb.characteristic=homeSpan.Events[i]->service->Characteristics[j]; // set characteristic
|
||||||
sb.status=StatusCode::OK; // set status
|
sb.status=StatusCode::OK; // set status
|
||||||
sb.val=""; // set dummy "val" so that sprintfNotify knows to consider this "update"
|
sb.val=""; // set dummy "val" so that sprintfNotify knows to consider this "update"
|
||||||
|
|
||||||
spanBuf.push_back(sb);
|
spanBuf.push_back(sb);
|
||||||
|
|
||||||
Serial.print("Event for aid=");
|
LOG1("Event Notification for aid=");
|
||||||
Serial.print(homeSpan.Events[i]->service->Characteristics[j]->aid);
|
LOG1(homeSpan.Events[i]->service->Characteristics[j]->aid);
|
||||||
Serial.print(" iid=");
|
LOG1(" iid=");
|
||||||
Serial.print(homeSpan.Events[i]->service->Characteristics[j]->iid);
|
LOG1(homeSpan.Events[i]->service->Characteristics[j]->iid);
|
||||||
Serial.print("\n");
|
LOG1("\n");
|
||||||
|
|
||||||
homeSpan.Events[i]->service->Characteristics[j]->isUpdated=false; // reset isUpdated flag
|
homeSpan.Events[i]->service->Characteristics[j]->isUpdated=false; // reset isUpdated flag
|
||||||
|
|
||||||
|
|
@ -1133,51 +1132,37 @@ void HAPClient::checkEvents(){
|
||||||
|
|
||||||
void HAPClient::checkTimedResets(){
|
void HAPClient::checkTimedResets(){
|
||||||
|
|
||||||
int n=0;
|
unsigned long cTime=millis(); // current time
|
||||||
SpanTimedReset *tReset;
|
vector<SpanBuf> spanBuf; // vector to SpanBuf objects
|
||||||
|
|
||||||
for(int i=0;i<homeSpan.TimedResets.size();i++){ // PASS 1: loop through all defined Timed Resets
|
for(int i=0;i<homeSpan.TimedResets.size();i++){ // loop through all defined Timed Resets
|
||||||
tReset=homeSpan.TimedResets[i];
|
if(!homeSpan.TimedResets[i]->characteristic->value.BOOL){ // characteristic is off
|
||||||
if(!tReset->characteristic->value.BOOL){ // characteristic is off
|
homeSpan.TimedResets[i]->start=false; // ensure timer is not started
|
||||||
tReset->start=false; // ensure timer is not started
|
|
||||||
tReset->trigger=false; // turn off trigger
|
|
||||||
}
|
}
|
||||||
else if(!tReset->start){ // else characteristic is on but timer is not started
|
else if(!homeSpan.TimedResets[i]->start){ // else characteristic is on but timer is not started
|
||||||
tReset->start=true; // start timer
|
homeSpan.TimedResets[i]->start=true; // start timer
|
||||||
tReset->alarmTime=millis()+tReset->waitTime; // set alarm time
|
homeSpan.TimedResets[i]->alarmTime=cTime+homeSpan.TimedResets[i]->waitTime; // set alarm time
|
||||||
}
|
}
|
||||||
else if(millis()>tReset->alarmTime){ // else characteristic is on, timer is started, and timer is expired
|
else if(cTime>homeSpan.TimedResets[i]->alarmTime){ // else characteristic is on, timer is started, and timer is expired
|
||||||
tReset->trigger=true; // set trigger
|
|
||||||
n++; // increment number of characteristics found that need to be turned off
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!n) // nothing to do (either no Timed Reset characteristics, or none that need to be turned off)
|
|
||||||
return;
|
|
||||||
|
|
||||||
SpanBuf pObj[n]; // use a SpanBuf object to load characteristics to be updated
|
|
||||||
n=0; // reset number of tResets found that need to be turned off
|
|
||||||
|
|
||||||
for(int i=0;i<homeSpan.TimedResets.size();i++){ // PASS 2: loop through all defined Timed Resets
|
|
||||||
tReset=homeSpan.TimedResets[i];
|
|
||||||
if(tReset->trigger){ // characteristic is triggered
|
|
||||||
|
|
||||||
LOG1("Resetting aid=");
|
LOG1("Resetting aid=");
|
||||||
LOG1(tReset->characteristic->aid);
|
LOG1(homeSpan.TimedResets[i]->characteristic->aid);
|
||||||
LOG1(" iid=");
|
LOG1(" iid=");
|
||||||
LOG1(tReset->characteristic->iid);
|
LOG1(homeSpan.TimedResets[i]->characteristic->iid);
|
||||||
LOG1("\n");
|
LOG1("\n");
|
||||||
|
|
||||||
memset(&(tReset->characteristic->value),0,sizeof(tReset->characteristic->value));
|
memset(&(homeSpan.TimedResets[i]->characteristic->value),0,sizeof(SpanCharacteristic::UVal));
|
||||||
|
|
||||||
pObj[n].status=StatusCode::OK; // populate pObj
|
SpanBuf sb; // create SpanBuf object
|
||||||
pObj[n].characteristic=tReset->characteristic;
|
sb.characteristic=homeSpan.TimedResets[i]->characteristic; // set characteristic
|
||||||
pObj[n].val=""; // dummy object needed to ensure sprintfNotify knows to consider this "update"
|
sb.status=StatusCode::OK; // set status
|
||||||
n++; // increment number of characteristics found that need to be turned off
|
sb.val=""; // set dummy "val" so that sprintfNotify knows to consider this "update"
|
||||||
|
spanBuf.push_back(sb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
eventNotify(pObj,n); // transmit EVENT Notification for "n" pObj objects
|
if(spanBuf.size()>0) // if updated items are found
|
||||||
|
eventNotify(&spanBuf[0],spanBuf.size()); // transmit EVENT Notifications
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue