Files
checker_host/base/beep.cpp

132 lines
2.1 KiB
C++
Raw Normal View History

#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;
}