赞
踩
效果:RTK线口输出GPGGA经过六分sdk把GPGGA数据传输到六分服务器,然后六分服务器通过一个回调函数下发RTCM数据,经过星网宇达惯导内部解析生成GPFPD数据从串口助手显示。
一、打开串口,设置标志位,设置波特率
int c=0, res;
printf("uart Start...\n");
fd = open(UART_DEVICE, O_RDWR|O_NOCTTY);
if (fd < 0) {
perror(UART_DEVICE);
exit(1);
}
printf("uart Open...\n");
set_speed(fd,115200);
if (set_parity(fd,8,1,'N') == FALSE) {
printf("Set Parity Error\n");
exit (0);
}
二、经过循环,分别三个状态:初始化、start、work
while (SIXENTS_TRUE) { usleep(200 * 1000); // 200ms /**************************************** * csdk_run_step: 0 sdk init * 1 sdk start * 2 work ****************************************/ switch (csdk_run_step) { case 0: { retVal = sixents_sdkInit(¶m); if (retVal != SIXENTS_RET_OK) { printf("---MAIN case 0| sixents_sdkInit failed! retVal:%d.\r\n", retVal); sixents_sdkFinal(); } else { retVal = sixents_sdkSetBuff(SIXENTS_BUFF_BIG); printf("---MAIN case 0| sixents_sdkInit success---\r\n"); csdk_run_step = 1; } } break; case 1: { printf("---MAIN case 1| sixents_sdkStart start---\r\n"); retVal = sixents_sdkStart(); if (retVal != SIXENTS_RET_OK) { printf("---MAIN case 1| sixents_sdkStart failed! retVal:%d ---\r\n", retVal); usleep(1000 * 1000); // 0.3s } else { printf("---MAIN case 1| sixents_sdkStart success---\r\n"); csdk_run_step = 2; } } break; case 2: { //if ((count < 11 && (count % 5) == 0) || (count > 320 && (count % 5) == 0)) // 模拟60s不发送gga断开连接 if ((count % 5) == 0) // 1s发送一次GGA { res = read(fd, buf, 90); if(res==0) continue; buf[res]=0; printf("send gga is: %s\n",buf); //sixents_char gga_temp[3]; printf("buf_len %d\n",strlen(buf)); retVal = sixents_sdkSendGGAStr(buf, strlen(buf)); if (retVal != SIXENTS_RET_OK) { printf("%s| Send GGA failed with error: %d.\n", __FUNCTION__, retVal); } } retVal = sixents_sdkTick(); if (retVal != SIXENTS_RET_OK) { printf("%s| sdkTick failed with error: %d.\n", __FUNCTION__, retVal); } count++; } break; default: printf("[six-log]:switch nothing\r\n"); break; } // check suspend flag and suspend task // if (Six_RTK_State_Flag == 0) //{ // csdk_run_step = 0; // state to 0 // // suspend csdk task and printf log // sixents_sdkFinal(); // printf("[six-log]:*4-suspend sixents_task_CSDK !\r\n"); //} } // while return retVal; }
使用read函数从fd指向的串口里面读取gga数据存放到buf中,然后通过
retVal = sixents_sdkSendGGAStr(buf, strlen(buf));这条语句发送到六分平台,六分平台接收gga数据,把差分数据通过回调函数下发显示。
三、回调函数显示差分数据
void GetDiffData(const sixents_char* buff, sixents_uint32 len) { sixents_uint32 i; int res = 0; printf("len is: %d\n",len); // if (buff == sixents_null || len == 0) // { // return; // } // // ToDo: 以下应该修改为客户自己对差分数据处理的逻辑 char *str; str = (char *)malloc(2*len*sizeof(char)+2); for (i = 0; i < len; i++) { char str_temp[2]; //printf("%02x ", (sixents_uint8)buff[i]); sprintf(str_temp,"%02X",(sixents_uint8)buff[i]); strcpy(&str[i*2],str_temp); //write(fd,str,sizeof(str)); } str[2*len*sizeof(char)] = '\r'; str[2*len*sizeof(char)+1] = '\n'; printf("%s",str); //close(fd); char *fd_str; fd_str = (char *)malloc(len+2); for(int i=0;i<len;i++) { fd_str[i] = buff[i]; } fd_str[len] = '\r'; fd_str[len+1] = '\n'; fd = open(UART_DEVICE, O_RDWR|O_NOCTTY); write(fd,fd_str,len+2); for (i = 0; i < len; i++) { //printf("%02X ", ( sixents_uint8 )buff[i]); //if ((i + 1) % 80u == 0) //{ //printf("\n"); //} } printf("\n"); //printf("\r\n"); }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。