/****************************************************************************** * * Title : primFunc_taskOperation.c * Version 0.0, * * Description: Task operation primitive function. * Related files: * * Author: Lukas Tomasek, tomasekl@fzu.cz * ******************************************************************************/ /****************************************************************************** * Header files * ******************************************************************************/ #include #include "primFunc_taskOperation.h" #include "globalDefinitions.h" #include "uirUtility.h" #include "primParamsUir.h" #include "mainUir.h" #include #include "primFunctionInit.h" /****************************************************************************** * Global functions * ******************************************************************************/ /*============================================================================= * primFunction_taskOperation() *============================================================================= * * * */ ERROR_ID primFunction_taskOperation(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; char errorMessage[200]; int status; UINT32 primBodyLength; UINT32 primitiveId; struct TASK_OPERATION_IN *taskOperation=&primTable->params.taskOperation; const int panel=global.panel.primEdit[getPrimArrayId(TASK_OPERATION)]; UINT32 i; UINT32 dataLength; char textMessage[200]; char errorText[100]; UINT32 listIndex; int ringIndex; char str[300]; char subdir[PATHNAME_LENGTH]; struct HOST *host; if(R_TASK_OPERATION!=R_TASK_OPERATION_HOST){ ERROR_CHECK(PROGRAM_ERROR, primitive TASK_OPERATION - wrong revision number); return(PROGRAM_ERROR); } switch(funcOption){ case PRIM_PANEL_TO_TABLE: GetCtrlVal(panel, TSK_OPER_TYPE, &taskOperation->taskType); GetCtrlVal(panel, TSK_OPER_OPER, &taskOperation->taskOperation); GetCtrlVal(panel, TSK_OPER_DATA, &taskOperation->data); /* NO BREAK HERE!!!*/ case PRIM_PARAMS_TO_TABLE: /* add table headers - don't set indexes!!! */ primTable->inPrimHeader.length=SIZEOF(struct TASK_OPERATION_IN)+SIZEOF(struct MSG_HEAD); primTable->inPrimHeader.id=TASK_OPERATION; primTable->inPrimHeader.primRevision=R_TASK_OPERATION; primTable->replyLength=0; /* not known */ break; case PRIM_TABLE_TO_PANEL: if(primTable->inPrimHeader.primRevision!=R_TASK_OPERATION){ ERROR_CHECK(PROGRAM_ERROR, primitive TASK_OPERATION - wrong revision number); return(PROGRAM_ERROR); } SetCtrlVal(panel, TSK_OPER_TYPE, taskOperation->taskType); SetCtrlVal(panel, TSK_OPER_OPER, taskOperation->taskOperation); SetCtrlVal(panel, TSK_OPER_DATA, taskOperation->data); break; case PRIM_BUILD: /* copy data */ *(struct TASK_OPERATION_IN*)(primDataPtr)=*taskOperation; break; case REP_DATA_PROCESS: /* process reply data */ host=global.host[HOST_INDEX(slotNumber)]; dataLength=primHeader->length-SIZEOF(struct MSG_HEAD); /* save reply data */ strcpy(subdir, host->dataDir); sprintf(str, "task0x%X_oper%d.out", taskOperation->taskType, taskOperation->taskOperation); strcat (subdir, str); errorId=writeToBinFile(subdir, 0, primDataPtr, dataLength*sizeof(UINT32)); ERROR_CHECK(errorId, writeToBinFile()); break; case WRITE_TO_FILE: file=(FILE*)inputParameter; fprintf(file, "taskType= %d, taskOperation= %d, data= 0x%X\n", taskOperation->taskType, taskOperation->taskOperation, taskOperation->data); break; case READ_FROM_FILE: file=(FILE*)inputParameter; status=fscanf(file, "taskType= %d, taskOperation= %d, data= 0x%X\n", &taskOperation->taskType, &taskOperation->taskOperation, &taskOperation->data); if(status==-1) {ERROR_CHECK(FATAL_ERROR, Read from prim file error!); return(FATAL_ERROR);} break; default: ;//error } return(SUCCESS); } /******************************************************************************/