/*************************************************************************** * * Title : primFunc_RWField.c * Version 0.0 * * Description: RW object primitive function. * Related files: * * Author: Lukas Tomasek, tomasekl@fzu.cz * ******************************************************************************/ /****************************************************************************** * Header files * ******************************************************************************/ #include #include "primFunc_RWRegField.h" #include "globalDefinitions.h" #include "uirUtility.h" #include "primParamsUir.h" #include "mainUir.h" #include #include "primFunctionInit.h" #include "RWlists.h" /****************************************************************************** * Global functions * ******************************************************************************/ /*============================================================================= * primFunction_RWField() *============================================================================= * * * */ ERROR_ID primFunction_RWField(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; long 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; UINT32 listIndex; struct RW_REG_FIELD_OUT *RWFieldOut; struct PRIM_RWFIELD_PARAMS *RWField=&primTable->params.RWField; const int panel=global.panel.primEdit[getPrimArrayId(RW_REG_FIELD)]; UINT32 i; UINT32 dataLength; UINT32 objectId; int outFileOption; char subdir[PATHNAME_LENGTH]; UINT32 dataIn; int option; if(R_RW_REG_FIELD!=R_RW_REG_FIELD_HOST){ ERROR_CHECK(PROGRAM_ERROR, primitive RW_FIELD - wrong revision number); return(PROGRAM_ERROR); } switch(funcOption){ case PRIM_PANEL_TO_TABLE: GetCtrlVal(panel, RW_FIELDP_BASE_ID, &RWField->baseId); GetCtrlVal(panel, RW_FIELDP_X, &RWField->x); GetCtrlVal(panel, RW_FIELDP_Y, &RWField->y); GetCtrlVal(panel, RW_FIELDP_Z, &RWField->z); GetCtrlVal(panel, RW_FIELDP_OBJECT_ID, &RWField->inputParams.registerID); GetCtrlVal(panel, RW_FIELDP_READ_WRITE, &RWField->inputParams.readNotWrite); GetCtrlVal(panel, RW_FIELDP_OFFSET, &RWField->inputParams.offset); GetCtrlVal(panel, RW_FIELDP_WIDTH, &RWField->inputParams.width); if(RWField->inputParams.readNotWrite==0){ /* write */ GetCtrlVal(panel, RW_FIELDP_DATA_IN, &RWField->inputParams.dataIn); }else{ /* read */ RWField->inputParams.dataIn=0; GetCtrlVal(panel, RW_FIELDP_OUTPUT_OPT, &outFileOption); if(outFileOption){ GetCtrlVal(panel, RW_FIELDP_WRITE_OR_APPEND, &RWField->appendNotWrite); GetCtrlVal(panel, RW_FIELDP_OUT_FILE, RWField->outDataFileName); } else { RWField->outDataFileName[0]=0; } } /* 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_REG_FIELD_IN); if(RWField->inputParams.readNotWrite==1){ /* read */ --primTable->inPrimHeader.length; } primTable->inPrimHeader.id=RW_REG_FIELD; primTable->inPrimHeader.primRevision=R_RW_REG_FIELD_HOST; if(RWField->inputParams.readNotWrite==1){ /* read */ primTable->replyLength=SIZEOF(struct MSG_HEAD)+SIZEOF(struct RW_REG_FIELD_OUT); }else{ primTable->replyLength=0; } break; case PRIM_TABLE_TO_PANEL: if(primTable->inPrimHeader.primRevision!=R_RW_REG_FIELD){ ERROR_CHECK(PROGRAM_ERROR, primitive RW_FIELD - wrong revision number); //return(PROGRAM_ERROR); } SetCtrlVal(panel, RW_FIELDP_BASE_ID, RWField->baseId); SetCtrlVal(panel, RW_FIELDP_X, RWField->x); SetCtrlVal(panel, RW_FIELDP_Y, RWField->y); SetCtrlVal(panel, RW_FIELDP_Z, RWField->z); SetCtrlVal(panel, RW_FIELDP_OBJECT_ID, RWField->inputParams.registerID); SetCtrlVal(panel, RW_FIELDP_READ_WRITE, RWField->inputParams.readNotWrite); SetCtrlVal(panel, RW_FIELDP_OFFSET, RWField->inputParams.offset); SetCtrlVal(panel, RW_FIELDP_WIDTH, RWField->inputParams.width); errorId=loadRodRegFile(panel, RW_FIELDP_REG_BOX, RWField->baseId); ERROR_CHECK(errorId, loadRodRegFile()); bitButtonsInpMode(panel, !RWField->inputParams.readNotWrite); if(RWField->inputParams.readNotWrite==1){ /* read */ status=SetInputMode(panel, RW_FIELDP_DATA_IN, 0); UIR_STATUS_CHECK(status, SetInputMode()); if(RWField->outDataFileName[0]==0){ SetCtrlVal(panel, RW_FIELDP_OUTPUT_OPT, 0); status=SetInputMode(panel, RW_FIELDP_OUT_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); }else{ SetCtrlVal(panel, RW_FIELDP_OUTPUT_OPT, 1); status=SetInputMode(panel, RW_FIELDP_OUT_FILE, 1); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_FIELDP_WRITE_OR_APPEND, RWField->appendNotWrite); SetCtrlVal(panel, RW_FIELDP_OUT_FILE, RWField->outDataFileName); } status=SetInputMode(panel, RW_FIELDP_WRITE_OR_APPEND, 1); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_OUTPUT_OPT, 1); UIR_STATUS_CHECK(status, SetInputMode()); }else{ /* write */ status=SetInputMode(panel, RW_FIELDP_DATA_IN, 1); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_FIELDP_DATA_IN, RWField->inputParams.dataIn); dataIn=RWField->inputParams.dataIn; SET_BUTTON(panel, RW_FIELDP_BIT_, 0, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 1, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 2, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 3, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 4, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 5, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 6, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 7, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 8, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 9, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 10, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 11, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 12, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 13, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 14, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 15, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 16, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 17, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 18, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 19, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 20, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 21, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 22, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 23, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 24, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 25, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 26, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 27, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 28, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 29, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 30, dataIn); SET_BUTTON(panel, RW_FIELDP_BIT_, 31, dataIn); SetCtrlVal(panel, RW_FIELDP_OUTPUT_OPT, 0); status=SetInputMode(panel, RW_FIELDP_OUTPUT_OPT, 0); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_FIELDP_OUT_FILE, 0); status=SetInputMode(panel, RW_FIELDP_OUT_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_WRITE_OR_APPEND, 0); UIR_STATUS_CHECK(status, SetInputMode()); } break; case PRIM_BUILD: memcpy(primDataPtr, &RWField->inputParams, primTable->inPrimHeader.length*sizeof(UINT32)); /* copy parameters */ break; case REP_DATA_PROCESS: RWFieldOut=(struct RW_REG_FIELD_OUT*)(primDataPtr); host=global.host[HOST_INDEX(slotNumber)]; GetCtrlVal(host->panel.parent, ROD_RWREG_DISP, &option); if(option){ SetCtrlVal(host->panel.parent, ROD_RWFIELD_TIME, TimeStr()); listIndex=host->listTable.inListHeader.index; SetCtrlVal(host->panel.parent, ROD_RWFIELD_INDEX, listIndex); SetCtrlVal(host->panel.parent, ROD_OFFSET, RWField->inputParams.offset); SetCtrlVal(host->panel.parent, ROD_WIDTH, RWField->inputParams.width); SetCtrlVal(host->panel.parent, ROD_OBJECT_ID, RWField->inputParams.registerID); SetCtrlVal(host->panel.parent, ROD_DATA_OUT, RWFieldOut->dataOut); } if(RWField->outDataFileName[0]!=0){ strcpy(subdir, host->dataDir); strcat(subdir, RWField->outDataFileName); errorId=writeToBinFile(subdir, RWField->appendNotWrite, primDataPtr, sizeof(UINT32)); ERROR_CHECK(errorId, writeToBinFile()); if(errorId!=SUCCESS) return(errorId); } break; case WRITE_TO_FILE: file=(FILE*)inputParameter; fprintf(file, "registerID= 0x%X, offset= %d, width= %d, readNotWrite= %d, dataIn= 0x%X\n", RWField->inputParams.registerID, RWField->inputParams.offset, RWField->inputParams.width, RWField->inputParams.readNotWrite, RWField->inputParams.dataIn); fprintf(file, "baseId= 0x%X, x= %d, y= %d, z=%d\n", RWField->baseId, RWField->x, RWField->y, RWField->z); if(RWField->inputParams.readNotWrite){ fprintf(file, "appendNotWrite= %d\n", RWField->appendNotWrite); fprintf(file, "outDataFileName[]= %s\n", RWField->outDataFileName); } break; case READ_FROM_FILE: file=(FILE*)inputParameter; status=fscanf(file, "registerID= 0x%X, offset= %d, width= %d, readNotWrite= %d, dataIn= 0x%X\n", &RWField->inputParams.registerID, &RWField->inputParams.offset, &RWField->inputParams.width, &RWField->inputParams.readNotWrite, &RWField->inputParams.dataIn); if(status==-1) {ERROR_CHECK(FATAL_ERROR, Read from prim file error!); return(FATAL_ERROR);} status=fscanf(file, "baseId= 0x%X, x= %d, y= %d, z= %d\n", &RWField->baseId, &RWField->x, &RWField->y, &RWField->z); if(status==-1) {ERROR_CHECK(FATAL_ERROR, Read from prim file error!); return(FATAL_ERROR);} if(RWField->inputParams.readNotWrite){ status=fscanf(file, "appendNotWrite= %d\n", &RWField->appendNotWrite); if(status==-1) {ERROR_CHECK(FATAL_ERROR, Read from prim file error!); return(FATAL_ERROR);} /* read file name */ status=readLineFromIndex(file, strlen("outDataFileName[]= "), PATHNAME_LENGTH, RWField->outDataFileName); if(status!=0) {ERROR_CHECK(FATAL_ERROR, Read from prim file error!); return(FATAL_ERROR);} } break; case READ_FROM_FILE_v104: file=(FILE*)inputParameter; status=fscanf(file, "registerID= 0x%X, offset= %d, width= %d, readNotWrite= %d, dataIn= 0x%X\n", &RWField->inputParams.registerID, &RWField->inputParams.offset, &RWField->inputParams.width, &RWField->inputParams.readNotWrite, &RWField->inputParams.dataIn); if(status==-1) {ERROR_CHECK(FATAL_ERROR, Read from prim file error!); return(FATAL_ERROR);} status=fscanf(file, "baseId= 0x%X, x= %d, y= %d\n", &RWField->baseId, &RWField->x, &RWField->y); if(status==-1) {ERROR_CHECK(FATAL_ERROR, Read from prim file error!); return(FATAL_ERROR);} if(RWField->inputParams.readNotWrite){ status=fscanf(file, "appendNotWrite= %d\n", &RWField->appendNotWrite); if(status==-1) {ERROR_CHECK(FATAL_ERROR, Read from prim file error!); return(FATAL_ERROR);} /* read file name */ status=readLineFromIndex(file, strlen("outDataFileName[]= "), PATHNAME_LENGTH, RWField->outDataFileName); if(status!=0) {ERROR_CHECK(FATAL_ERROR, Read from prim file error!); return(FATAL_ERROR);} } break; default: ;//error } return(SUCCESS); } /*============================================================================= * bitButtonsInpMode() *============================================================================= * * */ void bitButtonsInpMode(int panel, int inpMode){ int status; status=SetInputMode(panel, RW_FIELDP_BIT_0, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_1, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_2, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_3, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_4, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_5, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_6, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_7, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_8, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_9, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_10, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_11, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_12, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_13, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_14, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_15, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_16, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_17, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_18, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_19, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_20, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_21, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_22, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_23, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_24, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_25, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_26, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_27, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_28, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_29, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_30, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_BIT_31, inpMode); UIR_STATUS_CHECK(status, SetInputMode()); return; } /******************************************************************************/