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; }
/** * 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; }