Beispiel #1
0
static void 
bcmgpio_timercb (bcm_timer_id tid, int gpio_pin)
{
	unsigned long bitmask;

	if (bcmgpio_info[gpio_pin].strobing) {
		bitmask = (unsigned long) 1 << gpio_pin;

		bcmgpio_info[gpio_pin].timer_count++;

		if (bcmgpio_info[gpio_pin].timer_count == bcmgpio_info[gpio_pin].on_time) {
			bcmgpio_toggle (bitmask);
		}
		else if (bcmgpio_info[gpio_pin].timer_count > bcmgpio_info[gpio_pin].on_time) {
			if (bcmgpio_info[gpio_pin].timer_count == bcmgpio_info[gpio_pin].strobe_period) {
				bcmgpio_info[gpio_pin].timer_count = 0;

				if (bcmgpio_info[gpio_pin].tot_strobes > 0) {
					bcmgpio_info[gpio_pin].strobe_count++;

					if (bcmgpio_info[gpio_pin].strobe_count == bcmgpio_info[gpio_pin].tot_strobes) {
						bcmgpio_strobe_stop (gpio_pin);
						bcmgpio_out (bitmask, bcmgpio_info[gpio_pin].orig_state);
						if (bcmgpio_info[gpio_pin].strobe_done != NULL)
							*(bcmgpio_info[gpio_pin].strobe_done) = 1;
						return;
					}
				}

				bcmgpio_toggle (bitmask);
			}
		}
	}
}
Beispiel #2
0
static void
wps_gpio_led_multi_color_set_active(wps_blinktype_t blinktype)
{
	unsigned long led_mask;
	unsigned long value;
	int new_gpio_active, new_assertlvl_active;
	int old_gpio_active = BCMGPIO_UNDEFINED;
	int old_assertlvl_active = WPS_LED_ASSERTLVL;

	new_gpio_active = wps_led.gpio;
	new_assertlvl_active = wps_led.assertlvl;

	switch ((int)blinktype) {
	case WPS_BLINKTYPE_INPROGRESS: /* Multi-color yellow */
		if (wps_led.y_gpio != BCMGPIO_UNDEFINED) {
			new_gpio_active = wps_led.y_gpio;
			new_assertlvl_active = wps_led.y_assertlvl;
		}
		break;
	case WPS_BLINKTYPE_ERROR: /* Multi-color red */
	case WPS_BLINKTYPE_OVERLAP: /* Multi-color red */
		if (wps_led.r_gpio != BCMGPIO_UNDEFINED) {
			new_gpio_active = wps_led.r_gpio;
			new_assertlvl_active = wps_led.r_assertlvl;
		}
		break;
	case WPS_BLINKTYPE_SUCCESS: /* Multi-color green */
		if (wps_led.g_gpio != BCMGPIO_UNDEFINED) {
			new_gpio_active = wps_led.g_gpio;
			new_assertlvl_active = wps_led.g_assertlvl;
		}
		break;
	default:
		new_gpio_active = BCMGPIO_UNDEFINED;
		new_assertlvl_active = WPS_LED_ASSERTLVL;
		break;
	}

	if (wps_led.gpio_active != new_gpio_active) {
		old_gpio_active = wps_led.gpio_active;
		old_assertlvl_active = wps_led.assertlvl_active;
	}

	/* change active led first */
	wps_led.gpio_active = new_gpio_active;
	wps_led.assertlvl_active = new_assertlvl_active;

	/* then off old active led */
	if (old_gpio_active == BCMGPIO_UNDEFINED)
		return;

	led_mask = ((unsigned long)1 << old_gpio_active);
	value = ((unsigned long) ~old_assertlvl_active << old_gpio_active);
	value &= led_mask;
	bcmgpio_out(led_mask, value);

	return;
}
Beispiel #3
0
static void
wps_gpio_led_on()
{
	unsigned long led_mask;
	unsigned long value;

	if (wps_led.gpio_active == BCMGPIO_UNDEFINED)
		return;

	led_mask = ((unsigned long)1 << wps_led.gpio_active);
	value = ((unsigned long) wps_led.assertlvl_active << wps_led.gpio_active);
	bcmgpio_out(led_mask, value);
}
Beispiel #4
0
static void
wps_gpio_led_off(int gpio_active, int assertlvl_active)
{
	unsigned long led_mask;
	unsigned long value;

	if (gpio_active == BCMGPIO_UNDEFINED)
		return;

	led_mask = ((unsigned long)1 << gpio_active);
	value = ((unsigned long) ~assertlvl_active << gpio_active);
	value &= led_mask;

	bcmgpio_out(led_mask, value);
}