/****************************************************************************** * * Title : primParamsUir.c * Version 0.0 * * Description: primitive parameters user interface callback functions. * Related files: primParamsUir.uir * * Author: Lukas Tomasek, tomasekl@fzu.cz * ******************************************************************************/ /****************************************************************************** * Header files * ******************************************************************************/ #include #include #include "primParamsUir.h" #include "globalDefinitions.h" #include "fileUtility.h" #include "uirUtility.h" #include "primListEditUir.h" #include "getRegisterId.h" #include "hostUtility.h" #include "primFunc_RWFifo.h" #include "primFunc_RWRegField.h" #include "primFunctionInit.h" #include "rodMemoryUir.h" #include "fillUirControls.h" #include "setHistoPanel.h" /****************************************************************************** * Static Function Declarations * ******************************************************************************/ static void outFile(int panel, int fileControl, int optionControl, char defaultFileType[]); static ERROR_ID inFile(int panel, int fileControl, int dataLengthControl); /****************************************************************************** * LW_CVI callback functions * ******************************************************************************/ /*============================================================================= * echoParams() *============================================================================= * * Echo primitive parameters callback function. * */ int CVICALLBACK echoParams (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ ERROR_ID errorId; int status; long fileSize; unsigned char slotNumber; UINT32 primBodyLength; char fileName[PATHNAME_LENGTH]; char subdir[PATHNAME_LENGTH]; int option; switch (event){ case EVENT_LEFT_CLICK: switch(control){ case PANEL_ECHO_INP_FILE: errorId=inFile(panel, control, PANEL_ECHO_TEST_DATA_LENGTH); if(errorId==1){ SetCtrlVal(panel, PANEL_ECHO_INPUT_OPTION, 0); status=SetInputMode(panel, PANEL_ECHO_TEST_PATTERN, 1); UIR_STATUS_CHECK(status, SetInputMode()); status=SetCtrlAttribute(panel, PANEL_ECHO_TEST_DATA_LENGTH, ATTR_CTRL_MODE, VAL_NORMAL); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetCtrlAttribute(panel, PANEL_ECHO_TEST_DATA_LENGTH, ATTR_FRAME_COLOR, 0xCC9966); UIR_STATUS_CHECK(status, SetCtrlAttribute()); break; } ERROR_CHECK(errorId, inFile()); break; default: break; } break; case EVENT_VAL_CHANGED: switch(control){ case PANEL_ECHO_INPUT_OPTION: GetCtrlVal(panel, control, &option); switch(option){ case TEST_PATTERN: status=SetInputMode(panel, PANEL_ECHO_TEST_PATTERN, 1); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, PANEL_ECHO_INP_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetCtrlAttribute(panel, PANEL_ECHO_TEST_DATA_LENGTH, ATTR_CTRL_MODE, VAL_NORMAL); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetCtrlAttribute(panel, PANEL_ECHO_TEST_DATA_LENGTH, ATTR_FRAME_COLOR, 0xCC9966); UIR_STATUS_CHECK(status, SetCtrlAttribute()); break; case FROM_FILE: status=SetInputMode(panel, PANEL_ECHO_TEST_PATTERN, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, PANEL_ECHO_INP_FILE, 1); UIR_STATUS_CHECK(status, SetInputMode()); status=SetCtrlAttribute(panel, PANEL_ECHO_TEST_DATA_LENGTH, ATTR_CTRL_MODE, VAL_INDICATOR); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetCtrlAttribute(panel, PANEL_ECHO_TEST_DATA_LENGTH, ATTR_FRAME_COLOR, VAL_LT_GRAY); UIR_STATUS_CHECK(status, SetCtrlAttribute()); errorId=inFile(panel, PANEL_ECHO_INP_FILE, PANEL_ECHO_TEST_DATA_LENGTH); ERROR_CHECK(errorId, inFile()); if(errorId==1){ SetCtrlVal(panel, PANEL_ECHO_INPUT_OPTION, 0); status=SetInputMode(panel, PANEL_ECHO_TEST_PATTERN, 1); UIR_STATUS_CHECK(status, SetInputMode()); status=SetCtrlAttribute(panel, PANEL_ECHO_TEST_DATA_LENGTH, ATTR_CTRL_MODE, VAL_NORMAL); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetCtrlAttribute(panel, PANEL_ECHO_TEST_DATA_LENGTH, ATTR_FRAME_COLOR, 0xCC9966); UIR_STATUS_CHECK(status, SetCtrlAttribute()); } break; } break; } break; } return 0; } /*============================================================================= * RWFieldParams() *============================================================================= * * RWFieldParams primitive parameters callback function. * */ #define GET_BUTTON(panel, controlBase, regControl, index, dataPointer) \ case controlBase##index: GetCtrlVal(panel, controlBase##index, &value);\ GetCtrlVal(panel, regControl, dataPointer);\ if(value){ SET_BIT(*dataPointer, index);}else{ CLEAR_BIT(*dataPointer, index);}\ SetCtrlVal(panel, regControl, *dataPointer);\ break; int CVICALLBACK RWFieldParams (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ int readNotWrite; int status; UINT32 baseId, x, y, z, registerId; ERROR_ID errorId; int option; UINT32 data; int value; int index; int nextBaseId; int maxIndex; if(event==EVENT_VAL_CHANGED){ switch(control){ case RW_FIELDP_READ_WRITE: GetCtrlVal(panel, control, &readNotWrite); bitButtonsInpMode(panel, !readNotWrite); if(readNotWrite==1){ /* read */ status=SetInputMode(panel, RW_FIELDP_DATA_IN, 0); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_FIELDP_OUTPUT_OPT, 0); status=SetInputMode(panel, RW_FIELDP_OUTPUT_OPT, 1); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIELDP_WRITE_OR_APPEND, 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_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 RW_FIELDP_BASE_ID: SetCtrlVal(panel, RW_FIELDP_X, 0); SetCtrlVal(panel, RW_FIELDP_Y, 0); SetCtrlVal(panel, RW_FIELDP_Z, 0); /* no break! */ case RW_FIELDP_X: /* no break! */ case RW_FIELDP_Y: /* no break! */ case RW_FIELDP_Z: GetCtrlVal(panel, RW_FIELDP_BASE_ID, &baseId); GetCtrlVal(panel, RW_FIELDP_X, &x); GetCtrlVal(panel, RW_FIELDP_Y, &y); GetCtrlVal(panel, RW_FIELDP_Z, &z); errorId=loadRodRegFile(panel, RW_FIELDP_REG_BOX, baseId); ERROR_CHECK(errorId, loadRodRegFile()); errorId=getRegisterId(®isterId, baseId, x, y, z); ERROR_CHECK(errorId, getObjectId); status=GetCtrlIndex(panel, RW_FIELDP_BASE_ID, &index); UIR_STATUS_CHECK(status, GetCtrlIndex()); status=GetNumListItems (panel, RW_FIELDP_BASE_ID, &maxIndex); UIR_STATUS_CHECK(status, GetNumListItems()); if(index<(maxIndex-1)){ status=GetValueFromIndex (panel, RW_FIELDP_BASE_ID, index+1, &nextBaseId); UIR_STATUS_CHECK(status, GetValueFromIndex()); if(nextBaseId==-1){ /* skip separator */ status=GetValueFromIndex (panel, RW_FIELDP_BASE_ID, index+2, &nextBaseId); UIR_STATUS_CHECK(status, GetValueFromIndex()); } if(registerId>=nextBaseId){ status=MessagePopup ("WARNING", "Wrong X, Y or Z parameter!!"); UIR_STATUS_CHECK(status, MessagePopup()); SetCtrlVal(panel, RW_FIELDP_X, 0); SetCtrlVal(panel, RW_FIELDP_Y, 0); SetCtrlVal(panel, RW_FIELDP_Z, 0); registerId=baseId; } } if(registerId>LAST_ROD_REG){ status=MessagePopup ("WARNING", "Wrong X, Y or Z parameter!!"); UIR_STATUS_CHECK(status, MessagePopup()); SetCtrlVal(panel, RW_FIELDP_X, 0); SetCtrlVal(panel, RW_FIELDP_Y, 0); SetCtrlVal(panel, RW_FIELDP_Z, 0); registerId=baseId; } SetCtrlVal(panel, RW_FIELDP_OBJECT_ID, registerId); break; case RW_FIELDP_OUTPUT_OPT: GetCtrlVal(panel, control, &option); status=SetInputMode(panel, RW_FIFOP_OUT_FILE, option); UIR_STATUS_CHECK(status, SetInputMode()); if(option){ outFile(panel, RW_FIELDP_OUT_FILE, RW_FIELDP_OUTPUT_OPT, "*.bin"); } break; case RW_FIELDP_DATA_IN: GetCtrlVal(panel, control, &data); SET_BUTTON(panel, RW_FIELDP_BIT_, 0, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 1, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 2, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 3, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 4, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 5, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 6, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 7, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 8, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 9, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 10, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 11, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 12, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 13, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 14, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 15, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 16, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 17, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 18, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 19, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 20, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 21, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 22, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 23, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 24, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 25, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 26, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 27, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 28, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 29, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 30, data); SET_BUTTON(panel, RW_FIELDP_BIT_, 31, data); break; GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 0, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 1, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 2, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 3, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 4, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 5, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 6, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 7, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 8, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 9, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 10, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 11, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 12, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 13, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 14, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 15, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 16, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 17, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 18, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 19, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 20, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 21, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 22, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 23, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 24, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 25, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 26, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 27, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 28, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 29, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 30, &data); GET_BUTTON(panel, RW_FIELDP_BIT_, RW_FIELDP_DATA_IN, 31, &data); default: break; } }else{ if(event==EVENT_LEFT_CLICK){ switch(control){ case RW_FIELDP_OUT_FILE: outFile(panel, control, RW_FIELDP_OUTPUT_OPT, "*.bin"); break; default: break; } } } return 0; } /*============================================================================= * pollRegFieldParams() *============================================================================= * * PollRegFieldParams primitive parameters callback function. * */ int CVICALLBACK pollRegFieldParams (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ int status; UINT32 baseId, x, y, z, registerId; ERROR_ID errorId; int option; UINT32 data; int value; int index, maxIndex, nextBaseId; if(event==EVENT_VAL_CHANGED){ switch(control){ case POLL_FIELD_BASE_ID: /* no break! */ case POLL_FIELD_X: /* no break! */ case POLL_FIELD_Y: GetCtrlVal(panel, POLL_FIELD_BASE_ID, &baseId); GetCtrlVal(panel, POLL_FIELD_X, &x); GetCtrlVal(panel, POLL_FIELD_Y, &y); GetCtrlVal(panel, POLL_FIELD_Z, &z); errorId=loadRodRegFile(panel, POLL_FIELD_REG_BOX, baseId); ERROR_CHECK(errorId, loadRodRegFile()); errorId=getRegisterId(®isterId, baseId, x, y, z); ERROR_CHECK(errorId, getObjectId); status=GetCtrlIndex(panel, POLL_FIELD_BASE_ID, &index); UIR_STATUS_CHECK(status, GetCtrlIndex()); status=GetNumListItems (panel, POLL_FIELD_BASE_ID, &maxIndex); UIR_STATUS_CHECK(status, GetNumListItems()); if(index<(maxIndex-1)){ status=GetValueFromIndex (panel, POLL_FIELD_BASE_ID, index+1, &nextBaseId); UIR_STATUS_CHECK(status, GetValueFromIndex()); if(nextBaseId==-1){ /* skip separator */ status=GetValueFromIndex (panel, POLL_FIELD_BASE_ID, index+2, &nextBaseId); UIR_STATUS_CHECK(status, GetValueFromIndex()); } if(registerId>=nextBaseId){ status=MessagePopup ("WARNING", "Wrong X, Y or Z parameter!!"); UIR_STATUS_CHECK(status, MessagePopup()); SetCtrlVal(panel, POLL_FIELD_X, 0); SetCtrlVal(panel, POLL_FIELD_Y, 0); SetCtrlVal(panel, POLL_FIELD_Z, 0); registerId=baseId; } } if(registerId>LAST_ROD_REG){ status=MessagePopup ("WARNING", "Wrong X, Y or Z parameter!!"); UIR_STATUS_CHECK(status, MessagePopup()); SetCtrlVal(panel, POLL_FIELD_X, 0); SetCtrlVal(panel, POLL_FIELD_Y, 0); SetCtrlVal(panel, POLL_FIELD_Z, 0); registerId=baseId; } SetCtrlVal(panel, POLL_FIELD_OBJECT_ID, registerId); break; case POLL_FIELD_DESIRED_VALUE: GetCtrlVal(panel, control, &data); SET_BUTTON(panel, POLL_FIELD_BIT_, 0, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 1, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 2, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 3, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 4, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 5, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 6, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 7, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 8, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 9, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 10, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 11, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 12, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 13, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 14, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 15, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 16, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 17, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 18, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 19, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 20, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 21, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 22, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 23, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 24, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 25, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 26, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 27, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 28, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 29, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 30, data); SET_BUTTON(panel, POLL_FIELD_BIT_, 31, data); break; GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 0, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 1, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 2, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 3, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 4, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 5, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 6, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 7, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 8, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 9, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 10, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 11, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 12, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 13, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 14, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 15, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 16, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 17, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 18, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 19, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 20, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 21, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 22, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 23, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 24, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 25, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 26, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 27, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 28, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 29, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 30, &data); GET_BUTTON(panel, POLL_FIELD_BIT_, POLL_FIELD_DESIRED_VALUE, 31, &data); default: break; } }else{ if(event==EVENT_LEFT_CLICK){ } } return 0; } /*============================================================================= * RWFifoParams() *============================================================================= * * RWFifoParams primitive parameters callback function. * */ int CVICALLBACK RWFifoParams (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ ERROR_ID errorId; int status; unsigned int fileSize; unsigned char slotNumber; UINT32 primBodyLength; char fileName[PATHNAME_LENGTH]; char subdir[PATHNAME_LENGTH]; int readNotWrite, option; unsigned int fSize, packFactor, fifoIdAndBank, elementSize; switch (event){ case EVENT_LEFT_CLICK: switch(control){ case RW_FIFOP_INP_FILE: GetCtrlVal(panel, control, fileName); if(fileName[0]==0) strcpy(fileName,"*.bin"); status=FileSelectPopup(global.testingDataDir, fileName,"*.bin","Pick file", VAL_SELECT_BUTTON,0,0,1,1, fileName); if(status==VAL_NO_FILE_SELECTED){ GetCtrlVal(panel, control, fileName); if(fileName[0]!=0) return(SUCCESS); //status = SetCtrlAttribute (panel, RW_FIFOP_NUM_ELEMENTS, ATTR_MAX_VALUE, (unsigned int)0); //UIR_STATUS_CHECK(status, SetCtrlAttribute()); //SetCtrlVal(panel, RW_FIFOP_FILE_SIZE, 0); return(1); } if(fileName[0]==0) fileSize=0; else{ errorId=getFileSize(fileName, &fileSize); ERROR_CHECK(errorId, getFileSize()); if(errorId!=SUCCESS) return(errorId); } SetCtrlVal(panel, RW_FIFOP_INP_FILE, fileName); //SetCtrlVal(panel, RW_FIFOP_FILE_SIZE, (unsigned int)fileSize); GetCtrlVal(panel, RW_FIFOP_FIFO_ID_AND_BANK, &fifoIdAndBank); elementSize=getFifoElementSize(GET_FIFO_ID(fifoIdAndBank),GET_FIFO_BANK(fifoIdAndBank)); if((fileSize%elementSize)!=0){ status=MessagePopup ("WARNING", "FileSize not aligned on ElementSize boundary!!"); UIR_STATUS_CHECK(status, MessagePopup()); } SetCtrlVal(panel, RW_FIFOP_NUM_ELEMENTS, (unsigned int)(fileSize/elementSize)); break; case RW_FIFOP_OUT_FILE: outFile(panel, control, RW_FIFOP_OUTPUT_OPT, "*.bin"); break; default: break; } break; case EVENT_VAL_CHANGED: switch(control){ case RW_FIFOP_FIFO_ID_AND_BANK: GetCtrlVal(panel, RW_FIFOP_READ_NOT_WRITE, &readNotWrite); GetCtrlVal(panel, control, &fifoIdAndBank); if(readNotWrite==0){ /* write */ //GetCtrlVal(panel, RW_FIFOP_FILE_SIZE, (unsigned int*)&fileSize); GetCtrlVal(panel, RW_FIFOP_INP_FILE, fileName); if(fileName[0]==0) fileSize=0; else{ errorId=getFileSize(fileName, &fileSize); ERROR_CHECK(errorId, getFileSize()); if(errorId!=SUCCESS) return(errorId); } elementSize=getFifoElementSize(GET_FIFO_ID(fifoIdAndBank),GET_FIFO_BANK(fifoIdAndBank)); if((fileSize%elementSize)!=0){ ERROR_CHECK(PROGRAM_ERROR, RW FIFO wrong fileSize(%elementSize)!); } SetCtrlVal(panel, RW_FIFOP_NUM_ELEMENTS, (unsigned int)(fileSize/elementSize)); } break; case RW_FIFOP_READ_NOT_WRITE: GetCtrlVal(panel, control, &readNotWrite); if(readNotWrite==1){ /* read */ status=SetCtrlAttribute(panel, RW_FIFOP_NUM_ELEMENTS, ATTR_FRAME_COLOR, 0xCC9966); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetCtrlAttribute(panel, RW_FIFOP_NUM_ELEMENTS, ATTR_CTRL_MODE, VAL_NORMAL); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetInputMode(panel, RW_FIFOP_INP_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); //status=SetInputMode(panel, RW_FIFOP_FILE_SIZE, 0); //UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_FIFOP_OUTPUT_OPT, 0); status=SetInputMode(panel, RW_FIFOP_OUTPUT_OPT, 1); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_FIFOP_OUT_FILE, 0); status=SetInputMode(panel, RW_FIFOP_OUT_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); }else{ /* write */ status=SetCtrlAttribute(panel, RW_FIFOP_NUM_ELEMENTS, ATTR_CTRL_MODE, VAL_INDICATOR); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetCtrlAttribute(panel, RW_FIFOP_NUM_ELEMENTS, ATTR_FRAME_COLOR, VAL_LT_GRAY); UIR_STATUS_CHECK(status, SetCtrlAttribute()); SetCtrlVal(panel, RW_FIFOP_NUM_ELEMENTS, 0); SetCtrlVal(panel, RW_FIFOP_INP_FILE, 0); status=SetInputMode(panel, RW_FIFOP_INP_FILE, 1); UIR_STATUS_CHECK(status, SetInputMode()); //SetCtrlVal(panel, RW_FIFOP_FILE_SIZE, 0); //status=SetInputMode(panel, RW_FIFOP_FILE_SIZE, 1); //UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIFOP_OUTPUT_OPT, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_FIFOP_OUT_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); } break; case RW_FIFOP_OUTPUT_OPT: GetCtrlVal(panel, control, &option); status=SetInputMode(panel, RW_FIFOP_OUT_FILE, option); UIR_STATUS_CHECK(status, SetInputMode()); if(option){ outFile(panel, RW_FIFOP_OUT_FILE, RW_FIFOP_OUTPUT_OPT, "*.bin"); } break; } break; } return 0; } /*============================================================================= * editSlaveList() *============================================================================= * * * */ int CVICALLBACK editSlaveList (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { const int panelEdit=global.panel.primListEdit; int status; int primitiveId; switch (event) { case EVENT_COMMIT: status=SetInputMode(panelEdit, LIST_EDIT_SEND_LIST, 0); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panelEdit, LIST_EDIT_DSP, 1); /* slave prims */ status=SetCtrlAttribute(panelEdit, LIST_EDIT_PRIM_RING_MASTER, ATTR_VISIBLE, 0); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetCtrlAttribute(panelEdit, LIST_EDIT_PRIM_RING_SLAVE, ATTR_VISIBLE, 1); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=DisplayPanel(global.panel.slaveList); UIR_STATUS_CHECK(status, DisplayPanel()); status=HidePanel(global.panel.primEdit[getPrimArrayId(global.editPrimitiveId)]); UIR_STATUS_CHECK(status, HidePanel()); GetCtrlVal(panelEdit, LIST_EDIT_PRIM_RING_SLAVE, &primitiveId); global.editPrimitiveId=primitiveId; status=DisplayPanel(global.panel.primEdit[getPrimArrayId(primitiveId)]); UIR_STATUS_CHECK(status, DisplayPanel()); break; } return 0; } /*============================================================================= * loadSlaveMemory() *============================================================================= * * LoadSlaveMemory primitive parameters callback function. * */ int CVICALLBACK RWSlaveMemory(int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ ERROR_ID errorId; int status; unsigned int fileSize; unsigned char slotNumber; UINT32 primBodyLength; char fileName[PATHNAME_LENGTH]; int readNotWrite; int option; switch(event){ case EVENT_LEFT_CLICK: switch(control){ case RW_SLAVE_INP_FILE: GetCtrlVal(panel, control, fileName); if(fileName[0]==0) strcpy(fileName,"*.bin"); status=FileSelectPopup(global.dspPrgDataDir, fileName,"*.bin","Pick file", VAL_SELECT_BUTTON,0,0,1,1, fileName); if(status==VAL_NO_FILE_SELECTED){ GetCtrlVal(panel, control, fileName); if(fileName[0]!=0) return(SUCCESS); SetCtrlVal(panel, RW_SLAVE_NUM_WORDS, 0); SetCtrlVal(panel, RW_SLAVE_NUM_BYTES, 0); return(1); } errorId=getFileSize(fileName, &fileSize); ERROR_CHECK(errorId, getFileSize()); if(errorId!=SUCCESS) return(errorId); if((fileSize%4)!=0){ status=MessagePopup ("WARNING", "FileSize not aligned on word size boundary!!"); UIR_STATUS_CHECK(status, MessagePopup()); } SetCtrlVal(panel, RW_SLAVE_INP_FILE, fileName); SetCtrlVal(panel, RW_SLAVE_NUM_WORDS, (unsigned int)((fileSize+3)/4)); SetCtrlVal(panel, RW_SLAVE_NUM_BYTES, (unsigned int)(fileSize)); break; case RW_SLAVE_OUT_FILE: outFile(panel, control, RW_SLAVE_OUTPUT_OPT, "*.bin"); break; default: break; } break; case EVENT_VAL_CHANGED: switch(control){ case RW_SLAVE_READ_NOT_WRITE: GetCtrlVal(panel, control, &readNotWrite); if(readNotWrite==1){ /* read */ status=SetCtrlAttribute(panel, RW_SLAVE_NUM_WORDS, ATTR_FRAME_COLOR, 0xCC9966); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetCtrlAttribute(panel, RW_SLAVE_NUM_WORDS, ATTR_CTRL_MODE, VAL_NORMAL); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetInputMode(panel, RW_SLAVE_INP_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_SLAVE_OUTPUT_OPT, 0); status=SetInputMode(panel, RW_SLAVE_OUTPUT_OPT, 1); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_SLAVE_OUT_FILE, 0); status=SetInputMode(panel, RW_SLAVE_OUT_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_SLAVE_WRITE_OR_APPEND, 0); UIR_STATUS_CHECK(status, SetInputMode()); }else{ /* write */ status=SetCtrlAttribute(panel, RW_SLAVE_NUM_WORDS, ATTR_CTRL_MODE, VAL_INDICATOR); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetCtrlAttribute(panel, RW_SLAVE_NUM_WORDS, ATTR_FRAME_COLOR, VAL_LT_GRAY); UIR_STATUS_CHECK(status, SetCtrlAttribute()); SetCtrlVal(panel, RW_SLAVE_NUM_WORDS, 0); SetCtrlVal(panel, RW_SLAVE_NUM_BYTES, 0); SetCtrlVal(panel, RW_SLAVE_INP_FILE, 0); status=SetInputMode(panel, RW_SLAVE_INP_FILE, 1); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_SLAVE_OUT_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_SLAVE_INP_FILE, 0); status=SetInputMode(panel, RW_SLAVE_INP_FILE, 1); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_SLAVE_OUTPUT_OPT, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_SLAVE_OUT_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_SLAVE_WRITE_OR_APPEND, 0); UIR_STATUS_CHECK(status, SetInputMode()); } break; case RW_SLAVE_OUTPUT_OPT: GetCtrlVal(panel, control, &option); status=SetInputMode(panel, RW_SLAVE_OUT_FILE, option); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_SLAVE_WRITE_OR_APPEND, option); UIR_STATUS_CHECK(status, SetInputMode()); if(option){ outFile(panel, RW_SLAVE_OUT_FILE, RW_SLAVE_OUTPUT_OPT, "*.bin"); } break; } break; } return 0; } /*============================================================================= * transSerial() *============================================================================= * * * */ int CVICALLBACK transSerial (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ ERROR_ID errorId; int status; unsigned int fileSize; unsigned char slotNumber; UINT32 primBodyLength; char fileName[PATHNAME_LENGTH]; char subdir[PATHNAME_LENGTH]; int option; unsigned int streamLength; char string[300]; switch (event){ case EVENT_LEFT_CLICK: switch(control){ case X_SER_DATA_P0_FILE: status = FileSelectPopup (global.testingDataDir, "*.bin", "*.bin", "Pick file", VAL_SELECT_BUTTON, 0, 1, 1, 1, fileName); if((status==VAL_NO_FILE_SELECTED)){ GetCtrlVal(panel, X_SER_DATA_P0_FILE, fileName); if(fileName[0]==0){ status=SetInputMode(panel, X_SER_DATA_P0_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, X_SER_DATA_P0_SETS, 0); SetCtrlVal(panel, X_SER_DATA_P0_FILE_OPT, 0); break; } } if((strlen(fileName)+1)>PATHNAME_LENGTH){ sprintf(string, "The file name&path is too long !!\nSorry, the limit is %d characters...", PATHNAME_LENGTH); status = MessagePopup ("Error", string); UIR_STATUS_CHECK(status, MessagePopup()); break; } SetCtrlVal(panel, X_SER_DATA_P0_FILE, fileName); errorId=getFileSize(fileName, &fileSize); ERROR_CHECK(errorId, getFileSize()); if(errorId!=SUCCESS) return(errorId); streamLength=((fileSize+3)/4); SetCtrlVal(panel, X_SER_DATA_P0_SETS, streamLength); break; case X_SER_DATA_P1_FILE: status = FileSelectPopup (global.testingDataDir, "*.bin", "*.bin", "Pick file", VAL_SELECT_BUTTON, 0, 1, 1, 1, fileName); if((status==VAL_NO_FILE_SELECTED)){ GetCtrlVal(panel, X_SER_DATA_P1_FILE, fileName); if(fileName[0]==0){ status=SetInputMode(panel, X_SER_DATA_P1_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, X_SER_DATA_P1_SETS, 0); SetCtrlVal(panel, X_SER_DATA_P1_FILE_OPT, 0); break; } } if((strlen(fileName)+1)>PATHNAME_LENGTH){ sprintf(string, "The file name&path is too long !!\nSorry, the limit is %d characters...", PATHNAME_LENGTH); status = MessagePopup ("Error", string); UIR_STATUS_CHECK(status, MessagePopup()); break; } SetCtrlVal(panel, X_SER_DATA_P1_FILE, fileName); errorId=getFileSize(fileName, &fileSize); ERROR_CHECK(errorId, getFileSize()); if(errorId!=SUCCESS) return(errorId); streamLength=((fileSize+3)/4); SetCtrlVal(panel, X_SER_DATA_P1_SETS, streamLength); break; default: break; } break; case EVENT_VAL_CHANGED: GetCtrlVal(panel, control, &option); switch(control){ case X_SER_DATA_P0_FILE_OPT: status=SetInputMode(panel, X_SER_DATA_P0_FILE, option); UIR_STATUS_CHECK(status, SetInputMode()); if(option){ (void)transSerial (panel, X_SER_DATA_P0_FILE, EVENT_LEFT_CLICK, 0, 0, 0); }else{ SetCtrlVal(panel, X_SER_DATA_P0_FILE, "\0"); SetCtrlVal(panel, X_SER_DATA_P0_SETS, 0); } break; case X_SER_DATA_P1_FILE_OPT: status=SetInputMode(panel, X_SER_DATA_P1_FILE, option); UIR_STATUS_CHECK(status, SetInputMode()); if(option){ (void)transSerial (panel, X_SER_DATA_P1_FILE, EVENT_LEFT_CLICK, 0, 0, 0); }else{ SetCtrlVal(panel, X_SER_DATA_P1_FILE, "\0"); SetCtrlVal(panel, X_SER_DATA_P1_SETS, 0); } break; } break; } return 0; } /*============================================================================= * sendData() *============================================================================= * * * */ int CVICALLBACK sendData (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ ERROR_ID errorId; int status; unsigned int fileSize; unsigned char slotNumber; UINT32 primBodyLength; char fileName[PATHNAME_LENGTH]; char subdir[PATHNAME_LENGTH]; int option; unsigned int p0sets, p1sets; unsigned int numSets; char string[300]; switch (event){ case EVENT_LEFT_CLICK: switch(control){ case SEND_DATAP_OUT_FILE: outFile(panel, control, SEND_DATAP_OUT_FILE, "*.bin"); break; default: break; } break; case EVENT_VAL_CHANGED: switch(control){ case SEND_DATAP_OUTPUT_OPT: GetCtrlVal(panel, control, &option); status=SetInputMode(panel, SEND_DATAP_OUT_FILE, option); UIR_STATUS_CHECK(status, SetInputMode()); if(option){ outFile(panel, SEND_DATAP_OUT_FILE, SEND_DATAP_OUTPUT_OPT, "*.bin"); } break; }; break; } return 0; } /*============================================================================= * taskType() *============================================================================= * * * */ int CVICALLBACK taskType (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { unsigned int task; int status; char fileName[2 * PATHNAME_LENGTH]; char cmdLineArg[PATHNAME_LENGTH]; char dirName[PATHNAME_LENGTH]; struct HISTOGRAM_CTRL_TASK_IN_PARAMS histoInParams; switch (event) { case EVENT_VAL_CHANGED: if (control == START_TSKP_TASK_TYPE) { GetCtrlVal(panel, control, &task); fillTaskLabel(panel, START_TSKP_TASK_UNION, task); } break; case EVENT_LEFT_CLICK: switch(control){ case START_TSKP_INP_FILE: GetCtrlVal(panel, control, fileName); if(fileName[0] == 0) strcpy(fileName,"*.bin"); strcpy(dirName, global.testingDataDir); strcat(dirName, "calibration\\"); status=FileSelectPopup(dirName, "*.hst", "*.hst","Pick file", VAL_SELECT_BUTTON,0,0,1,1, fileName); if(status==VAL_NO_FILE_SELECTED){ GetCtrlVal(panel, control, fileName); if(fileName[0]!=0) return(SUCCESS); return(1); } SetCtrlVal(panel, control, fileName); break; } break; case EVENT_COMMIT: switch(control) { case START_TSKP_HIST_CREATOR: GetCtrlVal(panel, START_TSKP_INP_FILE, cmdLineArg); //load file if(cmdLineArg[0]!=0){ readFromBinFile (cmdLineArg, &histoInParams, sizeof(struct HISTOGRAM_CTRL_TASK_IN_PARAMS)); setUIR(&histoInParams); } status=DisplayPanel(global.panel.histoCreator); UIR_STATUS_CHECK(status, DisplayPanel()); break; } } return 0; } /*============================================================================= * RWmodule() *============================================================================= * * * */ int CVICALLBACK RWmodule (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { int status; unsigned char slotNumber; char subdir[PATHNAME_LENGTH]; char fileName[PATHNAME_LENGTH]; int readNotWrite; #if defined(SCT_ROD) char suffix[]="*.txt"; #elif defined(PIXEL_ROD) char suffix[]="*.cfg"; #endif /* SCT_ROD or PIXEL_ROD */ switch(event){ case EVENT_LEFT_CLICK: switch(control){ case RW_MODULEP_INP_FILE: GetCtrlVal(panel, control, fileName); if(fileName[0]==0) strcpy(fileName,suffix); status=FileSelectPopup(global.moduleCfgDir, fileName,suffix,"Pick file", VAL_SELECT_BUTTON,0,0,1,1, fileName); if(status==VAL_NO_FILE_SELECTED){ GetCtrlVal(panel, control, fileName); if(fileName[0]!=0) return(SUCCESS); return(1); } SetCtrlVal(panel, RW_MODULEP_INP_FILE, fileName); break; case RW_MODULEP_OUT_FILE: GetCtrlVal(global.panel.primListEdit, LIST_EDIT_SLOT_NUMBER,&slotNumber); if(slotNumber==0){ strcpy(subdir, global.rodGeneralDataDir); }else{ strcpy(subdir, global.rodDataDir[HOST_INDEX(slotNumber)]); } /* directory restricted !! */ GetCtrlVal(panel, control, fileName); if(fileName[0]==0) strcpy(fileName,"*.txt"); status = FileSelectPopup (subdir, fileName, "*.txt","Pick file", VAL_OK_BUTTON, 1, 0, 1, 1,fileName); if(status==VAL_NO_FILE_SELECTED){ GetCtrlVal(panel, control, fileName); if(fileName[0]!=0) return 0; SetCtrlVal(panel, control, 0); return 0; } SetCtrlVal(panel, control, &fileName[strlen(subdir)]); break; default: break; } break; case EVENT_VAL_CHANGED: switch(control){ case RW_MODULEP_READ_NOT_WRITE: GetCtrlVal(panel, control, &readNotWrite); #ifdef PIXEL_ROD SetInputMode(panel, RW_MODULEP_TEXTMSG_2, !readNotWrite); SetInputMode(panel, RW_MODULEP_ACTIVE, !readNotWrite); SetInputMode(panel, RW_MODULEP_GROUP_ID, !readNotWrite); SetInputMode(panel, RW_MODULEP_PTTC, !readNotWrite); SetInputMode(panel, RW_MODULEP_RX0, !readNotWrite); //dpsf: SetInputMode(panel, RW_MODULEP_RX1, !readNotWrite); //dpsf: SetInputMode(panel, RW_MODULEP_RX2,!readNotWrite); //dpsf: SetInputMode(panel, RW_MODULEP_RX3, !readNotWrite); #endif if(readNotWrite==1){ /* read */ status=SetInputMode(panel, RW_MODULEP_INP_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_MODULEP_OUT_FILE, 0); status=SetInputMode(panel, RW_MODULEP_OUT_FILE, 1); UIR_STATUS_CHECK(status, SetInputMode()); }else{ /* write */ SetCtrlVal(panel, RW_MODULEP_INP_FILE, 0); status=SetInputMode(panel, RW_MODULEP_INP_FILE, 1); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_MODULEP_OUT_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); } break; } break; } return 0; } /*============================================================================= * moduleMask() *============================================================================= * * * */ int CVICALLBACK moduleMask (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { int status; ERROR_ID errorId; int cfg; if(event==EVENT_VAL_CHANGED){ GetCtrlVal(panel, MDL_MASKP_CFG, &cfg); SetInputMode(panel, MDL_MASKP_SLV0, !cfg); SetInputMode(panel, MDL_MASKP_SLV1, !cfg); SetInputMode(panel, MDL_MASKP_SLV2, !cfg); SetInputMode(panel, MDL_MASKP_SLV3, !cfg); SetInputMode(panel, MDL_MASKP_MODULE_NUM, !cfg); SetInputMode(panel, MDL_MASKP_USE_SET, !cfg); SetInputMode(panel, MDL_MASKP_PASS, !cfg); SetInputMode(panel, MDL_MASKP_CMD_LINE, !cfg); SetInputMode(panel, MDL_MASKP_DATA_LINE0, !cfg); SetInputMode(panel, MDL_MASKP_DATA_LINE1, !cfg); SetInputMode(panel, MDL_MASKP_DATA_LINE2, !cfg); SetInputMode(panel, MDL_MASKP_DATA_LINE3, !cfg); SetInputMode(panel, MDL_MASKP_MASK0, cfg); SetInputMode(panel, MDL_MASKP_MASK1, cfg); SetInputMode(panel, MDL_MASKP_MASK_TYPE, cfg); SetInputMode(panel, MDL_MASKP_STORAGE, cfg); SetInputMode(panel, MDL_MASKP_MASK_SET, cfg); } return 0; } /*============================================================================= * RWBoc() *============================================================================= * * * */ int CVICALLBACK RWBoc (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { int status; unsigned char slotNumber; char subdir[PATHNAME_LENGTH]; char fileName[PATHNAME_LENGTH]; int readNotWrite; ERROR_ID errorId; unsigned int fileSize; char suffix[]="*.bin"; switch(event){ case EVENT_LEFT_CLICK: switch(control){ case RW_BOCD_INP_FILE: GetCtrlVal(panel, control, fileName); if(fileName[0]==0) strcpy(fileName,suffix); status=FileSelectPopup(global.moduleCfgDir, fileName,suffix,"Pick file", VAL_SELECT_BUTTON,0,0,1,1, fileName); if(status==VAL_NO_FILE_SELECTED){ GetCtrlVal(panel, control, fileName); if(fileName[0]!=0) return(SUCCESS); return(1); } errorId=getFileSize(fileName, &fileSize); ERROR_CHECK(errorId, getFileSize()); if(errorId!=SUCCESS) return(errorId); SetCtrlVal(panel, RW_BOCD_DATA_LEN, (fileSize+3)/4); SetCtrlVal(panel, RW_BOCD_INP_FILE, fileName); break; default: break; } break; case EVENT_VAL_CHANGED: switch(control){ case RW_BOCD_READ_NOT_WRITE: GetCtrlVal(panel, control, &readNotWrite); if(readNotWrite==1){ /* read */ status=SetInputMode(panel, RW_BOCD_INP_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); //SetCtrlVal(panel, RW_BOCD_OUT_FILE, 0); status=SetInputMode(panel, RW_MODULEP_OUT_FILE, 1); UIR_STATUS_CHECK(status, SetInputMode()); }else{ /* write */ SetCtrlVal(panel, RW_BOCD_INP_FILE, 0); status=SetInputMode(panel, RW_BOCD_INP_FILE, 1); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_BOCD_OUT_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); } break; } break; } return 0; } /*============================================================================= * RWmoduleVar() *============================================================================= * * * */ int CVICALLBACK RWmoduleVar (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { int status; unsigned char slotNumber; char subdir[PATHNAME_LENGTH]; char fileName[PATHNAME_LENGTH]; int readNotWrite; unsigned int fileSize; ERROR_ID errorId; char suffix[]="*.bin"; switch(event){ case EVENT_LEFT_CLICK: switch(control){ case RWMODULVAR_INP_FILE: GetCtrlVal(panel, control, fileName); if(fileName[0]==0) strcpy(fileName,suffix); status=FileSelectPopup(global.moduleCfgDir, fileName,suffix,"Pick file", VAL_SELECT_BUTTON,0,0,1,1, fileName); if(status==VAL_NO_FILE_SELECTED){ GetCtrlVal(panel, control, fileName); if(fileName[0]!=0) return(SUCCESS); return(1); } errorId=getFileSize(fileName, &fileSize); ERROR_CHECK(errorId, getFileSize()); if(errorId!=SUCCESS) return(errorId); SetCtrlVal(panel, RWMODULVAR_DATA_LEN, (fileSize+3)/4); SetCtrlVal(panel, control, fileName); break; case RWMODULVAR_OUT_FILE: GetCtrlVal(global.panel.primListEdit, LIST_EDIT_SLOT_NUMBER,&slotNumber); if(slotNumber==0){ strcpy(subdir, global.rodGeneralDataDir); }else{ strcpy(subdir, global.rodDataDir[HOST_INDEX(slotNumber)]); } /* directory restricted !! */ GetCtrlVal(panel, control, fileName); if(fileName[0]==0) strcpy(fileName,suffix); status = FileSelectPopup (subdir, fileName, suffix,"Pick file", VAL_OK_BUTTON, 1, 0, 1, 1,fileName); if(status==VAL_NO_FILE_SELECTED){ GetCtrlVal(panel, control, fileName); if(fileName[0]!=0) return 0; SetCtrlVal(panel, control, 0); return 0; } SetCtrlVal(panel, control, &fileName[strlen(subdir)]); break; default: break; } break; case EVENT_VAL_CHANGED: switch(control){ case RWMODULVAR_READ_NOT_WRITE: GetCtrlVal(panel, control, &readNotWrite); if(readNotWrite==1){ /* read */ status=SetInputMode(panel, RWMODULVAR_INP_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RWMODULVAR_OUT_FILE, 0); status=SetInputMode(panel, RWMODULVAR_OUT_FILE, 1); UIR_STATUS_CHECK(status, SetInputMode()); }else{ /* write */ SetCtrlVal(panel, RWMODULVAR_INP_FILE, 0); status=SetInputMode(panel, RWMODULVAR_INP_FILE, 1); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RWMODULVAR_OUT_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); } break; } break; } return 0; } /*============================================================================= * TestGlobalReg() *============================================================================= * * * */ int CVICALLBACK TestGlobalReg (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { int status; unsigned char slotNumber; char subdir[PATHNAME_LENGTH]; char fileName[PATHNAME_LENGTH]; int readNotWrite; char suffix[]="*.bin"; switch(event){ case EVENT_LEFT_CLICK: switch(control){ case TESTGREG_OUT_FILE: GetCtrlVal(global.panel.primListEdit, LIST_EDIT_SLOT_NUMBER,&slotNumber); if(slotNumber==0){ strcpy(subdir, global.rodGeneralDataDir); }else{ strcpy(subdir, global.rodDataDir[HOST_INDEX(slotNumber)]); } /* directory restricted !! */ GetCtrlVal(panel, control, fileName); if(fileName[0]==0) strcpy(fileName,suffix); status = FileSelectPopup (subdir, fileName, suffix,"Pick file", VAL_OK_BUTTON, 1, 0, 1, 1,fileName); if(status==VAL_NO_FILE_SELECTED){ GetCtrlVal(panel, control, fileName); if(fileName[0]!=0) return 0; SetCtrlVal(panel, control, 0); return 0; } SetCtrlVal(panel, control, &fileName[strlen(subdir)]); break; default: break; } } return 0; } /*============================================================================= * test() *============================================================================= * * * */ int CVICALLBACK test (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { int status; char fileName[PATHNAME_LENGTH]; unsigned int fileSize; int option; ERROR_ID errorId; switch(event){ case EVENT_LEFT_CLICK: switch(control){ case TESTP_INP_FILE: GetCtrlVal(panel, control, fileName); if(fileName[0]==0) strcpy(fileName,"*.bin"); status=FileSelectPopup(global.testingDataDir, fileName,"*.bin","Pick file", VAL_SELECT_BUTTON,0,0,1,1, fileName); if(status==VAL_NO_FILE_SELECTED){ GetCtrlVal(panel, control, fileName); if(fileName[0]!=0) return(SUCCESS); SetCtrlVal(panel, TESTP_DATA_LEN, 0); return(1); } errorId=getFileSize(fileName, &fileSize); ERROR_CHECK(errorId, getFileSize()); if(errorId!=SUCCESS) return(errorId); SetCtrlVal(panel, TESTP_DATA_LEN, (fileSize+3)/4); SetCtrlVal(panel, control, fileName); break; default: break; } break; case EVENT_VAL_CHANGED: switch(control){ case TESTP_INPUT_OPTION: GetCtrlVal(panel, control, &option); switch(option) { case T_TEST_PATTERN: status=SetInputMode(panel, TESTP_INP_TABLE, 1); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, TESTP_INP_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, TESTP_DATA_LEN, 30); break; case T_FROM_FILE: status=SetInputMode(panel, TESTP_INP_TABLE, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, TESTP_INP_FILE, 1); UIR_STATUS_CHECK(status, SetInputMode()); status=FileSelectPopup(global.testingDataDir, "*.bin","*.bin","Pick file", VAL_SELECT_BUTTON,0,0,1,1, fileName); if(status==VAL_NO_FILE_SELECTED){ GetCtrlVal(panel, TESTP_INP_FILE, fileName); if(fileName[0]==0) { SetCtrlVal(panel, TESTP_DATA_LEN, 0); return(1); } } errorId=getFileSize(fileName, &fileSize); ERROR_CHECK(errorId, getFileSize()); if(errorId!=SUCCESS) { SetCtrlVal(panel, TESTP_DATA_LEN, 0); return(errorId); } SetCtrlVal(panel, TESTP_DATA_LEN, (fileSize+3)/4); SetCtrlVal(panel, TESTP_INP_FILE, fileName); break; } break; } break; } return 0; } /*============================================================================= * buildStream() *============================================================================= * * * */ int CVICALLBACK buildStream(int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { int status; char fileName[PATHNAME_LENGTH]; unsigned int fileSize; int option; ERROR_ID errorId; switch(event){ case EVENT_LEFT_CLICK: switch(control){ case BUILD_STRM_INP_FILE: GetCtrlVal(panel, control, fileName); if(fileName[0]==0) strcpy(fileName,"*.bin"); status=FileSelectPopup(global.testingDataDir, fileName,"*.bin","Pick file", VAL_SELECT_BUTTON,0,0,1,1, fileName); if(status==VAL_NO_FILE_SELECTED){ GetCtrlVal(panel, control, fileName); if(fileName[0]!=0) return(SUCCESS); SetCtrlVal(panel, TESTP_DATA_LEN, 0); return(1); } errorId=getFileSize(fileName, &fileSize); ERROR_CHECK(errorId, getFileSize()); if(errorId!=SUCCESS) return(errorId); SetCtrlVal(panel, BUILD_STRM_DATA_LEN, (fileSize+3)/4); SetCtrlVal(panel, control, fileName); break; default: break; } break; case EVENT_VAL_CHANGED: switch(control){ case BUILD_STRM_INPUT_OPTION: GetCtrlVal(panel, control, &option); switch(option) { case MASK_DATA: SetInputMode(panel, BUILD_STRM_MASK0, 1); SetInputMode(panel, BUILD_STRM_MASK1, 1); SetInputMode(panel, BUILD_STRM_MASK2, 1); SetInputMode(panel, BUILD_STRM_MASK3, 1); SetInputMode(panel, BUILD_STRM_INP_FILE, 0); SetCtrlVal(panel, BUILD_STRM_DATA_LEN, 4); break; case FILE_DATA: SetInputMode(panel, BUILD_STRM_MASK0, 0); SetInputMode(panel, BUILD_STRM_MASK1, 0); SetInputMode(panel, BUILD_STRM_MASK2, 0); SetInputMode(panel, BUILD_STRM_MASK3, 0); status=SetInputMode(panel, BUILD_STRM_INP_FILE, 1); UIR_STATUS_CHECK(status, SetInputMode()); status=FileSelectPopup(global.testingDataDir, "*.bin","*.bin","Pick file", VAL_SELECT_BUTTON,0,0,1,1, fileName); if(status==VAL_NO_FILE_SELECTED){ GetCtrlVal(panel, BUILD_STRM_INP_FILE, fileName); if(fileName[0]!=0) return(SUCCESS); SetCtrlVal(panel, BUILD_STRM_DATA_LEN, 0); return(1); } errorId=getFileSize(fileName, &fileSize); ERROR_CHECK(errorId, getFileSize()); if(errorId!=SUCCESS) return(errorId); SetCtrlVal(panel, BUILD_STRM_DATA_LEN, (fileSize+3)/4); SetCtrlVal(panel, BUILD_STRM_INP_FILE, fileName); break; } break; } break; } return 0; } /*============================================================================= * setRodMode() *============================================================================= * * * */ int CVICALLBACK setRodMode(int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { int status; char fileName[PATHNAME_LENGTH]; unsigned int fileSize; int option; ERROR_ID errorId; #ifdef COMMENTED switch(event){ case EVENT_VAL_CHANGED: if(control==SETRODMODE_DATA){ GetCtrlVal(panel, control, &option); SetInputMode(panel, SETRODMODE_INP_FILE, option); if(option==0){ SetCtrlVal(panel, SETRODMODE_INP_FILE, 0); SetCtrlVal(panel, SETRODMODE_DATA_LEN, 0); } } break; case EVENT_LEFT_CLICK: switch(control){ case SETRODMODE_INP_FILE: GetCtrlVal(panel, control, fileName); if(fileName[0]==0) strcpy(fileName,"*.bin"); status=FileSelectPopup(global.testingDataDir, fileName,"*.bin","Pick file", VAL_SELECT_BUTTON,0,0,1,1, fileName); if(status==VAL_NO_FILE_SELECTED){ GetCtrlVal(panel, control, fileName); if(fileName[0]!=0) return(SUCCESS); SetCtrlVal(panel, SETRODMODE_DATA_LEN, 0); return(1); } errorId=getFileSize(fileName, &fileSize); ERROR_CHECK(errorId, getFileSize()); if(errorId!=SUCCESS) return(errorId); SetCtrlVal(panel, SETRODMODE_DATA_LEN, (fileSize+3)/4); SetCtrlVal(panel, control, fileName); break; default: break; } } #endif return 0; } /*============================================================================= * histogramSetup() *============================================================================= * * * */ int CVICALLBACK histogramSetup (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { int status= 1, value, value2; unsigned char char_value; char fileName1[PATHNAME_LENGTH]; char fileName2[PATHNAME_LENGTH]; switch (event){ case EVENT_LEFT_CLICK: switch(control){ case HIST_SETP_INP_FILE_1: status=FileSelectPopup(global.testingDataDir, "*.bin","*.bin","Pick file", VAL_SELECT_BUTTON,0,0,1,1, fileName1); if(status != VAL_EXISTING_FILE_SELECTED) { return(1); } SetCtrlVal(panel, control, fileName1); UIR_STATUS_CHECK(status, SetCtrlVal()); break; case HIST_SETP_INP_FILE_2: status=FileSelectPopup(global.testingDataDir, "*.bin","*.bin","Pick file", VAL_SELECT_BUTTON,0,0,1,1, fileName2); if(status != VAL_EXISTING_FILE_SELECTED) { return(1); } SetCtrlVal(panel, control, fileName2); UIR_STATUS_CHECK(status, SetCtrlVal()); break; default: break; } break; case EVENT_VAL_CHANGED: switch(control){ case HIST_SETP_DEFAULT_1: GetCtrlVal (panel, control, &value); UIR_STATUS_CHECK(status, GetCtrlVal()); SetInputMode(panel, HIST_SETP_TEXTMSG_16, value); if(value) { status = SetCtrlAttribute(panel, HIST_SETP_X_PTR, ATTR_CTRL_MODE, VAL_INDICATOR); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status = SetCtrlAttribute(panel, HIST_SETP_X_PTR_2, ATTR_CTRL_MODE, VAL_INDICATOR); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status = SetCtrlVal(panel, HIST_SETP_X_PTR, DEFAULT); UIR_STATUS_CHECK(status, SetCtrlVal()); status = SetCtrlVal(panel, HIST_SETP_X_PTR_2, DEFAULT); UIR_STATUS_CHECK(status, SetCtrlVal()); status=SetInputMode(panel, HIST_SETP_INP_FILE_1, 1); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, HIST_SETP_INP_FILE_2, 1); UIR_STATUS_CHECK(status, SetInputMode()); status = GetCtrlVal(panel, HIST_SETP_INP_FILE_1, fileName1); UIR_STATUS_CHECK(status, SetInputMode()); status=FileSelectPopup(global.testingDataDir, "*.bin","*.bin","Pick file 1", VAL_SELECT_BUTTON,0,0,1,1, fileName1); if( (status != VAL_EXISTING_FILE_SELECTED) && (fileName1[0] == 0x0 ) ) { return(1); } SetCtrlVal(panel, HIST_SETP_INP_FILE_1, fileName1); UIR_STATUS_CHECK(status, SetCtrlVal()); status = GetCtrlVal(panel, HIST_SETP_INP_FILE_2, fileName2); status=FileSelectPopup(global.testingDataDir, "*.bin","*.bin","Pick file 2", VAL_SELECT_BUTTON,0,0,1,1, fileName2); if( (status != VAL_EXISTING_FILE_SELECTED) && (fileName2[0] == 0x0 ) ) { return(1); } SetCtrlVal(panel, HIST_SETP_INP_FILE_2, fileName2); UIR_STATUS_CHECK(status, SetCtrlVal()); } else { status = SetCtrlAttribute(panel, HIST_SETP_X_PTR, ATTR_CTRL_MODE, VAL_HOT); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetInputMode(panel, HIST_SETP_X_PTR, 1); UIR_STATUS_CHECK(status, SetInputMode()); status = SetCtrlAttribute(panel, HIST_SETP_X_PTR_2, ATTR_CTRL_MODE, VAL_HOT); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetInputMode(panel, HIST_SETP_X_PTR_2, 1); UIR_STATUS_CHECK(status, SetInputMode()); status = SetCtrlVal(panel, HIST_SETP_X_PTR, 0); UIR_STATUS_CHECK(status, SetCtrlVal()); status = SetCtrlVal(panel, HIST_SETP_X_PTR_2, 0); UIR_STATUS_CHECK(status, SetCtrlVal()); status=SetInputMode(panel, HIST_SETP_INP_FILE_1, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, HIST_SETP_INP_FILE_2, 0); UIR_STATUS_CHECK(status, SetInputMode()); } break; default: break; }; break; } return 0; } /****************************************************************************** * Static functions * ******************************************************************************/ /*============================================================================= * outFile() *============================================================================= * * */ static void outFile(int panel, int fileControl, int optionControl, char defaultFileType[]){ int status; long fileSize; unsigned char slotNumber; char subdir[PATHNAME_LENGTH]; char fileName[PATHNAME_LENGTH]; GetCtrlVal(global.panel.primListEdit, LIST_EDIT_SLOT_NUMBER,&slotNumber); if(slotNumber==0){ strcpy(subdir, global.rodGeneralDataDir); }else{ strcpy(subdir, global.rodDataDir[HOST_INDEX(slotNumber)]); } /* directory restricted !! */ GetCtrlVal(panel, fileControl, fileName); if(fileName[0]==0) strcpy(fileName,defaultFileType); status = FileSelectPopup (subdir, fileName, defaultFileType,"Pick file", VAL_OK_BUTTON, 1, 0, 1, 1,fileName); if(status==VAL_NO_FILE_SELECTED){ GetCtrlVal(panel, fileControl, fileName); if(fileName[0]!=0) return; SetCtrlVal(panel, optionControl, 0); SetCtrlVal(panel, fileControl, 0); status=SetInputMode(panel, fileControl, 0); UIR_STATUS_CHECK(status, SetInputMode()); return; } SetCtrlVal(panel, fileControl, &fileName[strlen(subdir)]); return; } /*============================================================================= * inFile() *============================================================================= * * */ static ERROR_ID inFile(int panel, int fileControl, int dataLengthControl){ ERROR_ID errorId; int status; unsigned int fileSize; unsigned char slotNumber; UINT32 primBodyLength; char fileName[PATHNAME_LENGTH]; char oldFileName[PATHNAME_LENGTH]; GetCtrlVal(panel, fileControl, fileName); if(fileName[0]==0) { strcpy(fileName,"*.bin"); } status=FileSelectPopup(global.testingDataDir, fileName,"*.bin","Pick file", VAL_SELECT_BUTTON,0,0,1,1, fileName); if((status==VAL_NO_FILE_SELECTED)){ GetCtrlVal(panel, fileControl, fileName); if(fileName[0]!=0) return(SUCCESS); SetCtrlVal(panel, fileControl, 0); status=SetInputMode(panel, fileControl, 0); UIR_STATUS_CHECK(status, SetInputMode()); return(1); } errorId=getFileSize(fileName, &fileSize); ERROR_CHECK(errorId, getFileSize()); if(errorId!=SUCCESS) return(errorId); /* align on 32 bit boundary */ if(fileSize%4){ status=MessagePopup("Warning","File size is not aligned on 32 bit word boundary.\n Last odd bytes not considered (size rounded down)!"); UIR_STATUS_CHECK(status, MessagePopup()); } primBodyLength=(UINT32)fileSize/4; /* round length down */ SetCtrlVal(panel, fileControl, fileName); SetCtrlVal(panel, dataLengthControl, primBodyLength); return(SUCCESS); } /******************************************************************************/