/******************* Start Scan ***************/ void CMainFrame:: OnStartscan() { if(SIO_OK!=sio_open(Port)) { MessageBox("串口打开错误"); return; } else { sio_ioctl(Port,BaudRate,DataBits | StopBits | Parity); sio_cnt_irq(Port,CntIrq,1); } Scan_num=0; OnBtnSend(num); //OnBtnSend('1'); }
/*************************************************************** 【函数功能】: 打开串口 【输 入】: port:串口号(默认0)。【构造函数时也可指定串口号】 【输 出】: 执行结果:0正确,-1错误。 【说 明】: 正确用法有3种:<1> CGyro *p = new CGyro(n); p->open(); <2> CGyro *p = new CGyro(n); p->open(n); <3> CGyro *p = new CGyro; p->open(n); ***************************************************************/ int CGyro::Open(int port) { if(m_bPortOpened) return 1; // 读取配置 string iniFile = string(INI_FILE); //if (mrpt::system::fileExists(iniFile) == false) // INI 文件找不到 //{ // cout << "!Gyro惯导:start():找不到ini文件!" << iniFile << endl; // return -1; //} // ini文件在主窗口init时检查一次即可,不存在则退出 mrpt::utils::CConfigFile INI_Cfg(iniFile); m_iPort = INI_Cfg.read_int("Gyro", "COM_Port", 0); // 如果形参有传入,则以传入值为主,并修改ini文件 if (port > 0) { INI_Cfg.write("Gyro", "COM_Port", port); // 用传入形参更新配置文件数据 m_iPort = port; } else { if (m_iPort <= 0) { cout<<"[!!!] Gyro: 必须指定一个大于0的串口号!"<<endl; return -1; } } // 打开串口 if(sio_open(m_iPort) != SIO_OK) { cout<<"[!!!] Gyro: 打开串口错误!"<<endl; return -1; } sio_ioctl(m_iPort, B115200, P_NONE | BIT_8 | STOP_1 ); sio_cnt_irq(m_iPort,RecvCall, 1); m_bPortOpened = true; cout<<"[+] Gyro: Started!"<<endl; return 0; }
/*************************************************************** 【函数功能】: 打开串口 【输 入】: port:串口号(默认0)。【构造函数时也可指定串口号】 【输 出】: 执行结果:0正确,-1错误。 【说 明】: 正确用法有3种:<1> CSensor *p = new CSensor(n); p->open(); <2> CSensor *p = new CSensor(n); p->open(n); <3> CSensor *p = new CSensor; p->open(n); ***************************************************************/ int CSensor::Open(int port) { if(m_bPortOpened) return -1; // 读取配置 string iniFile = string(INI_FILE); //if (mrpt::system::fileExists(iniFile) == false) // INI 文件找不到 //{ // cout << "!Sensor传感:start():找不到ini文件!" << iniFile << endl; // return -1; //} // ini文件在主窗口init时检查一次即可,不存在则退出 mrpt::utils::CConfigFile INI_Cfg(iniFile); m_iPort = INI_Cfg.read_int("Sensor", "COM_Port", 0); // 读取传感器位置及配置 std::vector<double> aux; // Auxiliar vector std::stringstream sname; for (int i=0; i<NUM_OF_USENSOR; i++) { sname.str(""); sname.clear(); sname<<"pose"<<i; INI_Cfg.read_vector("Sensor", sname.str(), aux, aux, false); m_pUS[i].pose = TPose3D( aux[0], aux[1], aux[2], DEG2RAD( (double)aux[3]), DEG2RAD( (double)aux[4]), DEG2RAD( (double)aux[5]) ); m_pUS[i].stopZone = (double)aux[6]; m_pUS[i].id = i; m_pUS[i].distance = 2.0; // 初始值设为2m m_pUS[i].bValid = true; // 初始化都有效 } m_timestamp_US = mrpt::system::now(); // 如果形参有传入,则以传入值为主,并修改ini文件 if (port > 0) { INI_Cfg.write("Sensor", "COM_Port", port); // 用传入形参更新配置文件数据 m_iPort = port; } else { if (m_iPort <= 0) { cout<<"[!!!] Sensor: 必须指定一个大于0的串口号!"<<endl; return -1; } } // 打开串口 if(sio_open(m_iPort) != SIO_OK) { cout<<"[!!!] Sensor: 打开串口错误!"<<endl; return -1; } sio_ioctl(m_iPort, B115200, P_NONE | BIT_8 | STOP_1 ); sio_cnt_irq(m_iPort,RecvCall, 1); // 创建发送线程 m_bSendThreadStopFlag = false; //m_hSendThreadHandle = CreateThread(NULL,NULL, // (LPTHREAD_START_ROUTINE)SendThread,this,NULL,NULL); m_hSendThreadHandle = (HANDLE)_beginthread(SendThread, 0, this); //////////////////////////////// m_bPortOpened = true; cout<<"[+] Sensor: Started !"<<endl; return 0; }