//开始接收GPS信号 void CGpsDlg::OnButtonStartreceivegps() { //判断串口的状态,如果是关闭状态,则打开 if(!m_Comm.GetPortOpen() ) //打开串口 m_Comm.SetPortOpen(TRUE); UpdateData(TRUE); } //停止接收GPS的信号 void CGpsDlg::OnButtonEndreceivegps(); { //判断串口的状态,如果是打开状态,则关闭 if( m_Comm.GetPortOpen() ) m_Comm.SetPortOpen(FALSE); UpdateData(FALSE); } //相应的OnComm事件处理 void CGpsDlg::OnComm() { m_comdata.Empty(); VARIANT m_input1; COleSafeArray m_input2; LONG length,i; BYTE data[1024]; CString str; //接收缓冲区内字符 if(m_Comm.GetCommEvent()== 2) { m_comdata.Empty(); //读取缓冲区内的数据 m_input1=m_Comm.GetInput(); //将VARIANT型变量转换为ColeSafeArray型变量 m_input2=m_input1; //确定数据长度 length=m_input2.GetOneDimSize(); //将数据转换为BYTE型数组 for(i=0;i< length;i++) m_input2.GetElement(&i,data+i); //将数组转换为CString型变量 for(i=0;i< length;i++) { char a=* (char *)(data+i); str.Format(“%c',a); m_comdata += str; } /*在上面的程序中,先将VARIANT型变量 转换为ColeSafeArray型变量,再将其转换为 BYTE型数组,然后将数组转换为CString型变量, 以满足不同的变量类型显示数据的需要。*/ //提取GPS信号 CString m_zjz; m_zjz=m_comdata; //寻找GPS信号的头标志 int s; s=m_zjz.Find(“$GPRMC,'); CString m_gps; //NUM为所提取GPS信号的长度 m_gps=m_zjz.Mid(s,NUM); int x; x=m_gps.GetLength(); //信号长度不符合要求,则拒绝接收 if (x != NUM) { m_gps.Empty(); } //寻找所需要的GPS信号的头标志 int y; y=m_gps.Find(“$GPRMC,'); if (y != 0) { m_gps.Empty(); } //m-gpsdata是已声明的类成员变量 m_gpsdata=m_gps; } }
|