/****************************************************************************** * * Title : primFunc_startSlaveExecuting.c * Version 0.0, * * Description: Start slave DSP executing primitive function. * Related files: * * Author: Lukas Tomasek, tomasekl@fzu.cz * ******************************************************************************/ /****************************************************************************** * Header files * ******************************************************************************/ #include #include "primFunc_startSlaveExecuting.h" #include "globalDefinitions.h" #include "uirUtility.h" #include "primParamsUir.h" #include "mainUir.h" #include "rodConfiguration.h" #include #include "primFunctionInit.h" /****************************************************************************** * Global functions * ******************************************************************************/ /*============================================================================= * primFunction_startSlaveExecuting() *============================================================================= * * * */ ERROR_ID primFunction_startSlaveExecuting(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 START_SLAVE_EXECUTING_IN *startSlaveExec=&primTable->params.startSlaveExec; const int panel=global.panel.primEdit[getPrimArrayId(START_SLAVE_EXECUTING)]; UINT32 i; UINT32 dataLength; struct START_SLAVE_EXECUTING_IN *startSlaveExecIn; struct START_SLAVE_EXECUTING_OUT *startSlaveExecOut; struct HOST *host; char textMessage[200]; char errorText[100]; UINT32 listIndex; int ringIndex; if(R_START_SLAVE_EXECUTING!=R_START_SLAVE_EXECUTING_HOST){ ERROR_CHECK(PROGRAM_ERROR, primitive START_SLAVE_EXECUTING - wrong revision number); return(PROGRAM_ERROR); } switch(funcOption){ case PRIM_PANEL_TO_TABLE: GetCtrlVal(panel, START_SLV_SLV_ID, &startSlaveExec->slaveNumber); GetCtrlVal(panel, START_SLV_ON_OFF, &startSlaveExec->commOnOff); GetCtrlVal(panel, START_SLV_TYPE, &startSlaveExec->slaveType); GetCtrlVal(panel, START_SLV_TIMEOUT, &startSlaveExec->timeoutInUsec); /* NO BREAK HERE!!!*/ case PRIM_PARAMS_TO_TABLE: /* add table headers - don't set indexes!!! */ primTable->inPrimHeader.length=SIZEOF(struct START_SLAVE_EXECUTING_IN)+SIZEOF(struct MSG_HEAD); primTable->inPrimHeader.id=START_SLAVE_EXECUTING; primTable->inPrimHeader.primRevision=R_START_SLAVE_EXECUTING; primTable->replyLength=SIZEOF(struct START_SLAVE_EXECUTING_OUT)+SIZEOF(struct MSG_HEAD); break; case PRIM_TABLE_TO_PANEL: if(primTable->inPrimHeader.primRevision!=R_START_SLAVE_EXECUTING){ ERROR_CHECK(PROGRAM_ERROR, primitive START_SLAVE_EXECUTING - wrong revision number); return(PROGRAM_ERROR); } SetCtrlVal(panel, START_SLV_SLV_ID, startSlaveExec->slaveNumber); SetCtrlVal(panel, START_SLV_ON_OFF, startSlaveExec->commOnOff); SetCtrlVal(panel, START_SLV_TYPE, startSlaveExec->slaveType); SetCtrlVal(panel, START_SLV_TIMEOUT, startSlaveExec->timeoutInUsec); break; case PRIM_BUILD: /* copy data */ *(struct START_SLAVE_EXECUTING_IN*)(primDataPtr)=*startSlaveExec; break; case REP_DATA_PROCESS: //check revision? host=global.host[HOST_INDEX(slotNumber)]; startSlaveExecOut=(struct START_SLAVE_EXECUTING_OUT*)(primDataPtr); if(startSlaveExec->slaveNumber!=startSlaveExecOut->slaveNumber){ HOST_ERROR_CHECK(HOST_ERROR, (struct HOST*)host, START_SLAVE_EXECUTING - wrong reply slave number!); } switch(startSlaveExecOut->slaveNumber){ case 0: SetCtrlVal(host->panel.parent, ROD_SLAVE0, startSlaveExec->commOnOff); SetCtrlAttribute (host->panel.parent, ROD_SLAVE0, ATTR_OFF_COLOR, VAL_RED); break; case 1: SetCtrlVal(host->panel.parent, ROD_SLAVE1, startSlaveExec->commOnOff); SetCtrlAttribute (host->panel.parent, ROD_SLAVE1, ATTR_OFF_COLOR, VAL_RED); break; case 2: SetCtrlVal(host->panel.parent, ROD_SLAVE2, startSlaveExec->commOnOff); SetCtrlAttribute (host->panel.parent, ROD_SLAVE2, ATTR_OFF_COLOR, VAL_RED); break; case 3: SetCtrlVal(host->panel.parent, ROD_SLAVE3, startSlaveExec->commOnOff); SetCtrlAttribute (host->panel.parent, ROD_SLAVE3, ATTR_OFF_COLOR, VAL_RED); break; default: HOST_ERROR_CHECK(REPLIST_ERROR, host, Wrong slave number!); break; } break; case WRITE_TO_FILE: file=(FILE*)inputParameter; fprintf(file, "slaveNumber= %d, commOnOff= %d, slaveType= %d, timeoutInUsec= 0x%X\n", startSlaveExec->slaveNumber, startSlaveExec->commOnOff, startSlaveExec->slaveType, startSlaveExec->timeoutInUsec); break; case READ_FROM_FILE: file=(FILE*)inputParameter; status=fscanf(file, "slaveNumber= %d, commOnOff= %d, slaveType= %d, timeoutInUsec= 0x%X\n", &startSlaveExec->slaveNumber, &startSlaveExec->commOnOff, &startSlaveExec->slaveType, &startSlaveExec->timeoutInUsec); if(status==-1) {ERROR_CHECK(FATAL_ERROR, Read from prim file error!); return(FATAL_ERROR);} break; default: ;//error } return(SUCCESS); } /******************************************************************************/