Пример #1
0
/// 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;
}