2020-07-28 20:02:23

by Stotland, Inga

[permalink] [raw]
Subject: [PATCH BlueZ] mesh: Fix calculation of model publication period

This fixes the extraction of bit fields from model publication
period octet received as part of Congif Publication Set message.

The step resolution field is extracted as upper 2 bits (shift by 6)
and the number of steps field is extracted by masking lower 6 bits.
---
mesh/model.c | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/mesh/model.c b/mesh/model.c
index 31197b363..ef7668147 100644
--- a/mesh/model.c
+++ b/mesh/model.c
@@ -170,20 +170,21 @@ static struct mesh_model *get_model(struct mesh_node *node, uint8_t ele_idx,

static uint32_t pub_period_to_ms(uint8_t pub_period)
{
- int n;
+ int step_res, num_steps;

- n = pub_period >> 2;
+ step_res = pub_period >> 6;
+ num_steps = pub_period & 0x3f;

- switch (pub_period & 0x3) {
+ switch (step_res) {
default:
- return n * 100;
+ return num_steps * 100;
case 2:
- n *= 10;
+ num_steps *= 10;
/* Fall Through */
case 1:
- return n * 1000;
+ return num_steps * 1000;
case 3:
- return n * 10 * 60 * 1000;
+ return num_steps * 10 * 60 * 1000;
}
}

--
2.26.2


2020-07-29 19:01:17

by Gix, Brian

[permalink] [raw]
Subject: Re: [PATCH BlueZ] mesh: Fix calculation of model publication period

Applied
On Tue, 2020-07-28 at 11:10 -0700, Inga Stotland wrote:
> This fixes the extraction of bit fields from model publication
> period octet received as part of Congif Publication Set message.
>
> The step resolution field is extracted as upper 2 bits (shift by 6)
> and the number of steps field is extracted by masking lower 6 bits.
> ---
> mesh/model.c | 15 ++++++++-------
> 1 file changed, 8 insertions(+), 7 deletions(-)
>
> diff --git a/mesh/model.c b/mesh/model.c
> index 31197b363..ef7668147 100644
> --- a/mesh/model.c
> +++ b/mesh/model.c
> @@ -170,20 +170,21 @@ static struct mesh_model *get_model(struct mesh_node *node, uint8_t ele_idx,
>
> static uint32_t pub_period_to_ms(uint8_t pub_period)
> {
> - int n;
> + int step_res, num_steps;
>
> - n = pub_period >> 2;
> + step_res = pub_period >> 6;
> + num_steps = pub_period & 0x3f;
>
> - switch (pub_period & 0x3) {
> + switch (step_res) {
> default:
> - return n * 100;
> + return num_steps * 100;
> case 2:
> - n *= 10;
> + num_steps *= 10;
> /* Fall Through */
> case 1:
> - return n * 1000;
> + return num_steps * 1000;
> case 3:
> - return n * 10 * 60 * 1000;
> + return num_steps * 10 * 60 * 1000;
> }
> }
>