/****************************************************************************** * * Title : primFunc_RWBodData.c * Version 0.0 * * Description: * Related files: * * Author: Lukas Tomasek, tomasekl@fzu.cz * ******************************************************************************/ /****************************************************************************** * Header files * ******************************************************************************/ #include #include "primFunc_RWBocData.h" #include "fileUtility.h" #include "globalDefinitions.h" #include "uirUtility.h" #include "primParamsUir.h" #include "primFunctionInit.h" #include "RWlists.h" /****************************************************************************** * Global functions * ******************************************************************************/ /*============================================================================= * primFunction_RWBocData() *============================================================================= * * * */ ERROR_ID primFunction_RWBocData(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_BOC_DATA_PARAMS *RWBocData=&primTable->params.RWBocData; char subdir[PATHNAME_LENGTH]; const int panel=global.panel.primEdit[getPrimArrayId(RW_BOC_DATA)]; UINT32 i, j; UINT32 dataLength; int outFileOption; struct RW_BOC_DATA_IN *RWBocDataBuff; if(R_RW_BOC_DATA!=R_RW_BOC_DATA_HOST){ ERROR_CHECK(PROGRAM_ERROR, primitive RW_BOC_DATA - wrong revision number); return(PROGRAM_ERROR); } switch(funcOption){ case PRIM_PANEL_TO_TABLE: GetCtrlVal(panel, RW_BOCD_READ_NOT_WRITE, &RWBocData->inputParams.read); GetCtrlVal(panel, RW_BOCD_SEND, &RWBocData->inputParams.sendToBoc); if(RWBocData->inputParams.read==1){ /* read */ GetCtrlVal(panel, RW_BOCD_OUT_FILE, RWBocData->dataFileName); RWBocData->inputParams.dataLen=0; /* don't care */ if(RWBocData->dataFileName[0]==0){ status=MessagePopup ("WARNING", "Select output file!"); UIR_STATUS_CHECK(status, MessagePopup()); return(PROGRAM_ERROR); }; }else{ /* write */ GetCtrlVal(panel, RW_BOCD_DATA_LEN, &RWBocData->inputParams.dataLen); GetCtrlVal(panel, RW_BOCD_INP_FILE, RWBocData->dataFileName); if(RWBocData->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(struct RW_BOC_DATA_IN)-SIZEOF(UINT32); if(RWBocData->inputParams.read==0){ /* write */ primTable->inPrimHeader.length+=RWBocData->inputParams.dataLen; } primTable->inPrimHeader.id=RW_BOC_DATA; primTable->inPrimHeader.primRevision=R_RW_BOC_DATA_HOST; if(RWBocData->inputParams.read==1){ /* read */ primTable->replyLength=SIZEOF(struct MSG_HEAD)+SIZEOF(struct RW_BOC_DATA_OUT); }else{ primTable->replyLength=0; /* write */ } break; case PRIM_TABLE_TO_PANEL: if(primTable->inPrimHeader.primRevision!=R_RW_BOC_DATA){ ERROR_CHECK(PROGRAM_ERROR, primitive RW_BOC_DATA - wrong revision number); return(PROGRAM_ERROR); } SetCtrlVal(panel, RW_BOCD_READ_NOT_WRITE, RWBocData->inputParams.read); SetCtrlVal(panel, RW_BOCD_SEND, RWBocData->inputParams.sendToBoc); SetCtrlVal(panel, RW_BOCD_DATA_LEN, RWBocData->inputParams.dataLen); if(RWBocData->inputParams.read==1){ /* read */ status=SetInputMode(panel, RW_BOCD_OUT_FILE, 1); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_BOCD_OUT_FILE, RWBocData->dataFileName); SetCtrlVal(panel, RW_BOCD_INP_FILE, 0); status=SetInputMode(panel, RW_BOCD_INP_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); }else{ /* write */ status=SetInputMode(panel, RW_BOCD_INP_FILE, 1); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_BOCD_INP_FILE, RWBocData->dataFileName); //SetCtrlVal(panel, RW_BOCD_OUT_FILE, 0); status=SetInputMode(panel, RW_BOCD_OUT_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); }; break; case PRIM_BUILD: RWBocDataBuff=(struct RW_BOC_DATA_IN*)(primDataPtr); /* copy data */ *RWBocDataBuff=RWBocData->inputParams; if(RWBocData->inputParams.read==0){ /* write */ primDataPtr+=(paramsLength/sizeof(UINT32)); /* copy params */ errorId=getFileSize(RWBocData->dataFileName, &fileSize); ERROR_CHECK(errorId, getFileSize()); RWBocDataBuff->dataLen=((fileSize+3)/4); /*copy data*/ if(fileSize>0){ errorId=readFromBinFile(RWBocData->dataFileName, primDataPtr, fileSize); ERROR_CHECK(errorId, readFromBinFile()); if(errorId!=SUCCESS){ return(errorId); } } /* update length!!!! */ primTable->inPrimHeader.length=SIZEOF(struct MSG_HEAD)+SIZEOF(struct RW_BOC_DATA_IN)-SIZEOF(UINT32)+RWBocDataBuff->dataLen; primHeader->length=primTable->inPrimHeader.length; } break; case REP_DATA_PROCESS: host=global.host[HOST_INDEX(slotNumber)]; if(RWBocData->inputParams.read==1){ /* read */ if(RWBocData->dataFileName[0]!=0){ strcpy(subdir, host->dataDir); strcat(subdir, RWBocData->dataFileName); errorId=writeToBinFile(subdir, 0, primDataPtr, sizeof(struct RW_BOC_DATA_OUT)); ERROR_CHECK(errorId, writeToBinFile()); } } break; case WRITE_TO_FILE: file=(FILE*)inputParameter; fprintf(file, "read= %d, sendToBoc= %d, dataLen= 0x%X\n", RWBocData->inputParams.read, RWBocData->inputParams.sendToBoc, RWBocData->inputParams.dataLen); fprintf(file, "dataFileName[]= %s\n", RWBocData->dataFileName); break; case READ_FROM_FILE: file=(FILE*)inputParameter; status=fscanf(file, "read= %d, sendToBoc= %d, dataLen= 0x%X\n", &RWBocData->inputParams.read, &RWBocData->inputParams.sendToBoc, &RWBocData->inputParams.dataLen); if(status==-1) {ERROR_CHECK(FATAL_ERROR, Read from prim file error!); return(FATAL_ERROR);} status=readLineFromIndex(file, strlen("dataFileName[]= "), PATHNAME_LENGTH, RWBocData->dataFileName); if(status!=0) {ERROR_CHECK(FATAL_ERROR, Read from prim file error!); return(FATAL_ERROR);} break; default: ; } return(SUCCESS); } /******************************************************************************/