Bluetooth: Mesh: Fix HB Pub Count Log calculation routine
"4.1.2 Log field transformation In order to compress two-octet values into one-octet fields, the following logarithmic transformation is used: any two-octet value is mapped onto a one-octet field value representing the largest integer n, where 2^(n-1) is less than or equal to the two-octet value." Log field transformation table: Log Field Value 2-octet Value 0x01 0x0001 0x02 0x0002 through 0x0003 0x03 0x0004 through 0x0007 0x04 0x0008 through 0x000F 0x05 0x0010 through 0x001F 0x06 0x0020 through 0x003F 0x07 0x0040 through 0x007F 0x08 0x0080 through 0x00FF 0x09 0x0100 through 0x01FF 0x0A 0x0200 through 0x03FF 0x0B 0x0400 through 0x07FF 0x0C 0x0800 through 0x0FFF 0x0D 0x1000 through 0x1FFF 0x0E 0x2000 through 0x3FFF 0x0F 0x4000 through 0x7FFF 0x10 0x8000 through 0xFFFF "4.2.17.2 Heartbeat Publication Count Log The Heartbeat Publication Count Log value between 0x01 and 0x11 shall represent that smallest integer n where 2^(n-1) is greater than or equal to the Heartbeat Publication Count value. For example, if the Heartbeat Publication Count value is 0x0579, then the Heartbeat Publication Count Log value would be 0x0C." According to this definition 2^(n-1) is an upper bound for n log value. Proposed Publication Count Log transformation table: Pub Count Log Value 2-octet Value 0x01 0x0001 0x02 0x0002 0x03 0x0003 through 0x0004 0x04 0x0005 through 0x0008 0x05 0x0009 through 0x0010 0x06 0x0011 through 0x0020 0x07 0x0021 through 0x0040 0x08 0x0041 through 0x0080 0x09 0x0081 through 0x0100 0x0A 0x0101 through 0x0200 0x0B 0x0201 through 0x0400 0x0C 0x0401 through 0x0800 0x0D 0x0801 through 0x1000 0x0E 0x1001 through 0x2000 0x0F 0x2001 through 0x4000 0x10 0x4001 through 0x8000 0x11 0x8001 through 0x10000 According to Log field transformation table 0x0579 would be transformed to 0x0B and should be to transformed to 0x0C. This is required to pass MESH/NODE/CFG/HBP/BV-01-C. Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
This commit is contained in:
parent
ebf1a3c661
commit
c44daebe97
1 changed files with 14 additions and 1 deletions
|
@ -2616,6 +2616,19 @@ static u8_t hb_log(u16_t val)
|
|||
}
|
||||
}
|
||||
|
||||
static u8_t hb_pub_count_log(u16_t val)
|
||||
{
|
||||
if (!val) {
|
||||
return 0x00;
|
||||
} else if (val == 0x01) {
|
||||
return 0x01;
|
||||
} else if (val == 0xffff) {
|
||||
return 0xff;
|
||||
} else {
|
||||
return 32 - __builtin_clz(val - 1) + 1;
|
||||
}
|
||||
}
|
||||
|
||||
static u16_t hb_pwr2(u8_t val, u8_t sub)
|
||||
{
|
||||
if (!val) {
|
||||
|
@ -2657,7 +2670,7 @@ static void hb_pub_send_status(struct bt_mesh_model *model,
|
|||
}
|
||||
|
||||
net_buf_simple_add_le16(msg, cfg->hb_pub.dst);
|
||||
net_buf_simple_add_u8(msg, hb_log(cfg->hb_pub.count));
|
||||
net_buf_simple_add_u8(msg, hb_pub_count_log(cfg->hb_pub.count));
|
||||
net_buf_simple_add_u8(msg, cfg->hb_pub.period);
|
||||
net_buf_simple_add_u8(msg, cfg->hb_pub.ttl);
|
||||
net_buf_simple_add_le16(msg, cfg->hb_pub.feat);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue