定义OnComm函数如下,接收字符数据即开始执行,判断为哪什么数据,若是GPGGA的信息将会显示在接收文本框中。
界面图片
- /*------------------------------------------------------
- * OnComm函数实现
- * 触发条件:当输入缓冲区有字符时,有消息触发
- * 执行结果:字符接收,并显示在文本框m_strEditReceiveMsg
- *------------------------------------------------------*/
- #define CR 0x0D //定义回车
- #define LF 0x0A //定义换行
- LONG CReadGPSView::OnComm(WPARAM ch, LPARAM port)
- {
- /*------------------------------------------------------
- * 声明变量:静态变量连续接收字符并保存
- * 普通变量
- *------------------------------------------------------*/
- static char checkSum = 0;//异或交验
- static int count = 0;
- static unsigned char buf[20];
- static char chigh,clow;//用于交验,计算半
- static int flag = -1;//用于标记“接收阶段”
- /*------------------------------------------------------
- * 判断接受信息(只接收GPGGA信息)
- * $GPGGA,135105.000,3605.1204,N,12022.0206,E,1,03,8.5,
- * 53.0,M,-3.2,M,,0000*7B
- *------------------------------------------------------*/
- switch(ch)
- {
- //包首
- case '$':
- checkSum = 0;//开始计算checksum交验值
- flag = 0;
- m_strPortRxData.Empty();
- m_strPortRxData += ch;//接受字符
- break;
- //包尾
- case '*':
- if ( flag ==5 )
- {
- flag = 16;
- m_strPortRxData += ch;//接受字符
- clow = checkSum & 0x0F;//接收交验码低四位
- chigh = ( checkSum >> 4 ) & 0x0F;//接收交验码高四位
- //计算校验码转化后的字符。
- if ( clow < 10 )
- clow = '0' + clow;
- else