From: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx> Values received over the air are in Little Endian format so they first need to be converted to host endianess before comparing with other values. --- src/shared/vcp.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/shared/vcp.c b/src/shared/vcp.c index 06a22997a95c..5d163266b480 100644 --- a/src/shared/vcp.c +++ b/src/shared/vcp.c @@ -709,13 +709,16 @@ static uint8_t vocs_set_vol_offset(struct bt_vocs *vocs, struct bt_vcp *vcp, return BT_ATT_ERROR_INVALID_CHANGE_COUNTER; } - if (req->set_vol_offset > VOCS_VOL_OFFSET_UPPER_LIMIT || - req->set_vol_offset < VOCS_VOL_OFFSET_LOWER_LIMIT) { + vstate->vol_offset = le16_to_cpu(req->set_vol_offset); + + if (vstate->vol_offset > VOCS_VOL_OFFSET_UPPER_LIMIT || + vstate->vol_offset < VOCS_VOL_OFFSET_LOWER_LIMIT) { DBG(vcp, "error: Value Out of Range"); return BT_ATT_ERROR_VALUE_OUT_OF_RANGE; } - vstate->vol_offset = le16_to_cpu(req->set_vol_offset); - vstate->counter = -~vstate->counter; /*Increment Change Counter*/ + + /* Increment Change Counter */ + vstate->counter = -~vstate->counter; gatt_db_attribute_notify(vdb->vocs->vos, (void *)vstate, sizeof(struct vol_offset_state), -- 2.43.0