/** * Process a received packet at the link layer task when in the advertising * state * * Context: Link Layer * * * @param ptype * @param rxbuf * @param hdr * * @return int */ void ble_ll_adv_rx_pkt_in(uint8_t ptype, uint8_t *rxbuf, struct ble_mbuf_hdr *hdr) { int adv_event_over; /* * If we have received a scan request and we are transmitting a response * or we have received a valid connect request, dont "end" the advertising * event. In the case of a connect request we will stop advertising. In * the case of the scan response transmission we will get a transmit * end callback. */ adv_event_over = 1; if (BLE_MBUF_HDR_CRC_OK(hdr)) { if (ptype == BLE_ADV_PDU_TYPE_CONNECT_REQ) { if (ble_ll_adv_conn_req_rxd(rxbuf, hdr)) { adv_event_over = 0; } } else { if ((ptype == BLE_ADV_PDU_TYPE_SCAN_REQ) && (hdr->rxinfo.flags & BLE_MBUF_HDR_F_SCAN_RSP_TXD)) { adv_event_over = 0; } } } if (adv_event_over) { ble_ll_adv_event_done(&g_ble_ll_adv_sm); } }
/** * Process a received packet at the link layer task when in the advertising * state * * Context: Link Layer * * * @param ptype * @param rxbuf * @param hdr * * @return int */ void ble_ll_adv_rx_pkt_in(uint8_t ptype, uint8_t *rxbuf, struct ble_mbuf_hdr *hdr) { int adv_event_over; /* * It is possible that advertising was stopped and a packet plcaed on the * LL receive packet queue. In this case, just ignore the received packet * as the advertising state machine is no longer "valid" */ if (!g_ble_ll_adv_sm.enabled) { return; } /* * If we have received a scan request and we are transmitting a response * or we have received a valid connect request, dont "end" the advertising * event. In the case of a connect request we will stop advertising. In * the case of the scan response transmission we will get a transmit * end callback. */ adv_event_over = 1; if (BLE_MBUF_HDR_CRC_OK(hdr)) { if (ptype == BLE_ADV_PDU_TYPE_CONNECT_REQ) { if (ble_ll_adv_conn_req_rxd(rxbuf, hdr)) { adv_event_over = 0; } } else { if ((ptype == BLE_ADV_PDU_TYPE_SCAN_REQ) && (hdr->rxinfo.flags & BLE_MBUF_HDR_F_SCAN_RSP_TXD)) { adv_event_over = 0; } } } if (adv_event_over) { ble_ll_adv_done(&g_ble_ll_adv_sm); } }