예제 #1
0
void *run(void *ptr_shared_data) {
	char cTmp[MAX_LINE];

	int l_change = 0;

	g_ptr_shared_data = (struct shared_data *) ptr_shared_data;
	// Initialize datarefs
	g_comFreq = g_ptr_shared_data->comFreq;

	last_mainloop_idle = sys_time_clock_get_time_usec();
	// while stop == 0 calculate position.
	while (g_ptr_shared_data->stop == 0) {
		long loop_start_time = sys_time_clock_get_time_usec();

		///////////////////////////////////////////////////////////////////////////
		/// CRITICAL FAST 20 Hz functions
		///////////////////////////////////////////////////////////////////////////
		if (us_run_every(50000, COUNTER3, loop_start_time)) {
			// read usb board values
			l_change = readDevice(&g_usb_data);
			// Update xplane
			updateHost();
			// Update board
			updateBoard();
		}
		///////////////////////////////////////////////////////////////////////////

		///////////////////////////////////////////////////////////////////////////
		/// NON-CRITICAL SLOW 10 Hz functions
		///////////////////////////////////////////////////////////////////////////
		else if (us_run_every(100000, COUNTER6, loop_start_time)) {
			//update_screen();
		}
		///////////////////////////////////////////////////////////////////////////

		if (loop_start_time - last_mainloop_idle >= 100000) {
			writeLog("CRITICAL WARNING! CPU LOAD TOO HIGH.\n");
			last_mainloop_idle = loop_start_time;//reset to prevent multiple messages
		} else {
			//writeConsole(0, 0, "CPU LOAD OK.");
		}

		// wait 1 milliseconds
#if IBM
		Sleep(1);
#endif
#if LIN
		usleep(10);
#endif
		g_counter++;
	}
	sprintf(cTmp, "thread closing usb device %d...\n", 0);
	writeLog(cTmp);
	closeDevice();
	sprintf(cTmp, "thread info : stopping thread #%d, %d!\n",
			g_ptr_shared_data->thread_id, g_counter);
	writeLog(cTmp);
	pthread_exit(NULL);
	return 0;
}
예제 #2
0
//-----------------------------------------------------------------------------
void GuiEditor::valueChanged (CControl* control)
{
	//effect->setParameterAutomated (control->getTag (), control->getValue ());

	float value;
	int ival;
	const char* text;
	std::string result;
	char* tempt;

	switch (control->getTag())
	{

		case kBufferSize:
			((COptionMenu*)(control))->getCurrent(tempt);
			ival = ((COptionMenu*)(control))->getIndex(tempt);
			updateBufferSize(ival);
			break;
	
		case kGain:
			value = control->getValue();
			result = floatToString(value*maxGain);
			gainDisplay->setText(result.c_str());
			updateGain(value*maxGain);
			break;

		case kGainText:
			text = ((CTextEdit*)(control))->getText();
			value = charToFloat(text);
			gainFader->setValue(value/(float)maxGain);
			updateGain(value);
			break;

		case kXScale:
			value = control->getValue();
			result = floatToString(value*maxXScale);
			xScaleDisplay->setText(result.c_str());
			updateXScale(value*maxXScale);
			break;

		case kXScaleText:
			text = ((CTextEdit*)(control))->getText();
			value = charToFloat(text);
			xScaleFader->setValue(value/(float)maxXScale);
			updateXScale(value);
			break;

		case kYScale:
			value = control->getValue();
			result = floatToString(value*maxYScale);
			yScaleDisplay->setText(result.c_str());
			updateYScale(value*maxYScale);
			break;

		case kYScaleText:
			text = ((CTextEdit*)(control))->getText();
			value = charToFloat(text);
			yScaleFader->setValue(value/(float)maxYScale);
			updateYScale(value);
			break;

		case kResponse:
			value = control->getValue();
			result = floatToString(value);
			responseDisplay->setText(result.c_str());
			updateResponse(value);
			break;

		case kResponseText:
			text = ((CTextEdit*)(control))->getText();
			value = charToFloat(text);
			responseFader->setValue(value);
			updateResponse(value);
			break;

		case kBands:
			ival = (int)(control->getValue()*maxBands);
			result = intToString(ival);
			bandsDisplay->setText(result.c_str());
			bandsFader->setValue(((float)ival)/(float)maxBands);
			updateBands(ival);
			break;

		case kBandsText:
			text = ((CTextEdit*)(control))->getText();
			ival = charToInt(text);
			bandsFader->setValue((float)value/(float)maxBands);
			updateBands(ival);
			break;

		case kAmpScale:
			((COptionMenu*)(control))->getCurrent(tempt);
			ival = ((COptionMenu*)(control))->getIndex(tempt);
			updateAmpScale(ival);
			break;

		case kType:
			((COptionMenu*)(control))->getCurrent(tempt);
			ival = ((COptionMenu*)(control))->getIndex(tempt);
			updateType(ival);
			break;

		case kDisplay:
			((COptionMenu*)(control))->getCurrent(tempt);
			ival = ((COptionMenu*)(control))->getIndex(tempt);
			updateDisplayt(ival);
			break;

		case kResampling:
			((COptionMenu*)(control))->getCurrent(tempt);
			ival = ((COptionMenu*)(control))->getIndex(tempt);
			updateResampling(ival);
			break;

		case kFreqScale:
			((COptionMenu*)(control))->getCurrent(tempt);
			ival = ((COptionMenu*)(control))->getIndex(tempt);
			updateFreqScale(ival);
			break;



		case kAddress:
			text = ((CTextEdit*)(control))->getText();
			updateAddress(text);
			break;

		case kPort:
			text = ((CTextEdit*)(control))->getText();
			ival = charToInt(text);
			updatePort(ival);
			break;

		case kHost:
			text = ((CTextEdit*)(control))->getText();
			updateHost(text);
			break;
	}

}