/**
* @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 *********************************/