diff --git a/src/shared/vcp.c b/src/shared/vcp.c
index 263da4c..f2c04d1 100644
--- a/src/shared/vcp.c
+++ b/src/shared/vcp.c
DBG(vcp, "error: Value Out of Range");
return BT_ATT_ERROR_VALUE_OUT_OF_RANGE;
}
- vstate->vol_offset = req->set_vol_offset;
+ vstate->vol_offset = le16_to_cpu(req->set_vol_offset);
vstate->counter = -~vstate->counter; /*Increment Change Counter*/
gatt_db_attribute_notify(vdb->vocs->vos, (void *)vstate,
void *user_data)
{
struct bt_vocs *vocs = user_data;
- struct iovec iov;
+ struct vol_offset_state state;
- iov.iov_base = vocs->vostate;
- iov.iov_len = sizeof(*vocs->vostate);
+ state.vol_offset = cpu_to_le16(vocs->vostate->vol_offset);
+ state.counter = vocs->vostate->counter;
- gatt_db_attribute_read_result(attrib, id, 0, iov.iov_base,
- iov.iov_len);
+ gatt_db_attribute_read_result(attrib, id, 0, (void *)&state,
+ sizeof(state));
}
static void vcs_flag_read(struct gatt_db_attribute *attrib,
struct bt_vocs *vocs = user_data;
struct iovec iov;
- iov.iov_base = &vocs->vocs_audio_loc;
+ iov.iov_base = &cpu_to_le32(vocs->vocs_audio_loc);
iov.iov_len = sizeof(vocs->vocs_audio_loc);
gatt_db_attribute_read_result(attrib, id, 0, iov.iov_base,
return;
}
- DBG(vcp, "Vol Set:%x", vos->vol_offset);
- DBG(vcp, "Vol Counter:%x", vos->counter);
+ DBG(vcp, "Vol Offset: 0x%04x", le16_to_cpu(vos->vol_offset));
+ DBG(vcp, "Vol Counter: 0x%02x", vos->counter);
}
static void read_vocs_audio_location(struct bt_vcp *vcp, bool success,
void *user_data)
{
uint32_t vocs_audio_loc;
+ struct iovec iov;
if (!value) {
DBG(vcp, "Unable to get VOCS Audio Location");
return;
}
- memcpy(&vocs_audio_loc, value, length);
+ iov.iov_base = (void *)value;
+ iov.iov_len = length;
+
+ if (!util_iov_pull_le32(&iov, &vocs_audio_loc)) {
+ DBG(vcp, "Invalid size for VOCS Audio Location");
+ return;
+ }
- DBG(vcp, "VOCS Audio Loc: %x", vocs_audio_loc);
+ DBG(vcp, "VOCS Audio Loc: 0x%8x", vocs_audio_loc);
}