/****************************************************************************** * * Title : primFunc_RWmoduleVarVariable.c * Version 0.0 * * Description: * Related files: * * Author: Lukas Tomasek, tomasekl@fzu.cz * ******************************************************************************/ /****************************************************************************** * Header files * ******************************************************************************/ #include #include "primFunc_RWmoduleVariable.h" #include "fileUtility.h" #include "globalDefinitions.h" #include "uirUtility.h" #include "primParamsUir.h" #include "primFunctionInit.h" #include "RWlists.h" /****************************************************************************** * Global functions * ******************************************************************************/ /*============================================================================= * primFunction_RWmoduleVariable() *============================================================================= * * * */ ERROR_ID primFunction_RWmoduleVariable(PRIM_FUNC_OPTION funcOption, struct PRIM_TABLE *primTable, void *primitive, UINT32 inputParameter, UINT8 slotNumber){ FILE *file; ERROR_ID errorId=SUCCESS; char errorMessage[200]; int status; char *fileName; unsigned int fileSize; struct MSG_HEAD* primHeader=(struct MSG_HEAD*) primitive; UINT32 *primDataPtr=(UINT32*)((UINT32)primHeader+sizeof(struct MSG_HEAD)); struct HOST *host; UINT32 primBodyLength; UINT32 primitiveId; unsigned int paramsLength= 0; int outputFile; struct RW_MODULE_VARIABLE_PARAMS *RWmoduleVar=&primTable->params.RWmoduleVar; char subdir[PATHNAME_LENGTH]; const int panel=global.panel.primEdit[getPrimArrayId(RW_MODULE_VARIABLE)]; UINT32 i, j; UINT32 dataLength; int outFileOption; RwModuleVariableIn *RWModuleVarBuff; RwModuleVariableOut *RWmoduleVarOut; if(R_RW_MODULE_VARIABLE!=R_RW_MODULE_VARIABLE_HOST){ ERROR_CHECK(PROGRAM_ERROR, primitive RW_MODULE_VARIABLE - wrong revision number); return(PROGRAM_ERROR); } switch(funcOption){ case PRIM_PANEL_TO_TABLE: GetCtrlVal(panel, RWMODULVAR_READ_NOT_WRITE, &RWmoduleVar->inputParams.fRead); GetCtrlVal(panel, RWMODULVAR_STRUCT_ID, &RWmoduleVar->inputParams.cfgSet); GetCtrlVal(panel, RWMODULVAR_GROUP_ID, &RWmoduleVar->inputParams.groupId); GetCtrlVal(panel, RWMODULVAR_MODULE, &RWmoduleVar->inputParams.module); GetCtrlVal(panel, RWMODULVAR_CHIP, &RWmoduleVar->inputParams.chip); GetCtrlVal(panel, RWMODULVAR_VAR_TYPE, &RWmoduleVar->inputParams.varType); if(RWmoduleVar->inputParams.fRead==1){ /* read */ GetCtrlVal(panel, RWMODULVAR_OUT_FILE, RWmoduleVar->dataFileName); RWmoduleVar->inputParams.dataLen=0; /* don't care */ if(RWmoduleVar->dataFileName[0]==0){ status=MessagePopup ("WARNING", "Select output file!"); UIR_STATUS_CHECK(status, MessagePopup()); return(PROGRAM_ERROR); }; }else{ /* write */ GetCtrlVal(panel, RWMODULVAR_DATA_LEN, &RWmoduleVar->inputParams.dataLen); GetCtrlVal(panel, RWMODULVAR_INP_FILE, RWmoduleVar->dataFileName); if(RWmoduleVar->dataFileName[0]==0){ status=MessagePopup ("WARNING", "Select input data file!"); UIR_STATUS_CHECK(status, MessagePopup()); return(PROGRAM_ERROR); }; }; /* NO BREAK HERE!!!*/ case PRIM_PARAMS_TO_TABLE: /* add table headers - don't set indexes!!! */ primTable->inPrimHeader.length=SIZEOF(struct MSG_HEAD)+SIZEOF(RwModuleVariableIn); //dpsf: (with dummy ptr): //dpsf: primTable->inPrimHeader.length=SIZEOF(struct MSG_HEAD)+SIZEOF(RwModuleVariableIn)-SIZEOF(UINT32); if(RWmoduleVar->inputParams.fRead==0){ /* write */ primTable->inPrimHeader.length+=RWmoduleVar->inputParams.dataLen; } primTable->inPrimHeader.id=RW_MODULE_VARIABLE; primTable->inPrimHeader.primRevision=R_RW_MODULE_VARIABLE_HOST; if(RWmoduleVar->inputParams.fRead==1){ /* read */ primTable->replyLength=SIZEOF(struct MSG_HEAD)+SIZEOF(UINT32); // not known }else{ primTable->replyLength=0; /* write */ } break; case PRIM_TABLE_TO_PANEL: if(primTable->inPrimHeader.primRevision!=R_RW_MODULE_VARIABLE){ ERROR_CHECK(PROGRAM_ERROR, primitive RW_MODULE_VARIABLE - wrong revision number); return(PROGRAM_ERROR); } SetCtrlVal(panel, RWMODULVAR_READ_NOT_WRITE, RWmoduleVar->inputParams.fRead); SetCtrlVal(panel, RWMODULVAR_STRUCT_ID, RWmoduleVar->inputParams.cfgSet); SetCtrlVal(panel, RWMODULVAR_GROUP_ID, RWmoduleVar->inputParams.groupId); SetCtrlVal(panel, RWMODULVAR_MODULE, RWmoduleVar->inputParams.module); SetCtrlVal(panel, RWMODULVAR_CHIP, RWmoduleVar->inputParams.chip); SetCtrlVal(panel, RWMODULVAR_VAR_TYPE, RWmoduleVar->inputParams.varType); SetCtrlVal(panel, RWMODULVAR_DATA_LEN, RWmoduleVar->inputParams.dataLen); if(RWmoduleVar->inputParams.fRead==1){ /* read */ status=SetInputMode(panel, RWMODULVAR_OUT_FILE, 1); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RWMODULVAR_OUT_FILE, RWmoduleVar->dataFileName); SetCtrlVal(panel, RWMODULVAR_INP_FILE, 0); status=SetInputMode(panel, RWMODULVAR_INP_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); }else{ /* write */ status=SetInputMode(panel, RWMODULVAR_INP_FILE, 1); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RWMODULVAR_INP_FILE, RWmoduleVar->dataFileName); SetCtrlVal(panel, RWMODULVAR_OUT_FILE, 0); status=SetInputMode(panel, RWMODULVAR_OUT_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); }; break; case PRIM_BUILD: RWModuleVarBuff=(RwModuleVariableIn*)(primDataPtr); /* copy data */ *RWModuleVarBuff=RWmoduleVar->inputParams; //paramsLength=sizeof(RwModuleVariableIn)-sizeof(UINT32); //memcpy(primDataPtr, &RWmoduleVar->inputParams, paramsLength); /* copy parameters */ if(RWmoduleVar->inputParams.fRead==0){ /* write */ primDataPtr+=(paramsLength/sizeof(UINT32)); /* copy params */ errorId=getFileSize(RWmoduleVar->dataFileName, &fileSize); ERROR_CHECK(errorId, getFileSize()); RWModuleVarBuff->dataLen=((fileSize+3)/4); /*copy data*/ if(fileSize>0){ errorId=readFromBinFile(RWmoduleVar->dataFileName, primDataPtr, fileSize); ERROR_CHECK(errorId, readFromBinFile()); if(errorId!=SUCCESS){ return(errorId); } } /* update length!!!! */ primTable->inPrimHeader.length=SIZEOF(struct MSG_HEAD)+SIZEOF(RwModuleVariableIn) +RWModuleVarBuff->dataLen; //dpsf: (with dummy ptr): //dpsf: primTable->inPrimHeader.length=SIZEOF(struct MSG_HEAD)+SIZEOF(RwModuleVariableIn)-SIZEOF(UINT32)+RWModuleVarBuff->dataLen; primHeader->length=primTable->inPrimHeader.length; } break; case REP_DATA_PROCESS: host=global.host[HOST_INDEX(slotNumber)]; RWmoduleVarOut= (RwModuleVariableOut*) primDataPtr; if(RWmoduleVar->inputParams.fRead==1){ /* read */ if(RWmoduleVar->dataFileName[0]!=0){ strcpy(subdir, host->dataDir); strcat(subdir, RWmoduleVar->dataFileName); errorId=writeToBinFile(subdir, 0, &RWmoduleVarOut, sizeof(RWmoduleVarOut) +RWmoduleVarOut->dataLen*sizeof(UINT32)); ERROR_CHECK(errorId, writeToBinFile()); } } break; case WRITE_TO_FILE: file=(FILE*)inputParameter; fprintf(file, "read= %d, structId= %d, groupId= %d, module= %d, chip= %d, varType= 0x%X, dataLen= 0x%X\n", RWmoduleVar->inputParams.fRead, RWmoduleVar->inputParams.cfgSet, RWmoduleVar->inputParams.groupId, RWmoduleVar->inputParams.module, RWmoduleVar->inputParams.chip, RWmoduleVar->inputParams.varType, RWmoduleVar->inputParams.dataLen); fprintf(file, "dataFileName[]= %s\n", RWmoduleVar->dataFileName); break; case READ_FROM_FILE: file=(FILE*)inputParameter; status=fscanf(file, "read= %d, structId= %d, groupId= %d, module= %d, chip= %d, varType= 0x%X, dataLen= 0x%X\n", &RWmoduleVar->inputParams.fRead, &RWmoduleVar->inputParams.cfgSet, &RWmoduleVar->inputParams.groupId, &RWmoduleVar->inputParams.module, &RWmoduleVar->inputParams.chip, &RWmoduleVar->inputParams.varType, &RWmoduleVar->inputParams.dataLen); if(status==-1) {ERROR_CHECK(FATAL_ERROR, Read from prim file error!); return(FATAL_ERROR);} status=readLineFromIndex(file, strlen("dataFileName[]= "), PATHNAME_LENGTH, RWmoduleVar->dataFileName); if(status!=0) {ERROR_CHECK(FATAL_ERROR, Read from prim file error!); return(FATAL_ERROR);} break; default: ; } return(SUCCESS); } /******************************************************************************/