Esempio n. 1
0
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  * *  * * * * **/
void $APPLICATION_NAME$_AppMain( void )
{
    int32  status;
    uint32 RunStatus = CFE_ES_APP_RUN;

    CFE_ES_PerfLogEntry($APPLICATION_NAME$_APP_PERF_ID);

    $APPLICATION_NAME$_AppInit();

    /*
    ** $APPLICATION_NAME$ Runloop
    */
    while (CFE_ES_RunLoop(&RunStatus) == TRUE)
    {
        CFE_ES_PerfLogExit($APPLICATION_NAME$_APP_PERF_ID);

        /* Pend on receipt of command packet -- timeout set to 500 millisecs */
        status = CFE_SB_RcvMsg(&$APPLICATION_NAME$_MsgPtr, $APPLICATION_NAME$_CommandPipe, 500);
        
        CFE_ES_PerfLogEntry($APPLICATION_NAME$_APP_PERF_ID);

        if (status == CFE_SUCCESS)
        {
            $APPLICATION_NAME$_ProcessCommandPacket();
        }

    }

    CFE_ES_ExitApp(RunStatus);

} /* End of $APPLICATION_NAME$_AppMain() */
Esempio n. 2
0
void THRSIM_TaskMain(void) {
    uint32 RunStatus = CFE_ES_APP_RUN;
    int32  Status = CFE_SUCCESS;

    CFE_ES_PerfLogEntry(THRSIM_MAIN_TASK_PERF_ID);

    Status = THRSIM_Init();
    if (Status != CFE_SUCCESS) {
        RunStatus = CFE_ES_APP_ERROR;
    }

    while (CFE_ES_RunLoop(&RunStatus) == TRUE) {
        CFE_ES_PerfLogExit(THRSIM_MAIN_TASK_PERF_ID);

        Status = CFE_SB_RcvMsg(&THRSIM_AppData.MsgPtr, THRSIM_AppData.CmdPipe, CFE_SB_PEND_FOREVER);

        CFE_ES_PerfLogEntry(THRSIM_MAIN_TASK_PERF_ID);

        if (Status == CFE_SUCCESS) {
            THRSIM_AppPipe();
        } else {
            CFE_EVS_SendEvent(THRSIM_PIPE_ERR_EID, CFE_EVS_ERROR, "SB pipe read error, THRSIM will exit.");
            RunStatus = CFE_ES_APP_ERROR;
        }
    }
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void TO_Lab_AppMain(void)
{
   uint32                  RunStatus = CFE_ES_APP_RUN;
   
   CFE_ES_PerfLogEntry(TO_MAIN_TASK_PERF_ID);

   TO_init();

   /*
   ** TO RunLoop
   */
   while(CFE_ES_RunLoop(&RunStatus) == TRUE)
   {
        CFE_ES_PerfLogExit(TO_MAIN_TASK_PERF_ID);

        OS_TaskDelay(TO_TASK_MSEC);    /*2 Hz*/

        CFE_ES_PerfLogEntry(TO_MAIN_TASK_PERF_ID);

        TO_forward_telemetry();

        TO_process_commands();
    }

   CFE_ES_ExitApp(RunStatus);

} /* End of TO_Lab_AppMain() */
Esempio n. 4
0
/******************************************************************************
** Function: LABTLM_Main
**
*/
void LABTLM_Main(void)
{

   int32  Status    = CFE_SEVERITY_ERROR;
   uint32 RunStatus = CFE_ES_APP_ERROR;


   Status = CFE_ES_RegisterApp();
   CFE_EVS_Register(NULL,0,0);

   /*
   ** Perform application specific initialization
   */
   if (Status == CFE_SUCCESS)
   {
       OS_printf("TO-LAB: About to call init\n");
       Status = InitApp();
   }

   /*
   ** At this point many flight apps use CFE_ES_WaitForStartupSync() to
   ** synchronize their startup timing with other apps. This is not
   ** needed.
   */

   if (Status == CFE_SUCCESS) RunStatus = CFE_ES_APP_RUN;

   /*
   ** Main process loop
   */
   OS_printf("TO-LAB: About to enter loop\n");
   while (CFE_ES_RunLoop(&RunStatus))
   {

      OS_TaskDelay(LABTLM_RUNLOOP_DELAY);

      PKTMGR_OutputTelemetry();

      ProcessCommands();

   } /* End CFE_ES_RunLoop */


   /* Write to system log in case events not working */

   CFE_ES_WriteToSysLog("LABTLM App terminating, err = 0x%08X\n", Status);

   CFE_EVS_SendEvent(LABTLM_EXIT_ERR_EID, CFE_EVS_CRITICAL, "LABTLM App: terminating, err = 0x%08X", Status);

   CFE_ES_ExitApp(RunStatus);  /* Let cFE kill the task (and any child tasks) */

} /* End of LABTLM_Main() */
Esempio n. 5
0
void CI_TaskMain( void )
{
    int32   status;
    uint32  RunStatus = CFE_ES_APP_RUN;

    CFE_ES_PerfLogEntry(CI_MAIN_TASK_PERF_ID);

    CI_TaskInit();

#ifdef _CI_DELAY_TEST
    OS_printf("CI going to delay for 40 seconds before calling runloop\n");
    OS_TaskDelay(40000);
#endif

    /*
    ** CI Runloop
    */
    while (CFE_ES_RunLoop(&RunStatus) == TRUE)
    {
        CFE_ES_PerfLogExit(CI_MAIN_TASK_PERF_ID);

        /* Pend on receipt of command packet -- timeout set to 500 millisecs */
        status = CFE_SB_RcvMsg(&CIMsgPtr, CI_CommandPipe, 500);
        CFE_ES_PerfLogEntry(CI_MAIN_TASK_PERF_ID);

        if (status == CFE_SUCCESS)
        {
            CI_ProcessCommandPacket();
        }

        /* Regardless of packet vs timeout, always process uplink queue      */
        if (CI_SocketConnected)
        {
            CI_ReadUpLink();
        }
    }
    CFE_ES_ExitApp(RunStatus);

} /* End of CI_TaskMain() */
Esempio n. 6
0
void TO_AppMain(void)
{
	int32     iStatus;

	CFE_ES_PerfLogEntry(TO_MAIN_TASK_PERF_ID);

	/* Initialize the TO app*/
	iStatus = TO_AppInit();

	if (iStatus != CFE_SUCCESS)
	{
		TO_AppData.RunStatus= CFE_ES_APP_ERROR;
	}

	/* Application Main Loop */
	while(CFE_ES_RunLoop(&TO_AppData.RunStatus) == TRUE)
	{
		/* Call RecvMsg to pend on sch wakeup msg */
   		TO_RecvMsg(TO_WAKEUP_TIMEOUT);
	}

	/*  Exit the Application */
	CFE_ES_ExitApp(TO_AppData.RunStatus);
}
Esempio n. 7
0
void SC_AppMain(void)
{   
    uint32 RunStatus = CFE_ES_APP_RUN;
    int32 Result;

    /* Register application with cFE */
    Result = CFE_ES_RegisterApp();

    /* Performance Log (start time counter) */
    CFE_ES_PerfLogEntry(SC_APPMAIN_PERF_ID);

    /* Startup initialization */
    if (Result == CFE_SUCCESS)
    {
        Result = SC_AppInit();                  
    }

    /* Check for start-up error */
    if (Result != CFE_SUCCESS)
    {
        /* Set request to terminate main loop */
        RunStatus = CFE_ES_APP_ERROR;
    }

    /* Main process loop */
    while (CFE_ES_RunLoop(&RunStatus))
    {
        /* Performance Log (stop time counter) */
        CFE_ES_PerfLogExit(SC_APPMAIN_PERF_ID);

        /* Pend on Software Bus for message */
        Result = CFE_SB_RcvMsg(&SC_OperData.MsgPtr, SC_OperData.CmdPipe, CFE_SB_PEND_FOREVER);

        /* Performance Log (start time counter) */
        CFE_ES_PerfLogEntry(SC_APPMAIN_PERF_ID);

        /* Check for Software Bus error */
        if (Result == CFE_SUCCESS)
        {
            /* Invoke command handlers */
            SC_ProcessRequest(SC_OperData.MsgPtr);   
        }
        else
        {
            /* Exit main process loop */
            RunStatus = CFE_ES_APP_ERROR;
        }
    }
    
    /* Check for "fatal" process error */
    if (Result !=  CFE_SUCCESS)
    {
        /* Send event describing reason for termination */
        CFE_EVS_SendEvent(SC_APP_EXIT_ERR_EID, CFE_EVS_ERROR,
           "App terminating, Result = 0x%08X", Result);

        /* In case cFE Event Services is not working */
        CFE_ES_WriteToSysLog("SC App terminating, Result = 0x%08X\n", Result);
    }

    /* Performance Log (stop time counter) */
    CFE_ES_PerfLogExit(SC_APPMAIN_PERF_ID);
    
    /* Let cFE kill the app */
    CFE_ES_ExitApp(RunStatus);
    
} /* end SC_AppMain() */
Esempio n. 8
0
void SIMCI_TaskMain( void ) {
    int32  Status = CFE_SUCCESS;
    uint32 RunStatus = CFE_ES_APP_RUN;
    struct timeval tv_timeout;
    fd_set readfds;
    int32  max_fd;

    CFE_ES_PerfLogEntry(SIMCI_MAIN_TASK_PERF_ID);

    Status = SIMCI_TaskInit();
    if (Status != CFE_SUCCESS) {
        RunStatus = CFE_ES_APP_ERROR;
    }

    /* Set up information for select */
    max_fd = max(SIMCI_AppData.UplinkSocketID, SIMCI_AppData.IngestSocketID);
    max_fd++;

    tv_timeout.tv_sec = 0;
    tv_timeout.tv_usec = SIMCI_PERIOD_USEC;

    /* Runloop */
    while (CFE_ES_RunLoop(&RunStatus) == TRUE)
    {
        FD_ZERO(&readfds);

        FD_SET(SIMCI_AppData.UplinkSocketID, &readfds);
        FD_SET(SIMCI_AppData.IngestSocketID, &readfds);

        CFE_ES_PerfLogExit(SIMCI_MAIN_TASK_PERF_ID);

        /* Select on the two sockets + SB pipe */
        Status = select(max_fd, &readfds, NULL, NULL, &tv_timeout);

        CFE_ES_PerfLogEntry(SIMCI_MAIN_TASK_PERF_ID);

        if (Status == 0) {
            /* Timed out, process some commands if available */
            uint32 i;

            for (i = 0; i < SIMCI_PIPE_DEPTH; i++) {
                Status = CFE_SB_RcvMsg(&SIMCI_AppData.MsgPtr, SIMCI_AppData.CommandPipe, CFE_SB_POLL);
                if (Status == CFE_SUCCESS) {
                    /* We have a message to process */
                    SIMCI_AppPipe();
                } else if (Status == CFE_SB_NO_MESSAGE) {
                    /* Nothing to do, go back to sleep */
                    break;
                } else {
                    SIMCI_AppData.HkPacket.error_count++;
                    CFE_EVS_SendEvent(SIMCI_PIPE_ERR_EID, CFE_EVS_ERROR, "SIMCI: Error reading command pipe, RC=%08X", Status);
                }
            }
        } else {
            if (FD_ISSET(SIMCI_AppData.UplinkSocketID, &readfds)) {
                SIMCI_ForwardUplinkPacket();
            }
            if (FD_ISSET(SIMCI_AppData.IngestSocketID, &readfds)) {
                SIMCI_IngestPacket();
            }
        }
    }
    CFE_ES_ExitApp(RunStatus);

}
Esempio n. 9
0
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void HS_AppMain(void)
{
    int32   Status      = CFE_SUCCESS;
    uint32  RunStatus   = CFE_ES_APP_RUN;

    /*
    ** Performance Log, Start
    */
    CFE_ES_PerfLogEntry(HS_APPMAIN_PERF_ID);

    /*
    ** Register this application with Executive Services
    */
    Status = CFE_ES_RegisterApp();

    /*
    ** Perform application specific initialization
    */
    if (Status == CFE_SUCCESS)
    {
        Status = HS_AppInit();
    }

    /*
    ** If no errors were detected during initialization, then wait for everyone to start
    */
    if (Status == CFE_SUCCESS)
    {
       CFE_ES_WaitForStartupSync(HS_STARTUP_SYNC_TIMEOUT);

       /*
       ** Enable and set the watchdog timer
       */
       CFE_PSP_WatchdogSet(HS_WATCHDOG_TIMEOUT_VALUE);
       CFE_PSP_WatchdogService();
       CFE_PSP_WatchdogEnable();
       CFE_PSP_WatchdogService();

       /*
       ** Subscribe to Event Messages
       */
       if (HS_AppData.CurrentEventMonState == HS_STATE_ENABLED)
       {
          Status = CFE_SB_SubscribeEx(CFE_EVS_EVENT_MSG_MID,
                                      HS_AppData.EventPipe,
                                      CFE_SB_Default_Qos,
                                      HS_EVENT_PIPE_DEPTH);
          if (Status != CFE_SUCCESS)
          {
             CFE_EVS_SendEvent(HS_SUB_EVS_ERR_EID, CFE_EVS_ERROR,
                 "Error Subscribing to Events,RC=0x%08X",Status);
          }
       }
    }

    if (Status != CFE_SUCCESS)
    {
       /*
       ** Set run status to terminate main loop
       */
       RunStatus = CFE_ES_APP_ERROR;
    }

    /*
    ** Application main loop
    */
    while(CFE_ES_RunLoop(&RunStatus) == TRUE)
    {
        /*
        ** Performance Log, Stop
        */
        CFE_ES_PerfLogExit(HS_APPMAIN_PERF_ID);

        /*
        ** Task Delay for a configured timeout
        */
#if HS_POST_PROCESSING_DELAY != 0
        OS_TaskDelay(HS_POST_PROCESSING_DELAY);
#endif

        /*
        ** Task Delay for a configured timeout
        */
        Status = CFE_SB_RcvMsg(&HS_AppData.MsgPtr, HS_AppData.WakeupPipe, HS_WAKEUP_TIMEOUT);

        /*
        ** Performance Log, Start
        */
        CFE_ES_PerfLogEntry(HS_APPMAIN_PERF_ID);

        /*
        ** Process the software bus message
        */
        if ((Status == CFE_SUCCESS) ||
            (Status == CFE_SB_NO_MESSAGE) ||
            (Status == CFE_SB_TIME_OUT))
        {
            Status = HS_ProcessMain();
        }

        /*
        ** Note: If there were some reason to exit the task
        **       normally (without error) then we would set
        **       RunStatus = CFE_ES_APP_EXIT
        */
        if (Status != CFE_SUCCESS)
        {
            /*
            ** Set request to terminate main loop
            */
            RunStatus = CFE_ES_APP_ERROR;
        }

    } /* end CFS_ES_RunLoop while */

    /*
    ** Check for "fatal" process error...
    */
    if (Status != CFE_SUCCESS)
    {
        /*
        ** Send an event describing the reason for the termination
        */
        CFE_EVS_SendEvent(HS_APP_EXIT_EID, CFE_EVS_CRITICAL,
                          "Application Terminating, err = 0x%08X", Status);

        /*
        ** In case cFE Event Services is not working
        */
        CFE_ES_WriteToSysLog("HS App: Application Terminating, ERR = 0x%08X\n", Status);
    }

    HS_CustomCleanup();

    /*
    ** Performance Log, Stop
    */
    CFE_ES_PerfLogExit(HS_APPMAIN_PERF_ID);

    /*
    ** Exit the application
    */
    CFE_ES_ExitApp(RunStatus);

} /* end HS_AppMain */
Esempio n. 10
0
void EIM_NavDataTlmMain(void)
{
	int32 Status = CFE_SUCCESS;
	struct sockaddr_in 		addrNav;
    uint32 RunStatus = CFE_ES_APP_RUN;

	Status = CFE_ES_RegisterChildTask();
	if(Status != CFE_SUCCESS)
	{
		CFE_EVS_SendEvent(EIM_TELEM_TASK_ERR_EID, CFE_EVS_ERROR,
			"EIM: Failed to register telemetry listener task.");

		CFE_ES_ExitChildTask();
	}

    /*
    ** Install the delete handler
    */
    OS_TaskInstallDeleteHandler((void *)(&EIM_NavDataTlm_delete_callback));

    /* Create sockets */
    EIM_AppData.NavSocketID = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if(EIM_AppData.NavSocketID < 0)
    {
    	CFE_EVS_SendEvent(EIM_TELEM_TASK_ERR_EID, CFE_EVS_ERROR,"EIM: Create Nav telemetry socket failed = %d", errno);
		CFE_ES_ExitChildTask();
    }
    //EIM_AppData.ATCmdSocketID = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    //if(EIM_AppData.ATCmdSocketID < 0)
    //{
    //	CFE_EVS_SendEvent(EIM_TELEM_TASK_ERR_EID, CFE_EVS_ERROR,"EIM: Create Nav command socket failed = %d", errno);
	//	CFE_ES_ExitChildTask();
    //}

	memset((char *) &addrNav, 0, sizeof(addrNav));
	addrNav.sin_family      = AF_INET;
    addrNav.sin_port        = htons(EIM_NAV_DATA_PORT+100);
    addrNav.sin_addr.s_addr = htonl(INADDR_ANY);

	OS_printf("EIM: Binding NAV socket.\n");
	if ( bind(EIM_AppData.NavSocketID, (struct sockaddr *) &addrNav,
			sizeof(addrNav)) < 0)
	{
		CFE_EVS_SendEvent(EIM_TELEM_TASK_ERR_EID, CFE_EVS_ERROR,
                          "EIM: Failed to bind NAV command socket.  errno: %d", errno);
		CFE_ES_ExitChildTask();
	}

	/* Set addresses */
	//bzero((char *) &EIM_AppData.CmdSocketAddress, sizeof(EIM_AppData.CmdSocketAddress));
	//EIM_AppData.CmdSocketAddress.sin_family      = AF_INET;
	//EIM_AppData.CmdSocketAddress.sin_addr.s_addr = inet_addr("0.0.0.0");
	//EIM_AppData.CmdSocketAddress.sin_port        = htons(0);

	//bzero((char *) &EIM_AppData.CmdARDroneAddress, sizeof(EIM_AppData.CmdARDroneAddress));
	//EIM_AppData.CmdARDroneAddress.sin_family      = AF_INET;
	//EIM_AppData.CmdARDroneAddress.sin_addr.s_addr = inet_addr(EIM_WIFI_IP);
	//EIM_AppData.CmdARDroneAddress.sin_port        = htons(EIM_AT_PORT);

	//if ( bind(EIM_AppData.ATCmdSocketID,
    //          (struct sockaddr *) &EIM_AppData.CmdSocketAddress,
	//		  sizeof(EIM_AppData.CmdSocketAddress)) < 0)
	//{
	//	CFE_EVS_SendEvent(EIM_TELEM_TASK_ERR_EID, CFE_EVS_ERROR,
    //                      "EIM: Failed to bind command socket.  errno: %d", errno);
	//	CFE_ES_ExitChildTask();
	//}
//
	//EIM_InitATCmdSockets();

	OS_TaskDelay(100);
	EIM_ResetTlmConnection();

	if(CFE_ES_RunLoop(&RunStatus) == FALSE)
	{
		EIM_AppData.Hk.NavDataState = EIM_NAVDATA_FAILED;
	}
	else
	{
		EIM_AppData.Hk.NavDataState = EIM_NAVDATA_ENABLED;
	}

	while (CFE_ES_RunLoop(&RunStatus) == TRUE)
    {
		EIM_ReadTelem();

		if(EIM_AppData.Hk.ARDroneState.CommWatchdog == TRUE)
		{
			if(EIM_AppData.Hk.ARDrone2TimedOut == FALSE)
			{
				CFE_EVS_SendEvent(EIM_TELEM_TASK_ERR_EID, CFE_EVS_ERROR, "EIM: ARDrone timedout.  Resetting watchdog.");
				EIM_AppData.Hk.ARDrone2TimedOut = TRUE;
			}
			EIM_cmdComWdg();
		}
		else
		{
			if(EIM_AppData.Hk.ARDrone2TimedOut == TRUE)
			{
				CFE_EVS_SendEvent(EIM_TELEM_TASK_ERR_EID, CFE_EVS_ERROR, "EIM: ARDrone watchdog reset.");
				EIM_AppData.Hk.ARDrone2TimedOut = FALSE;
			}
		}
    }

	close(EIM_AppData.ATCmdSocketID);
	close(EIM_AppData.NavSocketID);
	EIM_AppData.ATCmdSocketID = 0;
	EIM_AppData.NavSocketID = 0;
	EIM_AppData.Hk.NavDataState = EIM_NAVDATA_DISABLED;

    CFE_ES_ExitApp(RunStatus);
}