Added more error-checking to SpanCharacteristic

Checks to ensure that: (A) Characteristic is allowable (i.e. either required or optional) for the defined Service, and (B) Characteristic has not already been instantiated for the defined Service.
This commit is contained in:
Gregg 2020-10-28 07:31:58 -05:00
parent a584cbb042
commit 254406c802
1 changed files with 25 additions and 1 deletions

View File

@ -103,7 +103,8 @@ void Span::poll() {
Serial.print(displayName); Serial.print(displayName);
Serial.print(" is READY!\n\n"); Serial.print(" is READY!\n\n");
isInitialized=true; isInitialized=true;
}
} // isInitialized
if(strlen(network.wifiData.ssid)>0 && WiFi.status()!=WL_CONNECTED){ if(strlen(network.wifiData.ssid)>0 && WiFi.status()!=WL_CONNECTED){
initWifi(); initWifi();
@ -1109,6 +1110,29 @@ SpanCharacteristic::SpanCharacteristic(char *type, uint8_t perms, char *hapName)
return; return;
} }
char valid=false;
for(int i=0; !valid && i<homeSpan.Accessories.back()->Services.back()->req.size(); i++)
valid=!strcmp(type,homeSpan.Accessories.back()->Services.back()->req[i]->id);
for(int i=0; !valid && i<homeSpan.Accessories.back()->Services.back()->opt.size(); i++)
valid=!strcmp(type,homeSpan.Accessories.back()->Services.back()->opt[i]->id);
if(!valid){
homeSpan.configLog+=" *** ERROR! Service does not support this Characteristic. ***";
homeSpan.nFatalErrors++;
}
valid=true;
for(int i=0; valid && i<homeSpan.Accessories.back()->Services.back()->Characteristics.size(); i++)
valid=strcmp(type,homeSpan.Accessories.back()->Services.back()->Characteristics[i]->type);
if(!valid){
homeSpan.configLog+=" *** ERROR! Characteristic already defined for this Service. ***";
homeSpan.nFatalErrors++;
}
homeSpan.configLog+="\n"; homeSpan.configLog+="\n";
homeSpan.Accessories.back()->Services.back()->Characteristics.push_back(this); homeSpan.Accessories.back()->Services.back()->Characteristics.push_back(this);
iid=++(homeSpan.Accessories.back()->iidCount); iid=++(homeSpan.Accessories.back()->iidCount);