예제 #1
0
}
/* start rtk server ----------------------------------------------------------*/
static int startsvr(vt_t *vt)
{
    double pos[3],npos[3];
    char s[3][MAXRCVCMD]={"","",""},*cmds[]={NULL,NULL,NULL};
    char *ropts[]={"","",""};
    char *paths[]={
        strpath[0],strpath[1],strpath[2],strpath[3],strpath[4],strpath[5],
        strpath[6],strpath[7]
    };
    int i,ret,stropt[8]={0};
    
    trace(3,"startsvr:\n");
    
    /* read start commads from command files */
    for (i=0;i<3;i++) {
        if (!*rcvcmds[i]) continue;
        if (!readcmd(rcvcmds[i],s[i],0)) {
            printvt(vt,"no command file: %s\n",rcvcmds[i]);
        }
        else cmds[i]=s[i];
    }
    /* confirm overwrite */
    for (i=3;i<8;i++) {
        if (strtype[i]==STR_FILE&&!confwrite(vt,strpath[i])) return 0;
    }
    if (prcopt.refpos==4) { /* rtcm */
        for (i=0;i<3;i++) prcopt.rb[i]=0.0;
    }
    pos[0]=nmeapos[0]*D2R;
    pos[1]=nmeapos[1]*D2R;
    pos[2]=0.0;
    pos2ecef(pos,npos);
    
    /* read antenna file */
    readant(vt,&prcopt,&svr.nav);
    
    /* open geoid data file */
    if (solopt[0].geoid>0&&!opengeoid(solopt[0].geoid,filopt.geoid)) {
        trace(2,"geoid data open error: %s\n",filopt.geoid);
        printvt(vt,"geoid data open error: %s\n",filopt.geoid);
    }
    for (i=0;*rcvopts[i].name;i++) modflgr[i]=0;
    for (i=0;*sysopts[i].name;i++) modflgs[i]=0;
    
    /* set stream options */
    stropt[0]=timeout;
    stropt[1]=reconnect;
    stropt[2]=1000;
    stropt[3]=buffsize;
    stropt[4]=fswapmargin;
    strsetopt(stropt);
    
    if (strfmt[2]==8) strfmt[2]=STRFMT_SP3;
    
    /* set ftp/http directory and proxy */
    strsetdir(filopt.tempdir);
    strsetproxy(proxyaddr);
    
    /* execute start command */
    if (*startcmd&&(ret=system(startcmd))) {
        trace(2,"command exec error: %s (%d)\n",startcmd,ret);
        printvt(vt,"command exec error: %s (%d)\n",startcmd,ret);
    }
    solopt[0].posf=strfmt[3];
    solopt[1].posf=strfmt[4];
    
    /* start rtk server */
    if (!rtksvrstart(&svr,svrcycle,buffsize,strtype,paths,strfmt,navmsgsel,
                     cmds,ropts,nmeacycle,nmeareq,npos,&prcopt,solopt,&moni)) {
        trace(2,"rtk server start error\n");
        printvt(vt,"rtk server start error\n");
        return 0;
    }
예제 #2
0
파일: rtkserver.c 프로젝트: ampimis/RtkGps
static jboolean RtkServer__rtksvrstart(JNIEnv* env, jclass thiz,
      jint j_cycle,
      jint j_buffsize,
      jintArray j_strs,
      jobjectArray j_paths,
      jintArray j_format,
      jint j_navsel,
      jobjectArray j_cmds,
      jobjectArray j_rcvopts,
      jint j_nmea_cycle,
      jint j_nmea_req,
      jdoubleArray j_nmeapos,
      jobject j_procopt,
      jobject j_solopt1,
      jobject j_solopt2
      ) {

   struct native_ctx_t *nctx;
   int i;
   jobject obj;
   jboolean res;

   /* Input stream types */
   int strs[8];
   /* input stream paths */
   const char *paths[8] = {NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL };
   jstring paths_jstring[8] = {NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL };
   /* input stream formats (STRFMT_???) */
   int format[3];
   /* input stream start commands */
   const char *cmds[3] = {NULL, NULL, NULL};
   jstring cmds_jstring[3] = {NULL, NULL, NULL};
   /* receiver options */
   const char *rcvopts[3] = {NULL, NULL, NULL};
   char *rcvopts_jstring[3] = {NULL, NULL, NULL};
   /* rtk processing options */
   prcopt_t prcopt;
   /* solution options */
   solopt_t solopt[2];
   /* nmea position */
   double nmeapos[3];

   res = JNI_FALSE;
   for (i=0; i<sizeof(paths)/sizeof(paths[0]); ++i) {
      paths_jstring[i] = (*env)->GetObjectArrayElement(env, j_paths, i);
      if ((*env)->ExceptionOccurred(env))
	 goto rtksvrstart_end;
      if (paths_jstring[i] != NULL) {
	 paths[i] = (*env)->GetStringUTFChars(env, paths_jstring[i], NULL);
	 if (paths[i] == NULL)
	    goto rtksvrstart_end;
      }
   }
   for (i=0; i<sizeof(cmds)/sizeof(cmds[0]); ++i) {
      cmds_jstring[i] = (*env)->GetObjectArrayElement(env, j_cmds, i);
      if ((*env)->ExceptionOccurred(env))
	 goto rtksvrstart_end;
      if (cmds_jstring[i] != NULL) {
	 cmds[i] = (*env)->GetStringUTFChars(env, cmds_jstring[i], NULL);
	 if (cmds[i] == NULL)
	    goto rtksvrstart_end;
      }
   }
   for (i=0; i<sizeof(rcvopts)/sizeof(rcvopts[0]); ++i) {
      rcvopts_jstring[i] = (*env)->GetObjectArrayElement(env, j_rcvopts, i);
      if ((*env)->ExceptionOccurred(env))
	 goto rtksvrstart_end;
      if (rcvopts_jstring[i] != NULL) {
	 rcvopts[i] = (*env)->GetStringUTFChars(env, rcvopts_jstring[i], NULL);
	 if (rcvopts[i] == NULL)
	    goto rtksvrstart_end;
      }
   }

   (*env)->GetIntArrayRegion(env, j_strs, 0,
	 sizeof(strs)/sizeof(strs[0]), strs);
   if ((*env)->ExceptionOccurred(env))
      goto rtksvrstart_end;

   (*env)->GetIntArrayRegion(env, j_format, 0,
	 sizeof(format)/sizeof(format[0]), format);
   if ((*env)->ExceptionOccurred(env))
      goto rtksvrstart_end;

   (*env)->GetDoubleArrayRegion(env, j_nmeapos, 0,
	 sizeof(nmeapos)/sizeof(nmeapos[0]), nmeapos);
   if ((*env)->ExceptionOccurred(env))
      goto rtksvrstart_end;

   solution_options2solopt_t(env, j_solopt1, &solopt[0]);
   solution_options2solopt_t(env, j_solopt2, &solopt[1]);

   nctx = (struct native_ctx_t *)(uintptr_t)(*env)->GetLongField(env, thiz, m_object_field);
   if (nctx == NULL) {
      LOGV("nctx is null");
      goto rtksvrstart_end;
   }

   {
      /* Open trace / solution files */
      gtime_t now;
      now = timeget();
      if (solopt[0].trace > 0)
	 open_trace_file(env, solopt[0].trace, now);

      /* treat processing options only now for having trace */
      processing_options2prcopt_t(env, j_procopt, &prcopt);

      if (solopt[0].sstat > 0)
	 open_solution_status_file(env, solopt[0].sstat, now);
   }

   if ((*env)->ExceptionOccurred(env))
      goto rtksvrstart_end;

    char errmsg[2048]="";                       //  Modif Mathieu Peyréga : adapt to new 2.4.3b26 API
    char *cmds_periodic[]={NULL,NULL,NULL};     //  Modif Mathieu Peyréga : adapt to new 2.4.3b26 API

   if (!rtksvrstart(
	    &nctx->rtksvr,
	    /* SvrCycle ms */ j_cycle,
	    /* SvrBuffSize */ j_buffsize,
	    /* stream types */ strs,
	    /* paths */ (char **)paths,
	    /* input stream format */ format,
	    /* NavSelect */ j_navsel,
	    /* input stream start commands */ (char **)cmds,
        /* input stream periodic  commands */ (char **)cmds_periodic,   //  Modif Mathieu Peyréga : adapt to new 2.4.3b26 API
	    /* receiver options */ (char **)rcvopts,
	    /* nmea request cycle ms */ j_nmea_cycle,
	    /* nmea request type */ j_nmea_req,
	    /* transmitted nmea position  */ nmeapos,
	    /* rtk processing options */&prcopt,
	    /* solution options */ solopt,
	    /* monitor stream */ &nctx->monistr,
        /* err */errmsg                                                  //  Modif Mathieu Peyréga : adapt to new 2.4.3b26 API
	    )) {
   }else {
      res = JNI_TRUE;
   }

rtksvrstart_end:

   for (i=0; i<sizeof(paths)/sizeof(paths[0]); ++i) {
      if (paths[i] != NULL)
	 (*env)->ReleaseStringUTFChars(env, paths_jstring[i], paths[i]);
   }
   for (i=0; i<sizeof(cmds)/sizeof(cmds[0]); ++i) {
      if (cmds[i] != NULL)
	 (*env)->ReleaseStringUTFChars(env, cmds_jstring[i], cmds[i]);
   }
   for (i=0; i<sizeof(rcvopts)/sizeof(rcvopts[0]); ++i) {
      if (rcvopts[i] != NULL)
	 (*env)->ReleaseStringUTFChars(env, rcvopts_jstring[i], rcvopts[i]);
   }

   if (!res) {
      traceclose();
      rtkclosestat();
   }

   return res;
}
예제 #3
0
파일: main.c 프로젝트: ndhuan/GPSRTK
int main()//OPTIMIZATION LEVEL = 0
{
	HAL_Init();
	SystemClockConfig();
	ConfigLED();
	ConfigTimer();

	rtksvrstart(&svr);

	ConfigUART(svr.format[0]);

	fobs[0]=fobs[1]=0;

	//svr.raw[1].time.time = 1429540822;//test SS2 data
	//svr.raw[1].time.time = 1429539852;//test SS2 data
	
	while (HAL_UART_Receive_DMA(&UartGPSHandle,svr.buff[0],MAX_RAW_LEN) != HAL_OK);	
	while (HAL_UART_Receive_DMA(&UartRFHandle,svr.buff[1],MAX_RAW_LEN) != HAL_OK);	

	HAL_Delay(3000);
	sendRequest(svr.format[0]);
	
//	test();

	while(1)
	{
#ifndef _TEST_RESULT		
		if (flagTimeout)
		{

			int index,temp;
			flagTimeout=0;
			//SendIntStr(UartGPSHandle.Instance->SR);
			//SendIntStr(UartRFHandle.Instance->SR);
			for (index=0;index<2;index++)
			{
				if (index==0)
					temp = UartGPSHandle.hdmarx->Instance->NDTR & 0xffff;
				else
					temp = UartRFHandle.hdmarx->Instance->NDTR & 0xffff;					
				
				if (temp + svr.buffPtr[index] <= MAX_RAW_LEN)
					svr.nb[index] = MAX_RAW_LEN - svr.buffPtr[index] - temp;
				else
					svr.nb[index] = 2*MAX_RAW_LEN - temp - svr.buffPtr[index];
				
				fobs[index] =	decode_raw(&svr,index);

				svr.buffPtr[index] = MAX_RAW_LEN - temp;	

			}
			
//			temp = UartGPSHandle.hdmarx->Instance->NDTR & 0xffff;
//			if (temp + svr.buffPtr[0] <= MAX_RAW_LEN)
//					svr.nb[0] = MAX_RAW_LEN - svr.buffPtr[0] - temp;
//			else
//					svr.nb[0] = 2*MAX_RAW_LEN - temp - svr.buffPtr[0];
//			if (svr.buffPtr[0] + svr.nb[0] <= MAX_RAW_LEN)
//			{
//				for (i = svr.buff[0] + svr.buffPtr[0] ; 
//							i < svr.buff[0] + svr.buffPtr[0] + svr.nb[0]; i++)
//				{
//					HAL_UART_Transmit(&UartResultHandle,i,1,1);

//				}
//			}
//			else
//			{
//				for (i = svr.buff[0] + svr.buffPtr[0] ; 
//							i < svr.buff[0] + MAX_RAW_LEN; i++)
//				{
//					HAL_UART_Transmit(&UartResultHandle,i,1,1);

//				}
//				for (i = svr.buff[0] ; 
//					i < svr.buff[0] + svr.nb[0] + svr.buffPtr[0] - MAX_RAW_LEN ; i++)
//				{
//					HAL_UART_Transmit(&UartResultHandle,i,1,1);
//				}		
//			}
//			svr.buffPtr[0] = MAX_RAW_LEN - temp;


		//rtk positioning**********************************************************************
//		if (0)	
			if (fobs[1])
			{
				fobs[1]=0;
				LED4_TOGGLE;
			}
			if (fobs[0])
			{						
				int i;
				fobs[0]=0;
				LED3_TOGGLE;
#ifdef TIME_MEASURE
				start=HAL_GetTick();
#endif			
				temp=svr.obs[0].n;
				for (i=0;i<temp;i++)
				{
					obsd[i]=svr.obs[0].data[i];				
				}
				for (i=0;(i<svr.obs[1].n)&&(i+temp<MAX_OBS);i++)
				{
					obsd[i+temp]=svr.obs[1].data[i];				
				}			
				if (!rtkpos(&svr.rtk,obsd,i+temp,&svr.nav))
	//			if (1)
				{

					LED5_TOGGLE;

#ifdef TIME_MEASURE
					t=HAL_GetTick()-start;
					svr.rtk.sol.processTime = t;	
#endif					
					if (svr.rtk.sol.stat==SOLQ_FIX)
						LED6_TOGGLE;
					
					outsol(&svr.rtk.sol,svr.rtk.rb);
					SendStr(svr.rtk.sol.result);
				}
				else
				{
					HAL_UART_Transmit_DMA(&UartResultHandle,(unsigned char*)svr.rtk.errbuf,svr.rtk.errLen);
				}
			}
		}
		

#else	
		if (flagTimeout)
		{
			static int i;
			char* res = svr.rtk.sol.result;
			flagTimeout = 0;
			
			res+=sprintf(res,
		"%04.0f/%02.0f/%02.0f %02.0f:%02.0f:%06.3f %14.4f %14.4f %14.4f %3d %3d %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %6.2f %6.1f",
			2015.0,10.0,12.0,3.0,45.0,18.0,//time yy/mm/dd hh:mm:ss.ssss
			1.0,2.0,1.0,
			1,1,
			1.0,1.0,1.0,
			1.0,1.0,1.0,
			1.0,1.0);
			res+=sprintf(res," %4d",i++);
			res[0]='\n';
			SendStr(svr.rtk.sol.result);
		}
#endif		
	}
	
}