mirror of
				https://github.com/thelsing/knx.git
				synced 2025-10-26 10:26:25 +01:00 
			
		
		
		
	Update dptconvert.cpp
Not verified.
This commit is contained in:
		
							parent
							
								
									8017c8b9c3
								
							
						
					
					
						commit
						7fd938f1c8
					
				@ -1713,9 +1713,11 @@ double float16FromPayload(const uint8_t* payload, int index)
 | 
			
		||||
{
 | 
			
		||||
    uint16_t mantissa = unsigned16FromPayload(payload, index) & 0x87FF;
 | 
			
		||||
    if (mantissa & 0x8000)
 | 
			
		||||
        return ((~mantissa & 0x07FF) + 1.0) * -0.01 * (1 << ((payload[index] >> 3) & 0x0F));
 | 
			
		||||
 | 
			
		||||
    return mantissa * 0.01 * (1 << ((payload[index] >> 3) & 0x0F));
 | 
			
		||||
        //return ((~mantissa & 0x07FF) + 1.0) * -0.01 * (1 << ((payload[index] >> 3) & 0x0F));
 | 
			
		||||
        return ((~mantissa & 0x07FF) + 1.0) * -0.01 * pow(2.0, ((payload[index] >> 3) & 0x0F)));
 | 
			
		||||
    
 | 
			
		||||
    //return mantissa * 0.01 * (1 << ((payload[index] >> 3) & 0x0F));
 | 
			
		||||
    return mantissa * 0.01 * pow(2.0, ((payload[index] >> 3) & 0x0F)));
 | 
			
		||||
}
 | 
			
		||||
float float32FromPayload(const uint8_t* payload, int index)
 | 
			
		||||
{
 | 
			
		||||
@ -1783,9 +1785,9 @@ void signed32ToPayload(uint8_t* payload, int payload_length, int index, int32_t
 | 
			
		||||
    payload[index + 2] = (payload[index + 2] & (~mask >> 8)) | ((value >> 8) & (mask >> 8));
 | 
			
		||||
    payload[index + 3] = (payload[index + 3] & ~mask) | (value & mask);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void float16ToPayload(uint8_t* payload, int payload_length, int index, double value, uint16_t mask)
 | 
			
		||||
{
 | 
			
		||||
    /*
 | 
			
		||||
    bool wasNegative = false;
 | 
			
		||||
    if (value < 0)
 | 
			
		||||
    {
 | 
			
		||||
@ -1802,6 +1804,17 @@ void float16ToPayload(uint8_t* payload, int payload_length, int index, double va
 | 
			
		||||
 | 
			
		||||
    signed16ToPayload(payload, payload_length, index, mantissa, mask);
 | 
			
		||||
    unsigned8ToPayload(payload, payload_length, index, exponent << 3, 0x78 & (mask >> 8));
 | 
			
		||||
    */
 | 
			
		||||
    float v = value * 100.0f;
 | 
			
		||||
    int exponent = 0;
 | 
			
		||||
    for (; v < -2048.0f; v /= 2) exponent++;
 | 
			
		||||
    for (; v > 2047.0f; v /= 2) exponent++;
 | 
			
		||||
    long m = round(v) & 0x7FF;
 | 
			
		||||
    short msb = (short) (exponent << 3 | m >> 8);
 | 
			
		||||
    if (value < 0.0f) msb |= 0x80;
 | 
			
		||||
    
 | 
			
		||||
    signed16ToPayload(payload, payload_length, index, m, mask);
 | 
			
		||||
    unsigned8ToPayload(payload, payload_length, index, msb, mask);
 | 
			
		||||
}
 | 
			
		||||
void float32ToPayload(uint8_t* payload, int payload_length, int index, double value, uint32_t mask)
 | 
			
		||||
{
 | 
			
		||||
@ -1827,4 +1840,4 @@ void bcdToPayload(uint8_t* payload, int payload_length, int index, uint8_t value
 | 
			
		||||
        payload[index / 2] = (payload[index / 2] & 0xF0) | (value & 0x0F);
 | 
			
		||||
    else
 | 
			
		||||
        payload[index / 2] = (payload[index / 2] & 0x0F) | ((value << 4) & 0xF0);
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user