eARCONTROLLER_ERROR ARCONTROLLER_Network_CreateReaderThreads (ARCONTROLLER_Network_t *networkController)
{
    // -- Create the reader Threads --
    
    eARCONTROLLER_ERROR error = ARCONTROLLER_OK;
    
    // Check parameters
    if (networkController == NULL)
    {
        error = ARCONTROLLER_ERROR_BAD_PARAMETER;
    }
    // No Else: the checking parameters sets error to ARNETWORK_ERROR_BAD_PARAMETER and stop the processing
    
    if (error == ARCONTROLLER_OK)
    {
        // allocate reader thread array.
        networkController->readerThreads = calloc(networkController->networkConfig.numberOfDeviceToControllerCommandsBufferIds, sizeof(ARSAL_Thread_t));
        
        if (networkController->readerThreads == NULL)
        {
            ARSAL_PRINT(ARSAL_PRINT_ERROR, ARCONTROLLER_NETWORK_TAG, "Allocation of reader threads failed.");
            error = ARCONTROLLER_ERROR_ALLOC;
        }
    }
    
    if (error == ARCONTROLLER_OK)
    {
        // allocate reader thread data array.
        networkController->readerThreadsData = calloc(networkController->networkConfig.numberOfDeviceToControllerCommandsBufferIds, sizeof(ARCONTROLLER_NETWORK_THREAD_DATA_t));
        
        if (networkController->readerThreadsData == NULL)
        {
            ARSAL_PRINT(ARSAL_PRINT_ERROR, ARCONTROLLER_NETWORK_TAG, "Allocation of reader threads data failed.");
            error = ARCONTROLLER_ERROR_ALLOC;
        }
    }
    
    if (error == ARCONTROLLER_OK)
    {
        // Create and start reader threads.
        int readerThreadIndex = 0;
        for (readerThreadIndex = 0 ; readerThreadIndex < networkController->networkConfig.numberOfDeviceToControllerCommandsBufferIds ; readerThreadIndex++)
        {
            // initialize reader thread data
            networkController->readerThreadsData[readerThreadIndex].networkController = networkController;
            networkController->readerThreadsData[readerThreadIndex].readerBufferId = networkController->networkConfig.deviceToControllerCommandsBufferIds[readerThreadIndex];
            
            if (ARSAL_Thread_Create(&(networkController->readerThreads[readerThreadIndex]), ARCONTROLLER_Network_ReaderRun, &(networkController->readerThreadsData[readerThreadIndex])) != 0)
            {
                ARSAL_PRINT(ARSAL_PRINT_ERROR, ARCONTROLLER_NETWORK_TAG, "Creation of reader thread failed.");
                error = ARCONTROLLER_ERROR_INIT_THREAD;
                break; //Stop the loop of the creation of the reader threads
            }
        }
    }
    
    return error;
}
IHM_t *IHM_New (IHM_onInputEvent_t onInputEventCallback)
{
    int failed = 0;
    IHM_t *newIHM = NULL;
    
    // check parameters
    if (onInputEventCallback == NULL)
    {
        failed = 1;
    }
    
    if (!failed)
    {
        //  Initialize IHM
        newIHM = malloc(sizeof(IHM_t));
        if (newIHM != NULL)
        {
            //  Initialize ncurses
            newIHM->mainWindow = initscr();
            newIHM->inputThread = NULL;
            newIHM->run = 1;
            newIHM->onInputEventCallback = onInputEventCallback;
            newIHM->customData = NULL;
        }
        else
        {
            failed = 1;
        }
    }
    
    if (!failed)
    {
        raw();                  // Line buffering disabled
        keypad(stdscr, TRUE);
        noecho();               // Don't echo() while we do getch
        timeout(100);
        
        refresh();
    }
    
    if (!failed)
    {
        //start input thread
        if(ARSAL_Thread_Create(&(newIHM->inputThread), IHM_InputProcessing, newIHM) != 0)
        {
            failed = 1;
        }
    }
    
    if (failed)
    {
        IHM_Delete (&newIHM);
    }

    return  newIHM;
}
Ejemplo n.º 3
0
/**
* Fonction qui permet de se connecter au drone Bebop
* @params *deviceManager Instance de la structure de données de BD_MANAGER_t. Cette structure est définie dans
* test_connexion_1.h
*/
int startNetwork (BD_MANAGER_t *deviceManager){

/* Initialisation des variables d'erreur */
	int failed = 0;
   	eARNETWORKAL_ERROR netAlError = ARNETWORKAL_OK;
	eARNETWORK_ERROR netError = ARNETWORK_OK;
	int pingDelay = 0;

/* Test du print ARSAL_PRINT_INFO
*	Imprime les info du drone (nom fichier, heure, fonction, Message écrit par l'utilisateur)
* 	sur la console 
*/
	printf("\n");
    ARSAL_PRINT(ARSAL_PRINT_INFO, TAG, "- Start ARNetwork");

/* Crée un nouveau manager NETWORKAL
* @param: erreur de type eARNETWORKAL_ERROR	
*/
    deviceManager->alManager = ARNETWORKAL_Manager_New(&netAlError);
	
    printf("Failed: %i\n",failed);

/* Initialise le wifi*/
	netAlError = ARNETWORKAL_Manager_InitWifiNetwork(deviceManager->alManager, BD_IP_ADDRESS, BD_C2D_PORT, BD_D2C_PORT, 1);

	if (netAlError != ARNETWORKAL_OK)
        {
			printf("ARNETWORKAL_Manager_InitWifiNetwork fail !! \n");
            failed = 1;
        }
	else
		printf("ARNETWORKAL_Manager_InitWifiNetwork success !!\n");
	
/* Créer un manager de network avec (Manager de NetworkAL, nombre de buffer d'entrée, vecteur paramètre d'entrée, *  nombre de buufer de sortie, vecteur paramètre de sortie,Delay entre 2 ping, fonction de déconnexion, paramètre *  de connexion, erreur) 
*/
	if(!failed){
		deviceManager->netManager = ARNETWORK_Manager_New(deviceManager->alManager, numC2dParams, c2dParams, numD2cParams, d2cParams, pingDelay, onDisconnectNetwork, deviceManager, &netError);
		if (netError != ARNETWORK_OK)
    	{
            failed = 1;
        }
	}

	if(failed)
		printf("Manager erreur!!\n");
	else
		printf("Manager créer !! \n");

/* Création des threads pour la réception et la transmission 
*  
*/

	 if (!failed)
    {
        // Create and start Tx and Rx threads.
		printf("Tx thread !! \n");
        if (ARSAL_Thread_Create(&(deviceManager->rxThread), ARNETWORK_Manager_ReceivingThreadRun, deviceManager->netManager) != 0)
        {
            ARSAL_PRINT(ARSAL_PRINT_ERROR, TAG, "Creation of Rx thread failed.");
            failed = 1;
        }

		printf("Rx thread!! \n");
        if (ARSAL_Thread_Create(&(deviceManager->txThread), ARNETWORK_Manager_SendingThreadRun, deviceManager->netManager) != 0)
        {
            ARSAL_PRINT(ARSAL_PRINT_ERROR, TAG, "Creation of Tx thread failed.");
            failed = 1;
        }
    }

	return failed;
}