/****************************************************************************** * * Title : primFunc_startTask.c * Version 0.0, * * Description: * Related files: * * Author: Lukas Tomasek, tomasekl@fzu.cz * * Dec10 02: adapted for histogram input from the file jv * ******************************************************************************/ /****************************************************************************** * Header files * ******************************************************************************/ #include #include "primFunc_startTask.h" #include "globalDefinitions.h" #include "uirUtility.h" #include "primParamsUir.h" #include "mainUir.h" #include #include "primFunctionInit.h" #include "fillUirControls.h" #include "RWlists.h" /****************************************************************************** * Global functions * ******************************************************************************/ /*============================================================================= * primFunction_startTask() *============================================================================= * * * */ ERROR_ID primFunction_startTask(PRIM_FUNC_OPTION funcOption, struct PRIM_TABLE *primTable, void *primitive, UINT32 inputParameter, UINT8 slotNumber){ FILE *file; struct MSG_HEAD* primHeader=(struct MSG_HEAD*) primitive; UINT32 *primDataPtr=(UINT32*)((UINT32)primHeader+sizeof(struct MSG_HEAD)); ERROR_ID errorId=SUCCESS; int status; char errorMessage[200]; UINT32 primBodyLength; UINT32 primitiveId; struct START_TASK_PARAMS *startTask = &primTable->params.startTask; struct START_TASK_IN *startTaskIn; struct HISTOGRAM_CTRL_TASK_IN_PARAMS histoInParams; UINT8 *startTaskPointer; const int panel=global.panel.primEdit[getPrimArrayId(START_TASK)]; UINT32 i; UINT32 dataLength; char textMessage[200]; char errorText[100]; UINT32 listIndex; int ringIndex; int slave; int fibre, chip; char *fileName; UINT32 fileSize; char message[200]; if(R_START_TASK!=R_START_TASK_HOST){ ERROR_CHECK(PROGRAM_ERROR, primitive START_TASK - wrong revision number); return(PROGRAM_ERROR); } switch(funcOption){ case PRIM_PANEL_TO_TABLE: GetCtrlVal(panel, START_TSKP_TASK_TYPE, &startTask->inputParams.taskType); switch(startTask->inputParams.taskType){ case HISTOGRAM_CTRL_TASK: startTask->inputParams.taskRevision=R_HISTOGRAM_CTRL_TASK; break; case MIRROR_TASK: startTask->inputParams.taskRevision=R_MIRROR_TASK; break; case TRAP_REQ_TASK: startTask->inputParams.taskRevision=R_TRAP_REQ_TASK; break; case HISTOGRAM_TASK: startTask->inputParams.taskRevision=R_HISTOGRAM_TASK; break; case TRAP_TASK: startTask->inputParams.taskRevision=R_TRAP_TASK; break; case OCCUPANCY_TASK: startTask->inputParams.taskRevision=R_OCCUPANCY_TASK; break; case ERROR_TASK: startTask->inputParams.taskRevision=R_ERROR_TASK; break; case RESYNCH_TASK: startTask->inputParams.taskRevision=R_RESYNCH_TASK; break; default: ERROR_CHECK(PROGRAM_ERROR, Wrong Task ID!!!); return(PROGRAM_ERROR); }; GetCtrlVal(panel, START_TSKP_PRIORITY, &startTask->inputParams.priority); GetCtrlVal(panel, START_TSKP_CMPL_FLAG, &startTask->inputParams.completionFlag); if(startTask->inputParams.taskType==HISTOGRAM_CTRL_TASK){ GetCtrlVal(panel, START_TSKP_INP_FILE, (char*)&startTask->inDataFileName); }else{ for(i=0; i<7; ++i){ GetTableCellVal (panel, START_TSKP_TASK_UNION, MakePoint(1,i+1), (UINT32*)&startTask->inputParams.taskStruct+i); } } /* NO BREAK HERE!!!*/ case PRIM_PARAMS_TO_TABLE: /* add table headers - don't set indexes!!! */ primTable->inPrimHeader.length=SIZEOF(struct START_TASK_IN)+SIZEOF(struct MSG_HEAD); if(startTask->inputParams.taskType == HISTOGRAM_CTRL_TASK) { status = getFileSize(startTask->inDataFileName, &fileSize); ERROR_CHECK(status, getFileSize()); if(fileSize != sizeof(struct HISTOGRAM_CTRL_TASK_IN_PARAMS)) { ERROR_CHECK(PROGRAM_ERROR, "File size not equal to sizeof(HISTOGRAM_CTRL_TASK_IN_PARAMS)"); } readFromBinFile(startTask->inDataFileName, &histoInParams, fileSize); if (histoInParams.default1) { status = getFileSize(histoInParams.inputFile1, &fileSize); ERROR_CHECK(status, getFileSize()); primTable->inPrimHeader.length += (fileSize+3)/4; //integer division status = getFileSize(histoInParams.inputFile2, &fileSize); ERROR_CHECK(status, getFileSize()); primTable->inPrimHeader.length += (fileSize+3)/4; //integer division } } primTable->inPrimHeader.id=START_TASK; primTable->inPrimHeader.primRevision=R_START_TASK; primTable->replyLength=0; break; case PRIM_TABLE_TO_PANEL: if(primTable->inPrimHeader.primRevision!=R_START_TASK){ ERROR_CHECK(PROGRAM_ERROR, primitive START_TASK - wrong revision number); return(PROGRAM_ERROR); } SetCtrlVal(panel, START_TSKP_TASK_TYPE, startTask->inputParams.taskType); fillTaskLabel(panel, START_TSKP_TASK_UNION, startTask->inputParams.taskType); SetCtrlVal(panel, START_TSKP_PRIORITY, startTask->inputParams.priority); SetCtrlVal(panel, START_TSKP_CMPL_FLAG, startTask->inputParams.completionFlag); if(startTask->inputParams.taskType==HISTOGRAM_CTRL_TASK){ SetCtrlVal(panel, START_TSKP_INP_FILE, startTask->inDataFileName); }else{ for(i=0; i<7; ++i){ SetTableCellVal (panel, START_TSKP_TASK_UNION, MakePoint(1,i+1), *((UINT32*)&startTask->inputParams.taskStruct+i)); } } break; case PRIM_BUILD: /* copy data */ startTaskIn = (struct START_TASK_IN*)(primDataPtr); // memcpy(startTaskIn, &startTask->inputParams, sizeof(union TASK_STRUCTURES_IN_NOHIST)); ;version replaced 1/28 memcpy(startTaskIn, &startTask->inputParams, sizeof(struct START_TASK_IN_NOHIST)); if(startTask->inputParams.taskType==HISTOGRAM_CTRL_TASK){ fileName = startTask->inDataFileName; status=getFileSize(fileName, &fileSize); ERROR_CHECK(status, getFileSize()); if (fileSize != sizeof(struct HISTOGRAM_CTRL_TASK_IN_PARAMS)) { ERROR_CHECK(PROGRAM_ERROR, "File size not equal to sizeof(HISTOGRAM_CTRL_TASK_IN_PARAMS)"); } status=readFromBinFile(fileName, &histoInParams, fileSize); ERROR_CHECK(status, readFromBinFile()); //startTaskIn->taskStruct = (union TASK_STRUCTURES_IN) histoInParams->primParams; memcpy( &startTaskIn->taskStruct, &histoInParams.primParams, sizeof(struct HISTOGRAM_CTRL_TASK_IN) ); startTaskPointer = (UINT8 *)((UINT32)&startTaskIn->taskStruct + sizeof(union TASK_STRUCTURES_IN)); if(histoInParams.default1) { status=getFileSize(histoInParams.inputFile1, &fileSize); ERROR_CHECK(status, getFileSize()); status=readFromBinFile(histoInParams.inputFile1, startTaskPointer, fileSize); ERROR_CHECK(status, readFromBinFile()); startTaskPointer += ((fileSize+3)/4)*4; // integer division by 4! status=getFileSize(histoInParams.inputFile2, &fileSize); ERROR_CHECK(status, getFileSize()); status=readFromBinFile(histoInParams.inputFile2, startTaskPointer, fileSize); ERROR_CHECK(status, readFromBinFile()); /*check overall size of startTask??*/ } } break; case REP_DATA_PROCESS: /* no reply */ break; case WRITE_TO_FILE: file=(FILE*)inputParameter; fprintf(file, "taskType= 0x%X, taskRevision= %d, priority= %d, completionFlag= %d,\n", startTask->inputParams.taskType, startTask->inputParams.taskRevision, startTask->inputParams.priority, startTask->inputParams.completionFlag); if(startTask->inputParams.taskType==HISTOGRAM_CTRL_TASK){ fprintf(file, "inDataFileName[]= %s\n", startTask->inDataFileName); }else{ fprintf(file, "taskStruct={"); for(i=0; i<7; ++i){ fprintf(file, " 0x%X,", *((UINT32*)(&startTask->inputParams.taskStruct)+i)); } fprintf(file, "}\n"); } break; case READ_FROM_FILE: file=(FILE*)inputParameter; status=fscanf(file, "taskType= 0x%X, taskRevision= %d, priority= %d, completionFlag= %d,\n", &startTask->inputParams.taskType, &startTask->inputParams.taskRevision, &startTask->inputParams.priority, &startTask->inputParams.completionFlag); if(status==-1) {ERROR_CHECK(FATAL_ERROR, Read from prim file error!); return(FATAL_ERROR);} if(startTask->inputParams.taskType==HISTOGRAM_CTRL_TASK){ status=readLineFromIndex(file, strlen("inDataFileName[]= "), PATHNAME_LENGTH, startTask->inDataFileName); if(status!=0) {ERROR_CHECK(FATAL_ERROR, Read from prim file error!); return(FATAL_ERROR);} }else{ status=fscanf(file, "taskStruct={"); if(status==-1) {ERROR_CHECK(FATAL_ERROR, Read from prim file error!); return(FATAL_ERROR);} for(i=0; i<7; ++i){ status=fscanf(file, " 0x%X,", (UINT32*)(&startTask->inputParams.taskStruct)+i); if(status==-1) {ERROR_CHECK(FATAL_ERROR, Read from prim file error!); return(FATAL_ERROR);} } status=fscanf(file, "}\n"); if(status==-1) {ERROR_CHECK(FATAL_ERROR, Read from prim file error!); return(FATAL_ERROR);} } break; default: ;//error } return(SUCCESS); } /******************************************************************************/