mirror of
				https://github.com/thelsing/knx.git
				synced 2025-10-26 10:26:25 +01:00 
			
		
		
		
	Added support for DPT 251.600 RGBW (#167)
* Added support for DPT 251.600 RGBW * style fix
This commit is contained in:
		
							parent
							
								
									f5feefb0f2
								
							
						
					
					
						commit
						71e8607f43
					
				| @ -357,6 +357,7 @@ | ||||
| #define DPT_FlaggedScaling Dpt(239, 1) | ||||
| #define DPT_CombinedPosition Dpt(240, 800) | ||||
| #define DPT_StatusSAB Dpt(241, 800) | ||||
| #define DPT_Colour_RGBW Dpt(251, 600) | ||||
| 
 | ||||
| class Dpt | ||||
| { | ||||
|  | ||||
| @ -126,6 +126,9 @@ int KNX_Decode_Value(uint8_t* payload, size_t payload_length, const Dpt& datatyp | ||||
|         // DPT 239.* - Flagged Scaling
 | ||||
|         if (datatype.mainGroup == 239 && datatype.subGroup == 1 && datatype.index <= 1) | ||||
|             return busValueToFlaggedScaling(payload, payload_length, datatype, value); | ||||
|         // DPT 251.600 - RGBW
 | ||||
|         if (datatype.mainGroup == 251 && datatype.subGroup == 600 && datatype.index <= 1) | ||||
|             return busValueToRGBW(payload, payload_length, datatype, value); | ||||
|     } | ||||
|     return false; | ||||
| } | ||||
| @ -243,6 +246,9 @@ int KNX_Encode_Value(const KNXValue& value, uint8_t* payload, size_t payload_len | ||||
|     // DPT 239.* - Flagged Scaling
 | ||||
|     if (datatype.mainGroup == 239 && datatype.subGroup == 1 && datatype.index <= 1) | ||||
|         return valueToBusValueFlaggedScaling(value, payload, payload_length, datatype); | ||||
|     // DPT 251.600 - RGBW
 | ||||
|     if (datatype.mainGroup == 251 && datatype.subGroup == 600 && datatype.index <= 1) | ||||
|         return valueToBusValueRGBW(value, payload, payload_length, datatype); | ||||
|     return false; | ||||
| } | ||||
| 
 | ||||
| @ -801,6 +807,24 @@ int busValueToRGB(const uint8_t* payload, size_t payload_length, const Dpt& data | ||||
|     return true; | ||||
| } | ||||
| 
 | ||||
| int busValueToRGBW(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) | ||||
| { | ||||
|     ASSERT_PAYLOAD(6); | ||||
|     switch (datatype.index) { | ||||
|         case 0: // The RGBW value
 | ||||
|             { | ||||
|                 uint32_t rgbw = (unsigned32FromPayload(payload, 0) >> 8) | ||||
|                                 + (unsigned8FromPayload(payload, 3) << 24); | ||||
|                 value = rgbw; | ||||
|             } | ||||
|             return true; | ||||
|         case 1: // The mask bits only
 | ||||
|             value = unsigned8FromPayload(payload,5);  | ||||
|             return true; | ||||
|     } | ||||
|     return false; | ||||
| } | ||||
| 
 | ||||
| int busValueToFlaggedScaling(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) | ||||
| { | ||||
|     ASSERT_PAYLOAD(2); | ||||
| @ -1517,6 +1541,26 @@ int valueToBusValueRGB(const KNXValue& value, uint8_t* payload, size_t payload_l | ||||
|     return true; | ||||
| } | ||||
| 
 | ||||
| int valueToBusValueRGBW(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) | ||||
| { | ||||
|     switch(datatype.index) | ||||
|     { | ||||
|         case 0: // RGBW
 | ||||
|             { | ||||
|                 uint32_t rgbw = (uint32_t)value; | ||||
|                 unsigned16ToPayload(payload, payload_length, 0, rgbw >> 8, 0xffff); // RG
 | ||||
|                 unsigned8ToPayload(payload, payload_length, 2, rgbw, 0xff); // B
 | ||||
|                 unsigned8ToPayload(payload, payload_length, 3, rgbw >> 24, 0xff);  // W
 | ||||
|             } | ||||
|             break; | ||||
|         case 1: // Mask bits
 | ||||
|             unsigned8ToPayload(payload, payload_length, 5, (uint8_t)value, 0xff); | ||||
|             break; | ||||
| 
 | ||||
|     } | ||||
|     return true; | ||||
| } | ||||
| 
 | ||||
| int valueToBusValueFlaggedScaling(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) | ||||
| { | ||||
|     switch (datatype.index) | ||||
| @ -1545,7 +1589,6 @@ int valueToBusValueActiveEnergy(const KNXValue& value, uint8_t* payload, size_t | ||||
|     { | ||||
|         case 0: | ||||
|         { | ||||
| 
 | ||||
|             if ((int64_t)value < INT64_C(-2147483648) || (int64_t)value > INT64_C(2147483647)) | ||||
|                 return false; | ||||
|             ENSURE_PAYLOAD(6); | ||||
|  | ||||
| @ -78,6 +78,7 @@ int busValueToScaling(const uint8_t* payload, size_t payload_length, const Dpt& | ||||
| int busValueToTariff(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); | ||||
| int busValueToLocale(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); | ||||
| int busValueToRGB(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); | ||||
| int busValueToRGBW(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); | ||||
| int busValueToFlaggedScaling(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); | ||||
| int busValueToActiveEnergy(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); | ||||
| 
 | ||||
| @ -116,6 +117,7 @@ int valueToBusValueScaling(const KNXValue& value, uint8_t* payload, size_t paylo | ||||
| int valueToBusValueTariff(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); | ||||
| int valueToBusValueLocale(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); | ||||
| int valueToBusValueRGB(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); | ||||
| int valueToBusValueRGBW(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); | ||||
| int valueToBusValueFlaggedScaling(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); | ||||
| int valueToBusValueActiveEnergy(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user