Commit 244e9564 authored by Mariusz Skamra's avatar Mariusz Skamra Committed by Johan Hedberg
Browse files

Bluetooth: tester: Add Mesh IV Update related commands



This adds Mesh IV Update related command handlers implementation.

Signed-off-by: default avatarMariusz Skamra <mariusz.skamra@codecoup.pl>
parent 9dd4399e
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -1447,11 +1447,6 @@ Commands and responses:
	Opcode 0x09 - IV Update toggle state
		Controller Index:	<controller id>
		Command parameters:	<none>
		Response parameters:	Toggle (1 octet)

		Valid Toggle response values:
					0x00 = Normal State
					0x01 = IV Update in Progress State

		This command is used to make a IV Update state transition
		while in IV Update test mode, ignoring the 96 hour limit.
+7 −0
Original line number Diff line number Diff line
@@ -708,6 +708,13 @@ struct mesh_input_string_cmd {
	u8_t string[0];
} __packed;

#define MESH_IVU_TEST_MODE		0x08
struct mesh_ivu_test_mode_cmd {
	u8_t enable;
} __packed;

#define MESH_IVU_TOGGLE_STATE			0x09

#define MESH_LPN			0x0d
struct mesh_lpn_set_cmd {
	u8_t enable;
+35 −0
Original line number Diff line number Diff line
@@ -63,6 +63,8 @@ static void supported_commands(u8_t *data, u16_t len)
	tester_set_bit(buf->data, MESH_INPUT_STRING);
	/* 2nd octet */
	memset(net_buf_simple_add(buf, 1), 0, 1);
	tester_set_bit(buf->data, MESH_IVU_TEST_MODE);
	tester_set_bit(buf->data, MESH_IVU_TOGGLE_STATE);
	tester_set_bit(buf->data, MESH_LPN);
	tester_set_bit(buf->data, MESH_LPN_POLL);

@@ -446,6 +448,33 @@ rsp:
		   status);
}

static void ivu_test_mode(u8_t *data, u16_t len)
{
	const struct mesh_ivu_test_mode_cmd *cmd = (void *) data;

	SYS_LOG_DBG("enable 0x%02x", cmd->enable);

	bt_mesh_iv_update_test(cmd->enable ? true : false);

	tester_rsp(BTP_SERVICE_ID_MESH, MESH_IVU_TEST_MODE, CONTROLLER_INDEX,
		   BTP_STATUS_SUCCESS);
}

static void ivu_toggle_state(u8_t *data, u16_t len)
{
	bool result;

	SYS_LOG_DBG("");

	result = bt_mesh_iv_update();
	if (!result) {
		SYS_LOG_ERR("Failed to toggle the IV Update state");
	}

	tester_rsp(BTP_SERVICE_ID_MESH, MESH_IVU_TOGGLE_STATE, CONTROLLER_INDEX,
		   result ? BTP_STATUS_SUCCESS : BTP_STATUS_FAILED);
}

static void lpn(u8_t *data, u16_t len)
{
	struct mesh_lpn_set_cmd *cmd = (void *) data;
@@ -503,6 +532,12 @@ void tester_handle_mesh(u8_t opcode, u8_t index, u8_t *data, u16_t len)
	case MESH_INPUT_STRING:
		input_string(data, len);
		break;
	case MESH_IVU_TEST_MODE:
		ivu_test_mode(data, len);
		break;
	case MESH_IVU_TOGGLE_STATE:
		ivu_toggle_state(data, len);
		break;
	case MESH_LPN:
		lpn(data, len);
		break;