示例#1
0
 INT32 iPmdDMNChildProc::active()
 {
    INT32 rc = SDB_OK;
    rc = attachSHM();
    if ( SDB_OK == rc )
    {
       UINT32 i = 3;
       UINT32 sn = _procInfo->sn;
       while( i-- > 0 )
       {
          if ( sn != _procInfo->sn &&
               (sn + 1) != _procInfo->sn )
          {
             rc = SDB_PERM;
             PD_RC_CHECK( rc, PDERROR, "Don't repeat start the process" );
          }
          ossSleep( 2 * OSS_ONE_SEC ) ;
       }
       _procInfo->szTag[ 0 ] = 0 ;
       _procInfo->init() ;
    }
    else
    {
       rc = allocSHM();
       PD_RC_CHECK( rc, PDERROR, "Failed to allocate share-memory(rc=%d)",
                    rc ) ;
    }
 done:
    return rc;
 error:
    detachSHM();
    goto done;
 }
示例#2
0
   void iPmdDMNChildProc::syncProcesserInfo()
   {
      INT32 rc = SDB_OK ;

      _syncEvent.reset() ;

      while( iPmdProc::isRunning() )
      {
         rc = attachSHM();
         if ( SDB_OK == rc )
         {
            if ( _procInfo->isInit() &&
                 PMDDMN_SHM_STAT_DAEMON != _procInfo->stat )
            {
               _procInfo->pid = ossGetCurrentProcessID() ;
               rc = ChildProcessCMD( _procInfo->getCHLCMD() ) ;
               if ( SDB_OK != rc )
               {
                  PD_LOG( PDERROR, "Failed to process command(rc=%d)", rc ) ;
               }
               ++( _procInfo->sn ) ;
               _procInfo->stat = PMDDMN_SHM_STAT_DAEMON ;
            }
            detachSHM() ;
         }
         ossSleep( OSS_ONE_SEC ) ;
      }
      rc = attachSHM();
      if ( SDB_OK == rc )
      {
         if ( _procInfo->isInit() )
         {
            PD_LOG( PDEVENT, "stop service..." ) ;
            _procInfo->pid = OSS_INVALID_PID ;
            _procInfo->stat = PMDDMN_SHM_STAT_DAEMON ;
            rc = _procInfo->setDMNCMD( PMDDMN_SHM_CMD_DMN_QUIT ) ;
            if ( SDB_OK ==rc )
            {
               PD_LOG( PDWARNING, "daemon process is not stop!" );
            }
         }
         detachSHM();
      }

      _syncEvent.signalAll() ;
   }
示例#3
0
   INT32 iPmdDMNChildProc::attachSHM()
   {
      INT32 rc = SDB_OK;
#if defined ( _WINDOWS )
      PD_CHECK( _shmKey != NULL, SDB_OOM, error, PDERROR,
               "failed to get key because of malloc failed!" );
#endif
      rc = attachSHM( _shmKey );
#if defined ( _WINDOWS )
   done:
      return rc;
   error:
      goto done;
#else
      return rc;
#endif
   }
void mexFunction(int nlhs, mxArray *plhs[], 
                 int nrhs, const mxArray *prhs[])
{
	static bool firstTime = true;
	
	
	initSemaphore(&stepSEM);
	attachSEM(&stepSEM, STEP_SEM);
	
	initSharedMemory(&stepSHM, sizeof(episode_steps));
	attachSHM(&stepSHM, STEP_SHM, &stepSEM);
	
	readSHMemory(&stepSHM, &episodeStep, &stepSEM);
	
	int numStates = (int) *mxGetPr(prhs[0]);
	int numSteps = episodeStep.numTransmittedSteps;
	
	fprintf(stderr, "NumSteps: %d\n",numSteps);

	plhs[0]         = mxCreateDoubleMatrix(N_DOFS, numSteps, mxREAL);
	plhs[1]         = mxCreateDoubleMatrix(N_DOFS, numSteps, mxREAL);
	plhs[2]         = mxCreateDoubleMatrix(N_DOFS, numSteps,  mxREAL);
	
	plhs[3]         = mxCreateDoubleMatrix(N_DOFS, numSteps, mxREAL);
	plhs[4]         = mxCreateDoubleMatrix(N_DOFS, numSteps, mxREAL);
	plhs[5]         = mxCreateDoubleMatrix(N_DOFS, numSteps,  mxREAL);
	
	
	plhs[6]         = mxCreateDoubleMatrix(N_DOFS, numSteps,  mxREAL);
	plhs[7]         = mxCreateDoubleMatrix(7, numSteps, mxREAL);
	plhs[8]         = mxCreateDoubleMatrix(numStates, numSteps, mxREAL);
    
	plhs[9]         = mxCreateDoubleMatrix(1, numSteps, mxREAL);
	plhs[10]         = mxCreateDoubleMatrix(1, numSteps, mxREAL);
    plhs[10]        = mxCreateDoubleMatrix(1, numSteps, mxREAL);
	
	double *joints = mxGetPr(plhs[0]);
	double *jointsVel = mxGetPr(plhs[1]);
	double *jointsAcc = mxGetPr(plhs[2]);
	
	double *jointsDes = mxGetPr(plhs[3]);
	double *jointsVelDes = mxGetPr(plhs[4]);
	double *jointsAccDes = mxGetPr(plhs[5]);
	
	
	double *torque = mxGetPr(plhs[6]);
	
	double *cart = mxGetPr(plhs[7]);
	double *state = mxGetPr(plhs[8]);
	
    	double *commandIdx = mxGetPr(plhs[9]);
    	double *stepInTrajectory = mxGetPr(plhs[10]);

    
    double *doMotionIdx = mxGetPr(plhs[10]);
    
    
    
	memcpy(joints, episodeStep.joints, sizeof(double) * numSteps * N_DOFS);
	memcpy(jointsVel, episodeStep.jointsVel, sizeof(double) * numSteps * N_DOFS);
	memcpy(jointsAcc, episodeStep.jointsAcc, sizeof(double) * numSteps * N_DOFS);
	
	memcpy(jointsDes, episodeStep.jointsDes, sizeof(double) * numSteps * N_DOFS);
	memcpy(jointsVelDes, episodeStep.jointsVelDes, sizeof(double) * numSteps * N_DOFS);
	memcpy(jointsAccDes, episodeStep.jointsAccDes, sizeof(double) * numSteps * N_DOFS);
	
	
	memcpy(torque, episodeStep.torque, sizeof(double) * numSteps * N_DOFS);
	memcpy(cart, episodeStep.cart, sizeof(double) * numSteps * 7);
    

//     printf("doMotionIdx :");
//     for (int i = 0; i < numSteps; i ++)
//         printf(" %d",episodeStep.doMotionIdx[i]);
//     printf(" \n");

	for (int i = 0; i < numSteps; i ++)
	{
		for (int j = 0; j < numStates; j ++)
		{
			state[i * numStates + j] = episodeStep.state[i][j];
//			printf("%f ", episodeStep.state[i][j]);
		}
//		printf("\n");
	}
	

	for (int i = 0; i < numSteps; i ++)
    	{
        	commandIdx[i] = episodeStep.commandIdx[i];
            doMotionIdx[i] = episodeStep.doMotionIdx[i];
	}

	for (int i = 0; i < numSteps; i ++)
    	{
        	stepInTrajectory[i] = episodeStep.stepInTrajectory[i];
	}
    
	deleteSemaphore(&stepSEM);
	deleteSharedMemory(&stepSHM);
	
}