📄 telmatedemodlg.cpp
字号:
void CTelMateDemoDlg::OnMenuInit()
{
OnOpendev();
}
void CTelMateDemoDlg::OnMenuUninit()
{
OnClosedev();
}
void CTelMateDemoDlg::OnMenuExit()
{
OnOK();
}
void CTelMateDemoDlg::OnMenuGetserial()
{
OnButton15();
}
void CTelMateDemoDlg::OnEcho()
{
//当电话机在不可用状态,用电话机话筒录音(进入RS_MICREC录音状态)。如:用电话机打VOIP应用等。
//如果这时候放音,声音数据将从电话机的听筒出来,为避免放的声音重新录入,可打开此回音抵消功能。
//平时不需要打开。
//如果用耳机就不需要此功能
TV_EnableEchoCanceller(TRUE);
m_StopEcho.EnableWindow(TRUE);
m_Echo.EnableWindow(FALSE);
}
void CTelMateDemoDlg::OnStopecho()
{
//停止回音抵消
TV_EnableEchoCanceller(FALSE);
m_StopEcho.EnableWindow(FALSE);
m_Echo.EnableWindow(TRUE);
}
void CTelMateDemoDlg::OnOffhookcheck()
{
if(m_OffHookCheck.GetCheck())
{
TV_OffHookCtrl();
//设置接受DTMF灵敏度参数,
//100:表示允许的DTMF声音大小,一般话机能在100以上,
//但如果对方是手机可能会在100以下,50左右,或者线路对声音影响比较大,可能会使声音比较小,
//这里就降低允许的声音最小值,以便漏号。
//5:表示接受的DTMF坚持的时间长度,一般5左右,如果发现声音被干扰太严重而没有检测到号码,可减少次数
//在接受来电是可以设置为2或3,以便能准确接受来电号码。
//注意:如果设置太小的声音最小值,太小的时间次数,虽然能提高非常高的灵敏度,但如果在多人说话或有放歌什么的时候可能会误测号码
//
//拿着电话机,如果外界干扰严重(如:话机正在放歌的音箱...)出现误测可调整相应参数,灵敏度
//TV_SetDTMFParam(20,20,0/*无效参数*/,4);
//TV_SetCheckDTMFLevel(3);//设置DTMF允许的破坏程度,如果有发现误测,可相应的增大此值,有漏测可减少此值,建议为2,3
}else
{
TV_HangUpCtrl();
//设置接受DTMF灵敏度参数,
//50:表示允许的DTMF声音大小,一般话机能在100以上,
//但如果对方是手机可能会在100以下,50左右,或者线路对声音影响比较大,可能会使声音比较小,
//这里就降低允许的声音最小值,以便漏号。
//5:表示接受的DTMF坚持的时间长度,一般5左右,如果发现声音被干扰太严重而没有检测到号码,可减少次数
//在接受来电是可以设置为2或3,以便能准确接受来电号码。
//注意:如果设置太小的声音最小值,太小的时间次数,虽然能提高非常高的灵敏度,但如果在多人说话或有放歌什么的时候可能会误测号码
//
//接受DTMF来电,可以调整相应参数,灵敏度
//TV_SetDTMFParam(10,10,0/*无效参数*/,6);
//TV_SetCheckDTMFLevel(1);
}
}
void CTelMateDemoDlg::OnDisabletelcheck()
{
TV_EnableRing(!m_DisableTel.GetCheck());
}
void CTelMateDemoDlg::OnOpendoplay()
{
if(m_OpenDoPlay.GetCheck())
{//听语音数据
TV_OpenDoPlay();//打开喇叭,播放的数据将从喇叭出声。
//如果接了耳机,喇叭就自动被屏蔽,不会出声,声音从耳机出来。
//用耳机通话时必须打开喇叭才能听到对方声音
}else
{
TV_CloseDoPlay();
}
}
CString CTelMateDemoDlg::SelectSaveFilePath()
{
char szFile[260]; // buffer for filename
OPENFILENAME ofn;
memset(szFile,0,sizeof(szFile));
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = m_hWnd;
ofn.lpstrFile = szFile;
ofn.nMaxFile = sizeof(szFile);
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST|OFN_OVERWRITEPROMPT;
ofn.lpstrFilter = "WAVE file(*.WAV)\0*.WAV\0All file\0*.*\0";
ofn.lpstrDefExt = ".wav";
if(::GetSaveFileName(&ofn))
{
CString strDestPath = szFile;
return strDestPath;
}
return "";
}
void CTelMateDemoDlg::OnStopplayfile()
{
if(m_lPlayFileID >= 0)
TV_StopPlayFile(m_lPlayFileID);
AddStatus("停止播放文件,播放文件完成");
m_StartPlayFile.EnableWindow(TRUE);
m_StopPlayFile.EnableWindow(FALSE);
}
void CTelMateDemoDlg::OnRecordBuf(WPARAM wParam, LPARAM lParam)
{
long lSize=wParam;
m_RingBuffer.Write((char*)lParam,&lSize);
//要尽快复制内存数据返回。
if(m_RecBufFile)
{
fwrite((char *)lParam,wParam,1,m_RecBufFile);
}
}
void CTelMateDemoDlg::OnHangups(WPARAM wParam, LPARAM lParam)
{
AddStatus("对方挂机");
}
void CTelMateDemoDlg::OnOffHooks(WPARAM wParam, LPARAM lParam)
{
AddStatus("对方摘机");
}
void CTelMateDemoDlg::OnGetDTMF(WPARAM wParam, LPARAM lParam)
{
CString Str;
// char chDTMF[2];
// memset(chDTMF,0,2);
// chDTMF[0]=(char)lParam;
Str.Format("DTMF:%c",lParam);
AddStatus(Str);
}
void CTelMateDemoDlg::OnCallIn(WPARAM wParam, LPARAM lParam)
{
CString str;
if(lParam == 0)
{
str.Format("来电震铃 次数:%d",wParam);
}else
{
str.Format("来电震铃停止 次数:%d",wParam);
}
AddStatus(str);
char chbuf[60];
TV_ReceiveCallingID(chbuf,60);
str.Format("ReciveID=%s",chbuf);
AddStatus(str);
}
void CTelMateDemoDlg::OnMicStatus(WPARAM wParam, LPARAM lParam)
{
if(wParam == 1)
{
CString str;
str.Format("检测到麦克风已插入");
AddStatus(str);
}else
{
CString str;
str.Format("检测到麦克风拔出");
AddStatus(str);
}
}
void CTelMateDemoDlg::OnDTMFCallIn(WPARAM wParam, LPARAM lParam)
{
CString str;
str.Format("检测到DTMF来电:%s",(LPTSTR)(LPCTSTR)lParam);
AddStatus(str);
char chbuf[60];
TV_ReceiveCallingID(chbuf,60);
str.Format("ReciveID=%s",chbuf);
AddStatus(str);
}
void CTelMateDemoDlg::OnPlayFileEnd(WPARAM wParam, LPARAM lParam)
{
CString str;
if(lParam == 0)
{
str="播放文件结束";
}else if(lParam == 1)
{
str="多文件连播结束";
OnStopplaynumber();
}else
return;
AddStatus(str);
OnStopplayfile();
}
void CTelMateDemoDlg::OnFskCallIn(WPARAM wParam, LPARAM lParam)
{
CString str;
str.Format("检测到FSK来电:%s",(LPTSTR)(LPCTSTR)lParam);
AddStatus(str);
}
void CTelMateDemoDlg::OnStopCallIn(WPARAM wParam, LPARAM lParam)
{
CString str;
str.Format("呼入停止,产生一个未接电话");
AddStatus(str);
}
void CTelMateDemoDlg::OnDialEnd(WPARAM wParam, LPARAM lParam)
{
CString str;
str.Format("拨号结束...");
AddStatus(str);
}
void CTelMateDemoDlg::OnTelOffHook(WPARAM wParam, LPARAM lParam)
{
CString str;
str.Format("电话机摘机..");
AddStatus(str);
//设置接受DTMF灵敏度参数,
//100:表示允许的DTMF声音大小,一般话机能在100以上,
//但如果对方是手机可能会在100以下,50左右,或者线路对声音影响比较大,可能会使声音比较小,
//这里就降低允许的声音最小值,以便漏号。
//5:表示接受的DTMF坚持的时间长度,一般5左右,如果发现声音被干扰太严重而没有检测到号码,可减少次数
//在接受来电是可以设置为2或3,以便能准确接受来电号码。
//注意:如果设置太小的声音最小值,太小的时间次数,虽然能提高非常高的灵敏度,但如果在多人说话或有放歌什么的时候可能会误测号码
//
//拿着电话机,如果外界干扰严重(如:话机正在放歌的音箱...)出现误测可调整相应参数,灵敏度
//TV_SetDTMFParam(20,20,0/*无效参数*/,4);
//TV_SetCheckDTMFLevel(3);//设置DTMF允许的破坏程度,如果有发现误测,可相应的增大此值,有漏测可减少此值,建议为2,3
}
void CTelMateDemoDlg::OnTelHangUp(WPARAM wParam, LPARAM lParam)
{
CString str;
str.Format("电话机挂机...");
AddStatus(str);
//设置接受DTMF灵敏度参数,
//50:表示允许的DTMF声音大小,一般话机能在100以上,
//但如果对方是手机可能会在100以下,50左右,或者线路对声音影响比较大,可能会使声音比较小,
//这里就降低允许的声音最小值,以便漏号。
//5:表示接受的DTMF坚持的时间长度,一般5左右,如果发现声音被干扰太严重而没有检测到号码,可减少次数
//在接受来电是可以设置为2或3,以便能准确接受来电号码。
//注意:如果设置太小的声音最小值,太小的时间次数,虽然能提高非常高的灵敏度,但如果在多人说话或有放歌什么的时候可能会误测号码
//
//接受DTMF来电,可以调整相应参数,灵敏度
//TV_SetDTMFParam(50,50,0/*无效参数*/,3);
//TV_SetCheckDTMFLevel(1);
}
void CTelMateDemoDlg::OnNoPSTNLine(WPARAM wParam, LPARAM lParam)
{
CString str;
str.Format("错误,没有接入PSTN外线,请检查...");
AddStatus(str);
}
void CTelMateDemoDlg::OnRingBack(WPARAM wParam, LPARAM lParam)
{
CString str;
str.Format("电脑拨号后听到回铃音...");
AddStatus(str);
}
void CTelMateDemoDlg::OnTelCallOut(WPARAM wParam, LPARAM lParam)
{
CString str;
str.Format("电话机拨号后听到回铃音...");
AddStatus(str);
}
void CTelMateDemoDlg::OnBusy(WPARAM wParam, LPARAM lParam)
{
CString str;
str.Format("检测到忙音...");
AddStatus(str);
}
void CTelMateDemoDlg::OnFlashEnd(WPARAM wParam, LPARAM lParam)
{
CString str;
str.Format("拍插簧完成...Flash End");
AddStatus(str);
}
void CTelMateDemoDlg::OnDialTone(WPARAM wParam, LPARAM lParam)
{
CString str;
str.Format("拨号音");
AddStatus(str);
}
void CTelMateDemoDlg::OnTelDial(WPARAM wParam, LPARAM lParam)
{
CString str;
str.Format("电话机拨号:%s",(LPTSTR)(LPCTSTR)lParam);
AddStatus(str);
}
void CTelMateDemoDlg::OnReversed()
{
//如果设备,或者线路不支持极性反转功能,不要打开。
TV_EnableReversedPolarity(m_Reversed.GetCheck());
}
void CTelMateDemoDlg::OnRadiodoid()
{
//录来自电话线上的声音。
//普通状态时的录音方式,如电话机挂机后进入空闲状态等。
//如果在空闲状态不使用此录音方式,如有来电时将不会显示来电号码。
//空闲时让耳机不可用,以免耳机的声音被录入,影响线路数据。
TV_SetRecSource(RS_DOID);
}
void CTelMateDemoDlg::OnRadiomicrec()
{
//录来自MIC(电话机话筒或耳机)的声音。
//设置后将录从电话机话筒或耳机的声音,用在VOIP,语音拨号等状态
//用VOIP,语音拨号时,如果用电话机请同时设置为电话机不可用,TV_EnableRing(FALSE)使电话机断开PSTN
TV_SetRecSource(RS_MIC);
}
void CTelMateDemoDlg::OnRadiomicspk()
{
//录来自电话线上的声音。
//进入留言状态的时候可用此方式录音,可以提高对方声音的音量
//或者用耳机进行通话时录音,比DOID录音方式提高对方音量,降低本地说话音量。
//只有电脑摘机或耳机接着并且MIC可用时,才能有数据录入。
TV_SetRecSource(RS_SPK);
}
void CTelMateDemoDlg::OnEnablemic()
{//需要MIC通话时,让MIC可用。
TV_EnableMic(m_EnableMic.GetCheck());
}
void CTelMateDemoDlg::OnStartring()
{
TV_StopFlash();
if(m_StartRing.GetCheck())
{
if(!TV_IsRingEnable())
{
TV_StartRing();
}else
{
m_StartRing.SetCheck(FALSE);
AfxMessageBox("Disconnect PSTN first");
}
}else
{
TV_StopRing();
OnSendcallid();
}
}
void CTelMateDemoDlg::OnFlash()
{
UpdateData(TRUE);
long lFlashTimes=atoi((LPTSTR)(LPCTSTR)m_FlashTimes);
if(lFlashTimes > 10)
{
if(!TV_StartFlash(lFlashTimes,FALSE))
{
AfxMessageBox("flash failed");
}
}
}
void CTelMateDemoDlg::OnMenuStartwatch()
{
TV_EnableDeviceWatchDog(TRUE);
}
void CTelMateDemoDlg::OnMenuStopwatch()
{
TV_EnableDeviceWatchDog(FALSE);
}
BOOL CTelMateDemoDlg::OnCommand(WPARAM wParam, LPARAM lParam)
{
return CDialog::OnCommand(wParam, lParam);
}
void CTelMateDemoDlg::OnStartflash()
{
UpdateData(TRUE);
long lFlashTimes=atoi((LPTSTR)(LPCTSTR)m_FlashTimes);
if(lFlashTimes > 10)
{
if(!TV_StartFlash(lFlashTimes,TRUE))
{
AfxMessageBox("failed");
}
}
}
void CTelMateDemoDlg::OnSendcallid()
{
//需要带震铃的盒子次能支持,其它的设备不能支持
UpdateData(TRUE);
if(!TV_StartCallIDRingInterval((LPTSTR)(LPCTSTR)m_CallID))
{
AfxMessageBox("Send CallID Failed");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -