Lines Matching full:rx

94 #define XACT_SEG_DATA(_seg) (&link.rx.buf->om_data[20 + ((_seg - 1) * 23)])
95 #define XACT_SEG_RECV(_seg) (link.rx.seg &= ~(1 << (_seg)))
143 } rx; member
241 link.rx.prev_id = XACT_NVAL; in reset_link()
248 link.rx.buf = bt_mesh_proxy_get_buf(); in reset_link()
251 link.rx.buf = rx_buf; in reset_link()
1144 link.rx.seg = 0; in close_link()
1196 static void link_open(struct prov_rx *rx, struct os_mbuf *buf) in link_open() argument
1207 if (link.id == rx->link_id && link.expect == PROV_INVITE) { in link_open()
1226 link.id = rx->link_id; in link_open()
1228 net_buf_simple_init(link.rx.buf, 0); in link_open()
1235 static void link_ack(struct prov_rx *rx, struct os_mbuf *buf) in link_ack() argument
1240 static void link_close(struct prov_rx *rx, struct os_mbuf *buf) in link_close() argument
1247 static void gen_prov_ctl(struct prov_rx *rx, struct os_mbuf *buf) in gen_prov_ctl() argument
1249 BT_DBG("op 0x%02x len %u", BEARER_CTL(rx->gpc), buf->om_len); in gen_prov_ctl()
1251 switch (BEARER_CTL(rx->gpc)) { in gen_prov_ctl()
1253 link_open(rx, buf); in gen_prov_ctl()
1260 link_ack(rx, buf); in gen_prov_ctl()
1267 link_close(rx, buf); in gen_prov_ctl()
1270 BT_ERR("Unknown bearer opcode: 0x%02x", BEARER_CTL(rx->gpc)); in gen_prov_ctl()
1273 bt_test_mesh_prov_invalid_bearer(BEARER_CTL(rx->gpc)); in gen_prov_ctl()
1282 u8_t type = link.rx.buf->om_data[0]; in prov_msg_recv()
1284 BT_DBG("type 0x%02x len %u", type, link.rx.buf->om_len); in prov_msg_recv()
1286 if (!bt_mesh_fcs_check(link.rx.buf, link.rx.fcs)) { in prov_msg_recv()
1291 gen_prov_ack_send(link.rx.id); in prov_msg_recv()
1292 link.rx.prev_id = link.rx.id; in prov_msg_recv()
1293 link.rx.id = 0; in prov_msg_recv()
1307 if (1 + prov_handlers[type].len != link.rx.buf->om_len) { in prov_msg_recv()
1309 link.rx.buf->om_len, type); in prov_msg_recv()
1314 prov_handlers[type].func(&link.rx.buf->om_data[1]); in prov_msg_recv()
1317 static void gen_prov_cont(struct prov_rx *rx, struct os_mbuf *buf) in gen_prov_cont() argument
1319 u8_t seg = CONT_SEG_INDEX(rx->gpc); in gen_prov_cont()
1323 if (!link.rx.seg && link.rx.prev_id == rx->xact_id) { in gen_prov_cont()
1325 gen_prov_ack_send(rx->xact_id); in gen_prov_cont()
1329 if (rx->xact_id != link.rx.id) { in gen_prov_cont()
1331 rx->xact_id, link.rx.id); in gen_prov_cont()
1335 if (seg > link.rx.last_seg) { in gen_prov_cont()
1339 } else if (seg == link.rx.last_seg) { in gen_prov_cont()
1342 expect_len = (link.rx.buf->om_len - 20 - in gen_prov_cont()
1343 (23 * (link.rx.last_seg - 1))); in gen_prov_cont()
1352 if (!(link.rx.seg & BIT(seg))) { in gen_prov_cont()
1360 if (!link.rx.seg) { in gen_prov_cont()
1365 static void gen_prov_ack(struct prov_rx *rx, struct os_mbuf *buf) in gen_prov_ack() argument
1373 if (rx->xact_id == link.tx.id) { in gen_prov_ack()
1378 static void gen_prov_start(struct prov_rx *rx, struct os_mbuf *buf) in gen_prov_start() argument
1382 if (link.rx.seg) { in gen_prov_start()
1387 if (link.rx.prev_id == rx->xact_id) { in gen_prov_start()
1389 gen_prov_ack_send(rx->xact_id); in gen_prov_start()
1393 trailing_space = OS_MBUF_TRAILINGSPACE(link.rx.buf); in gen_prov_start()
1395 link.rx.buf->om_len = net_buf_simple_pull_be16(buf); in gen_prov_start()
1396 link.rx.id = rx->xact_id; in gen_prov_start()
1397 link.rx.fcs = net_buf_simple_pull_u8(buf); in gen_prov_start()
1400 START_LAST_SEG(rx->gpc), link.rx.buf->om_len, link.rx.fcs); in gen_prov_start()
1402 if (link.rx.buf->om_len < 1) { in gen_prov_start()
1408 if (link.rx.buf->om_len > trailing_space) { in gen_prov_start()
1410 link.rx.buf->om_len); in gen_prov_start()
1415 if (START_LAST_SEG(rx->gpc) > 0 && link.rx.buf->om_len <= 20) { in gen_prov_start()
1421 link.rx.seg = (1 << (START_LAST_SEG(rx->gpc) + 1)) - 1; in gen_prov_start()
1422 link.rx.last_seg = START_LAST_SEG(rx->gpc); in gen_prov_start()
1423 memcpy(link.rx.buf->om_data, buf->om_data, buf->om_len); in gen_prov_start()
1426 if (!link.rx.seg) { in gen_prov_start()
1432 void (*const func)(struct prov_rx *rx, struct os_mbuf *buf);
1442 static void gen_prov_recv(struct prov_rx *rx, struct os_mbuf *buf) in gen_prov_recv() argument
1444 if (buf->om_len < gen_prov[GPCF(rx->gpc)].min_len) { in gen_prov_recv()
1445 BT_ERR("Too short GPC message type %u", GPCF(rx->gpc)); in gen_prov_recv()
1450 gen_prov[GPCF(rx->gpc)].require_link) { in gen_prov_recv()
1455 BT_INFO("prov_action: %d", GPCF(rx->gpc)); in gen_prov_recv()
1456 gen_prov[GPCF(rx->gpc)].func(rx, buf); in gen_prov_recv()
1461 struct prov_rx rx; in bt_mesh_pb_adv_recv() local
1473 rx.link_id = net_buf_simple_pull_be32(buf); in bt_mesh_pb_adv_recv()
1474 rx.xact_id = net_buf_simple_pull_u8(buf); in bt_mesh_pb_adv_recv()
1475 rx.gpc = net_buf_simple_pull_u8(buf); in bt_mesh_pb_adv_recv()
1477 BT_DBG("link_id 0x%08x xact_id %u", rx.link_id, rx.xact_id); in bt_mesh_pb_adv_recv()
1479 if (atomic_test_bit(link.flags, LINK_ACTIVE) && link.id != rx.link_id) { in bt_mesh_pb_adv_recv()
1484 gen_prov_recv(&rx, buf); in bt_mesh_pb_adv_recv()
1615 link.rx.prev_id = XACT_NVAL; in bt_mesh_prov_init()
1619 link.rx.buf = rx_buf; in bt_mesh_prov_init()
1629 link.rx.buf = bt_mesh_proxy_get_buf(); in bt_mesh_prov_reset_link()
1632 link.rx.buf = rx_buf; in bt_mesh_prov_reset_link()