/** * Activates the next measurement request. * * @param hMeasurementMgr A handle to the Measurement Manager module. * * @date 16-Dec-2005 */ TI_STATUS measurementMgr_activateNextRequest(TI_HANDLE hMeasurementMgr) { measurementMgr_t * pMeasurementMgr = (measurementMgr_t *) hMeasurementMgr; requestHandler_t * pRequestH = (requestHandler_t *) pMeasurementMgr->hRequestH; MeasurementRequest_t * pRequestArr[MAX_NUM_REQ]; TI_UINT8 numOfRequestsInParallel = 0; TI_BOOL valid; TI_UINT8 index; /* Keep note of the time we started processing the request. this will be used */ /* to give the measurementSRV a time frame to perform the measurement operation */ pMeasurementMgr->currentRequestStartTime = os_timeStampMs(pMeasurementMgr->hOs); do { TI_STATUS status; pRequestH->activeRequestID += numOfRequestsInParallel; pRequestH->numOfWaitingRequests -= numOfRequestsInParallel; for (index = 0; index < MAX_NUM_REQ; index++) { pRequestArr[index] = NULL; } numOfRequestsInParallel = 0; /* Getting the next request/requests from the request handler */ status = requestHandler_getNextReq(pMeasurementMgr->hRequestH, TI_FALSE, pRequestArr, &numOfRequestsInParallel); /* Checking if there are no waiting requests */ if (status != TI_OK) { return measurementMgrSM_event((TI_UINT8 *) &(pMeasurementMgr->currentState), MEASUREMENTMGR_EVENT_SEND_REPORT, pMeasurementMgr); } /* Checking validity of request/s */ valid = measurementMgr_isRequestValid(pMeasurementMgr, pRequestArr, numOfRequestsInParallel); /* Checking if the current request is Beacon Table */ if( (numOfRequestsInParallel == 1) && (pRequestArr[0]->Type == MSR_TYPE_BEACON_MEASUREMENT) && (pRequestArr[0]->ScanMode == MSR_SCAN_MODE_BEACON_TABLE) ) { pMeasurementMgr->buildReport(hMeasurementMgr, *(pRequestArr[0]), NULL); valid = TI_FALSE; /* In order to get the next request/s*/ } } while (valid == TI_FALSE); /* Ignore requests if traffic intensity is high */ if (measurementMgr_isTrafficIntensityHigherThanThreshold(pMeasurementMgr) == TI_TRUE) { measurementMgr_rejectPendingRequests(pMeasurementMgr, MSR_REJECT_TRAFFIC_INTENSITY_TOO_HIGH); return measurementMgrSM_event((TI_UINT8 *) &(pMeasurementMgr->currentState), MEASUREMENTMGR_EVENT_SEND_REPORT, pMeasurementMgr); } pMeasurementMgr->measuredChannelID = pRequestArr[0]->channelNumber; /* Request resource from the SCR */ return measurementMgrSM_event((TI_UINT8 *) &(pMeasurementMgr->currentState), MEASUREMENTMGR_EVENT_REQUEST_SCR, pMeasurementMgr); }
/** * Activates the next measurement request. * * @param hMeasurementMgr A handle to the Measurement Manager module. * * @date 16-Dec-2005 */ TI_STATUS measurementMgr_activateNextRequest(TI_HANDLE hMeasurementMgr) { measurementMgr_t * pMeasurementMgr = (measurementMgr_t *) hMeasurementMgr; requestHandler_t * pRequestH = (requestHandler_t *) pMeasurementMgr->hRequestH; MeasurementRequest_t * pRequestArr[MAX_NUM_REQ]; TI_UINT8 numOfRequestsInParallel = 0; TI_BOOL valid; TI_UINT8 index; /* Keep note of the time we started processing the request. this will be used */ /* to give the measurementSRV a time frame to perform the measurement operation */ pMeasurementMgr->currentRequestStartTime = os_timeStampMs(pMeasurementMgr->hOs); TRACE1(pMeasurementMgr->hReport, REPORT_SEVERITY_INFORMATION, ": Timer started at %d, we have 20ms to begin measurement...\n", pMeasurementMgr->currentRequestStartTime); TRACE0(pMeasurementMgr->hReport, REPORT_SEVERITY_INFORMATION, ": Looking for a valid request\n"); do { TI_STATUS status; if (numOfRequestsInParallel != 0) { TRACE4(pMeasurementMgr->hReport, REPORT_SEVERITY_INFORMATION, ": Changing activeRequestID from %d to %d, and numOfWaitingRequests from %d to %d.\n", pRequestH->activeRequestID, pRequestH->activeRequestID + numOfRequestsInParallel, pRequestH->numOfWaitingRequests, pRequestH->numOfWaitingRequests - numOfRequestsInParallel); } pRequestH->activeRequestID += numOfRequestsInParallel; pRequestH->numOfWaitingRequests -= numOfRequestsInParallel; for (index = 0; index < MAX_NUM_REQ; index++) { pRequestArr[index] = NULL; } numOfRequestsInParallel = 0; /* Getting the next request/requests from the request handler */ status = requestHandler_getNextReq(pMeasurementMgr->hRequestH, TI_FALSE, pRequestArr, &numOfRequestsInParallel); /* Checking if there are no waiting requests */ if (status != TI_OK) { TRACE0(pMeasurementMgr->hReport, REPORT_SEVERITY_INFORMATION, ": There are no waiting requests in the queue\n"); return measurementMgrSM_event((TI_UINT8 *) &(pMeasurementMgr->currentState), MEASUREMENTMGR_EVENT_SEND_REPORT, pMeasurementMgr); } /* Checking validity of request/s */ valid = measurementMgr_isRequestValid(pMeasurementMgr, pRequestArr, numOfRequestsInParallel); /* Checking if the current request is Beacon Table */ if( (numOfRequestsInParallel == 1) && (pRequestArr[0]->Type == MSR_TYPE_BEACON_MEASUREMENT) && (pRequestArr[0]->ScanMode == MSR_SCAN_MODE_BEACON_TABLE) ) { TRACE0(pMeasurementMgr->hReport, REPORT_SEVERITY_INFORMATION, ": Received Beacon Table request, building a report for it and continuing\n"); pMeasurementMgr->buildReport(hMeasurementMgr, *(pRequestArr[0]), NULL); valid = TI_FALSE; /* In order to get the next request/s*/ } } while (valid == TI_FALSE); TRACE0(pMeasurementMgr->hReport, REPORT_SEVERITY_INFORMATION, ": Request(s) for activation:\n"); for (index = 0; index < numOfRequestsInParallel; index++) { TRACE6(pMeasurementMgr->hReport, REPORT_SEVERITY_INFORMATION, ": \n\nRequest #%d:\n Type: %d\n Measured Channel: %d (Serving Channel: %d)\n Scan Mode: %d\n Duration: %d\n\n", index+1, pRequestArr[index]->Type, pRequestArr[index]->channelNumber, pMeasurementMgr->servingChannelID, pRequestArr[index]->ScanMode, pRequestArr[index]->DurationTime); } /* Ignore requests if traffic intensity is high */ if (measurementMgr_isTrafficIntensityHigherThanThreshold(pMeasurementMgr) == TI_TRUE) { TRACE0(pMeasurementMgr->hReport, REPORT_SEVERITY_INFORMATION, ": Traffic intensity too high, giving up...\n"); measurementMgr_rejectPendingRequests(pMeasurementMgr, MSR_REJECT_TRAFFIC_INTENSITY_TOO_HIGH); return measurementMgrSM_event((TI_UINT8 *) &(pMeasurementMgr->currentState), MEASUREMENTMGR_EVENT_SEND_REPORT, pMeasurementMgr); } TRACE0(pMeasurementMgr->hReport, REPORT_SEVERITY_INFORMATION, ": Request is Valid, about to start\n"); pMeasurementMgr->measuredChannelID = pRequestArr[0]->channelNumber; /* Request resource from the SCR */ return measurementMgrSM_event((TI_UINT8 *) &(pMeasurementMgr->currentState), MEASUREMENTMGR_EVENT_REQUEST_SCR, pMeasurementMgr); }