ARNETWORKAL_Manager_t *ARDISCOVERY_DEVICE_Ble_NewARNetworkAL (ARDISCOVERY_Device_t *device, eARDISCOVERY_ERROR *error, eARNETWORKAL_ERROR *errorAL)
{
    //-- Create a new networlAL adapted to the device. --

    eARDISCOVERY_ERROR localError = ARDISCOVERY_OK;
    eARNETWORKAL_ERROR localErrorAL = ARNETWORKAL_OK;
    ARNETWORKAL_Manager_t *networkAL = NULL;
    ARDISCOVERY_DEVICE_BLE_t *specificBLEParam = NULL;

    // check parameters
    if ((device == NULL) ||
        (device->specificParameters == NULL) ||
        (device->networkType != ARDISCOVERY_NETWORK_TYPE_BLE))
    {
        localError = ARDISCOVERY_ERROR_BAD_PARAMETER;
    }
    // No Else: the checking parameters sets error to ARNETWORK_ERROR_BAD_PARAMETER and stop the processing

    if (localError == ARDISCOVERY_OK)
    {
        // Cast of device->specificParameters
        specificBLEParam = (ARDISCOVERY_DEVICE_BLE_t *) device->specificParameters;

        // Create the ARNetworkALManager
        networkAL = ARNETWORKAL_Manager_New (&localErrorAL);
    }

    if ((localError == ARDISCOVERY_OK) && (localErrorAL == ARNETWORKAL_OK))
    {
        // init bleNotificationIDs
        int bleNotificationIDs[] = {
            ROLLINGSPIDER_DEVICE_TO_CONTROLLER_NAVDATA_ID,
            ROLLINGSPIDER_DEVICE_TO_CONTROLLER_EVENT_ID,
            (ROLLINGSPIDER_CONTROLLER_TO_DEVICE_ACK_ID + (ARNETWORKAL_MANAGER_BLE_ID_MAX / 2)),
            (ROLLINGSPIDER_CONTROLLER_TO_DEVICE_EMERGENCY_ID + (ARNETWORKAL_MANAGER_BLE_ID_MAX / 2)),
        };
        uint32_t numberOfNotificationID = sizeof(bleNotificationIDs) / sizeof(int);

        // Initialize the ARNetworkALManager
        localErrorAL = ARNETWORKAL_Manager_InitBLENetwork(networkAL, specificBLEParam->deviceManager, specificBLEParam->device, 1, bleNotificationIDs, numberOfNotificationID);
    }

    // set localError to ARDISCOVERY_ERROR is an error AL is occured
    if ((localError == ARDISCOVERY_OK) && (localErrorAL != ARNETWORKAL_OK))
    {
        localError = ARDISCOVERY_ERROR;
    }

    // return localErrorAL
    if (errorAL != NULL)
    {
        *errorAL = localErrorAL;
    }

    // return localError
    if (error != NULL)
    {
        *error = localError;
    }

    // delete networkAL if an error occured
    if ((localError != ARDISCOVERY_OK) && (networkAL != NULL))
    {
        ARDISCOVERY_DEVICE_Ble_DeleteARNetworkAL (device, &networkAL);
    }

    return networkAL;
}
int ARSTREAM_Reader_TestBenchMain (int argc, char *argv[])
{
    int retVal = 0;
    appName = argv[0];
    if (argc > 3)
    {
        ARSTREAM_ReaderTb_printUsage ();
        return 1;
    }

    char *ip = __IP;
    char *outPath = NULL;

    if (argc >= 2)
    {
        ip = argv[1];
    }
    if (argc >= 3)
    {
        outPath = argv[2];
    }

    ARSAL_PRINT (ARSAL_PRINT_WARNING, __TAG__, "IP = %s", ip);

    int nbInBuff = 1;
    ARNETWORK_IOBufferParam_t inParams;
    ARSTREAM_Reader_InitStreamAckBuffer (&inParams, ACK_BUFFER_ID);
    int nbOutBuff = 1;
    ARNETWORK_IOBufferParam_t outParams;
    ARSTREAM_Reader_InitStreamDataBuffer (&outParams, DATA_BUFFER_ID, ARSTREAM_TB_FRAG_SIZE, ARSTREAM_TB_MAX_NB_FRAG);

    eARNETWORK_ERROR error;
    eARNETWORKAL_ERROR specificError = ARNETWORKAL_OK;
    ARNETWORKAL_Manager_t *osspecificManagerPtr = ARNETWORKAL_Manager_New(&specificError);

    if(specificError == ARNETWORKAL_OK)
    {
        specificError = ARNETWORKAL_Manager_InitWifiNetwork(osspecificManagerPtr, ip, SENDING_PORT, READING_PORT, 1000);
    }
    else
    {
        ARSAL_PRINT (ARSAL_PRINT_ERROR, __TAG__, "Error during ARNETWORKAL_Manager_New call : %s", ARNETWORKAL_Error_ToString(specificError));
    }

    if(specificError == ARNETWORKAL_OK)
    {
        g_Manager = ARNETWORK_Manager_New(osspecificManagerPtr, nbInBuff, &inParams, nbOutBuff, &outParams, READER_PING_DELAY, NULL, NULL, &error);
    }
    else
    {
        ARSAL_PRINT (ARSAL_PRINT_ERROR, __TAG__, "Error during ARNETWORKAL_Manager_InitWifiNetwork call : %s", ARNETWORKAL_Error_ToString(specificError));
        error = ARNETWORK_ERROR;
    }

    if ((g_Manager == NULL) ||
        (error != ARNETWORK_OK))
    {
        ARSAL_PRINT (ARSAL_PRINT_ERROR, __TAG__, "Error during ARNETWORK_Manager_New call : %s", ARNETWORK_Error_ToString(error));
        return 1;
    }

    pthread_t netsend, netread;
    pthread_create (&netsend, NULL, ARNETWORK_Manager_SendingThreadRun, g_Manager);
    pthread_create (&netread, NULL, ARNETWORK_Manager_ReceivingThreadRun, g_Manager);

    retVal = ARSTREAM_ReaderTb_StartStreamTest (g_Manager, outPath);

    ARNETWORK_Manager_Stop (g_Manager);

    pthread_join (netread, NULL);
    pthread_join (netsend, NULL);

    ARNETWORK_Manager_Delete (&g_Manager);
    ARNETWORKAL_Manager_CloseWifiNetwork(osspecificManagerPtr);
    ARNETWORKAL_Manager_Delete(&osspecificManagerPtr);

    return retVal;
}
示例#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;
}