mirror of
https://github.com/thelsing/knx.git
synced 2025-08-13 13:46:20 +02: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