/*************************************************************************** * * Title : primFunction_pollRegField.c * Version 0.0 * * Description: poll register field primitive function. * Related files: * * Author: Lukas Tomasek, tomasekl@fzu.cz * ******************************************************************************/ /****************************************************************************** * Header files * ******************************************************************************/ #include #include "primFunc_pollRegField.h" #include "globalDefinitions.h" #include "uirUtility.h" #include "primParamsUir.h" #include "mainUir.h" #include #include "primFunctionInit.h" /****************************************************************************** * Global functions * ******************************************************************************/ /*============================================================================= * primFunction_pollRegField() *============================================================================= * * Poll register field primitive function * */ ERROR_ID primFunction_pollRegField(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 POLL_REG_FIELD_OUT *pollRegFieldOut; struct PRIM_POLL_REG_FIELD_PARAMS *pollRegField=&primTable->params.pollRegField; const int panel=global.panel.primEdit[getPrimArrayId(POLL_REG_FIELD)]; UINT32 i; UINT32 dataLength; UINT32 objectId; int outFileOption; char subdir[PATHNAME_LENGTH]; UINT32 desiredValue; int option; if(R_POLL_REG_FIELD!=R_POLL_REG_FIELD_HOST){ ERROR_CHECK(PROGRAM_ERROR, primitive POLL_FIELD - wrong revision number); return(PROGRAM_ERROR); } switch(funcOption){ case PRIM_PANEL_TO_TABLE: GetCtrlVal(panel, POLL_FIELD_BASE_ID, &pollRegField->baseId); GetCtrlVal(panel, POLL_FIELD_X, &pollRegField->x); GetCtrlVal(panel, POLL_FIELD_Y, &pollRegField->y); GetCtrlVal(panel, POLL_FIELD_Z, &pollRegField->z); GetCtrlVal(panel, POLL_FIELD_OBJECT_ID, &pollRegField->inputParams.registerID); GetCtrlVal(panel, POLL_FIELD_OFFSET, &pollRegField->inputParams.offset); GetCtrlVal(panel, POLL_FIELD_WIDTH, &pollRegField->inputParams.width); GetCtrlVal(panel, POLL_FIELD_TIMEOUT, &pollRegField->inputParams.timeoutInUsec); GetCtrlVal(panel, POLL_FIELD_DESIRED_VALUE, &pollRegField->inputParams.desiredValue); /* NO BREAK HERE!!!*/ case PRIM_PARAMS_TO_TABLE: /* add table headers - don't set indexes!!! */ primTable->inPrimHeader.length=SIZEOF(struct MSG_HEAD)+SIZEOF(struct POLL_REG_FIELD_IN); primTable->inPrimHeader.id=POLL_REG_FIELD; primTable->inPrimHeader.primRevision=R_POLL_REG_FIELD_HOST; primTable->replyLength=SIZEOF(struct MSG_HEAD)+SIZEOF(struct POLL_REG_FIELD_OUT); break; case PRIM_TABLE_TO_PANEL: if(primTable->inPrimHeader.primRevision!=R_POLL_REG_FIELD){ ERROR_CHECK(PROGRAM_ERROR, primitive POLL_REG_FIELD - wrong revision number); return(PROGRAM_ERROR); } SetCtrlVal(panel, POLL_FIELD_BASE_ID, pollRegField->baseId); SetCtrlVal(panel, POLL_FIELD_X, pollRegField->x); SetCtrlVal(panel, POLL_FIELD_Y, pollRegField->y); SetCtrlVal(panel, POLL_FIELD_Z, pollRegField->z); SetCtrlVal(panel, POLL_FIELD_OBJECT_ID, pollRegField->inputParams.registerID); SetCtrlVal(panel, POLL_FIELD_OFFSET, pollRegField->inputParams.offset); SetCtrlVal(panel, POLL_FIELD_WIDTH, pollRegField->inputParams.width); SetCtrlVal(panel, POLL_FIELD_DESIRED_VALUE, pollRegField->inputParams.desiredValue); SetCtrlVal(panel, POLL_FIELD_TIMEOUT, pollRegField->inputParams.timeoutInUsec); /* load register fields description */ errorId=loadRodRegFile(panel, POLL_FIELD_REG_BOX, pollRegField->baseId); ERROR_CHECK(errorId, loadRodRegFile()); /* set bit buttons */ desiredValue=pollRegField->inputParams.desiredValue; SET_BUTTON(panel, POLL_FIELD_BIT_, 0, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 1, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 2, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 3, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 4, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 5, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 6, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 7, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 8, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 9, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 10, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 11, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 12, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 13, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 14, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 15, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 16, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 17, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 18, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 19, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 20, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 21, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 22, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 23, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 24, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 25, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 26, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 27, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 28, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 29, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 30, desiredValue); SET_BUTTON(panel, POLL_FIELD_BIT_, 31, desiredValue); break; case PRIM_BUILD: memcpy(primDataPtr, &pollRegField->inputParams, primTable->inPrimHeader.length*sizeof(UINT32)); /* copy parameters */ break; case REP_DATA_PROCESS: pollRegFieldOut=(struct POLL_REG_FIELD_OUT*)(primDataPtr); host=global.host[HOST_INDEX(slotNumber)]; GetCtrlVal(host->panel.parent, ROD_POLL_DISP, &option); if(option||(pollRegFieldOut->found==0)){ /* display the value */ SetCtrlVal(host->panel.parent, ROD_POLL_RFIELD_TIME, TimeStr()); listIndex=host->listTable.inListHeader.index; SetCtrlVal(host->panel.parent, ROD_POLL_RFIELD_INDEX, listIndex); SetCtrlVal(host->panel.parent, ROD_POLL_RFIELD_OFFSET, pollRegField->inputParams.offset); SetCtrlVal(host->panel.parent, ROD_POLL_RFIELD_WIDTH, pollRegField->inputParams.width); SetCtrlVal(host->panel.parent, ROD_POLL_RFIELD_OBJECT_ID, pollRegField->inputParams.registerID); SetCtrlVal(host->panel.parent, ROD_DESIRED_VALUE, pollRegField->inputParams.desiredValue); SetCtrlVal(host->panel.parent, ROD_NOT_FOUND, (int)!pollRegFieldOut->found); } if(pollRegFieldOut->found==0){ HOST_ERROR_CHECK(REPLIST_ERROR, host, PollRegField TIMEOUT!!!); return(REPLIST_ERROR); } break; case WRITE_TO_FILE: file=(FILE*)inputParameter; fprintf(file, "registerID= 0x%X, offset= %d, width= %d, desiredValue= 0x%X, timeoutInUsec= 0x%X\n", pollRegField->inputParams.registerID, pollRegField->inputParams.offset, pollRegField->inputParams.width, pollRegField->inputParams.desiredValue, pollRegField->inputParams.timeoutInUsec); fprintf(file, "baseId= 0x%X, x= %d, y= %d, z= %d\n", pollRegField->baseId, pollRegField->x, pollRegField->y, pollRegField->z); break; case READ_FROM_FILE: file=(FILE*)inputParameter; status=fscanf(file, "registerID= 0x%X, offset= %d, width= %d, desiredValue= 0x%X, timeoutInUsec= 0x%X\n", &pollRegField->inputParams.registerID, &pollRegField->inputParams.offset, &pollRegField->inputParams.width, &pollRegField->inputParams.desiredValue, &pollRegField->inputParams.timeoutInUsec); 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", &pollRegField->baseId, &pollRegField->x, &pollRegField->y, &pollRegField->z); if(status==-1) {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, desiredValue= 0x%X, timeoutInUsec= 0x%X\n", &pollRegField->inputParams.registerID, &pollRegField->inputParams.offset, &pollRegField->inputParams.width, &pollRegField->inputParams.desiredValue, &pollRegField->inputParams.timeoutInUsec); 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", &pollRegField->baseId, &pollRegField->x, &pollRegField->y); if(status==-1) {ERROR_CHECK(FATAL_ERROR, Read from prim file error!); return(FATAL_ERROR);} break; default: ; } return(SUCCESS); } /******************************************************************************/