Bluetooth: tester: Add Mesh Network Received event
This adds implementation of Mesh Network receive event.
Signed-off-by: Mariusz Skamra <mariusz.skamra@codecoup.pl>
diff --git a/tests/bluetooth/tester/default.conf b/tests/bluetooth/tester/default.conf
index c9b3bdb..d156fb2 100644
--- a/tests/bluetooth/tester/default.conf
+++ b/tests/bluetooth/tester/default.conf
@@ -22,6 +22,7 @@
CONFIG_BT_MESH_IV_UPDATE_TEST=y
CONFIG_BT_TINYCRYPT_ECC=y
+CONFIG_BT_TESTING=y
CONFIG_UART_CONSOLE=n
CONFIG_GPIO=y
diff --git a/tests/bluetooth/tester/qemu.conf b/tests/bluetooth/tester/qemu.conf
index 74a8fb0..bb31c81 100644
--- a/tests/bluetooth/tester/qemu.conf
+++ b/tests/bluetooth/tester/qemu.conf
@@ -31,6 +31,7 @@
CONFIG_BT_MESH_IV_UPDATE_TEST=y
CONFIG_BT_TINYCRYPT_ECC=y
+CONFIG_BT_TESTING=y
CONFIG_INIT_STACKS=y
CONFIG_PRINTK=y
diff --git a/tests/bluetooth/tester/src/bttester.h b/tests/bluetooth/tester/src/bttester.h
index 258e480..d0c6be0 100644
--- a/tests/bluetooth/tester/src/bttester.h
+++ b/tests/bluetooth/tester/src/bttester.h
@@ -764,6 +764,16 @@
u8_t bearer;
} __packed;
+#define MESH_EV_NET_RECV 0x86
+struct mesh_net_recv_ev {
+ u8_t ttl;
+ u8_t ctl;
+ u16_t src;
+ u16_t dst;
+ u8_t payload_len;
+ u8_t payload[0];
+} __packed;
+
void tester_init(void);
void tester_rsp(u8_t service, u8_t opcode, u8_t index, u8_t status);
void tester_send(u8_t service, u8_t opcode, u8_t index, u8_t *data,
diff --git a/tests/bluetooth/tester/src/mesh.c b/tests/bluetooth/tester/src/mesh.c
index c787df8..a40248a 100644
--- a/tests/bluetooth/tester/src/mesh.c
+++ b/tests/bluetooth/tester/src/mesh.c
@@ -10,6 +10,7 @@
#include <errno.h>
#include <bluetooth/mesh.h>
+#include <bluetooth/testing.h>
#include <misc/byteorder.h>
#include "bttester.h"
@@ -594,7 +595,44 @@
}
}
+void net_recv_ev(u8_t ttl, u8_t ctl, u16_t src, u16_t dst, const void *payload,
+ size_t payload_len)
+{
+ struct net_buf_simple *buf = NET_BUF_SIMPLE(UINT8_MAX);
+ struct mesh_net_recv_ev *ev;
+
+ SYS_LOG_DBG("ttl 0x%02x ctl 0x%02x src 0x%04x dst 0x%04x "
+ "payload_len %d", ttl, ctl, src, dst, payload_len);
+
+ net_buf_simple_init(buf, 0);
+
+ if (payload_len > net_buf_simple_tailroom(buf)) {
+ SYS_LOG_ERR("Payload size exceeds buffer size");
+
+ return;
+ }
+
+ ev = net_buf_simple_add(buf, sizeof(*ev));
+ ev->ttl = ttl;
+ ev->ctl = ctl;
+ ev->src = sys_cpu_to_le16(src);
+ ev->dst = sys_cpu_to_le16(dst);
+ ev->payload_len = payload_len;
+ net_buf_simple_add_mem(buf, payload, payload_len);
+
+ tester_send(BTP_SERVICE_ID_MESH, MESH_EV_NET_RECV, CONTROLLER_INDEX,
+ buf->data, buf->len);
+}
+
+static struct bt_test_cb bt_test_cb = {
+ .mesh_net_recv = net_recv_ev,
+};
+
u8_t tester_init_mesh(void)
{
+ if (IS_ENABLED(CONFIG_BT_TESTING)) {
+ bt_test_cb_register(&bt_test_cb);
+ }
+
return BTP_STATUS_SUCCESS;
}