/****************************************************************************** * * Title : commandParamsUir.c * Version 0.0, * * Description: command parameters user interface callback functions. * Related files: commandParamsUir.uir * * Author: Lukas Tomasek, tomasekl@fzu.cz * ******************************************************************************/ /****************************************************************************** * Header files * ******************************************************************************/ #include #include "globalDefinitions.h" #include "fileUtility.h" #include "uirUtility.h" #include "commandParamsUir.h" #include "commandListEditUir.h" #include "flashUtility.h" #include "primListEditUir.h" #include "rodMemoryUir.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, int elementSize, char defaultDir[]); /****************************************************************************** * LW_CVI callback functions * ******************************************************************************/ /*============================================================================= * sendPrimList() *============================================================================= * * * */ int CVICALLBACK sendPrimList (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ char file[PATHNAME_LENGTH]; int status; ERROR_ID errorId; if(event == EVENT_LEFT_CLICK){ switch(control){ case SEND_PLIST_INP_FILE: status = FileSelectPopup (global.testingDataDir, "*.pl", "*.pl", "",VAL_SELECT_BUTTON, 0, 1, 1, 1, file); if(status == VAL_NO_FILE_SELECTED){ file[0]= 0; break; } SetCtrlVal(panel, control, file); break; case SEND_PLIST_EDIT_PRIM_LIST: /* open prim list in PrimListEdit Window */ GetCtrlVal(panel, SEND_PLIST_INP_FILE, file); if(file[0] == 0) break; (void) listEditWindowButtons(global.panel.primListEdit, LIST_EDIT_CLEAR_LIST, EVENT_COMMIT, 0, 1, 0); (void) listEditWindowButtons(global.panel.primListEdit, LIST_EDIT_INSERT_LIST, EVENT_COMMIT, file, 1, 0); SetActivePanel(global.panel.primListEdit); break; default: break; } } return 0; } /*============================================================================= * runChildCommandList() *============================================================================= * * * */ int CVICALLBACK runChildCommandList (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ char file[PATHNAME_LENGTH]; int status; ERROR_ID errorId; if(event==EVENT_LEFT_CLICK){ switch(control){ case RUN_CLIST_FILE: status = FileSelectPopup (global.testingDataDir, "*.cl", "*.cl", "",VAL_SELECT_BUTTON, 0, 1, 1, 1, file); if(status==VAL_NO_FILE_SELECTED){ file[0]=0; break; } SetCtrlVal(panel, control, file); break; default: break; } } return 0; } /*============================================================================= * RWMaster() *============================================================================= * * * */ int CVICALLBACK RWMaster (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ int readNotWrite; int status; ERROR_ID errorId; unsigned int length; int option; long fileSize; int blockAccess; if(event==EVENT_VAL_CHANGED){ switch(control){ case RW_MASTERP_BLOCK_ACCESS: GetCtrlVal(panel, control, &blockAccess); status=SetInputMode(panel, RW_MASTERP_DELAY, !blockAccess); UIR_STATUS_CHECK(status, SetInputMode()); break; case RW_MASTERP_READ_NOT_WRITE: GetCtrlVal(panel, control, &readNotWrite); if(readNotWrite==1){ /* read */ status=SetCtrlAttribute(panel, RW_MASTERP_LENGTH, ATTR_FRAME_COLOR, 0xCC9966); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetCtrlAttribute(panel, RW_MASTERP_LENGTH, ATTR_CTRL_MODE, VAL_NORMAL); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetInputMode(panel, RW_MASTERP_INPUT_DATA, 0); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_MASTERP_OUTPUT_OPT, 0); status=SetInputMode(panel, RW_MASTERP_OUTPUT_OPT, 1); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_MASTERP_WRITE_OR_APPEND, 1); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_MASTERP_INP_OPTION, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_MASTERP_INP_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_MASTERP_COMP_OPTION, 1); UIR_STATUS_CHECK(status, SetInputMode()); }else{ /* write */ option=1; SetCtrlVal(panel, RW_MASTERP_INP_OPTION, option); SetCtrlVal(panel, RW_MASTERP_LENGTH, 4); SetCtrlVal(panel, RW_MASTERP_INP_FILE, 0); status=SetCtrlAttribute(panel, RW_MASTERP_LENGTH, ATTR_CTRL_MODE, VAL_INDICATOR); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetCtrlAttribute(panel, RW_MASTERP_LENGTH, ATTR_FRAME_COLOR, VAL_LT_GRAY); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetInputMode(panel, RW_MASTERP_INPUT_DATA, option); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_MASTERP_INP_FILE, !option); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_MASTERP_OUTPUT_OPT, 0); status=SetInputMode(panel, RW_MASTERP_OUTPUT_OPT, 0); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_MASTERP_OUT_FILE, 0); status=SetInputMode(panel, RW_MASTERP_OUT_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_MASTERP_OUT_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_MASTERP_WRITE_OR_APPEND, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_MASTERP_INP_OPTION, 1); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_MASTERP_COMP_OPTION, 0); status=SetInputMode(panel, RW_MASTERP_COMP_OPTION, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_MASTERP_COMP_DATA, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_MASTERP_DATA_MASK, 0); UIR_STATUS_CHECK(status, SetInputMode()); } break; case RW_MASTERP_INP_OPTION: GetCtrlVal(panel, control, &option); if(option){ /* one word */ SetCtrlVal(panel, RW_MASTERP_INP_FILE, 0); status=SetInputMode(panel, RW_MASTERP_INP_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_MASTERP_INPUT_DATA, 1); UIR_STATUS_CHECK(status, SetInputMode()); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_MASTERP_LENGTH, 4); }else{ /* from file */ status=SetInputMode(panel, RW_MASTERP_INP_FILE, 1); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_MASTERP_INPUT_DATA, 0); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_MASTERP_LENGTH, 0); errorId=inFile(panel, RW_MASTERP_INP_FILE, RW_MASTERP_LENGTH, 4, global.testingDataDir); ERROR_CHECK(errorId, getFileSize()); } break; case RW_MASTERP_LENGTH: GetCtrlVal(panel, control, &length); length=length&0xFFFFFFFC; /* round the length %4 - 32bit words */ SetCtrlVal(panel, control, length); GetCtrlVal(panel, RW_MASTERP_READ_NOT_WRITE, &readNotWrite); if((readNotWrite)&&(length<=4)){ status=SetInputMode(panel,RW_MASTERP_COMP_OPTION, 1); UIR_STATUS_CHECK(status, SetInputMode()); }else{ SetCtrlVal(panel, RW_MASTERP_COMP_OPTION, 0); status=SetInputMode(panel, RW_MASTERP_COMP_OPTION, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_MASTERP_COMP_DATA, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_MASTERP_DATA_MASK, 0); UIR_STATUS_CHECK(status, SetInputMode()); } break; case RW_MASTERP_OUTPUT_OPT: GetCtrlVal(panel, control, &option); status=SetInputMode(panel, RW_MASTERP_OUT_FILE, option); UIR_STATUS_CHECK(status, SetInputMode()); if(option){ outFile(panel, RW_MASTERP_OUT_FILE, RW_MASTERP_OUTPUT_OPT, "*.bin"); } break; case RW_MASTERP_COMP_OPTION: GetCtrlVal(panel, control, &option); status=SetInputMode(panel, RW_MASTERP_COMP_DATA, option); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_MASTERP_DATA_MASK, option); UIR_STATUS_CHECK(status, SetInputMode()); break; default: break; } }else{ if(event==EVENT_LEFT_CLICK){ switch(control){ case RW_MASTERP_INP_FILE: errorId=inFile(panel, RW_MASTERP_INP_FILE, RW_MASTERP_LENGTH, 4, global.testingDataDir); ERROR_CHECK(errorId, getFileSize()); break; case RW_MASTERP_OUT_FILE: outFile(panel, control, RW_MASTERP_OUTPUT_OPT, "*.bin"); break; default: break; } } } return 0; } /*============================================================================= * RWSlave() *============================================================================= * * * */ int CVICALLBACK RWSlave (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ int readNotWrite; int status; ERROR_ID errorId; unsigned int length; int option; long fileSize; if(event==EVENT_VAL_CHANGED){ switch(control){ case RW_SLAVEP_READ_NOT_WRITE: GetCtrlVal(panel, control, &readNotWrite); if(readNotWrite==1){ /* read */ status=SetCtrlAttribute(panel, RW_SLAVEP_LENGTH, ATTR_FRAME_COLOR, 0xCC9966); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetCtrlAttribute(panel, RW_SLAVEP_LENGTH, ATTR_CTRL_MODE, VAL_NORMAL); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetInputMode(panel, RW_SLAVEP_INPUT_DATA, 0); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_SLAVEP_OUTPUT_OPT, 0); status=SetInputMode(panel, RW_SLAVEP_OUTPUT_OPT, 1); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_SLAVEP_WRITE_OR_APPEND, 1); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_SLAVEP_INP_OPTION, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_SLAVEP_INP_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_SLAVEP_COMP_OPTION, 1); UIR_STATUS_CHECK(status, SetInputMode()); }else{ /* write */ option=1; SetCtrlVal(panel, RW_SLAVEP_INP_OPTION, option); SetCtrlVal(panel, RW_SLAVEP_LENGTH, 4); SetCtrlVal(panel, RW_SLAVEP_INP_FILE, 0); status=SetCtrlAttribute(panel, RW_SLAVEP_LENGTH, ATTR_CTRL_MODE, VAL_INDICATOR); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetCtrlAttribute(panel, RW_SLAVEP_LENGTH, ATTR_FRAME_COLOR, VAL_LT_GRAY); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetInputMode(panel, RW_SLAVEP_INPUT_DATA, option); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_SLAVEP_INP_FILE, !option); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_SLAVEP_OUTPUT_OPT, 0); status=SetInputMode(panel, RW_SLAVEP_OUTPUT_OPT, 0); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_SLAVEP_OUT_FILE, 0); status=SetInputMode(panel, RW_SLAVEP_OUT_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_SLAVEP_OUT_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_SLAVEP_WRITE_OR_APPEND, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_SLAVEP_INP_OPTION, 1); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_SLAVEP_COMP_OPTION, 0); status=SetInputMode(panel, RW_SLAVEP_COMP_OPTION, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_SLAVEP_COMP_DATA, 0); UIR_STATUS_CHECK(status, SetInputMode()); } break; case RW_SLAVEP_INP_OPTION: GetCtrlVal(panel, control, &option); if(option){ /* one word */ SetCtrlVal(panel, RW_SLAVEP_INP_FILE, 0); status=SetInputMode(panel, RW_SLAVEP_INP_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_SLAVEP_INPUT_DATA, 1); UIR_STATUS_CHECK(status, SetInputMode()); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_SLAVEP_LENGTH, 4); }else{ /* from file */ status=SetInputMode(panel, RW_SLAVEP_INP_FILE, 1); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_SLAVEP_INPUT_DATA, 0); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_SLAVEP_LENGTH, 0); errorId=inFile(panel, RW_SLAVEP_INP_FILE, RW_SLAVEP_LENGTH, 4, global.testingDataDir); ERROR_CHECK(errorId, getFileSize()); } break; case RW_SLAVEP_LENGTH: GetCtrlVal(panel, control, &length); length=length&0xFFFFFFFC; /* round the length %4 - 32bit words */ SetCtrlVal(panel, control, length); GetCtrlVal(panel, RW_SLAVEP_READ_NOT_WRITE, &readNotWrite); if((readNotWrite)&&(length<=4)){ status=SetInputMode(panel,RW_SLAVEP_COMP_OPTION, 1); UIR_STATUS_CHECK(status, SetInputMode()); }else{ SetCtrlVal(panel, RW_SLAVEP_COMP_OPTION, 0); status=SetInputMode(panel, RW_SLAVEP_COMP_OPTION, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_SLAVEP_COMP_DATA, 0); UIR_STATUS_CHECK(status, SetInputMode()); } break; case RW_SLAVEP_OUTPUT_OPT: GetCtrlVal(panel, control, &option); status=SetInputMode(panel, RW_SLAVEP_OUT_FILE, option); UIR_STATUS_CHECK(status, SetInputMode()); if(option){ outFile(panel, RW_SLAVEP_OUT_FILE, RW_SLAVEP_OUTPUT_OPT, "*.bin"); } break; case RW_SLAVEP_COMP_OPTION: GetCtrlVal(panel, control, &option); status=SetInputMode(panel, RW_SLAVEP_COMP_DATA, option); UIR_STATUS_CHECK(status, SetInputMode()); break; default: break; } }else{ if(event==EVENT_LEFT_CLICK){ switch(control){ case RW_SLAVEP_INP_FILE: errorId=inFile(panel, RW_SLAVEP_INP_FILE, RW_SLAVEP_LENGTH, 4, global.testingDataDir); ERROR_CHECK(errorId, getFileSize()); break; case RW_SLAVEP_OUT_FILE: outFile(panel, control, RW_SLAVEP_OUTPUT_OPT, "*.bin"); break; default: break; } } } return 0; } /*============================================================================= * RWVme() *============================================================================= * * * */ int CVICALLBACK RWVme (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ int readNotWrite; int status; ERROR_ID errorId; unsigned int length; int option; long fileSize; UINT16 elementSize; if(event==EVENT_VAL_CHANGED){ switch(control){ case RW_VMEP_VME_ACCESS: GetCtrlVal(panel, RW_VMEP_VME_ACCESS, &elementSize); GetCtrlVal(panel, RW_VMEP_READ_NOT_WRITE, &readNotWrite); GetCtrlVal(panel, RW_VMEP_INP_OPTION, &option); if((readNotWrite==0)&&(option)){ SetCtrlVal(panel, RW_VMEP_LENGTH, elementSize); } break; case RW_VMEP_READ_NOT_WRITE: GetCtrlVal(panel, RW_VMEP_READ_NOT_WRITE, &readNotWrite); GetCtrlVal(panel, RW_VMEP_VME_ACCESS, &elementSize); if(readNotWrite==1){ /* read */ status=SetCtrlAttribute(panel, RW_VMEP_LENGTH, ATTR_FRAME_COLOR, 0xCC9966); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetCtrlAttribute(panel, RW_VMEP_LENGTH, ATTR_CTRL_MODE, VAL_NORMAL); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status = SetCtrlAttribute (panel, RW_VMEP_LENGTH, ATTR_MAX_VALUE,0xFFFFFFFF); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetInputMode(panel, RW_VMEP_INPUT_DATA, 0); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_VMEP_OUTPUT_OPT, 0); status=SetInputMode(panel, RW_VMEP_OUTPUT_OPT, 1); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_VMEP_WRITE_OR_APPEND, 1); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_VMEP_INP_OPTION, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_VMEP_INP_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_VMEP_COMP_OPTION, 1); UIR_STATUS_CHECK(status, SetInputMode()); }else{ /* write */ option=1; SetCtrlVal(panel, RW_VMEP_INP_OPTION, option); SetCtrlVal(panel, RW_VMEP_LENGTH, elementSize); SetCtrlVal(panel, RW_VMEP_INP_FILE, 0); status=SetCtrlAttribute(panel, RW_VMEP_LENGTH, ATTR_FRAME_COLOR, 0xCC9966); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetCtrlAttribute(panel, RW_VMEP_LENGTH, ATTR_CTRL_MODE, VAL_NORMAL); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status = SetCtrlAttribute (panel, RW_VMEP_LENGTH, ATTR_MAX_VALUE,4); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetInputMode(panel, RW_VMEP_INPUT_DATA, option); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_VMEP_INP_FILE, !option); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_VMEP_OUTPUT_OPT, 0); status=SetInputMode(panel, RW_VMEP_OUTPUT_OPT, 0); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_VMEP_OUT_FILE, 0); status=SetInputMode(panel, RW_VMEP_OUT_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_VMEP_OUT_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_VMEP_WRITE_OR_APPEND, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_VMEP_INP_OPTION, 1); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_VMEP_COMP_OPTION, 0); status=SetInputMode(panel, RW_VMEP_COMP_OPTION, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_VMEP_COMP_DATA, 0); UIR_STATUS_CHECK(status, SetInputMode()); } break; case RW_VMEP_INP_OPTION: GetCtrlVal(panel, RW_VMEP_VME_ACCESS, &elementSize); GetCtrlVal(panel, control, &option); if(option){ /* one word */ status=SetCtrlAttribute(panel, RW_VMEP_LENGTH, ATTR_FRAME_COLOR, 0xCC9966); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetCtrlAttribute(panel, RW_VMEP_LENGTH, ATTR_CTRL_MODE, VAL_NORMAL); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status = SetCtrlAttribute (panel, RW_VMEP_LENGTH, ATTR_MAX_VALUE,0x4); UIR_STATUS_CHECK(status, SetCtrlAttribute()); SetCtrlVal(panel, RW_VMEP_INP_FILE, 0); status=SetInputMode(panel, RW_VMEP_INP_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_VMEP_INPUT_DATA, 1); UIR_STATUS_CHECK(status, SetInputMode()); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_VMEP_LENGTH, elementSize); }else{ /* from file */ status=SetCtrlAttribute(panel, RW_VMEP_LENGTH, ATTR_CTRL_MODE, VAL_INDICATOR); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetCtrlAttribute(panel, RW_VMEP_LENGTH, ATTR_FRAME_COLOR, VAL_LT_GRAY); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status = SetCtrlAttribute (panel, RW_VMEP_LENGTH, ATTR_MAX_VALUE,0xFFFFFFFF); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetInputMode(panel, RW_VMEP_INP_FILE, 1); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_VMEP_INPUT_DATA, 0); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_VMEP_LENGTH, 0); errorId=inFile(panel, RW_VMEP_INP_FILE, RW_VMEP_LENGTH, elementSize,global.testingDataDir); ERROR_CHECK(errorId, getFileSize()); } break; case RW_VMEP_LENGTH: GetCtrlVal(panel, RW_VMEP_VME_ACCESS, &elementSize); GetCtrlVal(panel, control, &length); length=(length/elementSize)*elementSize; SetCtrlVal(panel, control, length); GetCtrlVal(panel, RW_VMEP_READ_NOT_WRITE, &readNotWrite); if((readNotWrite)&&(length<=4)){ status=SetInputMode(panel, RW_VMEP_COMP_OPTION, 1); UIR_STATUS_CHECK(status, SetInputMode()); }else{ SetCtrlVal(panel, RW_VMEP_COMP_OPTION, 0); status=SetInputMode(panel, RW_VMEP_COMP_OPTION, 0); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, RW_VMEP_COMP_DATA, 0); UIR_STATUS_CHECK(status, SetInputMode()); } break; case RW_VMEP_OUTPUT_OPT: GetCtrlVal(panel, control, &option); status=SetInputMode(panel, RW_VMEP_OUT_FILE, option); UIR_STATUS_CHECK(status, SetInputMode()); if(option){ outFile(panel, RW_VMEP_OUT_FILE, RW_VMEP_OUTPUT_OPT, "*.bin"); } break; case RW_VMEP_COMP_OPTION: GetCtrlVal(panel, control, &option); status=SetInputMode(panel, RW_VMEP_COMP_DATA, option); UIR_STATUS_CHECK(status, SetInputMode()); break; default: break; } }else{ if(event==EVENT_LEFT_CLICK){ switch(control){ case RW_VMEP_INP_FILE: GetCtrlVal(panel, RW_VMEP_VME_ACCESS, &elementSize); errorId=inFile(panel, RW_VMEP_INP_FILE, RW_VMEP_LENGTH, elementSize, global.testingDataDir); ERROR_CHECK(errorId, getFileSize()); break; case RW_VMEP_OUT_FILE: outFile(panel, control, RW_VMEP_OUTPUT_OPT, "*.bin"); break; default: break; } } } return 0; } /*============================================================================= * RWFpgaFlash() *============================================================================= * * * */ int CVICALLBACK RWFpgaFlash (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ int readNotWrite; int status; ERROR_ID errorId; unsigned int size; int option; unsigned int fileSize; unsigned char slotNumber; char subdir[PATHNAME_LENGTH]; char fileName[PATHNAME_LENGTH]; unsigned int address; if(event==EVENT_VAL_CHANGED){ switch(control){ case RW_FPGAF_READ_NOT_WRITE: GetCtrlVal(panel, control, &readNotWrite); if(readNotWrite==1){ /* read */ status=SetCtrlAttribute(panel, RW_FPGAF_SIZE, ATTR_FRAME_COLOR, 0xCC9966); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetCtrlAttribute(panel, RW_FPGAF_SIZE, ATTR_CTRL_MODE, VAL_NORMAL); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetInputMode(panel, RW_FPGAF_INP_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_FPGAF_OUT_FILE, 0); status=SetInputMode(panel, RW_FPGAF_OUT_FILE, 1); UIR_STATUS_CHECK(status, SetInputMode()); }else{ /* write */ status=SetCtrlAttribute(panel, RW_FPGAF_SIZE, ATTR_CTRL_MODE, VAL_INDICATOR); UIR_STATUS_CHECK(status, SetCtrlAttribute()); status=SetCtrlAttribute(panel, RW_FPGAF_SIZE, ATTR_FRAME_COLOR, VAL_LT_GRAY); UIR_STATUS_CHECK(status, SetCtrlAttribute()); SetCtrlVal(panel, RW_FPGAF_SIZE, 0); status=SetInputMode(panel, RW_FPGAF_OUT_FILE, 0); UIR_STATUS_CHECK(status, SetInputMode()); SetCtrlVal(panel, RW_FPGAF_INP_FILE, 0); status=SetInputMode(panel, RW_FPGAF_INP_FILE, 1); UIR_STATUS_CHECK(status, SetInputMode()); } break; case RW_FPGAF_START_ADDRESS: GetCtrlVal(panel, control, &address); address=(address/FLASH_SECTOR_SIZE)*FLASH_SECTOR_SIZE; SetCtrlVal(panel, control, address); break; default: break; } }else{ if(event==EVENT_LEFT_CLICK){ switch(control){ case RW_FPGAF_INP_FILE: errorId=inFile(panel, RW_FPGAF_INP_FILE, RW_FPGAF_SIZE, sizeof(UINT8), global.fpgaDataDir); ERROR_CHECK(errorId, getFileSize()); break; case RW_FPGAF_OUT_FILE: GetCtrlVal(global.panel.commandListEdit, CLIST_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,"*.bin"); status = FileSelectPopup (subdir, fileName, "*.bin","Pick file", VAL_OK_BUTTON, 1, 0, 1, 1,fileName); if(status==VAL_NO_FILE_SELECTED){ GetCtrlVal(panel, control, fileName); if(fileName[0]!=0) break; SetCtrlVal(panel, control, 0); break; } SetCtrlVal(panel, control, &fileName[strlen(subdir)]); break; default: break; } } } return 0; } /*============================================================================= * WMDSPFlash() *============================================================================= * * * */ int CVICALLBACK WMDSPFlash (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ int readNotWrite; int status; ERROR_ID errorId; unsigned int size; int option; long fileSize; unsigned char slotNumber; char subdir[PATHNAME_LENGTH]; char fileName[PATHNAME_LENGTH]; if(event==EVENT_LEFT_CLICK){ switch(control){ case W_MDSPF_INP_FILE: errorId=inFile(panel, W_MDSPF_INP_FILE, W_MDSPF_SIZE, sizeof(UINT8), global.dspPrgDataDir); ERROR_CHECK(errorId, getFileSize()); break; default: break; } } return 0; } /*============================================================================= * compFiles() *============================================================================= * * * */ int CVICALLBACK compFiles(int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ int status; ERROR_ID errorId; char subdir[PATHNAME_LENGTH]; char fileName[PATHNAME_LENGTH]="\0"; unsigned char slotNumber; UINT32 wordSizeInBytes; if(event==EVENT_VAL_CHANGED){ switch(control){ case COMP_FILES_WORD_SIZE: GetCtrlVal(panel, control, &wordSizeInBytes); status=SetInputMode(panel, COMP_FILES_DATA_MASK1, (wordSizeInBytes>4)); UIR_STATUS_CHECK(status, SetInputMode()); break; } }else{ if(event==EVENT_LEFT_CLICK){ switch(control){ case COMP_FILES_COMMON_FILE: GetCtrlVal(panel, control, fileName); if(fileName[0]==0) sprintf(fileName,"*.bin"); status = FileSelectPopup (global.testingDataDir, fileName, "*.bin","Pick file", VAL_OK_BUTTON, 0, 0, 1, 1,fileName); if(status==VAL_NO_FILE_SELECTED){ GetCtrlVal(panel, control, fileName); if(fileName[0]!=0) break; } SetCtrlVal(panel, control, fileName); break; case COMP_FILES_ROD_FILE: GetCtrlVal(global.panel.commandListEdit, CLIST_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) sprintf(fileName,"*.bin"); status = FileSelectPopup (subdir, fileName, "*.bin","Pick file", VAL_OK_BUTTON, 1, 0, 1, 1,fileName); if(status==VAL_NO_FILE_SELECTED){ GetCtrlVal(panel, control, fileName); if(fileName[0]!=0) break; } SetCtrlVal(panel, control, &fileName[strlen(subdir)]); break; default: break; } } } return 0; } /*============================================================================= * busTest() *============================================================================= * * * */ int CVICALLBACK busTest(int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ int status; ERROR_ID errorId; char string[PATHNAME_LENGTH]; char fileName[PATHNAME_LENGTH]; unsigned char slotNumber; int option; if(event==EVENT_VAL_CHANGED){ switch(control){ case BUS_TEST_ONE_REG: GetCtrlVal(panel, control, &option); status=SetInputMode(panel, BUS_TEST_REG_ADDR, option); UIR_STATUS_CHECK(status, SetInputMode()); status=SetInputMode(panel, BUS_TEST_REG_ADDR_FILE, !option); UIR_STATUS_CHECK(status, SetInputMode()); break; case BUS_TEST_ADDR_TEST_OPTION: GetCtrlVal(panel, control, &option); status=SetInputMode(panel, BUS_TEST_ADDR_REG, option); UIR_STATUS_CHECK(status, SetInputMode()); break; } }else{ if(event==EVENT_LEFT_CLICK){ switch(control){ case BUS_TEST_REG_ADDR_FILE: GetCtrlVal(panel, control, fileName); if(fileName[0]==0) strcpy(fileName,"*.bin"); status = FileSelectPopup (global.testingDataDir, fileName, "*.bin","Pick file", VAL_OK_BUTTON, 0, 0, 1, 1,fileName); if(status==VAL_NO_FILE_SELECTED){ GetCtrlVal(panel, control, fileName); if(fileName[0]!=0) break; } SetCtrlVal(panel, control, fileName); break; default: break; } } } return 0; } /*============================================================================= * runExtProgram() *============================================================================= * * * */ int CVICALLBACK runExtProgram (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { int status; ERROR_ID errorId; char subdir[PATHNAME_LENGTH]; char fileName[PATHNAME_LENGTH]="\0"; unsigned char slotNumber; int option; if((event==EVENT_VAL_CHANGED)&&(control==RUN_EXTPRG_DATA_FILE_OPT)){ GetCtrlVal(panel, control, &option); status=SetInputMode(panel, RUN_EXTPRG_ROD_FILE, option); UIR_STATUS_CHECK(status, SetInputMode()); } if(event==EVENT_LEFT_CLICK){ switch(control){ case RUN_EXTPRG_EXT_PRG: GetCtrlVal(panel, control, fileName); if(fileName[0]==0) sprintf(fileName,"*.exe"); status = FileSelectPopup (global.testingDataDir, fileName, "*.exe", "Pick file", VAL_OK_BUTTON, 0, 0, 1, 1, fileName); SetCtrlVal(panel, control, fileName); break; case RUN_EXTPRG_ROD_FILE: GetCtrlVal(global.panel.commandListEdit, CLIST_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) sprintf(fileName,"*.bin"); status = FileSelectPopup (subdir, fileName, "*.bin", "Pick file", VAL_OK_BUTTON, 1, 0, 1, 1, fileName); SetCtrlVal(panel, control, &fileName[strlen(subdir)]); break; default: break; } } return 0; } /****************************************************************************** * Static functions * ******************************************************************************/ /*============================================================================= * outFile() *============================================================================= * * Select output file name - rod subdirectory. * */ 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.commandListEdit, CLIST_EDIT_SLOT_NUMBER,&slotNumber); if(slotNumber==0){ strcpy(subdir, global.rodGeneralDataDir); }else{ strcpy(subdir, global.rodDataDir[HOST_INDEX(slotNumber)]); } /* directory restricted to rod subdirectory !! */ 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() *============================================================================= * * Select input file name - any directory. * */ static ERROR_ID inFile(int panel, int fileControl, int dataLengthControl, int elementSize, char defaultDir[]){ 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(defaultDir, 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); return(1); } errorId=getFileSize(fileName, &fileSize); ERROR_CHECK(errorId, getFileSize()); if(errorId!=SUCCESS) return(errorId); SetCtrlVal(panel, fileControl, fileName); if((fileSize%elementSize)!=0){ status=MessagePopup ("WARNING", "FileSize not aligned on ElementSize boundary!!"); UIR_STATUS_CHECK(status, MessagePopup()); } SetCtrlVal(panel, dataLengthControl, (unsigned int)((fileSize/elementSize)*elementSize)); return(SUCCESS); } /******************************************************************************/