Files
yiliao2026/bashes/radar-driver-switch.sh.bak
Orange 261f533e1e Please enter the commit message for your changes. Lines starting
with '#' will be ignored, and an empty message aborts the commit.

On branch master
Your branch is ahead of 'origin/master' by 31 commits.
  (use "git push" to publish your local commits)

Changes to be committed:
	new file:   .gitignore
	new file:   .vscode/c_cpp_properties.json
	new file:   .vscode/launch.json
	new file:   .vscode/settings.json
	new file:   CLAUDE.md
	new file:   README.md
	new file:   bashes/README.md
	new file:   bashes/radar-driver-switch.sh
	new file:   bashes/radar-driver-switch.sh.bak
	new file:   dependencies/dependencies.txt
	new file:   src/LSLIDAR_X_ROS2-20240228/src/README.md
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/CMakeLists.txt
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/include/lslidar_driver/input.h
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/include/lslidar_driver/lsiosr.h
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/include/lslidar_driver/lslidar_driver.h
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/lslidar_double_launch.py
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/lsm10_net_launch.py
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/lsm10_uart_launch.py
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/lsm10p_net_launch.py
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/lsm10p_uart_launch.py
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/lsn10_launch.py
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/lsn10_net_launch.py
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/lsn10p_launch.py
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/lsn10p_net_launch.py
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/viewer_scan_launch.py
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/package.xml
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/params/lidar_net_ros2/lsm10_net.yaml
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/params/lidar_net_ros2/lsm10p_net.yaml
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/params/lidar_net_ros2/lsn10_net.yaml
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/params/lidar_net_ros2/lsn10p_net.yaml
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/params/lidar_uart_ros2/lsm10.yaml
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/params/lidar_uart_ros2/lsm10_p.yaml
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/params/lidar_uart_ros2/lsn10.yaml
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/params/lidar_uart_ros2/lsn10p.yaml
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/rviz/lslidar.rviz
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/src/input.cc
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/src/lsiosr.cpp
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/src/lslidar_driver.cc
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/src/lslidar_driver.cc.bak
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/src/lslidar_driver_node.cc
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_msgs/CMakeLists.txt
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_msgs/msg/LslidarDifop.msg
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_msgs/msg/LslidarPacket.msg
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_msgs/msg/LslidarPoint.msg
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_msgs/msg/LslidarScan.msg
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_msgs/msg/LslidarSweep.msg
	new file:   src/LSLIDAR_X_ROS2-20240228/src/lslidar_msgs/package.xml
	new file:   src/LSLIDAR_X_ROS2-20240228/src/version.txt
	new file:   src/LSLIDAR_X_ROS2-20240228/src/wheeltec_udev.sh
	new file:   "src/LSLIDAR_X_ROS2-20240228/src/\351\225\255\347\245\236Lsx\351\233\267\350\276\276\346\227\213\350\275\254\350\247\222\345\272\246.png"
	new file:   src/LSLIDAR_X_ROS2-20240228/wheeltec_lidar.launch.py
	new file:   "src/LSLIDAR_X_ROS2-20240228/wheeltec_lidar.launch.py\344\273\205\345\234\250WHEELTEC\351\225\234\345\203\217\344\270\255\344\275\277\347\224\250"
	new file:   src/cyy_navigation2/CMakeLists.txt
	new file:   src/cyy_navigation2/bt/follow_point.xml
	new file:   src/cyy_navigation2/bt/nav_to_pose_with_consistent_replanning_and_if_path_becomes_invalid.xml
	new file:   src/cyy_navigation2/bt/navigate_through_poses_w_replanning_and_recovery.xml
	new file:   src/cyy_navigation2/bt/navigate_to_pose_w_replanning_and_recovery.xml
	new file:   src/cyy_navigation2/bt/navigate_to_pose_w_replanning_goal_patience_and_recovery.xml
	new file:   src/cyy_navigation2/bt/navigate_w_recovery_and_replanning_only_if_path_becomes_invalid.xml
	new file:   src/cyy_navigation2/bt/navigate_w_replanning_distance.xml
	new file:   src/cyy_navigation2/bt/navigate_w_replanning_only_if_goal_is_updated.xml
	new file:   src/cyy_navigation2/bt/navigate_w_replanning_only_if_path_becomes_invalid.xml
	new file:   src/cyy_navigation2/bt/navigate_w_replanning_speed.xml
	new file:   src/cyy_navigation2/bt/navigate_w_replanning_time.xml
	new file:   src/cyy_navigation2/bt/odometry_calibration.xml
	new file:   src/cyy_navigation2/config/nav2_params.yaml
	new file:   src/cyy_navigation2/launch/car_bringup.launch.py
	new file:   src/cyy_navigation2/launch/cyy_nav.launch.py
	new file:   src/cyy_navigation2/launch/cyy_nav_box.launch.py
	new file:   src/cyy_navigation2/maps/cyy_map.data
	new file:   src/cyy_navigation2/maps/cyy_map.pgm
	new file:   src/cyy_navigation2/maps/cyy_map.yaml
	new file:   src/cyy_navigation2/maps/cyy_map1.pgm
	new file:   src/cyy_navigation2/maps/cyy_map1.yaml
	new file:   src/cyy_navigation2/package.xml
	new file:   src/cyy_navigation2/param/nav2_params.yaml
	new file:   src/cyy_navigation2/param/slam_toolbox_localization.yaml
	new file:   src/cyy_slamtoolbox/CMakeLists.txt
	new file:   src/cyy_slamtoolbox/config/angular_filter_example.yaml
	new file:   src/cyy_slamtoolbox/config/box_filter_example.yaml
	new file:   src/cyy_slamtoolbox/config/footprint_filter_example.yaml
	new file:   src/cyy_slamtoolbox/config/intensity_filter_example.yaml
	new file:   src/cyy_slamtoolbox/config/laser_filter_config.yaml
	new file:   src/cyy_slamtoolbox/config/mapper_params_lifelong.yaml
	new file:   src/cyy_slamtoolbox/config/mapper_params_localization.yaml
	new file:   src/cyy_slamtoolbox/config/mapper_params_offline.yaml
	new file:   src/cyy_slamtoolbox/config/mapper_params_online_async.yaml
	new file:   src/cyy_slamtoolbox/config/mapper_params_online_sync.yaml
	new file:   src/cyy_slamtoolbox/config/mask_filter_example.yaml
	new file:   src/cyy_slamtoolbox/config/median_filter_example.yaml
	new file:   src/cyy_slamtoolbox/config/median_spatial_filter_example.yaml
	new file:   src/cyy_slamtoolbox/config/multiple_filters_example.yaml
	new file:   src/cyy_slamtoolbox/config/pass_through_example.yaml
	new file:   src/cyy_slamtoolbox/config/polygon_filter_example.yaml
	new file:   src/cyy_slamtoolbox/config/range_filter_example.yaml
	new file:   src/cyy_slamtoolbox/config/scan_blob_filter_example.yaml
	new file:   src/cyy_slamtoolbox/config/sector_filter_example.yaml
	new file:   src/cyy_slamtoolbox/config/shadow_filter_example.yaml
	new file:   src/cyy_slamtoolbox/config/slam_toolbox_default.rviz
	new file:   src/cyy_slamtoolbox/config/speckle_filter_example.yaml
	new file:   src/cyy_slamtoolbox/launch/cyy_slam_toolbox_launch.launch.py
	new file:   src/cyy_slamtoolbox/launch/cyy_slam_toolbox_location.launch.py
	new file:   src/cyy_slamtoolbox/launch/filter.launch.py
	new file:   src/cyy_slamtoolbox/package.xml
	new file:   src/gc_navigation2_real/CMakeLists.txt
	new file:   src/gc_navigation2_real/behavior_tree/nav_to_pose_ackermann.xml
	new file:   src/gc_navigation2_real/config/slam_toolbox_async_real.yaml
	new file:   src/gc_navigation2_real/config/slam_toolbox_localization_real.yaml
	new file:   src/gc_navigation2_real/launch/real_bringup.launch.py
	new file:   src/gc_navigation2_real/launch/real_nav2_slam.launch.py
	new file:   src/gc_navigation2_real/launch/real_nav2_slam_online.launch.py
	new file:   src/gc_navigation2_real/launch/real_slam_mapping.launch.py
	new file:   src/gc_navigation2_real/maps/Readme.txt
	new file:   src/gc_navigation2_real/package.xml
	new file:   src/gc_navigation2_real/params/gc_navigation_slam_real.yaml
	new file:   src/gc_navigation2_slamtoolbox/CMakeLists.txt
	new file:   src/gc_navigation2_slamtoolbox/config/mapper_params_lifelong.yaml
	new file:   src/gc_navigation2_slamtoolbox/config/mapper_params_localization.yaml
	new file:   src/gc_navigation2_slamtoolbox/config/mapper_params_offline.yaml
	new file:   src/gc_navigation2_slamtoolbox/config/mapper_params_online_multi_async.yaml
	new file:   src/gc_navigation2_slamtoolbox/config/mapper_params_online_sync.yaml
	new file:   src/gc_navigation2_slamtoolbox/config/nav_to_pose_ackermann.xml
	new file:   src/gc_navigation2_slamtoolbox/config/slam_toolbox_async.yaml
	new file:   src/gc_navigation2_slamtoolbox/config/slam_toolbox_localization.yaml
	new file:   src/gc_navigation2_slamtoolbox/config/slam_toolbox_mapping.yaml
	new file:   src/gc_navigation2_slamtoolbox/launch/gc_nav2_with_amcl.launch.py
	new file:   src/gc_navigation2_slamtoolbox/launch/gc_nav2_with_slam.launch.py
	new file:   src/gc_navigation2_slamtoolbox/launch/gc_nav2_with_slam_online.launch.py
	new file:   src/gc_navigation2_slamtoolbox/launch/gc_nav2_with_slam_online_real.launch.py
	new file:   src/gc_navigation2_slamtoolbox/launch/gc_nav_slamtoolbox_lifelong.launch.py
	new file:   src/gc_navigation2_slamtoolbox/launch/gc_nav_slamtoolbox_location.launch.py
	new file:   src/gc_navigation2_slamtoolbox/launch/gc_nav_slamtoolbox_on_async.launch.py
	new file:   src/gc_navigation2_slamtoolbox/launch/gc_slam_mapping.launch.py
	new file:   src/gc_navigation2_slamtoolbox/maps/my_map.data
	new file:   src/gc_navigation2_slamtoolbox/maps/my_map.pgm
	new file:   src/gc_navigation2_slamtoolbox/maps/my_map.posegraph
	new file:   src/gc_navigation2_slamtoolbox/maps/my_map.yaml
	new file:   src/gc_navigation2_slamtoolbox/maps/zhihui.data
	new file:   src/gc_navigation2_slamtoolbox/maps/zhihui.pgm
	new file:   src/gc_navigation2_slamtoolbox/maps/zhihui.posegraph
	new file:   src/gc_navigation2_slamtoolbox/maps/zhihui.yaml
	new file:   src/gc_navigation2_slamtoolbox/package.xml
	new file:   src/gc_navigation2_slamtoolbox/params/gc_navigation_amcl.yaml
	new file:   src/gc_navigation2_slamtoolbox/params/gc_navigation_slam.yaml
	new file:   src/gc_navigation2_slamtoolbox/params/gc_navigation_slam.yaml.bak
	new file:   src/gc_navigation2_slamtoolbox/world/zhihui/model.config
	new file:   src/gc_navigation2_slamtoolbox/world/zhihui/model.sdf
	new file:   src/gc_navigation_fish/CMakeLists.txt
	new file:   src/gc_navigation_fish/launch/gc_navigation.launch.py
	new file:   src/gc_navigation_fish/maps/test_map.pgm
	new file:   src/gc_navigation_fish/maps/test_map.yaml
	new file:   src/gc_navigation_fish/package.xml
	new file:   src/gc_navigation_fish/param/gc_navigation.yaml
	new file:   src/gc_navigation_fish/param/navigation_test.yaml
	new file:   src/gc_slam_toolbox_fish/CMakeLists.txt
	new file:   src/gc_slam_toolbox_fish/config/gc_2d.lua
	new file:   src/gc_slam_toolbox_fish/launch/catograph.launch.py
	new file:   src/gc_slam_toolbox_fish/package.xml
	new file:   src/ground_slam/.gitignore
	new file:   src/ground_slam/CMakeLists.txt
	new file:   src/ground_slam/LICENSE.md
	new file:   src/ground_slam/README.md
	new file:   src/ground_slam/cmake/FindEigen3.cmake
	new file:   src/ground_slam/cmake/FindFFTW3.cmake
	new file:   src/ground_slam/configs/config_HD.yaml
	new file:   src/ground_slam/configs/config_geekplus.yaml
	new file:   src/ground_slam/configs/config_ntu.yaml
	new file:   src/ground_slam/figures/data_association.jpg
	new file:   src/ground_slam/figures/features_small.jpg
	new file:   src/ground_slam/figures/fig1.jpg
	new file:   src/ground_slam/figures/loop_error.jpg
	new file:   src/ground_slam/figures/loop_trajectory.jpg
	new file:   src/ground_slam/figures/pipeline.png
	new file:   src/ground_slam/figures/rmse_curve.jpg
	new file:   src/ground_slam/figures/sample_images.jpg
	new file:   src/ground_slam/figures/trajectory.jpg
	new file:   src/ground_slam/figures/video.png
	new file:   src/ground_slam/include/camera.h
	new file:   src/ground_slam/include/circ_shift.h
	new file:   src/ground_slam/include/correlation_flow.h
	new file:   src/ground_slam/include/dataset.h
	new file:   src/ground_slam/include/edge.h
	new file:   src/ground_slam/include/frame.h
	new file:   src/ground_slam/include/loop_closure.h
	new file:   src/ground_slam/include/map.h
	new file:   src/ground_slam/include/map_builder.h
	new file:   src/ground_slam/include/map_stitcher.h
	new file:   src/ground_slam/include/optimization_2d/angle_local_parameterization.h
	new file:   src/ground_slam/include/optimization_2d/normalize_angle.h
	new file:   src/ground_slam/include/optimization_2d/pose_graph_2d.h
	new file:   src/ground_slam/include/optimization_2d/pose_graph_2d_error_term.h
	new file:   src/ground_slam/include/optimization_2d/types.h
	new file:   src/ground_slam/include/read_configs.h
	new file:   src/ground_slam/include/thread_publisher.h
	new file:   src/ground_slam/include/timer.h
	new file:   src/ground_slam/include/utils.h
	new file:   src/ground_slam/include/visualization.h
	new file:   src/ground_slam/main.cpp
	new file:   src/ground_slam/package.xml
	new file:   src/ground_slam/src/camera.cc
	new file:   src/ground_slam/src/correlation_flow.cc
	new file:   src/ground_slam/src/dataset.cc
	new file:   src/ground_slam/src/edge.cc
	new file:   src/ground_slam/src/frame.cc
	new file:   src/ground_slam/src/loop_closure.cc
	new file:   src/ground_slam/src/map.cc
	new file:   src/ground_slam/src/map_builder.cc
	new file:   src/ground_slam/src/map_stitcher.cc
	new file:   src/ground_slam/src/optimization_2d/pose_graph_2d.cc
	new file:   src/ground_slam/src/thread_publisher.cc
	new file:   src/ground_slam/src/timer.cc
	new file:   src/ground_slam/src/utils.cc
	new file:   src/ground_slam/src/visualization.cc
	new file:   src/ground_slam/supplementary/GroundSLAM_Supplement_Materia.pdf
	new file:   src/origincar_base/CMakeLists.txt
	new file:   src/origincar_base/config/ekf.yaml
	new file:   src/origincar_base/config/imu.yaml
	new file:   src/origincar_base/include/origincar_base/Quaternion_Solution.h
	new file:   src/origincar_base/include/origincar_base/origincar_base.h
	new file:   src/origincar_base/launch/__pycache__/testtwo.launch.cpython-38.pyc
	new file:   src/origincar_base/launch/base_serial.launch.py
	new file:   src/origincar_base/launch/ekf.launch.py
	new file:   src/origincar_base/launch/origincar_bringup.launch.py
	new file:   src/origincar_base/launch/robot_mode_description.launch.py
	new file:   src/origincar_base/msg/Position.msg
	new file:   src/origincar_base/package.xml
	new file:   src/origincar_base/scripts/__pycache__/cmd_vel_to_ackermann_drive.cpython-310.pyc
	new file:   src/origincar_base/scripts/cmd_vel_to_ackermann_drive.py
	new file:   src/origincar_base/src/Quaternion_Solution.cpp
	new file:   src/origincar_base/src/origincar_base.cpp
	new file:   src/origincar_base/src/origincar_base.cpp.bak
	new file:   src/origincar_description/CMakeLists.txt
	new file:   src/origincar_description/CMakeLists.txt.save
	new file:   src/origincar_description/config/joint_names_origincar_description.yaml
	new file:   src/origincar_description/config/joint_names_origincar_description.yaml:Zone.Identifier
	new file:   "src/origincar_description/config/joint_names_origincar_description.yaml\357\200\272Zone.Identifier"
	new file:   src/origincar_description/launch/display.launch
	new file:   src/origincar_description/launch/display.launch.py
	new file:   src/origincar_description/launch/gazebo.launch
	new file:   src/origincar_description/launch/gazebo.launch.py
	new file:   src/origincar_description/meshes/base_link.STL
	new file:   src/origincar_description/meshes/base_link.STL:Zone.Identifier
	new file:   "src/origincar_description/meshes/base_link.STL\357\200\272Zone.Identifier"
	new file:   src/origincar_description/meshes/down_left_Link.STL
	new file:   src/origincar_description/meshes/down_left_Link.STL:Zone.Identifier
	new file:   "src/origincar_description/meshes/down_left_Link.STL\357\200\272Zone.Identifier"
	new file:   src/origincar_description/meshes/down_right_Link.STL
	new file:   src/origincar_description/meshes/down_right_Link.STL:Zone.Identifier
	new file:   "src/origincar_description/meshes/down_right_Link.STL\357\200\272Zone.Identifier"
	new file:   src/origincar_description/meshes/up_left_Link.STL
	new file:   src/origincar_description/meshes/up_left_Link.STL:Zone.Identifier
	new file:   "src/origincar_description/meshes/up_left_Link.STL\357\200\272Zone.Identifier"
	new file:   src/origincar_description/meshes/up_right_Link.STL
	new file:   src/origincar_description/meshes/up_right_Link.STL:Zone.Identifier
	new file:   "src/origincar_description/meshes/up_right_Link.STL\357\200\272Zone.Identifier"
	new file:   src/origincar_description/package.xml
	new file:   src/origincar_description/rviz/README
	new file:   src/origincar_description/rviz/display.rviz
	new file:   src/origincar_description/urdf/origincar.urdf
	new file:   src/origincar_description/urdf/origincar.xacro
	new file:   src/origincar_description/world/fishbot.world
	new file:   src/origincar_description/world/gc_world.world
	new file:   src/origincar_description/world/test.world
	new file:   src/origincar_description/world/zhihui.world
	new file:   src/origincar_msg/CMakeLists.txt
	new file:   src/origincar_msg/msg/Data.msg
	new file:   src/origincar_msg/msg/Sign.msg
	new file:   src/origincar_msg/package.xml
	new file:   src/zbw_slamtoolbox/CMakeLists.txt
	new file:   src/zbw_slamtoolbox/config/mapper_params_online_async.yaml
	new file:   src/zbw_slamtoolbox/config/mapper_params_online_sync copy.yaml
	new file:   src/zbw_slamtoolbox/config/navigation.yaml
	new file:   src/zbw_slamtoolbox/launch/navigation.launch.py
	new file:   src/zbw_slamtoolbox/launch/slamtoolbox.launch.py
	new file:   src/zbw_slamtoolbox/package.xml
	new file:   "\347\253\236\350\265\233\346\226\271\346\241\210_\347\254\25421\345\261\212\346\231\272\350\203\275\346\261\275\350\275\246\347\253\236\350\265\233\345\234\260\347\223\234\346\234\272\345\231\250\344\272\272\350\265\233\351\241\271.md"
	new file:   "\350\260\203\350\257\225\350\256\260\345\275\225.log"
2026-06-13 19:55:01 +08:00

129 lines
4.9 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# 退出码说明
# 0 - 成功
# 1 - 错误等待TTY设备就绪超时
# 2 - 错误未找到CH343驱动
# 3 - 错误未找到含Qingheng的USB设备
# 4 - 错误未找到对应USB地址
# 5 - 错误未找到cdc_acm绑定的对应USB设备
# 6 - 错误解绑cdc_acm驱动失败
# 7 - 错误绑定usb_ch343驱动失败
# 变量设置
TTY_DEVICE="/dev/ttyACM*" # 替换为你要等待的tty设备路径
CDC_ACM_PATH="/sys/bus/usb/drivers/cdc_acm"
USB_CH343_PATH="/sys/bus/usb/drivers/usb_ch343"
CHECK_INTERVAL=1 # 检查设备就绪的时间间隔(秒)
MAX_WAIT_SECONDS=30 # 最大等待时间0表示无限等待
# 初始化变量
start_time=$(cut -d. -f1 /proc/uptime)
current_time=0
qinheng_id=""
usb_address=""
vendor_id=""
product_id=""
cdc_acm_sub_addr=""
# ----------------- 1. 等待TTY设备就绪 -----------------
# 循环等待tty设备就绪检查设备节点是否存在+是否可读写)
while true; do
for dev in /dev/ttyACM*; do
[ -e "$dev" ] || continue
if [ -c "$dev" ] && [ -r "$dev" ] && [ -w "$dev" ]; then
echo "[雷达驱动自动切换程序] 设备 $dev 已就绪!" > /dev/kmsg
TTY_DEVICE="$dev"
break 2 # 跳出两层循环
fi
done
if [ ${MAX_WAIT_SECONDS} -gt 0 ]; then
current_time=$(cut -d. -f1 /proc/uptime)
elapsed_seconds=$((current_time - start_time))
if [ ${elapsed_seconds} -ge ${MAX_WAIT_SECONDS} ]; then
echo "[雷达驱动自动切换程序] 错误:等待 ${TTY_DEVICE} 超时(${MAX_WAIT_SECONDS}秒)!" > /dev/kmsg
exit 1
fi
echo "[雷达驱动自动切换程序] 仍在等待${TTY_DEVICE}(已等待${elapsed_seconds}秒)..." > /dev/kmsg
fi
sleep ${CHECK_INTERVAL}
done
# ------ 2. 查看CH343是否存在 ------
if ls /sys/bus/usb/drivers/usb_ch343 > /dev/null 2>&1; then
echo "[雷达驱动自动切换程序] 检测到CH343驱动存在继续执行..." > /dev/kmsg
else
echo "[雷达驱动自动切换程序] 错误未找到CH343驱动" > /dev/kmsg
exit 2
fi
# ------------- 3. 查找Qingheng对应的usb接口 -------------
echo "[雷达驱动自动切换程序] 开始提取QinHeng设备ID..." > /dev/kmsg
# 执行lsusb并过滤含QinHeng的行提取ID核心逻辑
qinheng_id=$(lsusb | grep "QinHeng" | awk '{print $6}' | head -n 1)
# 检查是否提取到ID
if [ -z "${qinheng_id}" ]; then
echo "[雷达驱动自动切换程序] 错误未找到含QinHeng的USB设备" > /dev/kmsg
exit 3
else
echo "[雷达驱动自动切换程序] 成功提取QinHeng设备ID${qinheng_id}" > /dev/kmsg
# 将ID拆分为vendor_id和product_id
vendor_id=$(echo "${qinheng_id}" | cut -d ':' -f 1)
product_id=$(echo "${qinheng_id}" | cut -d ':' -f 2)
fi
# -------------------- 4. 提取USB地址 --------------------
echo "[雷达驱动自动切换程序] 开始查找idVendor=${vendor_id},idProduct=${product_id}的USB地址..." > /dev/kmsg
# 核心命令过滤dmesg日志提取USB地址
usb_address=$(dmesg | grep -E "idVendor=${vendor_id}, idProduct=${product_id}" | grep -oE "usb [0-9]+-[0-9.]+:" | awk '{print $2}' | sed 's/://' | tail -n 1)
# 检查是否提取到USB地址
if [ -z "${usb_address}" ]; then
echo "[雷达驱动自动切换程序] 错误未找到对应USB地址" > /dev/kmsg
exit 4
else
echo "[雷达驱动自动切换程序] 成功找到USB地址${usb_address}" > /dev/kmsg
fi
# ---- 5. 找到cdc_acm驱动对应的usb设备 ----
echo "[雷达驱动自动切换程序] 开始从${CDC_ACM_PATH}提取${usb_address}对应的子地址..." > /dev/kmsg
cdc_acm_sub_addr=$(ls "${CDC_ACM_PATH}" 2>/dev/null | grep "^${usb_address}:" | head -n 1)
if [ -z "${cdc_acm_sub_addr}" ]; then
echo "[雷达驱动自动切换程序] 错误:${CDC_ACM_PATH}中未找到${usb_address}绑定的对应USB设备" > /dev/kmsg
exit 5
else
echo "[雷达驱动自动切换程序] 成功提取cdc_acm子地址${cdc_acm_sub_addr}" > /dev/kmsg
fi
# 6. 切换驱动
echo "[雷达驱动自动切换程序] 开始切换cdc_acm驱动到USB地址${usb_address}..." > /dev/kmsg
echo "${cdc_acm_sub_addr}" | sudo tee "${CDC_ACM_PATH}/unbind" 2>/dev/null
if [ $? -eq 0 ]; then
echo "[雷达驱动自动切换程序] 成功解绑cdc_acm驱动${cdc_acm_sub_addr}" > /dev/kmsg
else
echo "[雷达驱动自动切换程序] 错误解绑cdc_acm驱动失败" > /dev/kmsg
exit 6
fi
echo "${cdc_acm_sub_addr}" | sudo tee "${USB_CH343_PATH}/bind" 2>/dev/null
if [ $? -eq 0 ]; then
echo "[雷达驱动自动切换程序] 成功绑定usb_ch343驱动${cdc_acm_sub_addr}" > /dev/kmsg
else
echo "[雷达驱动自动切换程序] 错误绑定usb_ch343驱动失败检查驱动是否加载" > /dev/kmsg
exit 7
fi
# 执行完成
echo "[雷达驱动自动切换程序] 雷达驱动自动切换完毕!" > /dev/kmsg
exit 0