Compare commits
2 Commits
adjustable
...
negative-b
Author | SHA1 | Date | |
---|---|---|---|
36a85d3737 | |||
2f9fa5ccc8 |
@ -461,9 +461,9 @@ mbus_data_bcd_encode(unsigned char *bcd_data, size_t bcd_data_size, int value)
|
|||||||
int v0, v1, v2, x1, x2;
|
int v0, v1, v2, x1, x2;
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
if (bcd_data && bcd_data_size && (value >= 0))
|
if (bcd_data && bcd_data_size)
|
||||||
{
|
{
|
||||||
v2 = value;
|
v2 = abs(value);
|
||||||
|
|
||||||
for (i = 0; i < bcd_data_size; i++)
|
for (i = 0; i < bcd_data_size; i++)
|
||||||
{
|
{
|
||||||
@ -477,6 +477,11 @@ mbus_data_bcd_encode(unsigned char *bcd_data, size_t bcd_data_size, int value)
|
|||||||
bcd_data[bcd_data_size-1-i] = (x2 << 4) | x1;
|
bcd_data[bcd_data_size-1-i] = (x2 << 4) | x1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (value < 0)
|
||||||
|
{
|
||||||
|
bcd_data[bcd_data_size-1] |= 0xF0;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -498,10 +503,22 @@ mbus_data_bcd_decode(unsigned char *bcd_data, size_t bcd_data_size)
|
|||||||
{
|
{
|
||||||
for (i = bcd_data_size; i > 0; i--)
|
for (i = bcd_data_size; i > 0; i--)
|
||||||
{
|
{
|
||||||
val = (val * 10) + ((bcd_data[i-1]>>4) & 0xF);
|
val = (val * 10);
|
||||||
|
|
||||||
|
if (bcd_data[i-1]>>4 < 0xA)
|
||||||
|
{
|
||||||
|
val += ((bcd_data[i-1]>>4) & 0xF);
|
||||||
|
}
|
||||||
|
|
||||||
val = (val * 10) + ( bcd_data[i-1] & 0xF);
|
val = (val * 10) + ( bcd_data[i-1] & 0xF);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// hex code Fh in the MSD position signals a negative BCD number
|
||||||
|
if (bcd_data[bcd_data_size-1]>>4 == 0xF)
|
||||||
|
{
|
||||||
|
val *= -1;
|
||||||
|
}
|
||||||
|
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1088,6 +1105,9 @@ mbus_data_product_name(mbus_data_variable_header *header)
|
|||||||
case 0x28:
|
case 0x28:
|
||||||
strcpy(buff,"ABB F95 Typ US770");
|
strcpy(buff,"ABB F95 Typ US770");
|
||||||
break;
|
break;
|
||||||
|
case 0x2F:
|
||||||
|
strcpy(buff,"Hydrometer Sharky 775");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (manufacturer == mbus_manufacturer_id("JAN"))
|
else if (manufacturer == mbus_manufacturer_id("JAN"))
|
||||||
|
Reference in New Issue
Block a user