132 lines
2.1 KiB
C++
132 lines
2.1 KiB
C++
#include "beep.h"
|
|
#include "QTimer"
|
|
#include "QThread"
|
|
beep::beep(QObject *parent) : QObject(parent)
|
|
{
|
|
/* 开发板的 LED 控制接口 */
|
|
file.setFileName("/sys/devices/platform/leds/leds/beep/brightness");
|
|
if (!file.exists())
|
|
{
|
|
qWarning()<<"beep init Fail!!"<<endl;
|
|
return ;
|
|
}
|
|
|
|
set_state(false);
|
|
state = get_state();
|
|
|
|
// 在启动此对象时自动鸣叫两次
|
|
delay_on_ms = 100;
|
|
delay_off_ms =100;
|
|
ticks = 2;
|
|
is_run = true;
|
|
}
|
|
|
|
|
|
|
|
bool beep::get_state()
|
|
{
|
|
if(!file.exists())
|
|
return false;
|
|
if(!file.open(QIODevice::ReadWrite))
|
|
qWarning()<<file.errorString();
|
|
QTextStream in(&file);
|
|
|
|
QString buf = in.readLine();
|
|
|
|
file.close();
|
|
if(buf == "1")
|
|
{
|
|
state = true;
|
|
}
|
|
else
|
|
{
|
|
state = false;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
// 控制蜂鸣器,用户程序一般不直接调用
|
|
bool beep::set_state(bool state)
|
|
{
|
|
if (!file.exists())
|
|
return false;
|
|
if(!file.open(QIODevice::ReadWrite))
|
|
qWarning()<<file.errorString();
|
|
if(state)
|
|
{
|
|
file.write("1");
|
|
this->state = true;
|
|
}
|
|
else
|
|
{
|
|
file.write("0");
|
|
this->state = false;
|
|
}
|
|
file.close();
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
void beep::start()
|
|
{
|
|
QTimer::singleShot(0,this, &beep::run_cb);
|
|
}
|
|
|
|
|
|
bool beep::stop()
|
|
{
|
|
QMutexLocker locker(&lock);
|
|
is_run = false;
|
|
return true;
|
|
}
|
|
|
|
|
|
// 用户程序调用这个函数开启蜂鸣器
|
|
void beep::set_beep(int delay_on_ms,int delay_off_ms,int ticks)
|
|
{
|
|
|
|
this->delay_on_ms = delay_on_ms;
|
|
this->delay_off_ms =delay_off_ms;
|
|
this->ticks = ticks;
|
|
}
|
|
|
|
|
|
// 执行线程
|
|
void beep::run_cb()
|
|
{
|
|
while(is_run)
|
|
{
|
|
QMutexLocker locker(&lock);
|
|
while(ticks>0)
|
|
{
|
|
ticks--;
|
|
set_state(true);
|
|
QThread::msleep(delay_on_ms);
|
|
set_state(false);
|
|
QThread::msleep(delay_off_ms);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
beep *Beep(){
|
|
static beep *b=nullptr;
|
|
static QThread thread;
|
|
if(b==nullptr){
|
|
b=new beep();
|
|
b->moveToThread(&thread);
|
|
thread.start();
|
|
b->start();
|
|
}
|
|
return b;
|
|
}
|
|
|
|
|
|
|
|
|
|
|