0
0
Files
test/FlywheelHS-main.cpp

99 lines
2.9 KiB
C++

#include <iostream>
#include <csignal>
#include <cstdlib>
#include <string>
#include "FlywheelHS.h"
using namespace std;
// 全局变量用于信号处理
static bool running = true;
// 信号处理函数
void signal_handler(int signal) {
running = false;
cout << "[INFO] Received signal " << signal << ", shutting down..." << endl;
}
int main(int argc, char* argv[]) {
// 设置信号处理
signal(SIGINT, signal_handler);
signal(SIGTERM, signal_handler);
// 默认配置文件
string config_file = "FlywheelHS.json";
if (argc > 1) {
config_file = argv[1];
}
cout << "[INFO] Starting Flywheel Hardware Service" << endl;
cout << "[INFO] Loading configuration from: " << config_file << endl;
// 解析配置文件
const int MAX_CONFIGS = MAX_FLYWHEELS;
FlywheelConfig flywheel_configs[MAX_CONFIGS];
int config_count = parse_config_file(config_file.c_str(), flywheel_configs, MAX_CONFIGS);
if (config_count <= 0) {
cerr << "[ERROR] No valid flywheels configured" << endl;
return -1;
}
cout << "[INFO] Found " << config_count << " flywheels in configuration" << endl;
// 初始化飞轮设备
flywheel_count = 0;
for (int i = 0; i < config_count; i++) {
FlywheelConfig config = flywheel_configs[i];
// 验证ID范围
if (config.id >= MAX_FLYWHEELS) {
cerr << "[ERROR] Invalid flywheel ID: " << (int)config.id
<< ", must be less than " << MAX_FLYWHEELS << endl;
continue;
}
// 调用初始化函数
int result = flywheel_uart_init(config.id, config.device.c_str(),
config.baudrate, config.hardware_id);
if (result == SAT_ERR_OK) {
cout << "[OK] Flywheel " << (int)config.id << " initialized successfully" << endl;
flywheel_count++;
// 初始化缓存
flywheels[config.id].id = config.id;
flywheels[config.id].hardware_id = config.hardware_id;
flywheels[config.id].is_data_valid = 0;
// 初始化指令缓存
cmd_cache[config.id].has_cmd = 0;
} else {
cerr << "[ERROR] Failed to initialize flywheel " << (int)config.id
<< ": " << flywheel_strerror(result) << endl;
}
}
if (flywheel_count == 0) {
cerr << "[ERROR] No flywheels initialized successfully" << endl;
return -1;
}
// 初始化FastDDS
Fastdds_init(0, "Flywheel_Hardware_Service");
// 主循环
while (running) {
// 检查并接收串口数据(非阻塞)
int frames = check_and_receive_serial_data();
usleep(10000); // 10ms
}
// 清理
FlywheelHS_cleanup();
return 0;
}