eARDISCOVERY_ERROR ARDISCOVERY_DEVICE_Ble_DeleteARNetworkAL (ARDISCOVERY_Device_t *device, ARNETWORKAL_Manager_t **networkAL) { // -- Delete a networlAL create by ARDISCOVERY_DEVICE_Ble_NewARNetworkAL -- eARDISCOVERY_ERROR error = ARDISCOVERY_OK; // check parameters if ((device == NULL) || (ARDISCOVERY_getProductService (device->productID) != ARDISCOVERY_PRODUCT_BLESERVICE)) { error = ARDISCOVERY_ERROR_BAD_PARAMETER; } // No Else: the checking parameters sets error to ARNETWORK_ERROR_BAD_PARAMETER and stop the processing if (error == ARDISCOVERY_OK) { if (networkAL != NULL) { if ((*networkAL) != NULL) { ARNETWORKAL_Manager_Unlock((*networkAL)); ARNETWORKAL_Manager_CloseBLENetwork((*networkAL)); ARNETWORKAL_Manager_Delete(networkAL); } } } return error; }
eARDISCOVERY_ERROR ARDISCOVERY_DEVICE_Ble_DeleteSpecificParameters (ARDISCOVERY_Device_t *device) { // -- Delete SpecificParameters allocated by the wifi initialization -- eARDISCOVERY_ERROR error = ARDISCOVERY_OK; // check parameters if ((device == NULL) || (ARDISCOVERY_getProductService (device->productID) != ARDISCOVERY_PRODUCT_BLESERVICE)) { error = ARDISCOVERY_ERROR_BAD_PARAMETER; } // No Else: the checking parameters sets error to ARNETWORK_ERROR_BAD_PARAMETER and stop the processing if (error == ARDISCOVERY_OK) { // free specific parameter if (device->specificParameters != NULL) { free (device->specificParameters); device->specificParameters = NULL; } } return error; }
void *ARDISCOVERY_DEVICE_Ble_GetCopyOfSpecificParameters (ARDISCOVERY_Device_t *device, eARDISCOVERY_ERROR *error) { // -- Copy BLE specificParameters -- eARDISCOVERY_ERROR localError = ARDISCOVERY_OK; ARDISCOVERY_DEVICE_BLE_t *specificBLEParamToCopy = NULL; ARDISCOVERY_DEVICE_BLE_t *specificBLEParam = NULL; // check parameters if ((device == NULL)|| (ARDISCOVERY_getProductService (device->productID) != ARDISCOVERY_PRODUCT_BLESERVICE)) { 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 device->specificBLEParam specificBLEParamToCopy = (ARDISCOVERY_DEVICE_BLE_t *)device->specificParameters; if (specificBLEParamToCopy != NULL) { // Copy wifi specific parameters specificBLEParam = malloc(sizeof(ARDISCOVERY_DEVICE_BLE_t)); if (specificBLEParam != NULL) { specificBLEParam->deviceManager = specificBLEParamToCopy->deviceManager; specificBLEParam->device = specificBLEParamToCopy->device; } else { localError = ARDISCOVERY_ERROR_ALLOC; } } // NO Else ; No Specific Wifi Parameters To Copy. } // No else: skipped by error // delete the SpecificParameters if an error occurred if (localError != ARDISCOVERY_OK) { ARDISCOVERY_DEVICE_Ble_DeleteSpecificParameters (device); } // No else: skipped no error // return the error if (error != NULL) { *error = localError; } // No else: error is not returned return specificBLEParam; }
eARDISCOVERY_ERROR ARDISCOVERY_JNI_DEVICE_Ble_DeleteARNetworkAL (ARDISCOVERY_Device_t *device, ARNETWORKAL_Manager_t **networkAL) { // -- Delete a networlAL create by ARDISCOVERY_JNI_DEVICE_Ble_NewARNetworkAL -- // local declarations eARDISCOVERY_ERROR localError = ARDISCOVERY_OK; JNIEnv* env = NULL; jint getEnvResult = JNI_OK; jint attachResult = 1; ARDISCOVERY_JNI_DEVICE_BLE_t *specificBLEParam = NULL; // check parameters if ((device == NULL) || (device->specificParameters == NULL) || (ARDISCOVERY_getProductService (device->productID) != ARDISCOVERY_PRODUCT_BLESERVICE)) { 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) { // get the environment getEnvResult = (*ARDISCOVERY_JNI_VM)->GetEnv(ARDISCOVERY_JNI_VM, (void **) &env, JNI_VERSION_1_6); // if no environment then attach the thread to the virtual machine if (getEnvResult == JNI_EDETACHED) { ARSAL_PRINT(ARSAL_PRINT_DEBUG, ARDISCOVERY_JNI_DEVICE_BLE_TAG, "attach the thread to the virtual machine ..."); attachResult = (*ARDISCOVERY_JNI_VM)->AttachCurrentThread(ARDISCOVERY_JNI_VM, &env, NULL); } if (env == NULL) { localError = ARDISCOVERY_ERROR_JNI_ENV; } } if (localError == ARDISCOVERY_OK) { // cast device->specificBLEParam specificBLEParam = (ARDISCOVERY_JNI_DEVICE_BLE_t *)device->specificParameters; localError = (*env)->CallIntMethod(env, specificBLEParam->jBLEPart, ARDISCOVERY_JNIDEVICE_BLE_METHOD_DELETENETWORKAL); } // if the thread has been attached then detach the thread from the virtual machine if ((getEnvResult == JNI_EDETACHED) && (env != NULL)) { (*ARDISCOVERY_JNI_VM)->DetachCurrentThread(ARDISCOVERY_JNI_VM); } return localError; }
eARDISCOVERY_ERROR ARDISCOVERY_DEVICE_Ble_CreateSpecificParameters (ARDISCOVERY_Device_t *device, ARNETWORKAL_BLEDeviceManager_t bleDeviceManager, ARNETWORKAL_BLEDevice_t bleDevice) { // Initialize BLE specific parameters eARDISCOVERY_ERROR error = ARDISCOVERY_OK; ARDISCOVERY_DEVICE_BLE_t *specificBLEParam = NULL; // Check parameters if ((device == NULL) || (ARDISCOVERY_getProductService (device->productID) != ARDISCOVERY_PRODUCT_BLESERVICE)) { error = ARDISCOVERY_ERROR_BAD_PARAMETER; } // No Else: the checking parameters sets error to ARNETWORK_ERROR_BAD_PARAMETER and stop the processing if (error == ARDISCOVERY_OK) { specificBLEParam = malloc(sizeof(ARDISCOVERY_DEVICE_BLE_t)); if (specificBLEParam != NULL) { device->specificParameters = specificBLEParam; specificBLEParam->deviceManager = bleDeviceManager; specificBLEParam->device = bleDevice; } else { error = ARDISCOVERY_ERROR_ALLOC; } } // if an error occurred and it is not a bad parameters error if (error != ARDISCOVERY_OK) { // try to delete SpecificParameters ARDISCOVERY_DEVICE_Ble_DeleteSpecificParameters (device); } // No else: skipped no error return error; }
ARCONTROLLER_Network_t *ARCONTROLLER_Network_New (ARDISCOVERY_Device_t *discoveryDevice, ARCONTROLLER_Network_DisconnectionCallback_t disconnectionCallback, ARDISCOVERY_Device_ConnectionJsonCallback_t sendJsonCallback, ARDISCOVERY_Device_ConnectionJsonCallback_t receiveJsonCallback, void *customData, eARCONTROLLER_ERROR *error) { // -- Create a new Network Controller -- //local declarations eARCONTROLLER_ERROR localError = ARCONTROLLER_OK; ARCONTROLLER_Network_t *networkController = NULL; eARDISCOVERY_ERROR dicoveryError = ARDISCOVERY_OK; // Check parameters if (discoveryDevice == NULL) { localError = ARCONTROLLER_ERROR_BAD_PARAMETER; } // No Else: the checking parameters sets localError to ARNETWORK_ERROR_BAD_PARAMETER and stop the processing if (localError == ARCONTROLLER_OK) { // Create the Network Controller networkController = malloc (sizeof (ARCONTROLLER_Network_t)); if (networkController != NULL) { // Initialize to default values networkController->discoveryDevice = NULL; networkController->networkALManager = NULL; networkController->networkManager = NULL; networkController->rxThread = NULL; networkController->txThread = NULL; networkController->readerThreads = NULL; networkController->readerThreadsData = NULL; networkController->state = ARCONTROLLER_NETWORK_STATE_RUNNING; //video part networkController->hasVideo = 0; networkController->videoController = NULL; //Connection callback networkController->sendJsonCallback = sendJsonCallback; networkController->receiveJsonCallback = receiveJsonCallback; networkController->disconnectionCallback = disconnectionCallback; networkController->callbacksCustomData = customData; // init networkConfiguration networkController->networkConfig.controllerToDeviceNotAckId = -1; networkController->networkConfig.controllerToDeviceAckId = -1; networkController->networkConfig.controllerToDeviceHightPriority = -1; networkController->networkConfig.controllerToDeviceARStreamAck = -1; networkController->networkConfig.deviceToControllerNotAckId = -1; networkController->networkConfig.deviceToControllerAckId = -1; //networkController->networkConfig.deviceToControllerHightPriority = -1; networkController->networkConfig.deviceToControllerARStreamData = -1; networkController->networkConfig.numberOfControllerToDeviceParam = 0; networkController->networkConfig.controllerToDeviceParams = NULL; networkController->networkConfig.numberOfDeviceToControllerParam = 0; networkController->networkConfig.deviceToControllerParams = NULL; networkController->networkConfig.pingDelayMs =-1; networkController->networkConfig.numberOfDeviceToControllerCommandsBufferIds = 0; networkController->networkConfig.deviceToControllerCommandsBufferIds = NULL; /* Create the mutex/condition */ if ( (localError == ARCONTROLLER_OK) && (ARSAL_Mutex_Init (&(networkController->mutex)) != 0)) { localError = ARCONTROLLER_ERROR_INIT_MUTEX; } } else { localError = ARCONTROLLER_ERROR_ALLOC; } } if (localError == ARCONTROLLER_OK) { // Copy the device eARDISCOVERY_ERROR dicoveryError = ARDISCOVERY_OK; networkController->discoveryDevice = ARDISCOVERY_Device_NewByCopy (discoveryDevice, &dicoveryError); if (dicoveryError != ARDISCOVERY_OK) { localError = ARCONTROLLER_ERROR_INIT_DEVICE_COPY; } } // Check if it is a wifi device if ((localError == ARCONTROLLER_OK) && (ARDISCOVERY_getProductService (networkController->discoveryDevice->productID) == ARDISCOVERY_PRODUCT_NSNETSERVICE)) { // Add callbacks for the connection json part dicoveryError = ARDISCOVERY_Device_WifiAddConnectionCallbacks (networkController->discoveryDevice, ARCONTROLLER_Network_OnSendJson, ARCONTROLLER_Network_OnReceiveJson, networkController); if (dicoveryError != ARDISCOVERY_OK) { localError = ARCONTROLLER_ERROR_INIT_DEVICE_JSON_CALLBACK; } } if (localError == ARCONTROLLER_OK) { // Initialize the network Configuration eARDISCOVERY_ERROR dicoveryError = ARDISCOVERY_OK; dicoveryError = ARDISCOVERY_Device_InitNetworkConfiguration (networkController->discoveryDevice, &(networkController->networkConfig)); if (dicoveryError != ARDISCOVERY_OK) { localError = ARCONTROLLER_ERROR_INIT_NETWORK_CONFIG; } } if (localError == ARCONTROLLER_OK) { // Check if the device has video if (networkController->networkConfig.deviceToControllerARStreamData != -1) { networkController->hasVideo = 1; networkController->videoController = ARCONTROLLER_Stream_New (&(networkController->networkConfig), networkController->discoveryDevice, &localError); } //NO else ; device has not video } // No else: skipped by an error if (localError == ARCONTROLLER_OK) { // Create the NetworkAL eARDISCOVERY_ERROR dicoveryError = ARDISCOVERY_OK; eARNETWORKAL_ERROR netALError = ARNETWORKAL_OK; networkController->networkALManager = ARDISCOVERY_Device_NewARNetworkAL (networkController->discoveryDevice, &dicoveryError, &netALError); if (dicoveryError != ARDISCOVERY_OK) { if (netALError != ARNETWORKAL_OK) { ARSAL_PRINT (ARSAL_PRINT_ERROR, ARCONTROLLER_NETWORK_TAG, "error: %s", ARNETWORKAL_Error_ToString (netALError)); } localError = ARCONTROLLER_ERROR_INIT_ARNETWORKAL_MANAGER; } } if (localError == ARCONTROLLER_OK) { // Create the ARNetworkManager. eARNETWORK_ERROR netError = ARNETWORK_OK; networkController->networkManager = ARNETWORK_Manager_New (networkController->networkALManager, networkController->networkConfig.numberOfControllerToDeviceParam, networkController->networkConfig.controllerToDeviceParams, networkController->networkConfig.numberOfDeviceToControllerParam, networkController->networkConfig.deviceToControllerParams, networkController->networkConfig.pingDelayMs, ARCONTROLLER_Network_OnDisconnectNetwork, networkController, &netError); if (netError != ARNETWORK_OK) { localError = ARCONTROLLER_ERROR_INIT_ARNETWORK_MANAGER; } } if (localError == ARCONTROLLER_OK) { // Create the Network receiver and transmitter Threads localError = ARCONTROLLER_Network_CreateNetworkThreads (networkController); } if (localError == ARCONTROLLER_OK) { // Create the reader Threads localError = ARCONTROLLER_Network_CreateReaderThreads (networkController); } // delete the Network Controller if an error occurred if (localError != ARCONTROLLER_OK) { ARSAL_PRINT (ARSAL_PRINT_ERROR, ARCONTROLLER_NETWORK_TAG, "error: %s", ARCONTROLLER_Error_ToString (localError)); ARCONTROLLER_Network_Delete (&networkController); } // No else: skipped by an error // Return the error if (error != NULL) { *error = localError; } // No else: error is not returned return networkController; }
eARDISCOVERY_ERROR ARDISCOVERY_JNI_DEVICE_Ble_DeleteSpecificParameters (ARDISCOVERY_Device_t *device) { // -- Delete SpecificParameters allocated by the BLE initialization -- // local declarations eARDISCOVERY_ERROR localError = ARDISCOVERY_OK; JNIEnv* env = NULL; jint getEnvResult = JNI_OK; jint attachResult = 1; ARDISCOVERY_JNI_DEVICE_BLE_t *specificBLEParam = NULL; // check parameters if ((device == NULL) || (device->specificParameters == NULL) || (ARDISCOVERY_getProductService (device->productID) != ARDISCOVERY_PRODUCT_BLESERVICE)) { 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) { // get the environment getEnvResult = (*ARDISCOVERY_JNI_VM)->GetEnv(ARDISCOVERY_JNI_VM, (void **) &env, JNI_VERSION_1_6); // if no environment then attach the thread to the virtual machine if (getEnvResult == JNI_EDETACHED) { ARSAL_PRINT(ARSAL_PRINT_DEBUG, ARDISCOVERY_JNI_DEVICE_BLE_TAG, "attach the thread to the virtual machine ..."); attachResult = (*ARDISCOVERY_JNI_VM)->AttachCurrentThread(ARDISCOVERY_JNI_VM, &env, NULL); } if (env == NULL) { localError = ARDISCOVERY_ERROR_JNI_ENV; } } if (localError == ARDISCOVERY_OK) { // free specific parameter // cast device->specificBLEParam specificBLEParam = (ARDISCOVERY_JNI_DEVICE_BLE_t *)device->specificParameters; (*env)->DeleteGlobalRef (env, specificBLEParam->jBLEPart); specificBLEParam->jBLEPart = NULL; free (device->specificParameters); device->specificParameters = NULL; } // if the thread has been attached then detach the thread from the virtual machine if ((getEnvResult == JNI_EDETACHED) && (env != NULL)) { (*ARDISCOVERY_JNI_VM)->DetachCurrentThread(ARDISCOVERY_JNI_VM); } return localError; }
void *ARDISCOVERY_JNI_DEVICE_Ble_GetCopyOfSpecificParameters (ARDISCOVERY_Device_t *device, eARDISCOVERY_ERROR *error) { // -- Copy BLE specificParameters -- // local declarations JNIEnv* env = NULL; jint getEnvResult = JNI_OK; jint attachResult = 1; eARDISCOVERY_ERROR localError = ARDISCOVERY_OK; ARDISCOVERY_JNI_DEVICE_BLE_t *specificBLEParamToCopy = NULL; ARDISCOVERY_JNI_DEVICE_BLE_t *specificBLEParam = NULL; // check parameters if ((device == NULL)|| (ARDISCOVERY_getProductService (device->productID) != ARDISCOVERY_PRODUCT_BLESERVICE)) { 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) { // get the environment getEnvResult = (*ARDISCOVERY_JNI_VM)->GetEnv(ARDISCOVERY_JNI_VM, (void **) &env, JNI_VERSION_1_6); // if no environment then attach the thread to the virtual machine if (getEnvResult == JNI_EDETACHED) { ARSAL_PRINT(ARSAL_PRINT_DEBUG, ARDISCOVERY_JNI_DEVICE_BLE_TAG, "attach the thread to the virtual machine ..."); attachResult = (*ARDISCOVERY_JNI_VM)->AttachCurrentThread(ARDISCOVERY_JNI_VM, &env, NULL); } if (env == NULL) { localError = ARDISCOVERY_ERROR_JNI_ENV; } } if (localError == ARDISCOVERY_OK) { // cast device->specificBLEParam specificBLEParamToCopy = (ARDISCOVERY_JNI_DEVICE_BLE_t *)device->specificParameters; if (specificBLEParamToCopy != NULL) { // Copy BLE specific parameters specificBLEParam = malloc(sizeof(ARDISCOVERY_JNI_DEVICE_BLE_t)); if (specificBLEParam != NULL) { specificBLEParam->jBLEPart = (*env)->NewGlobalRef (env, specificBLEParamToCopy->jBLEPart); } else { localError = ARDISCOVERY_ERROR_ALLOC; } } // NO Else ; No Specific Wifi Parameters To Copy. } // No else: skipped by error // delete the SpecificParameters if an error occurred if (localError != ARDISCOVERY_OK) { ARDISCOVERY_JNI_DEVICE_Ble_DeleteSpecificParameters (device); } // No else: skipped no error // if the thread has been attached then detach the thread from the virtual machine if ((getEnvResult == JNI_EDETACHED) && (env != NULL)) { (*ARDISCOVERY_JNI_VM)->DetachCurrentThread(ARDISCOVERY_JNI_VM); } // return the error if (error != NULL) { *error = localError; } // No else: error is not returned return specificBLEParam; }
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) || (ARDISCOVERY_getProductService (device->productID) != ARDISCOVERY_PRODUCT_BLESERVICE)) { 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; }