/** * @file LED_ATY.c * * @param Project DEVICE_GENERAL_ATY_LIB * * @author ATY * * @copyright * - Copyright 2017 - 2023 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 for all embedded device * * @version * - 1_01_220901 > ATY * -# Preliminary version, first Release * - 1_02_231229 > ATY * -# change struct to dev type * - 1_01_240111 > ATY * -# add lock ******************************************************************************** */ #ifndef __LED_ATY_C #define __LED_ATY_C #include "LED_ATY.h" /******************************* For user *************************************/ /******************************************************************************/ /** * @brief set sysled blink ledBlinkType * * @param dev device * @return uint8_t * @note put this function at timer IT callback, change * @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 0x40: breath // not recommended to use * @note if(ledBlinkType - 40 >= 10) at large time cycle if(ledBlinkType - 40 < 10) at small time cycle(breath type is 40-49) */ 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 == 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); if(dev->debugEnable == 1) dev->LOG("\r\nSysLed Blink."); } } 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; if(dev->debugEnable == 1) dev->LOG("\r\nSysLed Blink."); } } 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; if(dev->debugEnable == 1) dev->LOG("\r\nSysLed Blink."); } } 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; if(dev->debugEnable == 1) dev->LOG("\r\nSysLed Blink."); } } 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; if(dev->debugEnable == 1) dev->LOG("\r\nSysLed Blink."); } } else if(dev->ledBlinkType == 0x40) // put at 1ms cycle, cycle more faster, led animation more breathly { static uint16_t cycleCount = 0; if(cycleCount < dev->onePulseCount) cycleCount++; else cycleCount = 0; dev->ledBlinkStep++; // UartSendFloatStr(cycleCount); if(dev->ledBlinkStep < dev->flowCycleCount){ if(cycleCount < (dev->onePulseCount * dev->ledBlinkStep / dev->flowCycleCount)) dev->ioSet(_ATY_HL_H); else dev->ioSet(_ATY_HL_L); } else if(dev->ledBlinkStep >= dev->flowCycleCount && dev->ledBlinkStep < dev->flowCycleCount * 2){ if(cycleCount < (dev->onePulseCount * (dev->ledBlinkStep - dev->flowCycleCount) / dev->flowCycleCount)) dev->ioSet(_ATY_HL_L); else dev->ioSet(_ATY_HL_H); } if(dev->ledBlinkStep >= dev->flowCycleCount * 2) dev->ledBlinkStep = 0; } __ATY_UNLOCK(dev); return 0; } #endif /* __LED_ATY_C */ /************************************ etc *************************************/ /* init */ // void SysLed_1_IO_SET_L(void){ GPIO_SET_L(SYSLED_GPIO_Port, SYSLED_Pin); } // void SysLed_1_IO_SET_H(void){ GPIO_SET_H(SYSLED_GPIO_Port, SYSLED_Pin); } // struct LED_ATY_Dev LED_ATY_t_1 = { // .ledBlinkStep = 0, // .ledBlinkType = 0x01, // .ioSetL = SysLed_1_IO_SET_L, // .ioSetH = SysLed_1_IO_SET_H, // .longSteps = 20, // .lock = _ATY_UNLOCKED, // .debugEnable = 0, // .LOG = printf}; // struct LED_ATY_Dev LED_ATY_t_1 = { // .ledBlinkStep = 0, // .ledBlinkType = 0x40, // .ioSetL = SysLed_1_IO_SET_L, // .ioSetH = SysLed_1_IO_SET_H, // .longSteps = 20, // .flowCycleCount = 60000, // .onePulseCount = 60, // .lock = _ATY_UNLOCKED, // .debugEnable = 0, // .LOG = printf}; /* use */ // SysLedBlink(&LED_ATY_t_1); // put at 1ms cycle /******************************************************************************/ /******************************** End Of File *********************************/