gitextract_1kcujrmi/ ├── .gitignore ├── LICENSE ├── NOTICE ├── README.md ├── backend/ │ ├── control/ │ │ └── strategies.py │ ├── main.py │ ├── models/ │ │ ├── __init__.py │ │ ├── base_rc.py │ │ ├── base_video_model.py │ │ ├── control_profile.py │ │ ├── cooingdv_rc.py │ │ ├── cooingdv_video_model.py │ │ ├── debug_rc.py │ │ ├── s2x_rc.py │ │ ├── s2x_video_model.py │ │ ├── stick_range.py │ │ ├── video_frame.py │ │ ├── wifi_cam_rc.py │ │ ├── wifi_uav_rc.py │ │ └── wifi_uav_video_model.py │ ├── plugins/ │ │ ├── __init__.py │ │ ├── base.py │ │ ├── follow/ │ │ │ ├── __init__.py │ │ │ ├── follow_controller.py │ │ │ ├── follow_plugin.py │ │ │ └── test_yolo.py │ │ ├── manager.py │ │ └── test_yaw_plugin.py │ ├── protocols/ │ │ ├── __init__.py │ │ ├── base_protocol_adapter.py │ │ ├── base_video_protocol.py │ │ ├── cooingdv_jieli_rc_protocol_adapter.py │ │ ├── cooingdv_jieli_video_protocol.py │ │ ├── cooingdv_rc_protocol_adapter.py │ │ ├── cooingdv_video_protocol.py │ │ ├── debug_rc_protocol_adapter.py │ │ ├── debug_video_protocol.py │ │ ├── no_video_protocol.py │ │ ├── s2x_rc_protocol_adapter.py │ │ ├── s2x_video_protocol.py │ │ ├── wifi_cam_rc_protocol_adapter.py │ │ ├── wifi_cam_video_protocol.py │ │ ├── wifi_uav_rc_protocol_adapter.py │ │ └── wifi_uav_video_protocol.py │ ├── receive_video.py │ ├── remote_control.py │ ├── requirements.txt │ ├── services/ │ │ ├── __init__.py │ │ ├── flight_controller.py │ │ └── video_receiver.py │ ├── tests/ │ │ ├── test_cooingdv_jieli_ctp.py │ │ ├── test_s2x_protocol.py │ │ ├── test_s2x_video_protocol.py │ │ └── test_wifi_cam_protocol.py │ ├── utils/ │ │ ├── cooingdv_jieli_ctp.py │ │ ├── dropping_queue.py │ │ ├── logging_config.py │ │ ├── wifi_uav_ack_state.py │ │ ├── wifi_uav_jpeg.py │ │ ├── wifi_uav_packets.py │ │ └── wifi_uav_variants.py │ ├── video_client.py │ ├── views/ │ │ ├── __init__.py │ │ ├── base_video_view.py │ │ ├── cli_rc.py │ │ └── opencv_video_view.py │ └── web_server.py ├── docs/ │ └── research/ │ ├── S2x.md │ ├── cooingdv.md │ ├── wifi_cam.md │ └── wifi_uav.md ├── experimental/ │ ├── README.md │ └── test_e88pro.py └── frontend/ ├── .gitignore ├── eslint.config.js ├── index.html ├── package.json ├── postcss.config.cjs ├── src/ │ ├── App.css │ ├── App.tsx │ ├── components/ │ │ ├── AxisIndicator.tsx │ │ ├── CommandButtons.tsx │ │ ├── ControlSchemeToggle.tsx │ │ ├── ControlsOverlay.tsx │ │ ├── DrawingOverlay.tsx │ │ ├── PluginControls.tsx │ │ ├── SpeedControl.tsx │ │ ├── StaticDrawingOverlay.tsx │ │ └── VideoFeed.tsx │ ├── hooks/ │ │ ├── useControls.ts │ │ ├── useOverlays.ts │ │ ├── usePlugins.ts │ │ └── useVideoSizing.ts │ ├── index.css │ ├── main.tsx │ ├── pages/ │ │ └── TestPage.tsx │ └── vite-env.d.ts ├── tailwind.config.ts ├── tsconfig.app.json ├── tsconfig.json ├── tsconfig.node.json └── vite.config.ts