105 lines
2.6 KiB
C
Raw Normal View History

2020-07-11 10:18:03 +08:00
/******************************************************************************
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(dev, motor, buzzer)<EFBFBD><EFBFBD><EFBFBD>(dev, motor, buzzer)<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
2020-12-04 20:53:54 +08:00
* Copyright (c) 2019, <morro_luo@163.com>
2020-07-11 10:18:03 +08:00
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2019-04-01 Morro Initial version
******************************************************************************/
#include "module.h" /*get_tick()*/
#include "blink.h"
#include <stddef.h>
#include <string.h>
static blink_dev_t *head = NULL; /*ͷ<><CDB7><EFBFBD><EFBFBD> -*/
/*
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>blink<EFBFBD>
* @param[in] dev - <EFBFBD>
* @param[in] ioctrl - IO<EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><EFBFBD><EFBFBD>
* @return none
*/
void blink_dev_create(blink_dev_t *dev, void (*ioctrl)(bool enable))
{
blink_dev_t *tail = head;
memset(dev, 0, sizeof(blink_dev_t));
dev->ioctrl = ioctrl;
dev->next = NULL;
if (head == NULL) {
head = dev;
return;
}
while (tail->next != NULL)
tail = tail->next;
tail->next = dev;
}
/*
* @brief blink <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] name - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] ontime - <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵΪ0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ùر<EFBFBD>)
* @param[in] offtime- <EFBFBD>ر<EFBFBD>ʱ<EFBFBD><EFBFBD>
* @param[in] repeats- <EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(0<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD>)
* @return none
*/
void blink_dev_ctrl(blink_dev_t *dev, int ontime, int offtime, int repeats)
{
dev->ontime = ontime;
2020-07-11 14:44:09 +08:00
dev->offtime = offtime + ontime;
2020-07-11 10:18:03 +08:00
dev->repeats = repeats;
dev->tick = get_tick();
dev->count = 0;
if (ontime == 0) {
dev->ioctrl(false);
dev->enable = false;
}
}
2021-03-07 18:40:49 +08:00
/*
* @brief æ<EFBFBD>ж<EFBFBD>
*/
bool blink_dev_busy(blink_dev_t *dev)
{
return dev->ontime;
}
2020-07-11 10:18:03 +08:00
/*
* @brief blink<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] none
* @return none
*/
void blink_dev_process(void)
{
blink_dev_t *dev;
for (dev = head; dev != NULL; dev = dev->next) {
if (dev->ontime == 0) {
continue;
} else if (get_tick() - dev->tick < dev->ontime) {
if (!dev->enable) {
dev->enable = true;
dev->ioctrl(true);
}
2021-03-07 18:40:49 +08:00
} else if(get_tick() - dev->tick < dev->offtime) {
2020-07-11 10:18:03 +08:00
if (dev->enable) {
dev->enable = false;
dev->ioctrl(false);
}
} else {
dev->tick = get_tick();
if (dev->repeats) {
if (++dev->count >= dev->repeats) {
dev->ontime = 0;
dev->ioctrl(false);
dev->enable = false;
}
}
}
}
}
2021-03-07 18:40:49 +08:00