diff --git a/examples/Advanced/11-RGB_LED/DEV_LED.h b/examples/Advanced/11-RGB_LED/DEV_LED.h index 6a0d489..7157da9 100644 --- a/examples/Advanced/11-RGB_LED/DEV_LED.h +++ b/examples/Advanced/11-RGB_LED/DEV_LED.h @@ -74,22 +74,23 @@ struct DEV_DimmableLED : Service::LightBulb { // Dimmable LED LOG1(ledPin); LOG1(": Current Power="); LOG1(power->value.BOOL?"true":"false"); + LOG1(power->getVal()?"true":"false"); LOG1(" Current Brightness="); - LOG1(level->value.INT); + LOG1(level->getVal()); if(power->isUpdated){ LOG1(" New Power="); - LOG1(power->newValue.BOOL?"true":"false"); + LOG1(power->getNewVal()?"true":"false"); } if(level->isUpdated){ LOG1(" New Brightness="); - LOG1(level->newValue.INT); + LOG1(level->getNewVal()); } LOG1("\n"); - pwmPin->set(channel,power->newValue.BOOL*level->newValue.INT); + pwmPin->set(channel,power->getNewVal()*level->getNewVal()); return(StatusCode::OK); // return OK status code @@ -138,42 +139,42 @@ struct DEV_RgbLED : Service::LightBulb { // RGB LED (Command Cathode) int v; double h, s, r, g, b; - h=H->value.FLOAT; // get all current values - s=S->value.FLOAT; - v=V->value.INT; - p=power->value.BOOL; + h=H->getVal(); // get all current values + s=S->getVal(); + v=V->getVal(); + p=power->getVal(); char cBuf[128]; sprintf(cBuf,"Updating RGB LED on pins=(%d,%d,%d): ",redPin->getPin(),greenPin->getPin(),bluePin->getPin()); LOG1(cBuf); if(power->isUpdated){ - p=power->newValue.BOOL; - sprintf(cBuf,"Power=%s->%s, ",power->value.BOOL?"true":"false",p?"true":"false"); + p=power->getNewVal(); + sprintf(cBuf,"Power=%s->%s, ",power->getVal()?"true":"false",p?"true":"false"); } else { sprintf(cBuf,"Power=%s, ",p?"true":"false"); } LOG1(cBuf); if(H->isUpdated){ - h=H->newValue.FLOAT; - sprintf(cBuf,"H=%d->%d, ",(int)H->value.FLOAT,(int)h); + h=H->getNewVal(); + sprintf(cBuf,"H=%d->%d, ",(int)H->getVal(),(int)h); } else { sprintf(cBuf,"H=%d, ",(int)h); } LOG1(cBuf); if(S->isUpdated){ - s=S->newValue.FLOAT; - sprintf(cBuf,"S=%d->%d, ",(int)S->value.FLOAT,(int)s); + s=S->getNewVal(); + sprintf(cBuf,"S=%d->%d, ",(int)S->getVal(),(int)s); } else { sprintf(cBuf,"S=%d, ",(int)s); } LOG1(cBuf); if(V->isUpdated){ - v=V->newValue.INT; - sprintf(cBuf,"V=%d->%d ",V->value.INT,v); + v=V->getNewVal(); + sprintf(cBuf,"V=%d->%d ",V->getVal(),v); } else { sprintf(cBuf,"V=%d ",v); } diff --git a/src/HomeSpan.cpp b/src/HomeSpan.cpp index 0a8e4f6..9437b07 100644 --- a/src/HomeSpan.cpp +++ b/src/HomeSpan.cpp @@ -1093,5 +1093,3 @@ SpanRange::SpanRange(int min, int max, int step){ } /////////////////////////////// - - diff --git a/src/HomeSpan.h b/src/HomeSpan.h index 6868e60..a047745 100644 --- a/src/HomeSpan.h +++ b/src/HomeSpan.h @@ -164,6 +164,37 @@ struct SpanCharacteristic{ int sprintfAttributes(char *cBuf, int flags); // prints Characteristic JSON records into buf, according to flags mask; return number of characters printed, excluding null terminator StatusCode loadUpdate(char *val, char *ev); // load updated val/ev from PUT /characteristic JSON request. Return intiial HAP status code (checks to see if characteristic is found, is writable, etc.) + + template T getVal(){return(getValue(value));} // returns UVal value + template T getNewVal(){return(getValue(newValue));} // returns UVal newValue + template T getValue(UVal v); // returns UVal v + +}; + +/////////////////////////////// + +template T SpanCharacteristic::getValue(UVal v){ + + switch(format){ + case BOOL: + return((T) v.BOOL); + case INT: + return((T) v.INT); + case UINT8: + return((T) v.UINT8); + case UINT16: + return((T) v.UINT16); + case UINT32: + return((T) v.UINT32); + case UINT64: + return((T) v.UINT64); + case FLOAT: + return((T) v.FLOAT); + case STRING: + Serial.print("*** ERROR: Can't use getVal() or getNewVal() for string Characteristics.\n\n"); + return(0); + } + }; ///////////////////////////////