Bluetooth: tester: Implement Friend and LPN callbacks

Use these callbacks to send BTP events. They are useful for test
automation in auto-pts.

Signed-off-by: Michał Narajowski <michal.narajowski@codecoup.pl>
This commit is contained in:
Michał Narajowski 2020-12-21 12:58:38 +01:00 committed by Anas Nashif
commit b386853367
2 changed files with 107 additions and 0 deletions

View file

@ -969,6 +969,41 @@ struct mesh_invalid_bearer_ev {
#define MESH_EV_INCOMP_TIMER_EXP 0x88
#define MESH_EV_FRND_ESTABLISHED 0x89
struct mesh_frnd_established_ev {
uint16_t net_idx;
uint16_t lpn_addr;
uint8_t recv_delay;
uint32_t polltimeout;
} __packed;
#define MESH_EV_FRND_TERMINATED 0x8a
struct mesh_frnd_terminated_ev {
uint16_t net_idx;
uint16_t lpn_addr;
} __packed;
#define MESH_EV_LPN_ESTABLISHED 0x8b
struct mesh_lpn_established_ev {
uint16_t net_idx;
uint16_t friend_addr;
uint8_t queue_size;
uint8_t recv_win;
} __packed;
#define MESH_EV_LPN_TERMINATED 0x8c
struct mesh_lpn_terminated_ev {
uint16_t net_idx;
uint16_t friend_addr;
} __packed;
#define MESH_EV_LPN_POLLED 0x8d
struct mesh_lpn_polled_ev {
uint16_t net_idx;
uint16_t friend_addr;
uint8_t retry;
} __packed;
void tester_init(void);
void tester_rsp(uint8_t service, uint8_t opcode, uint8_t index, uint8_t status);
void tester_send(uint8_t service, uint8_t opcode, uint8_t index, uint8_t *data,

View file

@ -904,6 +904,78 @@ static struct bt_test_cb bt_test_cb = {
.mesh_trans_incomp_timer_exp = incomp_timer_exp_cb,
};
static void friend_established(uint16_t net_idx, uint16_t lpn_addr,
uint8_t recv_delay, uint32_t polltimeout)
{
struct mesh_frnd_established_ev ev = { net_idx, lpn_addr, recv_delay,
polltimeout };
LOG_DBG("Friendship (as Friend) established with "
"LPN 0x%04x Receive Delay %u Poll Timeout %u",
lpn_addr, recv_delay, polltimeout);
tester_send(BTP_SERVICE_ID_MESH, MESH_EV_FRND_ESTABLISHED,
CONTROLLER_INDEX, (uint8_t *) &ev, sizeof(ev));
}
static void friend_terminated(uint16_t net_idx, uint16_t lpn_addr)
{
struct mesh_frnd_terminated_ev ev = { net_idx, lpn_addr };
LOG_DBG("Friendship (as Friend) lost with LPN "
"0x%04x", lpn_addr);
tester_send(BTP_SERVICE_ID_MESH, MESH_EV_FRND_TERMINATED,
CONTROLLER_INDEX, (uint8_t *) &ev, sizeof(ev));
}
BT_MESH_FRIEND_CB_DEFINE(friend_cb) = {
.established = friend_established,
.terminated = friend_terminated,
};
static void lpn_established(uint16_t net_idx, uint16_t friend_addr,
uint8_t queue_size, uint8_t recv_win)
{
struct mesh_lpn_established_ev ev = { net_idx, friend_addr, queue_size,
recv_win };
LOG_DBG("Friendship (as LPN) established with "
"Friend 0x%04x Queue Size %d Receive Window %d",
friend_addr, queue_size, recv_win);
tester_send(BTP_SERVICE_ID_MESH, MESH_EV_LPN_ESTABLISHED,
CONTROLLER_INDEX, (uint8_t *) &ev, sizeof(ev));
}
static void lpn_terminated(uint16_t net_idx, uint16_t friend_addr)
{
struct mesh_lpn_polled_ev ev = { net_idx, friend_addr };
LOG_DBG("Friendship (as LPN) lost with Friend "
"0x%04x", friend_addr);
tester_send(BTP_SERVICE_ID_MESH, MESH_EV_LPN_TERMINATED,
CONTROLLER_INDEX, (uint8_t *) &ev, sizeof(ev));
}
static void lpn_polled(uint16_t net_idx, uint16_t friend_addr, bool retry)
{
struct mesh_lpn_polled_ev ev = { net_idx, friend_addr, (uint8_t)retry };
LOG_DBG("LPN polled 0x%04x %s", friend_addr, retry ? "(retry)" : "");
tester_send(BTP_SERVICE_ID_MESH, MESH_EV_LPN_POLLED,
CONTROLLER_INDEX, (uint8_t *) &ev, sizeof(ev));
}
BT_MESH_LPN_CB_DEFINE(lpn_cb) = {
.established = lpn_established,
.terminated = lpn_terminated,
.polled = lpn_polled,
};
uint8_t tester_init_mesh(void)
{
if (IS_ENABLED(CONFIG_BT_TESTING)) {