Automatically switching between 1Mbps, 2Mbps and coded Phys


I am starting to look at using 2Mbps Phy (and eventually coded PHY). I'd like to add the functionality where my device will automatically switch PHYs based on some metric in order to give the best performance e.g. 2Mbps when close, 1Mbps when too far away for 2Mbps, and finally coded PHY for long range.

Is RSSI the best indicator to use?

Should I just start RSSI measurement using sd_ble_gap_rssi_start(uint16_t conn_handle, uint8_t threshold_dbm, uint8_t skip_count)  then on the BLE_GAP_EVT_RSSI_CHANGED event, change PHY accordingly?

Does anyone have any info on when the best time to switch is i.e., at which RSSI values should i change to the next PHY option

Is there a way to check which modes the device I'm connected to supports, without trying sd_ble_gap_phy_update and checking the result in BLE_GAP_EVT_PHY_UPDATE ?