Hi Now I am developing the application to measure PER of each data rate of BLE.
For packet exchange, I use IPSP example in the latest nRF5 SDK version 15, s140.
I could change data rate to 2Mbps and 1Mbps, but I could not change to coded phy.
I add some part of ipsp accetor's code below
For Coded phy, in line 19,20, I use BLE_GAP_PHY_CODED only.
Thank you,
Elissa Park
static void on_ble_evt(ble_evt_t const * p_ble_evt)
{
uint32_t err_code;
switch (p_ble_evt->header.evt_id)
{
case BLE_GAP_EVT_CONNECTED:
printf("BLE_GAP_EVT_CONNECTED\n");
APPL_LOG("Connected.");
LEDS_ON(CONNECTED_LED);
LEDS_OFF(ADVERTISING_LED);
if(p_ble_evt->evt.gap_evt.params.connected.role == BLE_GAP_ROLE_PERIPH)
{
printf("change phy as a periph\n");
ble_gap_phys_t const phys =
{
.rx_phys = BLE_GAP_PHY_2MBPS | BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_CODED,
.tx_phys = BLE_GAP_PHY_2MBPS | BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_CODED,
};
err_code = sd_ble_gap_phy_update(p_ble_evt->evt.gap_evt.conn_handle, &phys);
}
else
{
printf("change phy as a central\n");
err_code = sd_ble_gap_phy_update(m_conn_handle, &m_test_params.phys);
APP_ERROR_CHECK(err_code);
}
break;
case BLE_GAP_EVT_DISCONNECTED:
printf("BLE_GAP_EVT_DISCONNECTED\n");
APPL_LOG("Disconnected.");
LEDS_OFF(CONNECTED_LED);
advertising_start();
break;
case BLE_GAP_EVT_PHY_UPDATE:
{
printf("BLE_GAP_EVT_PHY_UPDATE\n");
ble_gap_evt_phy_update_t const * p_phy_evt = &p_ble_evt->evt.gap_evt.params.phy_update;
if (p_phy_evt->status == BLE_HCI_STATUS_CODE_LMP_ERROR_TRANSACTION_COLLISION)
{
// Ignore LL collisions.
NRF_LOG_DEBUG("LL transaction collision during PHY update.");
break;
}
ble_gap_phys_t phys = {0};
phys.tx_phys = p_phy_evt->tx_phy;
phys.rx_phys = p_phy_evt->rx_phy;
printf("PHY update %s. PHY set to %s.\n",
(p_phy_evt->status == BLE_HCI_STATUS_CODE_SUCCESS) ?
"accepted" : "rejected",
phy_str(phys));
} break;
case BLE_GAP_EVT_PHY_UPDATE_REQUEST:
{
printf("BLE_GAP_EVT_PHY_UPDATE_REQUEST\n");
m_conn_handle = p_ble_evt->evt.gap_evt.conn_handle;
//err_code = sd_ble_gap_phy_update(m_conn_handle, &m_test_params.phys);
//APP_ERROR_CHECK(err_code);
} break;
default:
break;
}
}