So there are two workflows here:
Workflow 1: Your use case is to work with the drone as-is(without modifying its original firmware).
For example, A deep learning/image processing application using drones where you are more concerned more with the deep learning implementation rather than designing a new flight controller.
For this use case, you can connect the drone over Wifi and work with MATLAB commands to programmatically control drones using commands.
Your use case is to develop a flight controller of your own and test its performance by deploying it in the drone. For this, you need to modify the original firmware so that you can replace the original flight controller with the controller you have developed.
For example: Testing the stability of a flight control system which requires you to deploy this in the drone and measure its flight performance.
For this use case, you can connect the drone over BLE, modify the original firmware, and then deploy your custom flight controller using Simulink.
These are the two different workflows that you can choose based on your use case.