mesh: Fix calculation of model publication period
authorInga Stotland <inga.stotland@intel.com>
Tue, 28 Jul 2020 18:10:51 +0000 (11:10 -0700)
committerAbhay Agarwal <ay.agarwal@samsung.com>
Mon, 28 Dec 2020 06:20:04 +0000 (11:50 +0530)
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.

Change-Id: I198e44cddc517359e7ae17c1dd657f7f6003faec
Signed-off-by: anuj.bhumiya <anuj.bhumiya@samsung.com>
mesh/model.c

index 31197b3..ef76681 100644 (file)
@@ -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;
        }
 }