/** * @file LED_ATY.c * * @param Project DEVICE_GENERAL_ATY_LIB * * @author ATY * * @copyright * - Copyright 2017 - 2026 MZ-ATY * - This code follows: * - MZ-ATY Various Contents Joint Statement - * * https://mengze.top/MZ-ATY_VCJS * - CC 4.0 BY-NC-SA - * * https://creativecommons.org/licenses/by-nc-sa/4.0/ * - Your use will be deemed to have accepted the terms of this statement. * * @brief functions of LED blink for C platform * * @version * - 1_01_220901 > ATY * -# Preliminary version, first Release * - 1_02_231229 > ATY * -# change struct to dev type * - 1_03_240111 > ATY * -# add lock * - 1_04_251114 > ATY * -# remove breath type ******************************************************************************** */ #ifndef __LED_ATY_C #define __LED_ATY_C #include "LED_ATY.h" #define LED_ATY_TAG "\r\n[LED_ATY] " /******************************* For user *************************************/ /******************************************************************************/ /** * @brief set sysled blink ledBlinkType * * @param dev device * @return uint8_t * @note put this function at timer IT callback * level H LED off, level L LED on * @note 0x01: light on and off cycle 0x10: light on and off cycle long time ver 0x02: light on blink twice 0x20: light off blink twice 0x03: light on blink thrice 0x30: light off blink thrice */ uint8_t SysLedBlink(struct LED_ATY_Dev* dev){ static uint8_t ledBlinkLastType = 0; __ATY_LOCK(dev); if(ledBlinkLastType != dev->ledBlinkType){ ledBlinkLastType = dev->ledBlinkType; dev->ledBlinkStep = 0; } if(dev->ledBlinkType == 0x00){ dev->ledBlinkStep = 0; dev->ioSet(__ATY_HL_H); } else if(dev->ledBlinkType == 0x01){ if(dev->ledBlinkStep == 0){ dev->ledBlinkStep = 1; dev->ioSet(__ATY_HL_L); } else if(dev->ledBlinkStep != 0){ dev->ledBlinkStep = 0; dev->ioSet(__ATY_HL_H); printf_ATY_D("%sSysLed Blink.", LED_ATY_TAG); } } else if(dev->ledBlinkType == 0x10){ dev->ledBlinkStep++; if(dev->ledBlinkStep < 10) dev->ioSet(__ATY_HL_L); else if(dev->ledBlinkStep >= 10 && dev->ledBlinkStep < 20) dev->ioSet(__ATY_HL_H); else{ dev->ledBlinkStep = 0; } } // Type 2 & 3 put at short timer is better, like 100ms else if(dev->ledBlinkType == 0x02){ if(dev->ledBlinkStep == 0){ dev->ledBlinkStep = 1; dev->ioSet(__ATY_HL_L); } else if(dev->ledBlinkStep == 1){ dev->ledBlinkStep = 2; dev->ioSet(__ATY_HL_H); } else if(dev->ledBlinkStep == 2){ dev->ledBlinkStep = 3; dev->ioSet(__ATY_HL_L); } else if(dev->ledBlinkStep == 3){ dev->ledBlinkStep = 4; dev->ioSet(__ATY_HL_H); } else if((dev->ledBlinkStep >= 4) && (dev->ledBlinkStep < dev->longSteps)){ dev->ledBlinkStep++; } else if(dev->ledBlinkStep == dev->longSteps){ dev->ledBlinkStep = 0; printf_ATY_D("%sSysLed Blink.", LED_ATY_TAG); } } else if(dev->ledBlinkType == 0x20){ if(dev->ledBlinkStep == 0){ dev->ledBlinkStep = 1; dev->ioSet(__ATY_HL_H); } else if(dev->ledBlinkStep == 1){ dev->ledBlinkStep = 2; dev->ioSet(__ATY_HL_L); } else if(dev->ledBlinkStep == 2){ dev->ledBlinkStep = 3; dev->ioSet(__ATY_HL_H); } else if(dev->ledBlinkStep == 3){ dev->ledBlinkStep = 4; dev->ioSet(__ATY_HL_L); } else if((dev->ledBlinkStep >= 4) && (dev->ledBlinkStep < dev->longSteps)){ dev->ledBlinkStep++; } else if(dev->ledBlinkStep == dev->longSteps){ dev->ledBlinkStep = 0; printf_ATY_D("%sSysLed Blink.", LED_ATY_TAG); } } else if(dev->ledBlinkType == 0x03){ if(dev->ledBlinkStep == 0){ dev->ledBlinkStep = 1; dev->ioSet(__ATY_HL_L); } else if(dev->ledBlinkStep == 1){ dev->ledBlinkStep = 2; dev->ioSet(__ATY_HL_H); } else if(dev->ledBlinkStep == 2){ dev->ledBlinkStep = 3; dev->ioSet(__ATY_HL_L); } else if(dev->ledBlinkStep == 3){ dev->ledBlinkStep = 4; dev->ioSet(__ATY_HL_H); } else if(dev->ledBlinkStep == 4){ dev->ledBlinkStep = 5; dev->ioSet(__ATY_HL_L); } else if(dev->ledBlinkStep == 5){ dev->ledBlinkStep = 6; dev->ioSet(__ATY_HL_H); } else if((dev->ledBlinkStep >= 6) && (dev->ledBlinkStep < dev->longSteps)){ dev->ledBlinkStep++; } else if(dev->ledBlinkStep == dev->longSteps){ dev->ledBlinkStep = 0; printf_ATY_D("%sSysLed Blink.", LED_ATY_TAG); } } else if(dev->ledBlinkType == 0x30){ if(dev->ledBlinkStep == 0){ dev->ledBlinkStep = 1; dev->ioSet(__ATY_HL_H); } else if(dev->ledBlinkStep == 1){ dev->ledBlinkStep = 2; dev->ioSet(__ATY_HL_L); } else if(dev->ledBlinkStep == 2){ dev->ledBlinkStep = 3; dev->ioSet(__ATY_HL_H); } else if(dev->ledBlinkStep == 3){ dev->ledBlinkStep = 4; dev->ioSet(__ATY_HL_L); } else if(dev->ledBlinkStep == 4){ dev->ledBlinkStep = 5; dev->ioSet(__ATY_HL_H); } else if(dev->ledBlinkStep == 5){ dev->ledBlinkStep = 6; dev->ioSet(__ATY_HL_L); } else if((dev->ledBlinkStep >= 6) && (dev->ledBlinkStep < dev->longSteps)){ dev->ledBlinkStep++; } else if(dev->ledBlinkStep == dev->longSteps){ dev->ledBlinkStep = 0; printf_ATY_D("%sSysLed Blink.", LED_ATY_TAG); } } __ATY_UNLOCK(dev); return 0; } #endif /* __LED_ATY_C */ /************************************ etc *************************************/ /* init */ // Sysled ---------------------------------------------------------------------- // #include "LED_ATY.h" // void SysLed_1_IO_SET(uint8_t level){ // if(level) // HAL_GPIO_WritePin(SYSLED_GPIO_Port, SYSLED_Pin, GPIO_PIN_SET); // else // HAL_GPIO_WritePin(SYSLED_GPIO_Port, SYSLED_Pin, GPIO_PIN_RESET); // } // struct LED_ATY_Dev LED_ATY_t_1 = { // .ledBlinkStep = 0, // .ledBlinkType = 0x20, // .ioSet = SysLed_1_IO_SET, // .longSteps = 20, // .lock = __ATY_UNLOCKED // }; /* use */ // SysLedBlink(&LED_ATY_t_1); // put at 1ms cycle // LED_ATY_t_1.ledBlinkType = 0x02; /******************************************************************************/ /******************************** End Of File *********************************/