/*
* Copyright (c) 2006-2020, Sunwancn(bwsheng2000@163.com)
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2020-02-14 Sunwancn the first version
*/
#include <rtdevice.h>
#include <rtthread.h>
#include <beep.h>
#ifdef PKG_USING_BEEP
#if !defined(PKG_BEEP_THREAD_STACK_USING_HEAP)
ALIGN(RT_ALIGN_SIZE)
static char beep_thread_stack[PKG_BEEP_THREAD_STACK_SIZE];
static struct rt_thread beep_thread_struct = {0};
#endif /* !defined(PKG_BEEP_THREAD_STACK_USING_HEAP) */
static struct beep_struct beep_data = {0};
static rt_thread_t beep_thread = RT_NULL;
#ifdef PKG_BEEP_PASSIVE_BUZZER
static void beep_set(void);
#endif
static void beep_on(void);
static void beep_off(void);
static void beep_thread_entry(void *parameter);
#if defined(PKG_BEEP_PASSIVE_BUZZER) && defined(PKG_BEEP_SUPPORT_PM_RUN_FREQ_CHANGE)
int pm_run_freq_change(const struct rt_device *device, rt_uint8_t mode)
{
if (&beep_data.pwm_dev->parent == device)
{
beep_set();
}
return RT_EOK;
}
static struct rt_device_pm_ops beep_pm_ops =
{
RT_NULL,
RT_NULL,
pm_run_freq_change
};
#endif /* defined(PKG_BEEP_PASSIVE_BUZZER) && defined(PKG_BEEP_SUPPORT_PM_RUN_FREQ_CHANGE) */
/***************************************************************************************************
* @fn beep_init
*
* @brief 初始化
*
* @param pin - 蜂鸣器驱动引脚,可查看drv_gpio.c,或使用GET_PIN()宏
* reset_level - 蜂鸣器关断时引脚电平,PIN_LOW或PIN_HIGH
*
***************************************************************************************************/
void beep_init(rt_base_t pin, rt_base_t reset_level)
{
#ifdef PKG_BEEP_PASSIVE_BUZZER
(void)pin;
(void)reset_level;
beep_data.pwm_dev = (struct rt_device_pwm *)rt_device_find(PKG_BEEP_PWM_DEV_NAME);
RT_ASSERT(beep_data.pwm_dev);
beep_data.freq = PKG_BEEP_DEFAULT_FREQ;
#ifdef PKG_BEEP_SUPPORT_PM_RUN_FREQ_CHANGE
rt_pm_device_register(&beep_data.pwm_dev->parent, &beep_pm_ops);
#endif /* PKG_BEEP_SUPPORT_PM_RUN_FREQ_CHANGE */
beep_set();
#else /* PKG_BEEP_ACTIVE_BUZZER */
rt_pin_write(pin, reset_level);
rt_pin_mode(pin, PIN_MODE_OUTPUT);
beep_data.pin = pin;
beep_data.pin_reset_level = reset_level
10-25
634
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交