ZhiYeJianKang/职业健康平台后端/target/dzzyb/static/call/qnvfunc.js
2025-02-20 15:25:59 +08:00

517 lines
16 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/////////////////////////////////////////////////////////////////////////
var uMaxID = 64;
var uPlayFileID = new Array(64);
var uRecordID = new Array(64);
var uCCSessID = -1;
var vConfID = 0;
var g_interval = 0;//定时器全局变量
var g_msg = false;
var isFirefox = navigator.userAgent.toUpperCase().indexOf("FIREFOX") ? true : false;
var isIE = navigator.userAgent.toUpperCase().indexOf("MSIE") ? true : false;
var isChrome = navigator.userAgent.toUpperCase().indexOf("CHROME") ? true : false;
////////////////////////////////////////////////////////////////////////
//
//js脚本调用在IE10以上需要IE10兼容模式如例子html否则js脚本会失效
//当然开发者可以重新构造IE10调用activex的js脚本。
//
function T_WaitForWin(vWin) {
var vTimeout = 5000;
var vBegintime = new Date();
var vEndtime = new Date();
while (vWin.vInit != 1 && vEndtime.getTime() - vBegintime.getTime() < (vTimeout * 2))//ns超时
{
if (vEndtime.getTime() - vBegintime.getTime() > vTimeout)//1s还没有完成使用等待方式
{
Sleep(100);//等待100ms
}
vEndtime = new Date();
}
}
function I_CheckActiveX() {
var iVer = 1;//第一个版本
check_ver(iVer, function (nRet) {
var szHint = "";
switch (nRet) {
case W_OK://检查成功
szHint = "安装成功";
break;
case W_TRY://试用
szHint = "试用版本已安装成功";
break;
case W_NO_FOUND://没有找到校验服务器
szHint = "没有找到校验服务器";
break;
case W_EXCEED_NUM:
szHint = "校验服务器超过用户数了";
break;
default:
szHint = "没有安装本地驱动,请下载";
break;
}
AppendStatus(szHint);
alert(szHint);
});
}
function TV_Initialize() {
//检测是否安装中间件
//var qnv = document.getElementById('qnviccub');
// qnv.attachEvent("OnQnvEvent", T_GetEvent);
DevInfo(0, QNV_DEVINFO_GETCHANNELS, function (nResult) {
if (nResult <= 0) {
OpenDevice(0, function (nResult) {
DevInfo(0, QNV_DEVINFO_GETCHANNELS, function (channels) {
if (channels > 0) { //初始化变量
for (i = 0; i < uMaxID; i = i + 1) {
uPlayFileID[i] = -1;
uRecordID[i] = -1;
}
for (j = 0; j < channels; j++) {
//SetParam(j,QNV_PARAM_DTMFVOL,5);
SetParam(j, QNV_PARAM_AM_LINEIN, 5, null);//把输入能量增益调为5
}
DevInfo(0, QNV_DEVINFO_GETSERIAL, function (sn) {
DevInfo(0, QNV_DEVINFO_GETTYPE, function (type) {
DevInfo(0, QNV_DEVINFO_FILEVERSION, function (ver) {
AppendStatus("打开设备成功 通道数:" + channels + " 序列号:" + sn + " 设备类型:" + type + " ver:" + ver);
});
});
});
TV_EnableMic(0, TRUE);
TV_EnableLine2Spk(0, TRUE);
TV_OpenDoPlay(0);
} else {
AppendStatus("打开设备失败,请检查设备是否已经插入并安装了驱动,并且没有其它程序已经打开设备");
}
});
});//OpenDevice
}//if(nResult <= 0)
else {
AppendStatus("设备已经被打开,不需要重复打开");
}
});
return;
}
//配置设备参数函数
//nChannel通道号
//paramName//参数名
//nValue参数值
function TV_SetParam(nChannel, paramName, nValue, nextFunc) {
if (nChannel >= 0) {
SetParam(nChannel, paramName, nValue, nextFunc);//设置参数
}
}
//控制设备参数函数
//nChannel通道号
//paramName//参数名
//nValue参数值
function TV_SetDevCtrl(nChannel, paramName, nValue, nextFunc) {
return SetDevCtrl(nChannel, paramName, nValue, nextFunc);
}
function TV_StopConference(nextFunc) {
if (vConfID > 0) {
Conference(-1, vConfID, QNV_CONFERENCE_DELETECONF, 0, 0, function (nResult) {
nextFunc(nResult);
vConfID = 0;
AppendStatus("会议停止");
});//删除会议
}
}
function TV_StartConference() {
OpenDevice(ODT_SOUND, 0, 0, function (nResult) {
if (nResult <= 0) {
AppendStatus("打开声卡模块失败");
} else {
TV_StopConference(function (nResult) {
Conference(-1, 0, QNV_CONFERENCE_CREATE, 0, "", function (vConfID) {
if (vConfID <= 0)
AppendStatus("创建会议失败");
else {
Conference(SOUND_CHANNELID, vConfID, QNV_CONFERENCE_ADDTOCONF, 0, "", function (vRet) {
AppendStatus("加入会议完成,Ret=" + vRet);
DevInfo(0, QNV_DEVINFO_GETCHANNELS, function (chammels) {
for (i = 0; i < chammels; i = i + 1) {
Conference(i, vConfID, QNV_CONFERENCE_ADDTOCONF, 0, "", function (nRet) {
AppendStatus("加入会议完成,Ret=" + nRet);
});
}
AppendStatus("会议创建完成,会议ID=" + vConfID);
});
});//Conference(SOUND_CHANNELID
}
});//Conference-1
});//TV_StopConference
}
});
}
function TV_InitCCModule() {
OpenDevice(ODT_CC, 0, QNV_CC_LICENSE, function (nResult) {
if (nResult > 0) {
AppendStatus("加载CC网络模块成功");
} else
AppendStatus("加载CC网络模块失败");
});
}
function TV_Disable() {
g_msg = true;
CloseDevice(ODT_ALL, function (nResult) {
AppendStatus("关闭设备完成.");
});//关闭所有设备
}
//---------------------------------------
function TV_EnableHook(uID, bEnable) {
TV_SetDevCtrl(uID, QNV_CTRL_DOHOOK, bEnable, function (nResult) {
AppendStatusEx(uID, bEnable ? "软摘机" : "软挂机");
});
}
function TV_OffHookCtrl(uID) {
TV_EnableHook(uID, TRUE);
}
function TV_HangUpCtrl(uID) {
TV_StopRecordFile(uID); // 只要挂机就结束录音
TV_EnableHook(uID, FALSE);
}
//----------------------------------------
function TV_EnableMic2Line(uID, bEnable) {
//SetDevCtrl(uID,QNV_CTRL_DOMICTOLINE,bEnable);
TV_SetDevCtrl(uID, QNV_CTRL_DOMICTOLINE, bEnable);
}
function TV_EnableMic(uID, bEnable) {
TV_EnableMic2Line(uID, bEnable);
}
//----------------------------------------
function TV_EnableDoPhone(uID, bEnable) {
SetDevCtrl(uID, QNV_CTRL_DOPHONE, bEnable);
}
function TV_EnableRing(uID, bEnable) {
TV_EnableDoPhone(uID, bEnable);
}
function TV_StartRing(uID, bEnable) {
if (bEnable)
General(uID, QNV_GENERAL_STARTRING, 0, "1234", null);
else
General(uID, QNV_GENERAL_STOPRING, 0, "", null);
}
//--------------------------------------
function TV_EnableDoPlay(uID, bEnable) {
SetDevCtrl(uID, QNV_CTRL_DOPLAY, bEnable, null);
}
function TV_OpenDoPlay(uID) {
TV_EnableDoPlay(uID, TRUE);
}
function TV_CloseDoPlay(uID) {
TV_EnableDoPlay(uID, FALSE);
}
//----------------------------------------------
//线路声音到耳机,用耳机通话时
function TV_EnableLine2Spk(uID, bEnable) {
SetDevCtrl(uID, QNV_CTRL_DOLINETOSPK, bEnable, null);
}
//播放的语音到耳机
function TV_EnableMicSpk(uID, bEnable) {
SetDevCtrl(uID, QNV_CTRL_DOPLAYTOSPK, bEnable);
}
//----------------------------------------------
function TV_EnablePlay2Spk(uID, bEnable) {
SetDevCtrl(uID, QNV_CTRL_DOPLAYTOSPK, bEnable);
}
function TV_EnableRingPower(uID, bEnable) {
GetDevCtrl(uID, QNV_CTRL_DOPHONE, function (nRet) {
if (nRet && bEnable) {
alert("请先断开电话机");
} else {
SetDevCtrl(uID, QNV_CTRL_RINGPOWER, bEnable, null);
}
});
}
function TV_RefuseCallIn(uID) {
GetDevCtrl(uID, QNV_CTRL_RINGTIMES, function (nRet) {
if (nRet <= 0) {
alert("没有来电,无效的拒接");
} else {
General(uID, QNV_GENERAL_STARTREFUSE, 0, 0, null);
}
});
}
function TV_StartFlash(uID) {
GetDevCtrl(uID, QNV_CTRL_DOHOOK, function (nCon) {
GetDevCtrl(uID, QNV_CTRL_PHONE, function (nRet) {
if (nCon <= 0 && nRet <= 0) {
alert("没有摘机状态,无效的拍插簧");
} else {
General(uID, QNV_GENERAL_STARTFLASH, FT_ALL, "", function (nRetCall) {
if (nRetCall <= 0) {
alert("拍插簧失败");
}
});
}
});
});
}
function TV_EnablePhoneRing(uID, bEnable) {
if (bEnable) {
GetDevCtrl(uID, QNV_CTRL_DOPHONE, function (nRet) {
if (nRet) {
alert("请先断开电话机");
} else {
var szCallID = "1234567890";
SetParam(uID, QNV_PARAM_RINGCALLIDTYPE, DIALTYPE_FSK, function (n) {
General(uID, QNV_GENERAL_STARTRING, 0, szCallID, function (k) {
AppendStatusEx(uID, "开始内线模拟间隔震铃 -> 模拟来电号码:" + szCallID);
});
});//设置送码方式为一声后FSK模式,默认为一声前dtmf模式//DIALTYPE_DTMF
}
});
} else {
General(uID, QNV_GENERAL_STOPRING, 0, 0, function (h) {
AppendStatusEx(uID, "停止内线震铃");
});
}
}
function TV_StartPlayFile(uID, szFile) {
vFilePath = "c:\\test.wav";
alert("播放文件路径为:" + vFilePath);
if (vFilePath.length > 0) {
// AppendStatus("选择文件:"+vFilePath);
// TV_StopPlayFile(uID);//先停止上次播放的句柄
var vmask = PLAYFILE_MASK_REPEAT;//循环播放
PlayFile(uID, QNV_PLAY_FILE_START, 0, vmask, vFilePath, function (id) {
uPlayFileID[uID] = id;
if (id <= 0) {
AppendStatusEx(uID, "播放失败:" + vFilePath);
} else {
AppendStatusEx(uID, "开始播放文件:" + vFilePath);
}
});
} else {
AppendStatus("没有选择文件")
}
}
function TV_StopPlayFile(uID) {
if (uPlayFileID[uID] > 0) {
PlayFile(uID, QNV_PLAY_FILE_STOP, uPlayFileID[uID], 0, 0, function (nRet) {
AppendStatusEx(uID, "停止播放");
uPlayFileID[uID] = 0;
});
} else {
AppendStatusEx(uID, "未播放的句柄");
uPlayFileID[uID] = 0;
}
}
function TV_StopPlayFileEx(uID, nextFunc) {
if (uPlayFileID[uID] > 0) {
PlayFile(uID, QNV_PLAY_FILE_STOP, uPlayFileID[uID], 0, 0, function (nRet) {
uPlayFileID[uID] = 0;
nextFunc();
AppendStatusEx(uID, "停止播放");
});
} else {
uPlayFileID[uID] = 0;
nextFunc();
AppendStatusEx(uID, "未播放的句柄");
}
}
function TV_StartRecordFile(uID,szCode) {
vFilePath = "d:\\"+szCode+".wav";
if (vFilePath.length > 0) {
TV_StopPlayFileEx(uID, function () {
var vFormatID = BRI_WAV_FORMAT_IMAADPCM8K4B;//选择使用4K/S的ADPCM格式录音
var vmask = RECORD_MASK_ECHO | RECORD_MASK_AGC;//使用回音抵消后并且自动增益的
RecordFile(uID, QNV_RECORD_FILE_START, vFormatID, vmask, vFilePath, function (hRec) {
uRecordID[uID] = hRec;
if (uRecordID[uID] <= 0) {
AppendStatusEx(uID, "录音失败:" + vFilePath);
} else {
AppendStatusEx(uID, "开始录音文件: id=" + uRecordID[uID] + " " + vFilePath);
}
});
});
} else {
AppendStatus("没有选择文件");
}
}
function TV_StopRecordFile(uID) {
if (uRecordID[uID] > 0) {
//var vRecPath=GetRecFilePath(uID,uRecordID[uID]);
RecordFile(uID, QNV_RECORD_FILE_PATH, uRecordID[uID], 0, 0, function (vRecPath) {
RecordFile(uID, QNV_RECORD_FILE_ELAPSE, uRecordID[uID], 0, 0, function (vElapse) {
RecordFile(uID, QNV_RECORD_FILE_STOP, uRecordID[uID], 0, 0, function (nRet) {
AppendStatusEx(uID, "停止录音:" + vRecPath + " 录音时间:" + vElapse);
uRecordID[uID] = 0;
});
});
});
}
}
function TV_DeleteRecordFile(uID) {
CallLog(uID, QNV_CALLLOG_DELRECFILE, "", 0, function (vRet) {
if (vRet <= 0) {
alert('删除失败:' + vRet);
} else
alert('删除完成');
});
}
function TV_StartDial(uID, szCode) {//正常拨号必须使用 DIALTYPE_DTMF
General(uID, QNV_GENERAL_STARTDIAL, DIALTYPE_DTMF, szCode, function (nRet) {
if (nRet <= 0) {
AppendStatusEx(uID, "拨号失败:" + szCode);
} else {
AppendStatusEx(uID, "开始拨号:" + szCode);
}
});
}
function TV_GetDiskList() {
Tool(QNV_TOOL_DISKLIST, 0, 0, 0, function (vDiskList) {
;
AppendStatus("按逗号分隔的盘符列表:" + vDiskList);
});
}
function TV_GetFreeSpace(szDiskname) {
Tool(QNV_TOOL_DISKFREESPACE, 0, szDiskname, 0, function (vFreeSpace) {
AppendStatus(szDiskname + " 空闲大小为:" + vFreeSpace + "(M)");
});
}
function TV_GetTotalSpace(szDiskname) {
Tool(QNV_TOOL_DISKTOTALSPACE, 0, szDiskname, 0, function (vTotalSpace) {
AppendStatus(szDiskname + " 总共大小为:" + vTotalSpace + "(M)");
});
}
function TV_BrowerPath() {
Tool(QNV_TOOL_SELECTDIRECTORY, 0, "选择目录", 0, function (vPath) {
AppendStatus("选择目录:" + vPath);
});
}
function TV_SelectFile() {
Tool(QNV_TOOL_SELECTFILE, 0, "wav files|*.wav|all files|*.*||", 0, function (vFilePath) {
AppendStatus("选择文件:" + vFilePath);
});
}
function TV_uploadFile(uploadUrl) {
//上传文件
vFilePath = "c:\\test.wav";
alert("上传文件路径为:" + vFilePath);
Remote(QNV_REMOTE_UPLOAD_START, 0, uploadUrl, vFilePath, 0, 0, function (nRet) {
//nRet <=0表示失败
if (nRet <= 0)
AppendStatus("上传文件:" + vFilePath + "失败");
else
AppendStatus("上传文件:" + vFilePath + "成功");
});
}
/*阿里云的URL
可以参照阿里云上传例子把其中的参数签名加密生成如下URL
http://post-test.oss-cn-hangzhou.aliyuncs.com/?name=message.wav&key=${filename}&policy=eyJleHBpcmF0aW9uIjoiMjAyMC0wMS0wMVQxMjowMDowMC4wMDBaIiwiY29uZGl0aW9ucyI6W1siY29udGVudC1sZ
*/
function ali_uploadFile(uploadUrl) {
vFilePath = "c:\\test.wav";
alert("上传文件路径为:" + vFilePath);
//上传文件
UploadFile(uploadUrl, vFilePath, function (nRet) {
//nRet <=0表示失败
if (nRet <= 0)
AppendStatus("上传文件:" + vFilePath + "失败");
else
AppendStatus("上传文件:" + vFilePath + "成功");
});
}
/*
//登陆CC
function TV_LoginCC(cc,pwd)
{
if(CCCtrl(QNV_CCCTRL_ISLOGON,NULL,0) > 0)
alert('已经登陆,请先离线');
else
{
var v=cc+','+pwd;
var vret=CCCtrl(QNV_CCCTRL_LOGIN,v,0);
if(vret <= 0)//开始登陆
alert('登陆CC失败:'+vret);
else
AppendStatus("开始登陆CC:"+cc);
}
}
//CC离线
function TV_LogoutCC()
{
CCCtrl(QNV_CCCTRL_LOGOUT,NULL,0);//离线
AppendStatus("已离线");
}
function T_GetMsgValue(vmsg,vkey)
{
var strs = vmsg.split("\r\n");
for(var i = 0; i < strs.length; i++)
{
var vline=strs[i];
var vindex=vline.indexOf(vkey);
if(vindex != -1)
{
return vline.slice(vkey.length+1);
}
}
return "";
}
*/