feat: demos目录下的测试demo也需要根据平台来开启feature;
This commit is contained in:
parent
9733640728
commit
080b1d1b64
@ -5,6 +5,10 @@ edition = "2021"
|
|||||||
authors = ["Meteor Detection Team"]
|
authors = ["Meteor Detection Team"]
|
||||||
description = "Demonstration programs for the Meteor Detection System"
|
description = "Demonstration programs for the Meteor Detection System"
|
||||||
|
|
||||||
|
[features]
|
||||||
|
default = []
|
||||||
|
gpio = ["meteor_detect/gpio"] # Pass gpio feature to the main project
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
meteor_detect = { path = ".." }
|
meteor_detect = { path = ".." }
|
||||||
tokio = { version = "1", features = ["full"] }
|
tokio = { version = "1", features = ["full"] }
|
||||||
|
|||||||
64
demos/README.md
Normal file
64
demos/README.md
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
# Meteor Detection System Demos
|
||||||
|
|
||||||
|
这个目录包含了流星检测系统的演示程序。
|
||||||
|
|
||||||
|
## 编译说明
|
||||||
|
|
||||||
|
### 自动编译(推荐)
|
||||||
|
|
||||||
|
使用提供的构建脚本,它会自动检测平台并启用相应的功能:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 自动检测平台并编译
|
||||||
|
./build_demos.sh
|
||||||
|
|
||||||
|
# 编译 release 版本
|
||||||
|
./build_demos.sh release
|
||||||
|
```
|
||||||
|
|
||||||
|
### 手动编译
|
||||||
|
|
||||||
|
#### 在树莓派上
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 编译所有 demos(启用 GPIO 功能)
|
||||||
|
cargo build --features gpio
|
||||||
|
|
||||||
|
# 编译并运行特定的 demo
|
||||||
|
cargo run --bin camera_demo --features gpio
|
||||||
|
cargo run --bin watermark_demo --features gpio
|
||||||
|
cargo run --bin file_input_demo --features gpio
|
||||||
|
cargo run --bin star_chart_demo --features gpio
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 在其他平台上
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 编译所有 demos(不启用 GPIO 功能)
|
||||||
|
cargo build
|
||||||
|
|
||||||
|
# 编译并运行特定的 demo
|
||||||
|
cargo run --bin camera_demo
|
||||||
|
cargo run --bin watermark_demo
|
||||||
|
cargo run --bin file_input_demo
|
||||||
|
cargo run --bin star_chart_demo
|
||||||
|
```
|
||||||
|
|
||||||
|
## 可用的演示程序
|
||||||
|
|
||||||
|
1. **camera_demo** - 摄像头演示
|
||||||
|
2. **watermark_demo** - 水印叠加演示
|
||||||
|
3. **file_input_demo** - 文件输入演示
|
||||||
|
4. **star_chart_demo** - 星图绘制演示
|
||||||
|
|
||||||
|
## 错误解决
|
||||||
|
|
||||||
|
如果遇到 `failed to resolve: use of undeclared crate or module 'rppal'` 错误:
|
||||||
|
|
||||||
|
1. 确保在树莓派上使用 `--features gpio` 参数
|
||||||
|
2. 或者使用自动构建脚本 `./build_demos.sh`
|
||||||
|
3. 检查是否正确检测到了树莓派平台
|
||||||
|
|
||||||
|
## 依赖关系
|
||||||
|
|
||||||
|
demos 项目依赖于主项目的功能,当启用 `gpio` feature 时,会同时启用主项目的 GPIO 支持。
|
||||||
84
demos/build.rs
Normal file
84
demos/build.rs
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
use std::process::Command;
|
||||||
|
use std::env;
|
||||||
|
use std::fs;
|
||||||
|
use std::path::Path;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
// 检测当前是否在树莓派上
|
||||||
|
let is_raspberry_pi = detect_raspberry_pi();
|
||||||
|
|
||||||
|
// 自动启用GPIO功能(仅当是树莓派时)
|
||||||
|
if is_raspberry_pi {
|
||||||
|
println!("cargo:rustc-cfg=feature=\"gpio\"");
|
||||||
|
println!("cargo:warning=Raspberry Pi detected, enabling gpio feature for demos");
|
||||||
|
} else {
|
||||||
|
println!("cargo:warning=Not running on Raspberry Pi, gpio feature NOT enabled for demos");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn detect_raspberry_pi() -> bool {
|
||||||
|
// 方法1: 检查是否是Linux系统(必要条件)
|
||||||
|
let is_linux = env::consts::OS == "linux";
|
||||||
|
if !is_linux {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 方法2: 检查/proc/cpuinfo是否包含Raspberry Pi的特征
|
||||||
|
if let Ok(cpuinfo) = fs::read_to_string("/proc/cpuinfo") {
|
||||||
|
if cpuinfo.contains("Raspberry Pi") ||
|
||||||
|
cpuinfo.contains("BCM2708") ||
|
||||||
|
cpuinfo.contains("BCM2709") ||
|
||||||
|
cpuinfo.contains("BCM2710") ||
|
||||||
|
cpuinfo.contains("BCM2711") ||
|
||||||
|
cpuinfo.contains("BCM2835") ||
|
||||||
|
cpuinfo.contains("BCM2836") ||
|
||||||
|
cpuinfo.contains("BCM2837") ||
|
||||||
|
cpuinfo.contains("BCM2838") {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 方法3: 检查树莓派特有的设备树模型文件
|
||||||
|
if let Ok(model) = fs::read_to_string("/sys/firmware/devicetree/base/model") {
|
||||||
|
if model.contains("Raspberry Pi") {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 方法4: 检查是否存在树莓派特有的库
|
||||||
|
let lib_check = Command::new("ldconfig")
|
||||||
|
.args(["-p"])
|
||||||
|
.output()
|
||||||
|
.ok()
|
||||||
|
.and_then(|output| {
|
||||||
|
if output.status.success() {
|
||||||
|
let libraries = String::from_utf8_lossy(&output.stdout);
|
||||||
|
if libraries.contains("librpgpio") || libraries.contains("libraspberrypi") {
|
||||||
|
Some(true)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if lib_check.is_some() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 方法5: 检查树莓派特有的配置文件
|
||||||
|
if Path::new("/boot/config.txt").exists() || Path::new("/boot/firmware/config.txt").exists() {
|
||||||
|
// 这个文件在大多数树莓派系统上存在
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查是否在CARGO_FEATURE_GPIO环境变量中强制启用
|
||||||
|
// 这允许用户手动启用GPIO功能(覆盖自动检测)
|
||||||
|
if env::var("CARGO_FEATURE_GPIO").is_ok() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 否则默认为false
|
||||||
|
false
|
||||||
|
}
|
||||||
100
demos/build_demos.sh
Executable file
100
demos/build_demos.sh
Executable file
@ -0,0 +1,100 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# 检测平台并编译 demos 的脚本
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# 检测是否在树莓派上
|
||||||
|
detect_raspberry_pi() {
|
||||||
|
# 检查是否是Linux系统
|
||||||
|
if [[ "$OSTYPE" != "linux-gnu"* ]]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查CPU信息
|
||||||
|
if grep -q "Raspberry Pi\|BCM2708\|BCM2709\|BCM2710\|BCM2711\|BCM2835\|BCM2836\|BCM2837\|BCM2838" /proc/cpuinfo 2>/dev/null; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查设备树模型文件
|
||||||
|
if grep -q "Raspberry Pi" /sys/firmware/devicetree/base/model 2>/dev/null; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查配置文件
|
||||||
|
if [[ -f "/boot/config.txt" ]] || [[ -f "/boot/firmware/config.txt" ]]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# 主编译逻辑
|
||||||
|
main() {
|
||||||
|
echo "检测运行平台..."
|
||||||
|
|
||||||
|
if detect_raspberry_pi; then
|
||||||
|
echo "✓ 检测到树莓派平台"
|
||||||
|
echo "编译 demos 时启用 GPIO 功能..."
|
||||||
|
|
||||||
|
if [[ "$1" == "release" ]]; then
|
||||||
|
echo "编译 release 版本..."
|
||||||
|
cargo build --release --features gpio
|
||||||
|
else
|
||||||
|
echo "编译 debug 版本..."
|
||||||
|
cargo build --features gpio
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✓ demos 编译完成(包含 GPIO 支持)"
|
||||||
|
else
|
||||||
|
echo "✓ 检测到非树莓派平台"
|
||||||
|
echo "编译 demos 时不启用 GPIO 功能..."
|
||||||
|
|
||||||
|
if [[ "$1" == "release" ]]; then
|
||||||
|
echo "编译 release 版本..."
|
||||||
|
cargo build --release
|
||||||
|
else
|
||||||
|
echo "编译 debug 版本..."
|
||||||
|
cargo build
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✓ demos 编译完成(模拟模式)"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 显示帮助信息
|
||||||
|
show_help() {
|
||||||
|
echo "用法: $0 [release]"
|
||||||
|
echo ""
|
||||||
|
echo "选项:"
|
||||||
|
echo " release 编译 release 版本"
|
||||||
|
echo " help 显示此帮助信息"
|
||||||
|
echo ""
|
||||||
|
echo "脚本会自动检测是否在树莓派上运行,并相应地启用或禁用 GPIO 功能。"
|
||||||
|
echo ""
|
||||||
|
echo "运行特定 demo:"
|
||||||
|
echo " cargo run --bin camera_demo [--features gpio]"
|
||||||
|
echo " cargo run --bin watermark_demo [--features gpio]"
|
||||||
|
echo " cargo run --bin file_input_demo [--features gpio]"
|
||||||
|
echo " cargo run --bin star_chart_demo [--features gpio]"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 检查参数
|
||||||
|
case "${1:-}" in
|
||||||
|
"help"|"-h"|"--help")
|
||||||
|
show_help
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
"")
|
||||||
|
main
|
||||||
|
;;
|
||||||
|
"release")
|
||||||
|
main release
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "错误: 未知参数 '$1'"
|
||||||
|
echo ""
|
||||||
|
show_help
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
Loading…
x
Reference in New Issue
Block a user