#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "qdatetime.h"
#include "qmessagebox.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(menuBar(), SIGNAL(triggered(QAction*)), this, SLOT(proc_menu_command(QAction*)));
m_nEvt_pipe_id = 0;
m_log.reserve(1024*10);
m_update_log = false;
m_t_UpdateUI_Timer=new QTimer(this);
m_t_UpdateUI_Timer->stop();
m_t_UpdateUI_Timer->setInterval (100) ;//设置定时周期,单位:毫秒
connect(m_t_UpdateUI_Timer,SIGNAL(timeout()),this,SLOT(on_updateui_timer()));
m_t_UpdateUI_Timer->start();
m_cfg_ctrl_dialog = new cls_ub_ctrl_dialog();
}
MainWindow::~MainWindow()
{
m_t_UpdateUI_Timer->stop();
stop_ub_pro();
delete ui;
}
void MainWindow::proc_menu_command(QAction *action)
{
if (action->objectName() == QString::fromLocal8Bit("action_menu_exit"))
{
qApp->exit();
}
else if (action->objectName() == QString::fromLocal8Bit("action_menu_about"))
{
QMessageBox::warning(this, QStringLiteral("关于"),QStringLiteral("关于usb电话录音拨号盒\r\n\r\nTel:13810450502"),QMessageBox::Ok | QMessageBox::Cancel);
}
else if (action->objectName() == QString::fromLocal8Bit("action_menu_ub_ctrl"))
{
m_cfg_ctrl_dialog->show_ub_ctrl();
m_cfg_ctrl_dialog->show();
}
}
void MainWindow::append_logout(std::string s_log)
{
if (s_log.empty()) return;
QDateTime current_date_time = QDateTime::currentDateTime();
std::string current_date = current_date_time.toString("yyyy.MM.dd hh:mm:ss.zzz ").toLocal8Bit().data();
std::lock_guard<std::mutex> s(m_mtx);
if (m_log.length() > 4096)
{
m_log = m_log.substr(0, 4096/2);
}
m_log = current_date + s_log + "\r\n" + m_log;
m_update_log = true;
}
void MainWindow::append_logout(const char* s_log)
{
if (!s_log) return;
append_logout((std::string)s_log);
}
void MainWindow::append_logout(QString s_log)
{
append_logout(s_log.toLocal8Bit().data());
}
void MainWindow::start_load_dev()
{
int ret = agi_ub_create(0, 0, 0);
if (ret != ERR_NO)
{
append_logout("设备未找到,请插入设备,系统会自动连接...");
}
else
{
append_logout("设备找到,正在连接,请稍后...");
}
}
void MainWindow::stop_load_dev()
{
append_logout("停止加载设备...");
agi_ub_destroy(0);
}
int MainWindow::start_ub_pro()
{
char szVer[1024] = { 0 };
//读取库版本号
agi_ub_version(szVer, 1024);
//全局初始化引擎
QJsonObject json_param;
json_param["encoding"] = "utf-8";//指定api调用时的汉字使用utf-8格式传入,比如播放路径带有汉字时
int ret = agi_ub_init(JsonToQstring(json_param).toStdString().c_str());
if (ret != ERR_NO)
{
append_logout((std::string("*启动usb语音盒引擎失败:") + szVer + "["+std::to_string(ret)+"]").c_str());
}
else
{
append_logout((std::string("->启动usb语音盒引擎成功:") + szVer).c_str());
//注册从子线程里回调事件通知函数,所有事件类别和账号事件都需要
//不建议使用回调方式获取事件,因为在子线程回调里不能直接操作UI
//agi_ub_evt_create_json_cb(func_evt_json_callback, this, "", "", "gbk");
//使用定时读取事件,和回调方式只需要一种就可以,所有事件类别和账号事件都需要,使用gbk编码返回事件内容,默认就是gbk
m_nEvt_pipe_id = agi_ub_evt_create_json_pipe("","","gbk");//"utf-8"
start_load_dev();
}
return ERR_NO;
}
int MainWindow::stop_ub_pro()
{
if (m_nEvt_pipe_id != 0)
{
agi_ub_evt_destroy_json_pipe(m_nEvt_pipe_id);
m_nEvt_pipe_id = 0;
}
stop_load_dev();
append_logout("停止usb语音盒引擎");
agi_ub_uninit();
return ERR_NO;
}
void MainWindow::on_btn_answer_clicked()
{
int nRet = agi_ub_answer("", 0);
if (nRet == ERR_NO)
{
append_logout(QStringLiteral("->应答"));
}
else
{
append_logout(QStringLiteral("***应答失败"));
}
}
void MainWindow::on_btn_hangup_clicked()
{
int nRet = agi_ub_hangup("");
if (nRet == ERR_NO)
{
append_logout(QStringLiteral("->挂机"));
}
else
{
append_logout(QStringLiteral("***挂机失败:"));
}
}
// QJsonValue value = obj.value(key);
int32 MainWindow::proc_account_event(QString str_evt_account_name, const QJsonObject& json_evt_data, const QJsonObject& json_evt_time)
{
QString s_log,qs;
//QString s_time = JsonToQstring(json_evt_time);
QString s_evt_name = json_evt_data["evt_name"].toString();
if (s_evt_name == "status")
{
QString s_value = json_evt_data["value"].toString();
if (s_value == "online")
{
s_log = QStringLiteral("->设备在线");
}
else if (s_value == "offline")
{
s_log = QStringLiteral("**设备掉线**:[") + json_evt_data["mode"].toString()+"]";
}else if (s_value == "free")
{
s_log = QStringLiteral("->设备空闲状态");
}
else if (s_value == "busy")
{
s_log = QStringLiteral("->设备工作中");
}
else if (s_value == "ring_on")
{
s_log = QStringLiteral("->来电铃声[开始]响");
}
else if (s_value == "ring_off")
{
s_log = QStringLiteral("->来电铃声[停止]响");
}
else if (s_value == "busy_tone")
{
qs = QString("[count:%1] [duration:%2ms]").arg(json_evt_data["count"].toInt()).arg(json_evt_data["duration"].toInt());
s_log = QStringLiteral("->检测到忙音信号") + qs;
}
}
else if (s_evt_name == "phone")
{
QString s_value = json_evt_data["value"].toString();
if (s_value == "offhook")
{
s_log = QStringLiteral("->电话摘机");
}
else if (s_value == "hangup")
{
s_log = QStringLiteral("->电话挂机");
}
else if (s_value == "flash")
{
s_log = QStringLiteral("->电话排插簧");
}
}
else if (s_evt_name == "do_ctrl")
{
int value = json_evt_data["value"].toInt();
QString s_ctrl_name = json_evt_data["ctrl_name"].toString();
qs = QString("[%1->%2]").arg(s_ctrl_name).arg(value);
s_log = QStringLiteral("->设备控制状态改变:") + qs;
m_cfg_ctrl_dialog->show_ub_ctrl();//重新显示状态值
}
else if (s_evt_name == "api")
{
QString s_value = json_evt_data["value"].toString();
if (s_value == "offhook")
{
s_log = QStringLiteral("->软件api摘机");
}
else if (s_value == "hangup")
{
s_log = QStringLiteral("->软件api挂机");
}
else if (s_value == "flash")
{
s_log = QStringLiteral("->软件api排插簧");
}
}
else if (s_evt_name == "dial_step")
{
QString s_operator = json_evt_data["operator"].toString();
QString s_mode = json_evt_data["mode"].toString();
QString s_step_name = json_evt_data["step_name"].toString();
if (s_mode == "dial_dtmf")
{
if (s_step_name == "begin")
{
s_log = QStringLiteral("->发送DTMF:") + json_evt_data["code"].toString();
append_logout("[" + str_evt_account_name + "] " + s_log);
}
return ERR_NO;
}
if (s_step_name == "begin") s
没有合适的资源?快使用搜索试试~ 我知道了~
在国产系统信创麒麟系统下使用qt编写的用来控制usb电话录音拨号的程序源代码
需积分: 0 3 下载量 178 浏览量
2023-07-12
23:05:01
上传
评论
收藏 21.29MB GZ 举报
温馨提示
共59个文件
json:10个
h:8个
o:6个
在国产系统信创麒麟系统下使用qt编写的用来控制usb电话录音拨号的程序源代码,在麒麟系统使用前请先安装qt,打开该例子工程就可以编译运行
资源推荐
资源详情
资源评论
收起资源包目录
qt-demo-src-kylin-07-22.tar.gz (59个子文件)
3rdparty
include
libagi_ub.h 12KB
wtextern.h 5KB
lib
agi_ub
data
agi_mobile.db 800KB
calllog-upload.json 35KB
db
agent.json 179B
account.json 570B
agicall.png 20KB
logout
agi_evt
202307
12
info
18_1.log 85B
ub_dev
202307
12
info
18_1.log 362B
audio
nohome.mp3 5KB
config
evt_post
url_post.json 2KB
ws_service.json 2KB
http_service.json 2KB
agi_evt_cfg.json 176B
agi_calllog.json 589B
signal.json 2KB
acc_param.json 2KB
db
ub_calllog
local
2023
07
11.db 12KB
12.db 4KB
06
29.db 1KB
failed
2023
06
29.db 1KB
libagi_ub.so 5.63MB
libstdc++.so.6 1.86MB
libagi_evt.so 45.25MB
libcurl.so.4 588KB
libffmpeg.so 15.94MB
libagi_calllog.so 2.61MB
libm.so.6 1.31MB
qt
build-agi_ub_pro-Desktop_Qt_5_12_12_GCC_64bit-Debug
moc_mainwindow.cpp 5KB
ui_cls_ub_ctrl_dialog.h 9KB
moc_mainwindow.o 814KB
moc_cls_ub_ctrl_dialog.cpp 7KB
qmake_qmake_qm_files.qrc 235B
Makefile 91KB
mainwindow.o 1.24MB
.qm
agi_ub_pro_zh_CN.qm 16B
cls_ub_ctrl_dialog.o 992KB
main.o 958KB
moc_cls_ub_ctrl_dialog.o 808KB
ui_mainwindow.h 7KB
qrc_qmake_qmake_qm_files.o 8KB
.qmake.stash 687B
agi_ub_pro 1.77MB
moc_predefs.h 13KB
qrc_qmake_qmake_qm_files.cpp 3KB
agi_ub_pro
cls_ub_common.h 3KB
cls_ub_ctrl_dialog.h 1KB
mainwindow.h 2KB
128_logo.ico 16KB
agi_ub_pro_zh_CN.ts 97B
mainwindow.cpp 16KB
agi_ub_pro.pro 1KB
cls_ub_ctrl_dialog.cpp 5KB
main.cpp 618B
mainwindow.ui 5KB
cls_ub_ctrl_dialog.ui 8KB
agi_ub_pro.pro.user.d074ad1 19KB
agi_ub_pro.pro.user.a056220 19KB
agi_ub_pro.pro.user 18KB
共 59 条
- 1
资源评论
agicall
- 粉丝: 3
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功