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_FlaggedScaling Dpt(239, 1)
 | 
				
			||||||
#define DPT_CombinedPosition Dpt(240, 800)
 | 
					#define DPT_CombinedPosition Dpt(240, 800)
 | 
				
			||||||
#define DPT_StatusSAB Dpt(241, 800)
 | 
					#define DPT_StatusSAB Dpt(241, 800)
 | 
				
			||||||
 | 
					#define DPT_Colour_RGBW Dpt(251, 600)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Dpt
 | 
					class Dpt
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
				
			|||||||
@ -126,6 +126,9 @@ int KNX_Decode_Value(uint8_t* payload, size_t payload_length, const Dpt& datatyp
 | 
				
			|||||||
        // DPT 239.* - Flagged Scaling
 | 
					        // DPT 239.* - Flagged Scaling
 | 
				
			||||||
        if (datatype.mainGroup == 239 && datatype.subGroup == 1 && datatype.index <= 1)
 | 
					        if (datatype.mainGroup == 239 && datatype.subGroup == 1 && datatype.index <= 1)
 | 
				
			||||||
            return busValueToFlaggedScaling(payload, payload_length, datatype, value);
 | 
					            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;
 | 
					    return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -243,6 +246,9 @@ int KNX_Encode_Value(const KNXValue& value, uint8_t* payload, size_t payload_len
 | 
				
			|||||||
    // DPT 239.* - Flagged Scaling
 | 
					    // DPT 239.* - Flagged Scaling
 | 
				
			||||||
    if (datatype.mainGroup == 239 && datatype.subGroup == 1 && datatype.index <= 1)
 | 
					    if (datatype.mainGroup == 239 && datatype.subGroup == 1 && datatype.index <= 1)
 | 
				
			||||||
        return valueToBusValueFlaggedScaling(value, payload, payload_length, datatype);
 | 
					        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;
 | 
					    return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -801,6 +807,24 @@ int busValueToRGB(const uint8_t* payload, size_t payload_length, const Dpt& data
 | 
				
			|||||||
    return true;
 | 
					    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)
 | 
					int busValueToFlaggedScaling(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ASSERT_PAYLOAD(2);
 | 
					    ASSERT_PAYLOAD(2);
 | 
				
			||||||
@ -1517,6 +1541,26 @@ int valueToBusValueRGB(const KNXValue& value, uint8_t* payload, size_t payload_l
 | 
				
			|||||||
    return true;
 | 
					    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)
 | 
					int valueToBusValueFlaggedScaling(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    switch (datatype.index)
 | 
					    switch (datatype.index)
 | 
				
			||||||
@ -1545,7 +1589,6 @@ int valueToBusValueActiveEnergy(const KNXValue& value, uint8_t* payload, size_t
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        case 0:
 | 
					        case 0:
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					 | 
				
			||||||
            if ((int64_t)value < INT64_C(-2147483648) || (int64_t)value > INT64_C(2147483647))
 | 
					            if ((int64_t)value < INT64_C(-2147483648) || (int64_t)value > INT64_C(2147483647))
 | 
				
			||||||
                return false;
 | 
					                return false;
 | 
				
			||||||
            ENSURE_PAYLOAD(6);
 | 
					            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 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 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 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 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);
 | 
					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 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 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 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 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);
 | 
					int valueToBusValueActiveEnergy(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user