当前位置: 首页>>代码示例>>C++>>正文


C++ Gpio::getType方法代码示例

本文整理汇总了C++中Gpio::getType方法的典型用法代码示例。如果您正苦于以下问题:C++ Gpio::getType方法的具体用法?C++ Gpio::getType怎么用?C++ Gpio::getType使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Gpio的用法示例。


在下文中一共展示了Gpio::getType方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: setStateRange

bool Gpio::setStateRange(int state, int startPin, int endPin)
{
	if (!mInit){
		fprintf(stderr, "GPIO not initialised\n");
		return false;
	}

	int pwmVal;
	if (state == 0)
		pwmVal = 0;
	else
		pwmVal = 100000;

	for (std::list<Gpio*>::iterator iter =
		mOutputList.begin(); iter != mOutputList.end(); iter++)
	{
		Gpio *obj = *iter;
		int pin = obj->getPin();
		if (obj->getType() == OUT_PIN && pin >= startPin && pin <= endPin)
			digitalWrite(obj->getPin(), state);
	}

	for (auto iter = mMonitorList.begin(); iter != mMonitorList.end(); iter++)
	{
		Gpio *obj = *iter;
		int pin = obj->getPin();
		if (obj->getType() == PWM && pin >= startPin && pin <= endPin){
			if (mLastValue[pin] != pwmVal)
				resetPwm(pin, pwmVal);
		}
	}

	return true;
}
开发者ID:scott-vincent,项目名称:pioscript,代码行数:34,代码来源:gpio.cpp

示例2: startMonitor

/**
 * Start a thread to constantly monitor all the input pins we are
 * interested in. When a state change is detected we store the
 * time of the change.  This creates a buffer so we can still see
 * changes that happened a short time ago (so we don't miss any).
 *
 * It also writes PWM outputs and is responsible for writing random
 * data, sine waves etc. to these outputs. 
 */
bool Gpio::startMonitor()
{
	if (!mInit){
		fprintf(stderr, "GPIO not initialised\n");
		return false;
	}

	// Do we have anything to monitor?
	if (mMonitorList.size() == 0)
		return true;

	bool usingPwm = false;
	for (auto iter = mMonitorList.begin(); iter != mMonitorList.end(); iter++)
	{
		Gpio *obj = *iter;
		int pin = obj->getPin();

		if (obj->getType() == PWM){
			// Don't start outputting PWM until we execute a relevant command
			mMonType[pin] = INACTIVE;
			mMonMutex[pin] = PTHREAD_MUTEX_INITIALIZER;

			// Set to full range initially (range map is in millis)
			mRangeMapMin[pin] = 0;
			mRangeMapMax[pin] = 100000;
			usingPwm = true;
		}
		else {
			// Input pins are always monitored
			initMonitorInput(pin);
		}
	}

	if (usingPwm){
		// Start ServoBlaster. We use this instead of hardware
		// PWM as there is only one hardware PWM pin on the Pi
		// and hardware PWM interferes with analog audio.
		if (!startServoBlaster())
			return false;
	}

	// Start monitor thread
	if (pthread_create(&mMonitorId, NULL, monitor, NULL) != 0){
		fprintf(stderr, "** Failed to start gpio monitor\n");
		return false;
	}

	// Wait for monitor to start
	for (int retries = 0; retries < 15; retries++){
		if (mMonitorRunning)
			return true;

		Engine::sleep(200);
	}

	printf("** Failed to start gpio monitor\n");
	return false;
}
开发者ID:scott-vincent,项目名称:pioscript,代码行数:67,代码来源:gpio.cpp

示例3: startServoBlaster

bool Gpio::startServoBlaster()
{
	// Stop ServoBlaster if it's already running
	mServoBlasterPid = Engine::findProcess(SB_COMMAND);
	if (mServoBlasterPid != -1)
		stopServoBlaster();

	if (Engine::displayOn)
		printf("Starting ServoBlaster (%s)\n", SB_COMMAND);

	mServoBlasterPid = fork();
	if (mServoBlasterPid == -1){
		fprintf(stderr, "** Failed to create ServoBlaster process\n");
		return false;
	}

	if (mServoBlasterPid != 0){
		// This is the parent process

		// Make sure ServoBlaster started
		int status;
		for (int retries = 0; retries < 15; retries++){
			if (waitpid(mServoBlasterPid, &status, WNOHANG) != -1){
				sleep(1);
				mServoBlasterOut = open(SB_DEVICE, O_WRONLY|O_SYNC);
				if (mServoBlasterOut == -1){
					fprintf(stderr, "** Failed to open %s\n", SB_DEVICE);
					return false;
				}
				return true;
			}

			Engine::sleep(200);
		}
		fprintf(stderr, "ServoBlaster failed to start\n");
		return false;
	}

	// Make ServoBlaster use same pin mapping as wiringPi.
	// We are mapping wiringPi pin number to physical pin number.
	const int pinMap[] = {11,12,13,15,16,18,22,7,3,5,24,26,19,21,23,8,10};
	int servoBlasterPin[MAX_PWM_PINS];

	// ServoBlaster needs to know which pins we are using for PWM
	for (int i = 0; i < MAX_PWM_PINS; i++)
		servoBlasterPin[i] = 0;

	for (auto iter = mMonitorList.begin(); iter != mMonitorList.end(); iter++)
	{
		Gpio *obj = *iter;
		if (obj->getType() == PWM){
			int pin = obj->getPin();
			servoBlasterPin[pin] = pinMap[pin];
		}
	}

	// First arg is the pin list
	char argv1[256];
	sprintf(argv1, "--p1pins=%d", servoBlasterPin[0]);
	char addStr[64];
	for (int i = 1; i < MAX_PWM_PINS; i++){
		sprintf(addStr, ",%d", servoBlasterPin[i]);
		strcat(argv1, addStr);
	}

	// Second arg is the cycle time
	char argv2[256];
	sprintf(argv2, "--cycle-time=%dus", SB_CYCLE_TIME);

	const char *argv[16];
	argv[0] = SB_COMMAND;
	argv[1] = argv1;
	argv[2] = argv2;
	for (int i = 0;; i++){
		argv[i+3] = SB_PARAMS[i];
		if (SB_PARAMS[i] == NULL)
			break;
	}

	// redirect stdout and stderr
	freopen("/tmp/servoblaster.log", "w", stdout);
	freopen("/tmp/servoblaster.log", "w", stderr);

	// Try from current dir first
	char command[256];
	sprintf(command, "./%s", SB_COMMAND);
	execv(command, (char* const*)argv);
	// execv only returns if an error occurs

	// Now try from PATH
	execvp(SB_COMMAND, (char* const*)argv);
	// execv only returns if an error occurs

	fprintf(stderr, "** Failed to start ServoBlaster using command:\n");
	fprintf(stderr, "%s", SB_COMMAND);
	for (int i = 0; argv[i] != NULL; i++)
		fprintf(stderr, " %s", argv[i]);

	fprintf(stderr, "\n");
	return true;
//.........这里部分代码省略.........
开发者ID:scott-vincent,项目名称:pioscript,代码行数:101,代码来源:gpio.cpp


注:本文中的Gpio::getType方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。