/*! \fn activityDetectedRoutine(void) * \brief What to do when user activity has been detected */ void activityDetectedRoutine(void) { // Activate timers for automatic switch off & user interaction timeout activateTimer(TIMER_LIGHT, LIGHT_TIMER_DEL); activateTimer(TIMER_SCREEN, SCREEN_TIMER_DEL); activateTimer(SLOW_TIMER_LOCKOUT, getMooltipassParameterInEeprom(LOCK_TIMEOUT_PARAM)); activateTimer(TIMER_USERINT, ((uint16_t)controlEepromParameter(getMooltipassParameterInEeprom(USER_INTER_TIMEOUT_PARAM), MIN_USER_INTER_DEL/1000, MAX_USER_INTER_DEL/1000)) << 10); // If the screen was off, turn it on! if (oledIsOn() == FALSE) { oledOn(); screenComingOnDelay(); } // If we are in screen saver mode, exit it! if (screenSaverOn == TRUE) { screenSaverOn = FALSE; } // There are only lights in the Mooltipass standard version #if defined(HARDWARE_OLIVIER_V1) // If the lights were off, turn them on! if (areLightsOn == FALSE) { setPwmDc(MAX_PWM_VAL); activateGuardKey(); areLightsOn = TRUE; } #endif }
/*! \fn getTouchedPositionAnswer(uint8_t led_mask) * \brief Use the capacitive interface to get quarter position * \param led_mask Led mask for the touchdetection routine * \return Number between 0 and 5 for valid pos, -1 otherwise */ int8_t getTouchedPositionAnswer(uint8_t led_mask) { #ifdef HARDWARE_V1 _delay_ms(2000); #endif #if defined(ALWAYS_ACCEPT_REQUESTS) || defined(HARDWARE_V1) // First quarter is discarded, it means we want yes or no! if (led_mask & LED_MASK_WHEEL_TLEFT) { return TOUCHPOS_RIGHT; } else { return TOUCHPOS_WHEEL_TLEFT; } #endif RET_TYPE touch_detect_result; // Switch on lights activityDetectedRoutine(); // Clear possible remaining detection touchDetectionRoutine(led_mask); touchWaitForWheelReleased(); touchClearCurrentDetections(); // Wait for a touch press, delay stored in eeprom (1024 is quite close to 1000 ;-) ) activateTimer(TIMER_USERINT, ((uint16_t)controlEepromParameter(getMooltipassParameterInEeprom(USER_INTER_TIMEOUT_PARAM), MIN_USER_INTER_DEL/1000, MAX_USER_INTER_DEL/1000)) << 10); do { // User interaction timeout or smartcard removed if ((hasTimerExpired(TIMER_USERINT, TRUE) == TIMER_EXPIRED) || (isSmartCardAbsent() == RETURN_OK)) { return -1; } touch_detect_result = touchDetectionRoutine(led_mask) & TOUCH_PRESS_MASK; } while (!touch_detect_result); // Did the user press one of the two touch buttons? if (touch_detect_result & RETURN_LEFT_PRESSED) { return TOUCHPOS_LEFT; } else if (touch_detect_result & RETURN_RIGHT_PRESSED) { return TOUCHPOS_RIGHT; } else { return (int8_t)getWheelTouchDetectionQuarter(); } }