/* 本程序用于读取配置文件 根据配置文件发送高低电平 发送引脚固定:7,8 */ #include #include #include #include "/home/orangepi/RKApp/softWareInit/NetraLib/include/Netra.hpp" using namespace std; using namespace QCL; /* Parmas: argv[1]: GPIO引脚编号 argv[2]: 设置引脚为高/低电平 */ const string SetFile = "/home/orangepi/InitAuth/conf/.env"; // 初始化GPIO引脚 int InitGpio(int GPIO_Pin1, int GPIO_Pin2); // 写入GPIO引脚 void WriteGpio(int GPIO_Pin, int value); // 获取输出模式 bool GetOutValue(int &value); int main(int argc, char *argv[]) { int GPIO_Pin1 = 7; int GPIO_Pin2 = 8; int value = 0; cout << "[sendGpioSignal] 启动,读取配置: " << SetFile << endl; if (GetOutValue(value) == false) { cerr << "[sendGpioSignal] 未读取到 outPutMode,程序退出" << endl; return -1; } cout << "[sendGpioSignal] 读取到 outPutMode=" << (value == 1 ? "true" : "false") << endl; // 初始化GPIO引脚 if (InitGpio(GPIO_Pin1, GPIO_Pin2) != 0) { cout << "Error: Failed to initialize GPIO pin " << endl; return 1; } // 写入GPIO引脚 cout << "[sendGpioSignal] 设置 GPIO(" << GPIO_Pin1 << "," << GPIO_Pin2 << ") 为 " << (value == 1 ? "HIGH" : "LOW") << endl; WriteGpio(GPIO_Pin1, value); WriteGpio(GPIO_Pin2, value); cout << "[sendGpioSignal] 完成" << endl; this_thread::sleep_for(chrono::milliseconds(100)); WriteGpio(GPIO_Pin1, !value); WriteGpio(GPIO_Pin2, !value); return 0; } // 获取输出模式 bool GetOutValue(int &value) { bool flag = true; // 读取文件 ReadFile *rf =new ReadFile(SetFile); if (rf->Open() == false) { cerr << "读取文件失败" << endl; flag = false; } auto str = rf->ReadLines(); for (auto &ii : str) { if (ii.find("outPutMode") != string::npos) { value = (ii.substr(string("outPutMode:").size()) == "true" ? 1 : 0); } } return flag; } // 初始化GPIO引脚 int InitGpio(int GPIO_Pin1, int GPIO_Pin2) { // 使用物理引脚编号,确保与实际排针一致 if (wiringPiSetupPhys() != 0) { return -1; // 初始化失败 } pinMode(GPIO_Pin1, OUTPUT); pinMode(GPIO_Pin2, OUTPUT); digitalWrite(GPIO_Pin1, LOW); // 默认设置为低电平 digitalWrite(GPIO_Pin2, LOW); // 默认设置为低电平 return 0; // 初始化成功 } // 写入GPIO引脚 void WriteGpio(int GPIO_Pin, int value) { digitalWrite(GPIO_Pin, value == 1 ? HIGH : LOW); }