-
-#if defined(RESET_TOGGLES_LIBUSB_COMPAT) || defined(__DOXYGEN__)
-/** Checks the state of the system status register MCUSR and indicates via a flag if
- * the current AVRISP driver compatibility mode needs to be reset.
- *
- * When the \c RESET_TOGGLES_LIBUSB_COMPAT compile time option is enabled, pulling
- * the reset line of the AVR low will toggle between Jungo and libUSB compatibility
- * modes. Other forms of reset (such as power on or watchdog) will not force a mode
- * change.
- */
-void CheckExternalReset(void)
-{
- /* If an external reset occurred, we need to change compatibility mode */
- AVRISP_NeedCompatibilitySwitch = (MCUSR == (1 << EXTRF));
-
- MCUSR = 0;
-}
-
-/** Updates the device descriptors so that the correct compatibility mode is used
- * when the \c RESET_TOGGLES_LIBUSB_COMPAT compile time option is enabled. This
- * configures the programmer for either Jungo or libUSB driver compatibility. Each
- * time the AVR is reset via pulling the reset line low the compatibility mode will
- * be toggled. The current mode is stored in EEPROM and preserved through power
- * cycles of the AVR.
- */
-void UpdateCurrentCompatibilityMode(void)
-{
- /* Load the current IN endpoint address stored in EEPROM */
- AVRISP_CurrDataINEndpointAddress = eeprom_read_byte(&AVRISP_CurrDataINEndpointAddress_EEPROM);
-
- /* Check if we need to switch compatibility modes */
- if (AVRISP_NeedCompatibilitySwitch)
- {
- /* Toggle between compatibility modes */
- AVRISP_CurrDataINEndpointAddress = (AVRISP_CurrDataINEndpointAddress == AVRISP_DATA_IN_EPADDR_LIBUSB) ?
- AVRISP_DATA_IN_EPADDR_JUNGO : AVRISP_DATA_IN_EPADDR_LIBUSB;
-
- /* Save the new mode into EEPROM */
- eeprom_update_byte(&AVRISP_CurrDataINEndpointAddress_EEPROM, AVRISP_CurrDataINEndpointAddress);
- }
-
- LEDs_SetAllLEDs(LEDS_NO_LEDS);
-
- /* Validate IN endpoint address and indicate current mode via LED flashes */
- switch (AVRISP_CurrDataINEndpointAddress)
- {
- default:
- /* Default to Jungo compatibility mode if saved EEPROM is invalid */
- AVRISP_CurrDataINEndpointAddress = AVRISP_DATA_IN_EPADDR_JUNGO;
- case AVRISP_DATA_IN_EPADDR_JUNGO:
- /* Two flashes for Jungo compatibility mode */
- for (uint8_t i = 0; i < 4; i++)
- {
- LEDs_ToggleLEDs(LEDS_ALL_LEDS);
- Delay_MS(100);
- }
- break;
- case AVRISP_DATA_IN_EPADDR_LIBUSB:
- /* Five flashes for libUSB compatibility mode */
- for (uint8_t i = 0; i < 10; i++)
- {
- LEDs_ToggleLEDs(LEDS_ALL_LEDS);
- Delay_MS(100);
- }
- break;
- }
-
- Delay_MS(500);
-}
-#endif