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:
		
							parent
							
								
									a584cbb042
								
							
						
					
					
						commit
						254406c802
					
				|  | @ -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); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Gregg
						Gregg