/// HIFN Creates a Sink VChan which may support multiple data types. Provide an array of dataTypes of DLDataTypes elements. SinkVChan_type* init_SinkVChan_type (char name[], DLDataTypes dataTypes[], size_t nDataTypes, void* VChanOwner, double readTimeout, VChanStateChangeCBFptr_type VChanStateChangeCBFptr) { SinkVChan_type* vchan = malloc(sizeof(SinkVChan_type)); if (!vchan) return NULL; // init vchan->dataTypes = NULL; // init base VChan type if (init_VChan_type ((VChan_type*) vchan, name, VChan_Sink, VChanOwner, (DiscardVChanFptr_type)discard_SinkVChan_type, (DisconnectVChanFptr_type)disconnectSinkVChan, VChanStateChangeCBFptr, (VChanIsConnectedFptr_type)SinkVChanIsConnected) < 0) goto Error; // INIT DATA vchan->sourceVChan = NULL; vchan->nDataTypes = nDataTypes; vchan->readTimeout = readTimeout; // copy data types vchan->dataTypes = malloc(nDataTypes * sizeof(DLDataTypes)); if (!vchan->dataTypes) goto Error; memcpy(vchan->dataTypes, dataTypes, nDataTypes*sizeof(DLDataTypes)); // init thread safe queue CmtNewTSQ(DEFAULT_SinkVChan_QueueSize, sizeof(DataPacket_type*), 0, &vchan->tsqHndl); // init write timeout (time to keep on trying to write a data packet to the queue) vchan->writeTimeout = DEFAULT_SinkVChan_QueueWriteTimeout; return vchan; Error: OKfree(vchan->dataTypes); discard_VChan_type ((VChan_type**)&vchan); // do this last return NULL; }
/* 按钮-Start-Btn */ int CVICALLBACK ControlShowingBtnCallback(int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ switch (event){ case EVENT_COMMIT: if(CPanels[0] <=0 && TPanels[0]<=0){ initChildPanels(); CmtNewTSQ(READ_LENGTH, sizeof(char), OPT_TSQ_DYNAMIC_SIZE, &tsqHdl); CmtInstallTSQCallback (tsqHdl, EVENT_TSQ_ITEMS_IN_QUEUE, READ_LENGTH, readDataAndPlot, NULL, CmtGetCurrentThreadID(), NULL); } int i; GetCtrlVal(panel, MainPanel_Signal_ID_List, &i); if(i == 6){ for(int j=0; j<validMonNum; j++) signalShowingStat[j] = 1;//temp signalShowingStat[j]==1?0:1; }else{ signalShowingStat[i] = signalShowingStat[i]==1?0:1; } if( isDataAcqRunning == 0) startDataAcq(); break; }//switch() return 0; }