//this function is called when the state of the device controller has changed: void stateChanged(eARCONTROLLER_DEVICE_STATE newState, eARCONTROLLER_ERROR error, void *customData) { ARSAL_PRINT(ARSAL_PRINT_INFO, TAG, "-stateChanged newState: %d .....",newState); switch (newState) { case ARCONTROLLER_DEVICE_STATE_STOPPED: ARSAL_Sem_Post(&(stateSem)); gIHMRun = 0; break; case ARCONTROLLER_DEVICE_STATE_RUNNING: ARSAL_Sem_Post(&(stateSem)); break; default: break; } }
void ARSTREAM_Reader_TestBenchStop () { if (running) { ARSAL_Sem_Post (&closeSem); } }
eARUTILS_ERROR ARUTILS_Http_IsCanceled(ARUTILS_Http_Connection_t *connection) { eARUTILS_ERROR result = ARUTILS_OK; if (connection == NULL) { result = ARUTILS_ERROR_BAD_PARAMETER; } if ((connection != NULL) && (connection->cancelSem != NULL)) { int resultSys = ARSAL_Sem_Trywait(connection->cancelSem); if (resultSys == 0) { result = ARUTILS_ERROR_HTTP_CANCELED; //give back the signal state lost from trywait ARSAL_Sem_Post(connection->cancelSem); } else if (errno != EAGAIN) { result = ARUTILS_ERROR_SYSTEM; } } return result; }
eARDISCOVERY_ERROR ARDISCOVERY_Connection_ControllerConnection (ARDISCOVERY_Connection_ConnectionData_t *connectionData, int port, const char *ip) { /* * Initialize connection */ eARDISCOVERY_ERROR error = ARDISCOVERY_OK; /* Check parameter */ if (connectionData == NULL) { error = ARDISCOVERY_ERROR_BAD_PARAMETER; } if (error == ARDISCOVERY_OK) { /* check if it is already running */ if (ARSAL_Sem_Trywait(&(connectionData->runningSem)) != 0) { error = ARDISCOVERY_ERROR_BUSY; } } if (error == ARDISCOVERY_OK) { /* Start by contacting the device we're interested in */ error = ARDISCOVERY_Connection_ControllerInitSocket (connectionData, port, ip); if (error == ARDISCOVERY_OK) { /* sending */ error = ARDISCOVERY_Connection_TxPending (connectionData); } if (error == ARDISCOVERY_OK) { /* receiption */ error = ARDISCOVERY_Connection_RxPending (connectionData); } /* close the socket*/ if (connectionData->socket != -1) { ARSAL_Socket_Close (connectionData->socket); connectionData->socket = -1; } /* reset the runningSem */ ARSAL_Sem_Post(&(connectionData->runningSem)); } return error; }
eARNETWORK_ERROR ARNETWORK_Receiver_CopyDataRecv (ARNETWORK_Receiver_t *receiverPtr, ARNETWORK_IOBuffer_t *outputBufferPtr, ARNETWORKAL_Frame_t *framePtr) { /** -- copy the data received to the output buffer -- */ /** local declarations */ eARNETWORK_ERROR error = ARNETWORK_OK; int semError = 0; int dataSize = 0; int nbNew = ARNETWORK_IOBuffer_ShouldAcceptData (outputBufferPtr, framePtr->seq); /** get the data size*/ dataSize = framePtr->size - offsetof (ARNETWORKAL_Frame_t, dataPtr); /** if the output buffer can copy the data */ if (ARNETWORK_IOBuffer_CanCopyData (outputBufferPtr)) { /** copy the data in the IOBuffer */ error = ARNETWORK_IOBuffer_AddData (outputBufferPtr, framePtr->dataPtr, dataSize, NULL, NULL, 1); } else { error = ARNETWORK_ERROR_BAD_PARAMETER; ARSAL_PRINT (ARSAL_PRINT_ERROR, ARNETWORK_RECEIVER_TAG, "[%p] Error: output buffer can't copy data", receiverPtr); } if (error == ARNETWORK_OK) { /** Keep buffer "miss count" accurate */ outputBufferPtr->nbPackets++; outputBufferPtr->nbNetwork += nbNew; outputBufferPtr->seq = framePtr->seq; /** post a semaphore to indicate data ready to be read */ semError = ARSAL_Sem_Post (&(outputBufferPtr->outputSem)); if (semError) { error = ARNETWORK_ERROR_SEMAPHORE; } #ifdef ENABLE_MONITOR_INCOMING_DATA /* write 1 in eventfd to wake up consumer */ error = ARNETWORK_Receiver_WriteEventFd(receiverPtr, 1); #endif } return error; }
eARDATATRANSFER_ERROR ARDATATRANSFER_DataDownloader_CancelThread(ARDATATRANSFER_Manager_t *manager) { eARUTILS_ERROR resultUtils = ARUTILS_OK; eARDATATRANSFER_ERROR result = ARDATATRANSFER_OK; int resultSys = 0; ARSAL_PRINT(ARSAL_PRINT_DEBUG, ARDATATRANSFER_DATA_DOWNLOADER_TAG, ""); if (manager == NULL) { result = ARDATATRANSFER_ERROR_BAD_PARAMETER; } if ((result == ARDATATRANSFER_OK) && (manager->dataDownloader == NULL)) { result = ARDATATRANSFER_ERROR_NOT_INITIALIZED; } if (result == ARDATATRANSFER_OK) { manager->dataDownloader->isCanceled = 1; resultSys = ARSAL_Sem_Post(&manager->dataDownloader->threadSem); if (resultSys != 0) { result = ARDATATRANSFER_ERROR_SYSTEM; } } if (result == ARDATATRANSFER_OK) { resultUtils = ARUTILS_Manager_Ftp_Connection_Cancel(manager->dataDownloader->ftpDataManager); if (resultUtils != ARUTILS_OK) { result = ARDATATRANSFER_ERROR_FTP; } } return result; }
void ARDISCOVERY_Connection_Device_StopListening (ARDISCOVERY_Connection_ConnectionData_t *connectionData) { eARDISCOVERY_ERROR error = ARDISCOVERY_OK; /* Check parameter */ if (connectionData == NULL) { error = ARDISCOVERY_ERROR_BAD_PARAMETER; } if (error == ARDISCOVERY_OK) { /* Stop reception */ connectionData->isAlive = 0; ARDISCOVERY_Connection_Unlock (connectionData); /* wait the end of the run*/ ARSAL_Sem_Wait (&(connectionData->runningSem)); /* reset the runningSem */ ARSAL_Sem_Post(&(connectionData->runningSem)); } }
eARUTILS_ERROR ARUTILS_Http_Connection_Cancel(ARUTILS_Http_Connection_t *connection) { eARUTILS_ERROR result = ARUTILS_OK; int resutlSys = 0; ARSAL_PRINT(ARSAL_PRINT_DEBUG, ARUTILS_HTTP_TAG, ""); if ((connection == NULL) || (connection->cancelSem == NULL)) { result = ARUTILS_ERROR_BAD_PARAMETER; } if (result == ARUTILS_OK) { resutlSys = ARSAL_Sem_Post(connection->cancelSem); if (resutlSys != 0) { result = ARUTILS_ERROR_SYSTEM; } } return result; }
eARDISCOVERY_ERROR ARDISCOVERY_Connection_DeviceListeningLoop (ARDISCOVERY_Connection_ConnectionData_t *connectionData, int port) { /* * Initialize connection */ eARDISCOVERY_ERROR error = ARDISCOVERY_OK; eARDISCOVERY_ERROR loopError = ARDISCOVERY_OK; int deviceSocket = -1; /* Check parameter */ if (connectionData == NULL) { error = ARDISCOVERY_ERROR_BAD_PARAMETER; } if (error == ARDISCOVERY_OK) { /* check if it is already running */ if (ARSAL_Sem_Trywait(&(connectionData->runningSem)) != 0) { error = ARDISCOVERY_ERROR_BUSY; } } if (error == ARDISCOVERY_OK) { /* Initialize the server socket */ error = ARDISCOVERY_Connection_DeviceInitSocket (&deviceSocket, port); } if (error == ARDISCOVERY_OK) { /* Initialize is alive */ connectionData->isAlive = 1; /* while is alive */ while (connectionData->isAlive == 1) { /* Wait for any incoming connection from controller */ loopError = ARDISCOVERY_Connection_DeviceAccept (connectionData, deviceSocket); if (loopError == ARDISCOVERY_OK) { ARSAL_PRINT(ARSAL_PRINT_DEBUG, ARDISCOVERY_CONNECTION_TAG, "Device accepts a socket"); /* receiption */ loopError = ARDISCOVERY_Connection_RxPending (connectionData); } if (loopError == ARDISCOVERY_OK) { /* sending */ loopError = ARDISCOVERY_Connection_TxPending (connectionData); } /* close the client socket */ if (connectionData->socket != -1) { ARSAL_Socket_Close (connectionData->socket); connectionData->socket = -1; } if (loopError != ARDISCOVERY_OK) { /* print the error occurred */ ARSAL_PRINT(ARSAL_PRINT_ERROR, ARDISCOVERY_CONNECTION_TAG, "error: %s", ARDISCOVERY_Error_ToString (loopError)); } } /* close deviceSocket */ if(deviceSocket != -1) { ARSAL_Socket_Close (deviceSocket); deviceSocket = -1; } /* reset the runningSem */ ARSAL_Sem_Post(&(connectionData->runningSem)); } return error; }