void NetShrVarInterface::connectVars()
{
	int error;
	CallbackData* cb_data;
	int waitTime = 3000;
	int clientBufferMaxItems = 200;
#ifdef _WIN32
    int running = 0;
    error = CNVVariableEngineIsRunning(&running); 
	ERROR_CHECK("CNVVariableEngineIsRunning", error);
    if (running == 0)
    {
		std::cerr << "connectVars: Variable engine is not running" << std::endl;
    }
#endif
	for(params_t::const_iterator it=m_params.begin(); it != m_params.end(); ++it)
	{
		NvItem* item = it->second;
	    cb_data = new CallbackData(this, item->nv_name, item->id);
		
		// check variable exists and create if not???
		
		// create either reader or buffered reader
		std::cerr << "connectVars: connecting to \"" << item->nv_name << "\"" << std::endl;
		if (item->access & NvItem::Read)
		{
	        error = CNVCreateSubscriber(item->nv_name.c_str(), DataCallback, StatusCallback, cb_data, waitTime, 0, &(item->subscriber));
	        ERROR_CHECK("CNVCreateSubscriber", error);
		}
		else if (item->access & NvItem::BufferedRead)
		{
	        error = CNVCreateBufferedSubscriber(item->nv_name.c_str(), StatusCallback, cb_data, clientBufferMaxItems, waitTime, 0, &(item->b_subscriber));
	        ERROR_CHECK("CNVCreateBufferedSubscriber", error);
		}
		// create either writer or buffered writer
		if (item->access & NvItem::Write)
		{
	        error = CNVCreateWriter(item->nv_name.c_str(), StatusCallback, cb_data, waitTime, 0, &(item->writer));
	        ERROR_CHECK("CNVCreateWriter", error);
		}
		else if (item->access & NvItem::BufferedWrite)
		{
	        error = CNVCreateBufferedWriter(item->nv_name.c_str(), DataTransferredCallback, StatusCallback, cb_data, clientBufferMaxItems, waitTime, 0, &(item->b_writer));
	        ERROR_CHECK("CNVCreateBufferedWriter", error);
		}
	}
}
Exemplo n.º 2
0
int CVICALLBACK threadFunc (void *functionData)
{
  char textline[1024];
  volatile int stop = 0, loop = 0;
  double value = 0.0;
  CNVBufferedWriter    bufferedWriter;
  CNVData data = 0;
  
  int error;
  char buffer[MAX_PATHNAME_LEN];
  
  // wait for tread lock
  CmtGetLock (lock);
  // release the lock
  CmtReleaseLock (lock);
  
  status = 2; // run while loop
  SetCtrlVal (panelHandle, PANEL_STATUS, status);
  
  SetCtrlVal(panelHandle, PANEL_TEXTSTRING, "Nice! thread() has been started!");
  Delay (1.0);
  
  error = NetworkVariablePopup (buffer);
  if (error < 0)
  {
    MessagePopup ("Error", GetGeneralErrorString(error));
    return 0;
  }
  else if (error > 0)
  {
    SetCtrlVal (panelHandle, PANEL_NAME, buffer);
    SetWaitCursor (1);
    error = CNVCreateBufferedWriter (buffer, DataTransferredCallback, StatusCallback, 0, 10, 10000, 0, &bufferedWriter);
    SetWaitCursor (0);
    if (error < 0)
    {
      MessagePopup ("Error", CNVGetErrorDescription(error));
      return 0;
    }
    else
    {
      SetCtrlVal (panelHandle, PANEL_CNVSTATUS, "Connected");
    }   
  }
  
  CNVCreateScalarDataValue (&data, CNVDouble, value);
  
  while (stop == 0)
  {
    SetCtrlVal (panelHandle, PANEL_LED, 0);
    GetCtrlVal (panelHandle, PANEL_STOPBUTTON, &stop);
    Delay (0.2);
    sprintf (textline, "%i, %i", loop++, stop);
    SetCtrlVal (panelHandle, PANEL_TEXTSTRING, textline);
    value = loop;
    CNVSetScalarDataValue (data, CNVDouble, value);
    CNVPutDataInBuffer (bufferedWriter, data, CNVDoNotWait);
  }
  
  SetCtrlVal(panelHandle, PANEL_TEXTSTRING, "Nice! thread() has been stopped!");
  Delay (1.0);
  
  CNVDisposeData (data);
  CNVDispose (bufferedWriter);
  CNVFinish ();
  
  status = 3; // exit threadFunc()
  SetCtrlVal (panelHandle, PANEL_STATUS, status);
  
  return 0;
}