// ----------------------------------------------------------------------------- /// @file hsb-mrts.c /// @brief Description // ----------------------------------------------------------------------------- // Micro-Key bv // Industrieweg 28, 9804 TG Noordhorn // Postbus 92, 9800 AB Zuidhorn // The Netherlands // Tel: +31 594 503020 // Fax: +31 594 505825 // Email: support@microkey.nl // Web: www.microkey.nl // ----------------------------------------------------------------------------- /// $Revision$ /// $Author$ /// $Date$ // (c) 2017 Micro-Key bv // ----------------------------------------------------------------------------- /// @file hsb-mrts.c /// @ingroup {group_name} // ----------------------------------------------------------------------------- // Include files // ----------------------------------------------------------------------------- #include #include #include "hsb-mrts.h" #include "ADConverter.h" #include "ADConverters.h" #include "DAConverter.h" #include "DAConverters.h" #include "Display.h" #include "Error.h" #include "Warning.h" #include "platform.h" #include "CoverSolenoid.h" #include "HighVoltageDetection.h" #include "Interlock.h" #include "Logger.h" #include "PCBA.h" #include "TeslaGunSafety.h" #include "Version.h" // ----------------------------------------------------------------------------- // Constant and macro definitions // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // Type definitions // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // File-scope variables // ----------------------------------------------------------------------------- static bool _hsb_safetyIsEnabled = false; // ----------------------------------------------------------------------------- // Function declarations // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // Function definitions // ----------------------------------------------------------------------------- ErrorStatus hsb_generateStartScreen(struct Display* Display) { ErrorStatus returnValue = SUCCESS; if (returnValue == SUCCESS) { Display_setCursorToPosition(mainDisplay, 1, 1); vTaskDelay(10); returnValue = Display_write(mainDisplay, PCBA_getInstance()->name, 1, 1); } else { returnValue = ERROR; } if (returnValue == SUCCESS) { char buffer[20]; snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "SW V. %d.%d.%d.%d", Version_getInstance()->major, Version_getInstance()->minor, Version_getInstance()->branch, Version_getInstance()->patch); Display_writeCentered(mainDisplay, buffer, 3); } else { returnValue = ERROR; } return returnValue; } ErrorStatus hsb_enableSafetyWithError(void) { ErrorStatus returnValue = SUCCESS; // First, Lock the cover if (returnValue == SUCCESS) { CoverSolenoid_lock(); } if (returnValue == SUCCESS) { // Check for INTERLOCK CLOSE if (Interlock_isClosed(interlock)) { // Enable Interrupt for interlock switch Interlock_setEXTI(interlock, ENABLE); } else { Error_postError(INTERLOCK_COMMON_FAIL); returnValue = ERROR; } } if (returnValue == SUCCESS) { _hsb_safetyIsEnabled = true; } else { _hsb_safetyIsEnabled = false; } return returnValue; } ErrorStatus hsb_enableSafetyWithWarning(void) { ErrorStatus returnValue = SUCCESS; // First, Lock the cover if (returnValue == SUCCESS) { CoverSolenoid_lock(); } if (returnValue == SUCCESS) { // Check for INTERLOCK CLOSE if (Interlock_isClosed(interlock)) { // Enable Interrupt for interlock switch Interlock_setEXTI(interlock, ENABLE); } else { Warning_postWarning(WARNING_INTERLOCK_COMMON_FAIL); returnValue = ERROR; } } if (returnValue == SUCCESS) { // In case of a TESLA repair, release the teslaGunSafety if (PCBA_getInstance()->pcba == PCBA_Tesla) { TeslaGunSafety_release(); } } if (returnValue == SUCCESS) { _hsb_safetyIsEnabled = true; } else { _hsb_safetyIsEnabled = false; } return returnValue; } ErrorStatus hsb_disableSafety(void) { ErrorStatus returnValue = SUCCESS; if (PCBA_getInstance()->pcba == PCBA_Tesla) { TeslaGunSafety_block(); } // Power-down the DAC outputs DAConverter_setOutputVoltage(dacRow1, 0); DAConverter_setOutputVoltage(dacRow2, 0); DAConverter_setOutputVoltage(dacRow3, 0); char buffer[mainDisplay->displayDevice->parameters.numberOfColumns]; snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "WAITING FOR"); Display_write(mainDisplay, buffer, 3, 5); snprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), "POWER DOWN"); Display_write(mainDisplay, buffer, 4, 6); while (HighVoltageDetection_isVoltagePresent()) { vTaskDelay(100); } Display_clearLine(mainDisplay, 3); Display_clearLine(mainDisplay, 4); Interlock_setEXTI(interlock, DISABLE); _hsb_safetyIsEnabled = false; return returnValue; } bool hsb_safetyIsEnabled(void) { return _hsb_safetyIsEnabled; }