呼叫中心系统的测试文档源码

  1. // TestView.cpp : implementation of the CTestView class
  2. //
  3. #include "stdafx.h"
  4. #include "Test.h"
  5. #include "TestDoc.h"
  6. #include "TestView.h"
  7. #include "Fsk.h"
  8. #include "BusChInfo.h"
  9. #include "ConInfo.h"
  10. #include "SetChkTonePara.h"
  11. #include "PcmCompatible.h"
  12. #include "SS1base.h"
  13. #include "Ss7.h"
  14. #include "TsToChList.h"
  15. #include "CallTest.h"
  16. #include "direct.h"
  17. #include <errno.h>
  18. //#include "../shp_a3/shpa3api.h"
  19. #include "ver34.h"
  20. #include "ver353.h"
  21. #include "ver404.h"
  22. #include "time.h"
  23. #define _TESTDATA
  24. #include "TestData.h"
  25. #include "OverallEnergyLevelDlg.h"
  26. #include "40ExDlg.h"
  27. #include "SetWaitDtmf.h"
  28. #include "Ver444x.h"
  29. #include "BoardInfo.h"
  30. #include "DlgMultiCall.h" // added by hunnad for 多路呼叫, 2007.10.15
  31. #include "Dlgver456x.h"
  32. #include "DlgIsupAdv.h"
  33. #include "ShvDlg.h"
  34. #ifdef _DEBUG
  35. #define new DEBUG_NEW
  36. #undef THIS_FILE
  37. static char THIS_FILE[] = __FILE__;
  38. #endif
  39. enum{
  40. CHKPLAY_PLAYING,
  41. CHKPLAY_NORMAL_END,
  42. CHKPLAY_DTMF_END,
  43. CHKPLAY_BURGEIN,
  44. CHKPLAY_REMOTEHANGUP_END, //added by xxb for 恒生,01.09,2002 +++++
  45. CHKPLAY_APPLICATION_END, //added by xxb for 恒生,01.09,2002 +++++
  46. CHKPLAY_PAUSED,//added by xxb,2002.8.2
  47. CHKPLAY_LINKFROM_END,//Added by xxb, for 因下总线而中止,2003.04.17
  48. CHKPLAY_NETDISCONNECT,//Added by yxh, for 网络文件放音改进, 2003.09.30
  49. };
  50. enum
  51. {
  52. CHKRECORD_RECORDING,    //0: recording
  53. CHKRECORD_APPLICATION_END, //1: application end
  54. CHKRECORD_DTMF_END,    //2: record operation is stopped by DTMF key
  55. CHKRECORD_REMOTEHANGUP_END,//3: recor operation is stopped by remote hangup
  56. CHECKRECORD_TIMEUP_END,    //4: end of record for time up.
  57. CHECKRECORD_FILE_PAUSED,   //5: file record is paused.
  58. CHECKRECORD_FILE_WRITE_ERROR,//6:file write error
  59. };
  60. extern int nIsSsmStartCtiOK;
  61. BOOL bEnableOpToneAnalyze[MAX_CH];
  62. BOOL bEnableOpRingDetect[MAX_CH];
  63. BOOL bEnableOpBlockRemoteCh[MAX_CH];
  64. BOOL bEnableOpEchoCanceller[MAX_CH];
  65. BOOL bEnableOpADC[MAX_CH];
  66. BOOL bTimerOpen = TRUE;
  67. HANDLE hFile;
  68. /
  69. // CTestView
  70. IMPLEMENT_DYNCREATE(CTestView, CFormView)
  71. BEGIN_MESSAGE_MAP(CTestView, CFormView)
  72. //{{AFX_MSG_MAP(CTestView)
  73. ON_CBN_SELCHANGE(IDC_COMBO_SELCURCH, OnSelchangeComboSelcurch)
  74. ON_NOTIFY(NM_CLICK, IDC_CHLIST, OnClickChlist)
  75. ON_WM_TIMER()
  76. ON_WM_DESTROY()
  77. ON_COMMAND(ID_OPEN_SHCONFIG, OnOpenShconfig)
  78. ON_COMMAND(ID_OPEN_SHCTICONFIG, OnOpenShcticonfig)
  79. ON_COMMAND(ID_VER34, OnVer34)
  80. ON_COMMAND(ID_ONTIMEFLAG, Ontimeflag)
  81. ON_UPDATE_COMMAND_UI(ID_ONTIMEFLAG, OnUpdateOntimeflag)
  82. ON_COMMAND(ID_VER353, OnVer353)
  83. ON_COMMAND(ID_OVERALL_ENERGY_LEVEL, OnOverallEnergyLevel)
  84. ON_COMMAND(ID_40EX_OPEN_BUS, On40exOpenBus)
  85. ON_COMMAND(ID_SSMSETWAITDTMFEX, OnSsmsetwaitdtmfex)
  86. ON_COMMAND(ID_BUTTON_SPY, OnButtonSpy)
  87. ON_COMMAND(ID_VER404, OnVer404)
  88. ON_COMMAND(ID_VER444x, OnVer444x)
  89. ON_COMMAND(ID_BOARDINFO, OnBoardinfo)
  90. ON_NOTIFY(TCN_SELCHANGE, IDC_TAB_VIEW, OnSelchangeTabView)
  91. ON_BN_CLICKED(IDC_SELECT_ALLCH, OnSelectAllch)
  92. ON_COMMAND(IDC_BUTTON_SS7, OnButtonSs7)
  93. ON_COMMAND(IDC_BUTTON_fsk, OnBUTTONfsk)
  94. ON_COMMAND(IDC_BUTTON_BUS, OnButtonBus)
  95. ON_COMMAND(IDC_BUTTON_CONF, OnButtonConf)
  96. ON_COMMAND(IDC_BUTTON_SetChkTonePara, OnBUTTONSetChkTonePara)
  97. ON_COMMAND(IDC_BUTTON_PcmFunc, OnBUTTONPcmFunc)
  98. ON_COMMAND(IDC_BUTTON_SS1Base, OnBUTTONSS1Base)
  99. ON_COMMAND(ID_VER458x, OnVER458x)
  100. ON_COMMAND(ID_VER4605, OnVer4605)
  101. ON_COMMAND(IDC_VER_4720_SHV, OnVer4720Shv)
  102. ON_COMMAND(ID_MULTICALL, OnMulticall)
  103. ON_COMMAND(ID_HANGUPALL, OnHangupall)
  104. ON_COMMAND(ID_PICKUPALL, OnPickupall)
  105. //}}AFX_MSG_MAP
  106. // Standard printing commands
  107. ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
  108. ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
  109. ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
  110. END_MESSAGE_MAP()
  111. /
  112. // CTestView construction/destruction
  113. CTestView::CTestView()
  114. : CFormView(CTestView::IDD)
  115. {
  116. //{{AFX_DATA_INIT(CTestView)
  117. m_SelectAllCh = FALSE;
  118. //}}AFX_DATA_INIT
  119. // TODO: add construction code here
  120. }
  121. CTestView::~CTestView()
  122. {
  123. }
  124. void CTestView::DoDataExchange(CDataExchange* pDX)
  125. {
  126. CFormView::DoDataExchange(pDX);
  127. //{{AFX_DATA_MAP(CTestView)
  128. DDX_Control(pDX, IDC_TAB_VIEW, m_TabCtrl);
  129. DDX_Control(pDX, IDC_COMBO_SELCURCH, m_SelCurCh);
  130. DDX_Control(pDX, IDC_CHLIST, m_ChList);
  131. DDX_Check(pDX, IDC_SELECT_ALLCH, m_SelectAllCh);
  132. //}}AFX_DATA_MAP
  133. }
  134. BOOL CTestView::PreCreateWindow(CREATESTRUCT& cs)
  135. {
  136. // TODO: Modify the Window class or styles here by modifying
  137. //  the CREATESTRUCT cs
  138. return CFormView::PreCreateWindow(cs);
  139. }
  140. enum{
  141. ITEM_Ch,
  142. ITEM_ChHwType,
  143. ITEM_ChState,
  144. ITEM_RingCount,
  145. ITEM_SendRingCount,//added by LCL for RingCounter, 2005.09.19
  146. ITEM_RxDTMF,
  147. ITEM_ToneAnalyzeResult,
  148.     ITEM_2ndToneAnalyzeResult, //ADDED BY yxd 2003.3.20
  149. ITEM_Burgein,
  150. ITEM_DetectNoSound,
  151. ITEM_PlayTime,
  152. ITEM_PlayTimeEx,
  153. ITEM_PlayPercentage,
  154. ITEM_ChkPlay,
  155. ITEM_GetPlayType,
  156. ITEM_RecTime,
  157. ITEM_ChkRec,
  158. ITEM_OverallEnergy,
  159. ITEM_AdaptiveFilter,
  160. ITEM_AdaptiveFilterStudy,
  161. ITEM_ECRatio,
  162. ITEM_LCD,
  163. ITEM_DKEY, //added by yxh for GetDKeyStr, 2005.09.02
  164. ITEM_CallerId,
  165. ITEM_CallerIdEx,
  166. ITEM_Vad,
  167. ITEM_PeakFreq,
  168. ITEM_RxCAS,
  169. ITEM_TxCAS,
  170. ITEM_RxR2,
  171. ITEM_TxR2,
  172. ITEM_PendReason,
  173. ITEM_ChStateKeepTime,
  174. ITEM_PhoneNumber,
  175. ITEM_Ploar,
  176. ITEM_BlockRemote,
  177. ITEM_CallTest,
  178. ITEM_CallInTest,
  179. ITEM_CodecType
  180. };
  181. void CTestView::OnInitialUpdate()
  182. {
  183. CFormView::OnInitialUpdate();
  184. GetParentFrame()->RecalcLayout();
  185. ResizeParentToFit();
  186. /*
  187. char szPathName[MAX_PATH];
  188. memset(szPathName, 0, MAX_PATH);
  189. GetCurrentDirectory(MAX_PATH, szPathName);
  190. strcat(szPathName, "\TestRecFiles");
  191. if(_mkdir(szPathName)==-1 && errno!=EEXIST) //创建文件夹,创建失败而且失败原因不是文件夹已经存在
  192. {
  193. MessageBox("创建存放录音文件的文件夹失败", "警告", MB_OK|MB_ICONSTOP);
  194. return;
  195. }
  196. */
  197. if(SsmGetMaxUsableBoard() != SsmGetMaxCfgBoard())
  198. {
  199. bIsInitError = TRUE;
  200. char t[1000];
  201. SsmGetLastErrMsg(szErrMsg);
  202. // wsprintf(t,"警告: 板卡总数=%d, 初始化成功板卡数=%d!n 错误信息="%s"",//masked by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.11
  203. wsprintf(t,BoxMsg_Fmt_InitBoard,//added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.11
  204. SsmGetMaxCfgBoard(),
  205. SsmGetMaxUsableBoard(),
  206. szErrMsg);
  207. if(AfxMessageBox(t, MB_OK, 0) == IDOK)
  208. bIsInitError = FALSE;
  209. }
  210. nMaxCh = SsmGetMaxCh();
  211. TC_ITEM * m_pTCItem;
  212. m_pTCItem = new TC_ITEM;
  213. m_pTCItem->mask = TCIF_TEXT;
  214. m_pTCItem->pszText = "基本函数";
  215. m_TabCtrl.InsertItem(0, m_pTCItem);
  216. m_pTCItem->pszText = "放音函数";
  217. m_TabCtrl.InsertItem(1, m_pTCItem);
  218. m_pTCItem->pszText = "录音函数";
  219. m_TabCtrl.InsertItem(2, m_pTCItem);
  220. m_pTCItem->pszText = "事件驱动";
  221. m_TabCtrl.InsertItem(3, m_pTCItem);
  222. m_pTCItem->pszText = "IP函数";
  223. m_TabCtrl.InsertItem(4, m_pTCItem);
  224. m_pTCItem->pszText = "其它函数";
  225. m_TabCtrl.InsertItem(5, m_pTCItem);
  226. delete m_pTCItem; //added by xxh for memory leak output, 2006.12.06
  227. CRect rcBaseFram;
  228. GetDlgItem(IDC_TAB_VIEW)->GetWindowRect(&rcBaseFram);
  229. m_dlgBase.Create(IDD_VIEW_BASE, this);
  230. m_dlgPlay.Create(IDD_VIEW_PLAY, this);
  231. m_dlgRec.Create(IDD_VIEW_REC, this);
  232. m_dlgEvent.Create(IDD_VIEW_EVENT, this);
  233. m_dlgIP.Create(IDD_VIEW_IP, this);
  234. m_dlgOther.Create(IDD_VIEW_OTHER, this);
  235. hwndView[VIEW_BASE] = m_dlgBase.GetSafeHwnd();
  236. hwndView[VIEW_PLAY] = m_dlgPlay.GetSafeHwnd(); 
  237. hwndView[VIEW_REC] = m_dlgRec.GetSafeHwnd();
  238. hwndView[VIEW_EVENT] = m_dlgEvent.GetSafeHwnd();
  239. hwndView[VIEW_IP] = m_dlgIP.GetSafeHwnd();
  240. hwndView[VIEW_OTHER] = m_dlgOther.GetSafeHwnd();
  241. ScreenToClient(&rcBaseFram);
  242. ::MoveWindow(hwndView[VIEW_BASE], rcBaseFram.left + 1, rcBaseFram.top + 20, rcBaseFram.Width() - 2, rcBaseFram.Height() - 21, 0);
  243. ::MoveWindow(hwndView[VIEW_PLAY], rcBaseFram.left + 1, rcBaseFram.top + 20, rcBaseFram.Width() - 2, rcBaseFram.Height() - 21, 0);
  244. ::MoveWindow(hwndView[VIEW_REC], rcBaseFram.left + 1, rcBaseFram.top + 20, rcBaseFram.Width() - 2, rcBaseFram.Height() - 21, 0);
  245. ::MoveWindow(hwndView[VIEW_EVENT], rcBaseFram.left + 1, rcBaseFram.top + 20, rcBaseFram.Width() - 2, rcBaseFram.Height() - 21, 0);
  246. ::MoveWindow(hwndView[VIEW_IP], rcBaseFram.left + 1, rcBaseFram.top + 20, rcBaseFram.Width() - 2, rcBaseFram.Height() - 21, 0);
  247. ::MoveWindow(hwndView[VIEW_OTHER], rcBaseFram.left + 1, rcBaseFram.top + 20, rcBaseFram.Width() - 2, rcBaseFram.Height() - 21, 0);
  248. ::ShowWindow(hwndView[VIEW_BASE], SW_SHOW);
  249. InitChList(TRUE);
  250. char szTmp[MAX_CH];
  251. for(int ch=0; ch<nMaxCh; ch++)
  252. {
  253. m_SelCurCh.InsertString(ch, _itoa(ch,szTmp,10));
  254. }
  255. m_SelCurCh.SetCurSel(0);
  256. InitChVariable();
  257. OnSelchangeComboSelcurch();
  258. InitCallTest();
  259. SetDlgItemInt(IDC_EDIT_SelectAllChStart, 0,TRUE);
  260. SetDlgItemInt(IDC_EDIT_SelectAllChEnd, nMaxCh-1,TRUE);
  261. uTimerId = SetTimer(1,200,NULL); 
  262. if(uTimerId == 0)
  263. {
  264. char t[200];
  265. bIsInitError = TRUE;
  266. // wsprintf(t,"错误:启动主定时器失败,请退出一些应用程序后,重新启动Testn");//masked by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.11
  267. wsprintf(t,BoxMsg_TimerFail);//added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.11
  268. if(AfxMessageBox(t, MB_OK, 0) == IDOK)
  269. bIsInitError = FALSE;
  270. PostQuitMessage(0);
  271. return ;
  272. }
  273. nISDNItemCnt = 0;
  274. char cNewStat[100];
  275. for(ch=0; ch<nMaxCh; ch++)
  276. {
  277. wsprintf(cNewStat,"%dms",SsmGetChStateKeepTime(ch));
  278. m_ChList.SetItemText( ch, ITEM_ChStateKeepTime, cNewStat );
  279. }
  280. //+++START+++ added by yxh for SpyTest, 2003.08.22
  281. pDlg = new CSpyDialog;
  282. pDlg->Create(IDD_DIALOG_SPY, this);
  283. //+++END+++   added by yxh for SpyTest, 2003.08.22
  284. //++++start++++ added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
  285. InitLang();
  286. //+++++end+++++ added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
  287. }
  288. /
  289. // CTestView printing
  290. BOOL CTestView::OnPreparePrinting(CPrintInfo* pInfo)
  291. {
  292. // default preparation
  293. return DoPreparePrinting(pInfo);
  294. }
  295. void CTestView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  296. {
  297. // TODO: add extra initialization before printing
  298. }
  299. void CTestView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  300. {
  301. // TODO: add cleanup after printing
  302. }
  303. void CTestView::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
  304. {
  305. // TODO: add customized printing code here
  306. }
  307. /
  308. // CTestView diagnostics
  309. #ifdef _DEBUG
  310. void CTestView::AssertValid() const
  311. {
  312. CFormView::AssertValid();
  313. }
  314. void CTestView::Dump(CDumpContext& dc) const
  315. {
  316. CFormView::Dump(dc);
  317. }
  318. CTestDoc* CTestView::GetDocument() // non-debug version is inline
  319. {
  320. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTestDoc)));
  321. return (CTestDoc*)m_pDocument;
  322. }
  323. #endif //_DEBUG
  324. /
  325. // CTestView message handlers
  326. void CTestView::InitChVariable()
  327. {
  328. int ch;
  329. // char szTmp[60];
  330. // strcpy(szTmp,"\..\..\testvoc");
  331. GetCurrentDirectory(MAX_PATH,szCurPath);
  332. // strcat(szCurPath,szTmp);
  333. for(ch=0; ch<nMaxCh; ch++) bEnableOpToneAnalyze[ch]   = (SsmQueryOpToneAnalyze(ch)==1) ? TRUE : FALSE;
  334. for(ch=0; ch<nMaxCh; ch++) bEnableOpBlockRemoteCh[ch] = (SsmQueryOpBlockRemoteCh(ch)==1) ? TRUE : FALSE;
  335. for(ch=0; ch<nMaxCh; ch++) bEnableOpRingDetect[ch]    = (SsmQueryOpRingDetect(ch)==1) ? TRUE : FALSE;
  336. for(ch=0; ch<nMaxCh; ch++) bEnableOpEchoCanceller[ch] = (SsmQueryOpEchoCanceller(ch)==1) ? TRUE : FALSE;
  337. for(ch=0; ch<nMaxCh; ch++) bEnableOpADC[ch]           = (SsmQueryOpADC(ch)==1) ? TRUE : FALSE;
  338. SetDlgItemInt(IDC_EDIT_LocalFlashTime, 500, TRUE);
  339. }
  340. //#define MAXITEM 35 //masked by yxh for GetDKeyStr, 2005.09.02
  341. //#define  MAXITEM 36 //added by yxh for GetDKeyStr, 2005.09.02//masked by LCL for RingCounter, 2005.09.19
  342. //#define  MAXITEM 37 added by LCL for RingCounter, 2005.09.19
  343. //#define  MAXITEM 38 added by cy for GetPLayType, 2006.07.10
  344. #define  MAXITEM 39 added by hunnad for GetPLayType, 2007.10.18
  345. enum{
  346. ITEM_PcmNo,
  347. ITEM_TIME,
  348. ITEM_L2Status,
  349. ITEM_L2D_L3Atom,
  350. ITEM_L3Start,
  351. ITEM_L3_L2DAtom,
  352. ITEM_RefInd,
  353. };
  354. #define MAXISDNITEM 7
  355. void CTestView::UpdateChList()
  356. {
  357. for(int ch=0; ch<nMaxCh; ch++)
  358. {
  359. char cNewStat[250]; 
  360. int nDirection;
  361. switch(SsmGetChType(ch))
  362. {
  363. //++++start++++ masked by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
  364. /* case 14: wsprintf(cNewStat, "变声"); break;
  365. case 9: wsprintf(cNewStat,"软传真"); break;
  366. case 10: wsprintf(cNewStat,"磁石"); break;
  367. case 0: wsprintf(cNewStat,"模拟"); break;
  368. case 1: wsprintf(cNewStat,"内线"); break;
  369. case 2: wsprintf(cNewStat,"坐席"); break;
  370. case 3: wsprintf(cNewStat,"录音"); break;
  371. case 4:
  372. if(SsmGetAutoCallDirection(ch,&nDirection) == 0) 
  373. {
  374. if (nDirection==3)
  375. wsprintf(cNewStat,"SS1Spy"); 
  376. else
  377. wsprintf(cNewStat,"SS1");
  378. }
  379. else if(nDirection==0)                           wsprintf(cNewStat,"SS1i"); 
  380. else if(nDirection==1)                           wsprintf(cNewStat,"SS1o"); 
  381. else                                          wsprintf(cNewStat,"SS1io"); 
  382. break;
  383. case 5: wsprintf(cNewStat,"传真"); break;
  384. case 6:
  385. if(SsmGetAutoCallDirection(ch,&nDirection) == 0) 
  386. {
  387. if (nDirection==3)
  388. wsprintf(cNewStat,"SS7Spy"); 
  389. else
  390. wsprintf(cNewStat,"SS7");
  391. }
  392. else if(nDirection==0)                           wsprintf(cNewStat,"TUPi"); 
  393. else if(nDirection==1)                           wsprintf(cNewStat,"TUPo"); 
  394. else if(nDirection==2)                           wsprintf(cNewStat,"TUPio"); 
  395. else                                             wsprintf(cNewStat,"TUP-x");
  396. break;
  397. case 7: //ISDN User ch
  398. if(SsmGetAutoCallDirection(ch,&nDirection) == 0) 
  399. {
  400. if (nDirection==3)
  401. wsprintf(cNewStat,"ISDNSpy"); 
  402. else
  403. wsprintf(cNewStat,"ISDN");
  404. }
  405. else if(nDirection==0)                           wsprintf(cNewStat,"ISDNi"); 
  406. else if(nDirection==1)                           wsprintf(cNewStat,"ISDNo"); 
  407. else if(nDirection==2)                           wsprintf(cNewStat,"ISDNio"); 
  408. else  wsprintf(cNewStat,"ISDN");
  409. break;
  410. case 8: //Isdn Net ch
  411. if(SsmGetAutoCallDirection(ch,&nDirection) == 0) 
  412. {
  413. if (nDirection==3)
  414. wsprintf(cNewStat,"ISDNNetSpy"); 
  415. else
  416. wsprintf(cNewStat,"ISDNNet");
  417. }
  418. else if(nDirection==0)                           wsprintf(cNewStat,"ISDNNeti"); 
  419. else if(nDirection==1)                           wsprintf(cNewStat,"ISDNNeto"); 
  420. else if(nDirection==2)                           wsprintf(cNewStat,"ISDNNetio"); 
  421. else  wsprintf(cNewStat,"ISDNNet");
  422. break;
  423. case 11:    wsprintf(cNewStat,"ISUPio");break;
  424. //+++START+++ added by yxh for 2B+D, 2005.01.26
  425. case 12: wsprintf(cNewStat, "DTR"); break;
  426. //+++ END +++ added by yxh for 2B+D, 2005.01.26
  427. default:
  428. wsprintf(cNewStat,"-1"); break;
  429. break;
  430. }
  431. */
  432. //+++++end+++++ masked by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
  433. //++++start++++ added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
  434. case 14: LoadString(g_hInstance, IDS_CHTYPE_14, cNewStat, sizeof(cNewStat)); break;
  435. case 9: LoadString(g_hInstance, IDS_CHTYPE_9, cNewStat, sizeof(cNewStat)); break;
  436. case 10: LoadString(g_hInstance, IDS_CHTYPE_10, cNewStat, sizeof(cNewStat)); break;
  437. case 0: LoadString(g_hInstance, IDS_CHTYPE_0, cNewStat, sizeof(cNewStat)); break;
  438. case 1: LoadString(g_hInstance, IDS_CHTYPE_1, cNewStat, sizeof(cNewStat)); break;
  439. case 2: LoadString(g_hInstance, IDS_CHTYPE_2, cNewStat, sizeof(cNewStat)); break;
  440. case 3: LoadString(g_hInstance, IDS_CHTYPE_3, cNewStat, sizeof(cNewStat)); break;
  441. case 4:
  442. if(SsmGetAutoCallDirection(ch,&nDirection) == 0) 
  443. {
  444. if (nDirection==3)
  445. wsprintf(cNewStat,"SS1Spy"); 
  446. else
  447. wsprintf(cNewStat,"SS1");
  448. }
  449. else if(nDirection==0)                           wsprintf(cNewStat,"SS1i"); 
  450. else if(nDirection==1)                           wsprintf(cNewStat,"SS1o"); 
  451. else                                          wsprintf(cNewStat,"SS1io"); 
  452. break;
  453. case 5: LoadString(g_hInstance, IDS_CHTYPE_5, cNewStat, sizeof(cNewStat)); break;
  454. case 6:
  455. if(SsmGetAutoCallDirection(ch,&nDirection) == 0) 
  456. {
  457. if (nDirection==3)
  458. wsprintf(cNewStat,"SS7Spy"); 
  459. else
  460. wsprintf(cNewStat,"SS7");
  461. }
  462. else if(nDirection==0)                           wsprintf(cNewStat,"TUPi"); 
  463. else if(nDirection==1)                           wsprintf(cNewStat,"TUPo"); 
  464. else if(nDirection==2)                           wsprintf(cNewStat,"TUPio"); 
  465. else                                             wsprintf(cNewStat,"TUP-x");
  466. break;
  467. case 7: //ISDN User ch
  468. if(SsmGetAutoCallDirection(ch,&nDirection) == 0) 
  469. {
  470. if (nDirection==3)
  471. wsprintf(cNewStat,"ISDNSpy"); 
  472. else
  473. wsprintf(cNewStat,"ISDN");
  474. }
  475. else if(nDirection==0)                           wsprintf(cNewStat,"ISDNi"); 
  476. else if(nDirection==1)                           wsprintf(cNewStat,"ISDNo"); 
  477. else if(nDirection==2)                           wsprintf(cNewStat,"ISDNio"); 
  478. else  wsprintf(cNewStat,"ISDN");
  479. break;
  480. case 8: //Isdn Net ch
  481. if(SsmGetAutoCallDirection(ch,&nDirection) == 0) 
  482. {
  483. if (nDirection==3)
  484. wsprintf(cNewStat,"ISDNNetSpy"); 
  485. else
  486. wsprintf(cNewStat,"ISDNNet");
  487. }
  488. else if(nDirection==0)                           wsprintf(cNewStat,"ISDNNeti"); 
  489. else if(nDirection==1)                           wsprintf(cNewStat,"ISDNNeto"); 
  490. else if(nDirection==2)                           wsprintf(cNewStat,"ISDNNetio"); 
  491. else  wsprintf(cNewStat,"ISDNNet");
  492. break;
  493. case 11:    wsprintf(cNewStat,"ISUPio");break;
  494. //+++START+++ added by yxh for 2B+D, 2005.01.26
  495. case 12: wsprintf(cNewStat, "DTR"); break;
  496. //+++ END +++ added by yxh for 2B+D, 2005.01.26
  497. //+++START+++ added by wza for voip, 2006.12.27
  498. case 15: wsprintf(cNewStat, "H323"); break;
  499. case 16: wsprintf(cNewStat, "SIP"); break;
  500. //+++ END +++ added by wza for voip, 2005.12.27
  501. default:
  502. wsprintf(cNewStat,"-1"); break;
  503. break;
  504. }
  505. //+++++end+++++ added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
  506. m_ChList.SetItemText( ch, ITEM_ChHwType, cNewStat);
  507. }
  508. }
  509. void CTestView::InitChList(BOOL bFistTime)
  510. {
  511. LV_COLUMN lvc[MAXITEM];
  512. LIST_PARA MainList[MAXITEM] = 
  513. {
  514. {24 ,"Ch",},
  515. {60 ,"类型"},
  516. {60 ,"状态"},
  517. {45 ,"RCnt"},
  518. {80 ,"CheckSendRCnt"}, //added by LCL for RingCounter, 2005.09.19
  519. {100 ,"DTMF接收缓冲区"},
  520. {42 ,"TnChk"},
  521. {42 ,"2ndTnChk"},//ADDED BY yxd 2003.3.20
  522. {24 ,"BI"},
  523. {40 ,"Snd"},
  524. {45 ,"PTime"},
  525. {45 ,"PTimeEx"}, //Added By cqb For SHCTI030902 Test
  526. {30 ,"P%"},
  527. {55 ,"ChkPlay"},
  528. {55,"GetPlayType"},
  529. {55 ,"RecTime"},
  530. {55 ,"ChkRec"},
  531. {70 ,"OvrEnrg"},
  532. {30 ,"AF"},
  533. {30 ,"AFS"},
  534. {30 ,"ECR"},
  535. {80, "LCD"},
  536. {80, "DKEY"}, //added by yxh for GetDKeyStr, 2005.09.02
  537. {80 ,"CallerId"},
  538. {80 ,"CallerIdEx"},
  539. {30 ,"Vad"},
  540. {50 ,"Fpeak"},
  541. {45 ,"RxCAS"},
  542. {45 ,"TxCAS"},
  543. {45 ,"RxR2"},
  544. {45 ,"TxR2"},
  545. {160,"挂起原因"},
  546. {60 ,"状态时间"},
  547. {80 ,"被叫号码"},
  548. {60 ,"极性反转"},
  549. {120 ,"闭塞对端"},
  550. {150 ,"呼出统计:收号/接续/总数/接续错/收号错"},
  551. {150 ,"呼入统计:收号/接续/总数"} ,
  552. {150, "IP编码格式"}
  553. };
  554. m_ChList.SetBkColor(RGB(0,0,0));
  555. m_ChList.SetTextColor(RGB(0,255,0));
  556. m_ChList.SetTextBkColor(RGB(0,0,0));
  557. DWORD dwExtendedStyle = m_ChList.GetExtendedStyle();
  558. dwExtendedStyle |= LVS_EX_FULLROWSELECT;
  559. m_ChList.SetExtendedStyle(dwExtendedStyle);
  560. for(WORD i=0; i<MAXITEM; i++ )
  561. {
  562. lvc[i].mask     =  LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM | LVCF_FMT;
  563. lvc[i].iSubItem = i;
  564. lvc[i].pszText  = MainList[i].szText;
  565. lvc[i].cx       = MainList[i].ColumnWidth;
  566. if(i==0||i==17) lvc[i].fmt = LVCFMT_LEFT;
  567. else            lvc[i].fmt = LVCFMT_RIGHT;
  568. if(bFistTime)
  569. m_ChList.InsertColumn(i,&lvc[i]);
  570. }
  571. m_ChList.DeleteAllItems();
  572. char dig[4];
  573. for(i=0; i<nMaxCh; i++)
  574. m_ChList.InsertItem(i,_itoa(i,dig,10));
  575. for(int ch=0; ch<nMaxCh; ch++)
  576. {
  577. UpdateChList();
  578. nOldChState[ch] = -100;
  579. nOldRingCount[ch] = -100;
  580. nOldRingFlag[ch] = -100;
  581. nSendRingRst[ch] = -100; //added by LCL for RingCounter, 2005.09.19
  582. nSendRingCnt[ch] = -100; //added by LCL for RingCounter, 2005.09.19
  583. nToneAnalyzeResult[ch] = -100;
  584.         n2ndToneAnalyzeResult[ch] = -100;//ADDED BY yxd 2003.3.20
  585. nOldChkPlay[ch] = -100;
  586. nOldGetPlayType[ch] = -100;
  587. nOldChkRec[ch] = -100;
  588. nOldSsmDetectBargeIn[ch] = -100;
  589. lOldPlayedTime[ch] = -100L;
  590. lOldPlayedTimeEx[ch] = -100L;
  591. lOldRecTime[ch] = -100l;
  592. lOldOverallEnergy[ch] = -100l;
  593. nPlayedPct[ch] = -100;
  594. nOldCallerIdEx[ch] = -100;
  595. nOldEchoCancellerState[ch] = -100;
  596. nOldEchoCancellerStudyState[ch] = -100;
  597. nOldEchoCancellerRatio[ch] = -100;
  598. nOldCallerI[ch] = -100;
  599. nOldRxPhoNumLen[ch] = -100;
  600. nOldLineVoltage[ch] = -100;
  601. nOldPeakFrq[ch] = -100;
  602. nOldGetCAS[ch] = -100;
  603. nOldSendingCAS[ch] = -100;
  604. nOldGetR2[ch] = -100;
  605. nOldSendingR2[ch] = -100;
  606. nOldGetSendingR2[ch] = -100;
  607. nOldSendingR2Mode[ch] = -100;
  608. nOldPhoNumStr[ch] = -100;
  609. nOldPloarRvrsCount[ch] = -100;
  610. nOldBlockRemoteStatus[ch] = -100;
  611. //add by JK shi for 支持SetKB功能, begin
  612. nOldPendReason[ch] = -100;
  613. //add by JK shi for 支持SetKB功能, end
  614. }
  615. }
  616. void CTestView::OnDestroy() 
  617. {
  618. CFormView::OnDestroy();
  619. // TODO: Add your message handler code here
  620. if(nIsSsmStartCtiOK == 0) 
  621. {
  622. SsmCloseCti();
  623. }
  624. KillTimer( uTimerId );
  625. //+++START+++ added by yxh for SpyTest, 2003.08.22
  626. if(pDlg != NULL)
  627. {
  628. delete pDlg;
  629. }
  630. //+++END+++   added by yxh for SpyTest, 2003.08.22
  631. }
  632. long lOldTime[MAX_CH];
  633. DWORD dwEnergyTable[MAX_CH];
  634. void CTestView::OnTimer(UINT nIDEvent) 
  635. {
  636. // TODO: Add your message handler code here and/or call default
  637. char cNewStat[600],cOldStat[600],szRxCallerId[300];
  638. //add by JK shi for 支持SetKB功能, begin
  639. int nNewPendReason, nShowUpdate ;
  640. //add by JK shi for 支持SetKB功能, end
  641. int nResult, nNewChState, nRingFlag, nRet ;
  642. long lResult;
  643. //static long lOldTime[MAX_CH];
  644. if(!bTimerOpen)
  645. return ;
  646. int nEnergy;
  647. // if((lResult=SsmGetOverallEnergyAllCh(0, 30, dwEnergyTable)) != -1)
  648. for(int k=0; k<nMaxCh; k++)
  649. {
  650. nEnergy=SsmGetOverallEnergy(k);
  651. if(nEnergy>=0)
  652. {
  653. _itoa(nEnergy,cNewStat,10); 
  654. m_ChList.SetItemText( k, ITEM_OverallEnergy, cNewStat );
  655. }
  656. }
  657. for(int ch=0; ch<nMaxCh; ch++)
  658. {
  659. if((nNewChState=SsmGetChState(ch)) != nOldChState[ch])
  660. //++++start++++ masked by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
  661. /* switch(nNewChState)
  662. {
  663. case -1: wsprintf(cNewStat,"-1"); break;
  664. case S_CALL_STANDBY: wsprintf(cNewStat,"空闲"); break;
  665. case S_CALL_PICKUPED: wsprintf(cNewStat,"摘机"); break;
  666. case S_CALL_RINGING: wsprintf(cNewStat,"振铃"); break;
  667. case S_CALL_TALKING: wsprintf(cNewStat,"通话"); break;
  668. case S_CALL_ANALOG_WAITDIALTONE: wsprintf(cNewStat,"WtDT"); break;
  669. case S_CALL_ANALOG_TXPHONUM: wsprintf(cNewStat,"Dl.."); break;
  670. case S_CALL_ANALOG_WAITDIALRESULT: wsprintf(cNewStat,"WtDl"); break;
  671. case S_CALL_PENDING: wsprintf(cNewStat,"挂起"); break;
  672. case S_CALL_OFFLINE: wsprintf(cNewStat,"断线"); break;
  673. case S_CALL_WAIT_REMOTE_PICKUP: wsprintf(cNewStat,"回铃"); break;
  674. case S_CALL_UNAVAILABLE: wsprintf(cNewStat,"不可用"); break;
  675. case S_CALL_LOCKED: wsprintf(cNewStat,"呼出保留"); break;
  676. case S_CALL_LocalBlock: wsprintf(cNewStat,"本地闭塞"); break;
  677. case S_CALL_RemoteBlock: wsprintf(cNewStat,"对端闭塞"); break;
  678. case S_CALL_Ss1InWaitPhoNum  : wsprintf(cNewStat,"接收被叫"); break;
  679. case S_CALL_Ss1InWaitFwdStop : wsprintf(cNewStat,"等待前向"); break;
  680. case S_CALL_Ss1InWaitCallerID: wsprintf(cNewStat,"接收主叫"); break;
  681. case S_CALL_Ss1InWaitKD      : wsprintf(cNewStat,"接收KD"); break;
  682. case S_CALL_Ss1InWaitKDStop  : wsprintf(cNewStat,"等KD停发"); break;
  683. case S_CALL_SS1_SAYIDLE      : wsprintf(cNewStat,"发送示闲"); break;
  684. case S_CALL_SS1WaitIdleCAS   : wsprintf(cNewStat,"等待示闲"); break;
  685. case S_CALL_SS1PhoNumHoldup  : wsprintf(cNewStat,"S_CALL_SS1PhoNumHoldup"); break;
  686. case S_CALL_Ss1InWaitStopSendA3p: wsprintf(cNewStat,"S_CALL_Ss1InWaitStopSendA3p"); break;
  687. case S_CALL_Ss1OutWaitBwdAck      : wsprintf(cNewStat,"等待后向占用证实信令”"); break;
  688. case S_CALL_Ss1OutTxPhoNum        : wsprintf(cNewStat,"发送被叫"); break;
  689. case S_CALL_Ss1OutWaitAppendPhoNum: wsprintf(cNewStat,"号码不足"); break;
  690. case S_CALL_Ss1OutTxCallerID      : wsprintf(cNewStat,"发送主叫"); break;
  691. case S_CALL_Ss1OutWaitKB          : wsprintf(cNewStat,"等待KB"); break;
  692. case S_FAX_ROUND   : wsprintf(cNewStat,"状态转移过程中"); break;
  693. case S_FAX_PhaseA  : wsprintf(cNewStat,"呼叫建立"); break;
  694. case S_FAX_PhaseB  : wsprintf(cNewStat,"报文前处理"); break;
  695. case S_FAX_SendDCS : wsprintf(cNewStat,"发送DCS信号"); break;
  696. case S_FAX_Train   : wsprintf(cNewStat,"传输训练"); break;
  697. case S_FAX_PhaseC  : wsprintf(cNewStat,"报文传输"); break;
  698. case S_FAX_PhaseD  : wsprintf(cNewStat,"报文后处理"); break;
  699. case S_FAX_NextPage: wsprintf(cNewStat,"传输下页"); break;
  700. case S_FAX_AllSent : wsprintf(cNewStat,"传输结束"); break;
  701. case S_FAX_PhaseE  : wsprintf(cNewStat,"呼叫释放"); break;
  702. case S_FAX_Reset   : wsprintf(cNewStat,"复位猫"); break;
  703. case S_FAX_Init    : wsprintf(cNewStat,"初始化猫"); break;
  704. case S_FAX_RcvDCS  : wsprintf(cNewStat,"接收DCS"); break;
  705. case S_FAX_SendFTT : wsprintf(cNewStat,"发送训练失败信号FTT"); break;
  706. case S_FAX_SendCFR : wsprintf(cNewStat,"发送证实信号CFR"); break;
  707. case S_TUP_WaitPcmReset: wsprintf(cNewStat,"电路复原"); break;
  708. case S_TUP_WaitSAM: wsprintf(cNewStat,"等待SAM"); break;
  709. case S_TUP_WaitGSM: wsprintf(cNewStat,"等待GSM"); break;
  710. case S_TUP_WaitCLF: wsprintf(cNewStat,"等待CLF"); break;
  711. case S_TUP_WaitPrefix: wsprintf(cNewStat,"接收局号"); break;
  712. case S_TUP_WaitDialAnswer: wsprintf(cNewStat,"等待应答"); break;
  713. case S_TUP_WaitRLG: wsprintf(cNewStat,"等待RLG"); break;
  714. case S_ISDN_OUT_WAIT_NET_RESPONSE: wsprintf(cNewStat, "等待网络响应"); break;
  715. case S_ISDN_OUT_PLS_APPEND_NO: wsprintf(cNewStat, "等待追加号码"); break;
  716. case S_ISDN_IN_CHK_CALL_IN: wsprintf(cNewStat, "检测到呼入"); break;
  717. case S_ISDN_IN_RCVING_NO: wsprintf(cNewStat,"正在接收号码"); break;
  718. case S_ISDN_IN_WAIT_TALK: wsprintf(cNewStat, "准备进入通话"); break;
  719. case S_ISDN_OUT_WAIT_ALERT: wsprintf(cNewStat, "等待提醒信号"); break;
  720. case S_ISDN_CALL_BEGIN: wsprintf(cNewStat, "呼叫起始"); break;
  721. case S_ISDN_WAIT_HUANGUP: wsprintf(cNewStat, "等待释放"); break;
  722. case S_CALL_SENDRING: wsprintf(cNewStat, "发送振铃"); break;
  723. case S_ISUP_WaitSAM:     wsprintf(cNewStat, "等待SAM");     break;
  724. case S_ISUP_WaitRLC:     wsprintf(cNewStat, "等待RLC");     break;
  725. case S_ISUP_WaitReset:     wsprintf(cNewStat, "电路复原");     break;
  726. case S_ISUP_LocallyBlocked: wsprintf(cNewStat, "本地阻断");     break;
  727. case S_ISUP_RemotelyBlocked: wsprintf(cNewStat, "远端阻断");     break;
  728. case S_ISUP_WaitDialAnswer:         wsprintf(cNewStat, "等待ACM"); break;
  729. case S_ISUP_WaitINF:     wsprintf(cNewStat, "等待INF");     break;
  730. case S_DTRC_ACTIVE: wsprintf(cNewStat, "Active");     break;
  731. default: wsprintf(cNewStat,"S=%d",nNewChState); break;
  732. }*/
  733. //+++++end+++++ masked by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
  734. //++++start++++ added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
  735. switch(nNewChState)
  736. {
  737. case -1: wsprintf(cNewStat,"-1"); break;
  738. case S_CALL_STANDBY: LoadString(g_hInstance, IDS_S_CALL_STANDBY, cNewStat, sizeof(cNewStat)); break;
  739. case S_CALL_PICKUPED: LoadString(g_hInstance, IDS_S_CALL_PICKUPED, cNewStat, sizeof(cNewStat)); break;
  740. case S_CALL_RINGING: LoadString(g_hInstance, IDS_S_CALL_RINGING, cNewStat, sizeof(cNewStat)); break;
  741. case S_CALL_TALKING: LoadString(g_hInstance, IDS_S_CALL_TALKING, cNewStat, sizeof(cNewStat)); break;
  742. case S_CALL_ANALOG_WAITDIALTONE: wsprintf(cNewStat,"WtDT"); break;
  743. case S_CALL_ANALOG_TXPHONUM: wsprintf(cNewStat,"Dl.."); break;
  744. case S_CALL_ANALOG_WAITDIALRESULT: wsprintf(cNewStat,"WtDl"); break;
  745. case S_CALL_PENDING: LoadString(g_hInstance, IDS_S_CALL_PENDING, cNewStat, sizeof(cNewStat)); break;
  746. case S_CALL_OFFLINE: LoadString(g_hInstance, IDS_S_CALL_OFFLINE, cNewStat, sizeof(cNewStat)); break;
  747. case S_CALL_WAIT_REMOTE_PICKUP: LoadString(g_hInstance, IDS_S_CALL_WAIT_REMOTE_PICKUP, cNewStat, sizeof(cNewStat)); break;
  748. case S_CALL_UNAVAILABLE: LoadString(g_hInstance, IDS_S_CALL_UNAVAILABLE, cNewStat, sizeof(cNewStat)); break;
  749. case S_CALL_LOCKED: LoadString(g_hInstance, IDS_S_CALL_LOCKED, cNewStat, sizeof(cNewStat)); break;
  750. case S_CALL_LocalBlock: LoadString(g_hInstance, IDS_S_CALL_LocalBlock, cNewStat, sizeof(cNewStat)); break;
  751. case S_CALL_RemoteBlock: LoadString(g_hInstance, IDS_S_CALL_RemoteBlock, cNewStat, sizeof(cNewStat)); break;
  752. case S_CALL_Ss1InWaitPhoNum  : LoadString(g_hInstance, IDS_S_CALL_Ss1InWaitPhoNum, cNewStat, sizeof(cNewStat)); break;
  753. case S_CALL_Ss1InWaitFwdStop : LoadString(g_hInstance, IDS_S_CALL_Ss1InWaitFwdStop, cNewStat, sizeof(cNewStat)); break;
  754. case S_CALL_Ss1InWaitCallerID: LoadString(g_hInstance, IDS_S_CALL_Ss1InWaitCallerID, cNewStat, sizeof(cNewStat)); break;
  755. case S_CALL_Ss1InWaitKD      : LoadString(g_hInstance, IDS_S_CALL_Ss1InWaitKD, cNewStat, sizeof(cNewStat)); break;
  756. case S_CALL_Ss1InWaitKDStop  : LoadString(g_hInstance, IDS_S_CALL_Ss1InWaitKDStop, cNewStat, sizeof(cNewStat)); break;
  757. case S_CALL_SS1_SAYIDLE      : LoadString(g_hInstance, IDS_S_CALL_SS1_SAYIDLE, cNewStat, sizeof(cNewStat)); break;
  758. case S_CALL_SS1WaitIdleCAS   : LoadString(g_hInstance, IDS_S_CALL_SS1WaitIdleCAS, cNewStat, sizeof(cNewStat)); break;
  759. case S_CALL_SS1PhoNumHoldup  : LoadString(g_hInstance, IDS_S_CALL_SS1PhoNumHoldup, cNewStat, sizeof(cNewStat)); break;
  760. case S_CALL_Ss1InWaitStopSendA3p: LoadString(g_hInstance, IDS_S_CALL_Ss1InWaitStopSendA3p, cNewStat, sizeof(cNewStat)); break;
  761. case S_CALL_Ss1OutWaitBwdAck      : LoadString(g_hInstance, IDS_S_CALL_Ss1OutWaitBwdAck, cNewStat, sizeof(cNewStat)); break;
  762. case S_CALL_Ss1OutTxPhoNum        : LoadString(g_hInstance, IDS_S_CALL_Ss1OutTxPhoNum, cNewStat, sizeof(cNewStat)); break;
  763. case S_CALL_Ss1OutWaitAppendPhoNum: LoadString(g_hInstance, IDS_S_CALL_Ss1OutWaitAppendPhoNum, cNewStat, sizeof(cNewStat)); break;
  764. case S_CALL_Ss1OutTxCallerID      : LoadString(g_hInstance, IDS_S_CALL_Ss1OutTxCallerID, cNewStat, sizeof(cNewStat)); break;
  765. case S_CALL_Ss1OutWaitKB          : LoadString(g_hInstance, IDS_S_CALL_Ss1OutWaitKB, cNewStat, sizeof(cNewStat)); break;
  766. case S_FAX_ROUND   : LoadString(g_hInstance, IDS_S_FAX_ROUND, cNewStat, sizeof(cNewStat)); break;
  767. case S_FAX_PhaseA  : LoadString(g_hInstance, IDS_S_FAX_PhaseA, cNewStat, sizeof(cNewStat)); break;
  768. case S_FAX_PhaseB  : LoadString(g_hInstance, IDS_S_FAX_PhaseB, cNewStat, sizeof(cNewStat)); break;
  769. case S_FAX_SendDCS : LoadString(g_hInstance, IDS_S_FAX_SendDCS, cNewStat, sizeof(cNewStat)); break;
  770. case S_FAX_Train   : LoadString(g_hInstance, IDS_S_FAX_Train, cNewStat, sizeof(cNewStat)); break;
  771. case S_FAX_PhaseC  : LoadString(g_hInstance, IDS_S_FAX_PhaseC, cNewStat, sizeof(cNewStat)); break;
  772. case S_FAX_PhaseD  : LoadString(g_hInstance, IDS_S_FAX_PhaseD, cNewStat, sizeof(cNewStat)); break;
  773. case S_FAX_NextPage: LoadString(g_hInstance, IDS_S_FAX_NextPage, cNewStat, sizeof(cNewStat)); break;
  774. case S_FAX_AllSent : LoadString(g_hInstance, IDS_S_FAX_AllSent, cNewStat, sizeof(cNewStat)); break;
  775. case S_FAX_PhaseE  : LoadString(g_hInstance, IDS_S_FAX_PhaseE, cNewStat, sizeof(cNewStat)); break;
  776. case S_FAX_Reset   : LoadString(g_hInstance, IDS_S_FAX_Reset, cNewStat, sizeof(cNewStat)); break;
  777. case S_FAX_Init    : LoadString(g_hInstance, IDS_S_FAX_Init, cNewStat, sizeof(cNewStat)); break;
  778. case S_FAX_RcvDCS  : LoadString(g_hInstance, IDS_S_FAX_RcvDCS, cNewStat, sizeof(cNewStat)); break;
  779. case S_FAX_SendFTT : LoadString(g_hInstance, IDS_S_FAX_SendFTT, cNewStat, sizeof(cNewStat)); break;
  780. case S_FAX_SendCFR : LoadString(g_hInstance, IDS_S_FAX_SendCFR, cNewStat, sizeof(cNewStat)); break;
  781. case S_TUP_WaitPcmReset: LoadString(g_hInstance, IDS_S_TUP_WaitPcmReset, cNewStat, sizeof(cNewStat)); break;
  782. case S_TUP_WaitSAM: LoadString(g_hInstance, IDS_S_TUP_WaitSAM, cNewStat, sizeof(cNewStat)); break;
  783. case S_TUP_WaitGSM: LoadString(g_hInstance, IDS_S_TUP_WaitGSM, cNewStat, sizeof(cNewStat)); break;
  784. case S_TUP_WaitCLF: LoadString(g_hInstance, IDS_S_TUP_WaitCLF, cNewStat, sizeof(cNewStat)); break;
  785. case S_TUP_WaitPrefix: LoadString(g_hInstance, IDS_S_TUP_WaitPrefix, cNewStat, sizeof(cNewStat)); break;
  786. case S_TUP_WaitDialAnswer: LoadString(g_hInstance, IDS_S_TUP_WaitDialAnswer, cNewStat, sizeof(cNewStat)); break;
  787. case S_TUP_WaitRLG: LoadString(g_hInstance, IDS_S_TUP_WaitRLG, cNewStat, sizeof(cNewStat)); break;
  788. case S_ISDN_OUT_WAIT_NET_RESPONSE: LoadString(g_hInstance, IDS_S_ISDN_OUT_WAIT_NET_RESPONSE, cNewStat, sizeof(cNewStat)); break;
  789. case S_ISDN_OUT_PLS_APPEND_NO: LoadString(g_hInstance, IDS_S_ISDN_OUT_PLS_APPEND_NO, cNewStat, sizeof(cNewStat)); break;
  790. case S_ISDN_IN_CHK_CALL_IN: LoadString(g_hInstance, IDS_S_ISDN_IN_CHK_CALL_IN, cNewStat, sizeof(cNewStat)); break;
  791. case S_ISDN_IN_RCVING_NO: LoadString(g_hInstance, IDS_S_ISDN_IN_RCVING_NO, cNewStat, sizeof(cNewStat)); break;
  792. case S_ISDN_IN_WAIT_TALK: LoadString(g_hInstance, IDS_S_ISDN_IN_WAIT_TALK, cNewStat, sizeof(cNewStat)); break;
  793. case S_ISDN_OUT_WAIT_ALERT: LoadString(g_hInstance, IDS_S_ISDN_OUT_WAIT_ALERT, cNewStat, sizeof(cNewStat)); break;
  794. case S_ISDN_CALL_BEGIN: LoadString(g_hInstance, IDS_S_ISDN_CALL_BEGIN, cNewStat, sizeof(cNewStat)); break;
  795. case S_ISDN_WAIT_HUANGUP: LoadString(g_hInstance, IDS_S_ISDN_WAIT_HUANGUP, cNewStat, sizeof(cNewStat)); break;
  796. case S_CALL_SENDRING: LoadString(g_hInstance, IDS_S_CALL_SENDRING, cNewStat, sizeof(cNewStat)); break;
  797. case S_ISUP_WaitSAM:     LoadString(g_hInstance, IDS_S_ISUP_WaitSAM, cNewStat, sizeof(cNewStat)); break;
  798. case S_ISUP_WaitRLC:     LoadString(g_hInstance, IDS_S_ISUP_WaitRLC, cNewStat, sizeof(cNewStat)); break;
  799. case S_ISUP_WaitReset:     LoadString(g_hInstance, IDS_S_ISUP_WaitReset, cNewStat, sizeof(cNewStat)); break;
  800. case S_ISUP_LocallyBlocked: LoadString(g_hInstance, IDS_S_ISUP_LocallyBlocked, cNewStat, sizeof(cNewStat)); break;
  801. case S_ISUP_RemotelyBlocked: LoadString(g_hInstance, IDS_S_ISUP_RemotelyBlocked, cNewStat, sizeof(cNewStat)); break;
  802. case S_ISUP_WaitDialAnswer:         LoadString(g_hInstance, IDS_S_ISUP_WaitDialAnswer, cNewStat, sizeof(cNewStat)); break;
  803. case S_ISUP_WaitINF:     LoadString(g_hInstance, IDS_S_ISUP_WaitINF, cNewStat, sizeof(cNewStat)); break;
  804. case S_DTRC_ACTIVE: LoadString(g_hInstance, IDS_S_DTRC_ACTIVE, cNewStat, sizeof(cNewStat)); break;
  805. case S_CALL_VOIP_DIALING: LoadString(g_hInstance, IDS_S_VOIP_DIALING, cNewStat, sizeof(cNewStat)); break;
  806. case S_CALL_VOIP_WAIT_CONNECTED: LoadString(g_hInstance, IDS_S_VOIP_WAIT_CONNECTED, cNewStat, sizeof(cNewStat)); break;
  807. case S_CALL_VOIP_CHANNEL_UNUSABLE: LoadString(g_hInstance, IDS_S_VOIP_CHANNEL_UNUSABLE, cNewStat, sizeof(cNewStat)); break;
  808. default: wsprintf(cNewStat,"S=%d",nNewChState); break;
  809. }
  810. //+++++end+++++ added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
  811. m_ChList.SetItemText( ch, ITEM_ChState, cNewStat );
  812. }
  813. if(bEnableOpRingDetect[ch])
  814. {
  815. nResult = SsmGetRingCount(ch);
  816. nRingFlag = SsmGetRingFlag(ch);
  817. if(nResult!=nOldRingCount[ch] || nRingFlag!=nOldRingFlag[ch])
  818. {
  819. wsprintf(cNewStat,"%d:%d",nRingFlag,nResult);
  820. m_ChList.SetItemText( ch, ITEM_RingCount, cNewStat );
  821. nOldRingCount[ch] = nResult;
  822. nOldRingFlag[ch] = nRingFlag;
  823. }
  824. }
  825. //+++START+++ added by LCL for RingCounter, 2005.09.19
  826. int nSendRCnt = 0;
  827. nResult = SsmCheckSendRing(ch, &nSendRCnt);
  828. if(nSendRingRst[ch] != nResult || nSendRingCnt[ch] != nSendRCnt)
  829. {
  830. wsprintf(cNewStat, "%d:%d", nSendRCnt, nResult);
  831. m_ChList.SetItemText(ch, ITEM_SendRingCount, cNewStat);
  832. nSendRingCnt[ch] = nSendRCnt;
  833. nSendRingRst[ch] = nResult;
  834. }
  835. //+++ END +++ added by LCL for RingCounter, 2005.09.19
  836. nResult = SsmGetDtmfStr(ch,cNewStat);
  837. if(nResult  == -1) wsprintf(cNewStat,"-1");
  838. else if (nResult  == 0) wsprintf(cNewStat,"");
  839. nResult = m_ChList.GetItemText( ch, ITEM_RxDTMF, cOldStat, 255 );
  840. if(nResult==0)
  841. cOldStat[0]='';
  842. if ( strcmp(cNewStat,cOldStat) != 0 ) 
  843. m_ChList.SetItemText( ch, ITEM_RxDTMF, cNewStat );
  844. if(bEnableOpToneAnalyze[ch])
  845. {
  846. if((nResult=SsmGetToneAnalyzeResult(ch)) != nToneAnalyzeResult[ch])
  847. {
  848. nToneAnalyzeResult[ch] = nResult;
  849. switch(nResult)
  850. {
  851. case -1: wsprintf(cNewStat,"-1"); break;
  852. case 0: wsprintf(cNewStat,"?"); break;
  853. case 1: wsprintf(cNewStat,"DlTn"); break;
  854. case 2: wsprintf(cNewStat,"BsTn"); break;
  855. case 3: wsprintf(cNewStat,"EcTn"); break;
  856. case 4: wsprintf(cNewStat,"ENoVc"); break;
  857. case 5: wsprintf(cNewStat,"NoVoc"); break;
  858. case 6: wsprintf(cNewStat,"Voc");  break;
  859. case 7: wsprintf(cNewStat,"VcF1"); break;
  860. case 8: wsprintf(cNewStat,"VcF2"); break;
  861. case 9: wsprintf(cNewStat,"AptTn"); break;//added by zyq for 060901-bug-测试组-修改Test的一些bug, 2006.09.05
  862. }
  863. m_ChList.SetItemText( ch, ITEM_ToneAnalyzeResult, cNewStat );
  864. }
  865.             //++start++  ADDED BY yxd 2003.3.20
  866. if((nResult=SsmGet2ndToneAnalyzeResult(ch)) != n2ndToneAnalyzeResult[ch])
  867. {
  868. n2ndToneAnalyzeResult[ch] = nResult;
  869. switch(nResult)
  870. {
  871. case -1: wsprintf(cNewStat,"-1"); break;
  872. case 0: wsprintf(cNewStat,"?"); break;
  873. case 1: wsprintf(cNewStat,"DlTn"); break;
  874. case 2: wsprintf(cNewStat,"BsTn"); break;
  875. case 3: wsprintf(cNewStat,"EcTn"); break;
  876. //+++START+++ added by zyq for 060901-bug-测试组-修改Test的一些bug, 2006.09.05
  877. case 4: wsprintf(cNewStat,"ENoVc"); break;
  878. case 5: wsprintf(cNewStat,"NoVoc"); break;
  879. case 6: wsprintf(cNewStat,"Voc");  break;
  880. case 7: wsprintf(cNewStat,"VcF1"); break;
  881. case 8: wsprintf(cNewStat,"VcF2"); break;
  882. case 9: wsprintf(cNewStat,"AptTn"); break;
  883. //+++ END +++ added by zyq for 060901-bug-测试组-修改Test的一些bug, 2006.09.05
  884. }
  885. m_ChList.SetItemText( ch, ITEM_2ndToneAnalyzeResult, cNewStat );
  886. }
  887. //++end++
  888. /*
  889. if((lResult=SsmGetOverallEnergy(ch)) != lOldOverallEnergy[ch])
  890. {
  891. lOldOverallEnergy[ch] = lResult;
  892. _itoa(lResult,cNewStat,10); 
  893. m_ChList.SetItemText( ch, ITEM_OverallEnergy, cNewStat );
  894. }
  895. */
  896. if((nResult=SsmGetPeakFrq(ch)) != nOldPeakFrq[ch])
  897. {
  898. nOldPeakFrq[ch] = nResult;
  899. if(nResult==-1) wsprintf(cNewStat,"-1");
  900. else            wsprintf(cNewStat,"%dHz",nResult);
  901. m_ChList.SetItemText( ch, ITEM_PeakFreq, cNewStat );
  902. }
  903. }
  904. //int WINAPI SsmDetectBargeIn(int ch)
  905. if((nResult=SsmDetectBargeIn(ch)) != nOldSsmDetectBargeIn[ch])
  906. {
  907. nOldSsmDetectBargeIn[ch] = nResult;
  908. wsprintf(cNewStat,"%d",nResult); 
  909. m_ChList.SetItemText( ch, ITEM_Burgein, cNewStat );
  910. }
  911. //++++start++++ masked by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
  912. /* switch(SsmDetectNoSound(ch))
  913. {
  914. case -1: wsprintf(cNewStat,"-1"); break;
  915. case 0: wsprintf(cNewStat,"0:%d",SsmGetNoSoundTime(ch)/1000); break;
  916. case 1: wsprintf(cNewStat,"无声",SsmGetNoSoundTime(ch)/1000); break;
  917. }
  918. */
  919. //+++++end+++++ masked by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
  920. //++++start++++ added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
  921. switch(SsmDetectNoSound(ch))
  922. {
  923. case -1: wsprintf(cNewStat,"-1"); break;
  924. case 0: wsprintf(cNewStat,"0:%d",SsmGetNoSoundTime(ch)/1000); break;
  925. case 1: LoadString(g_hInstance, IDS_DetectSnd_NoSnd, cNewStat, sizeof(cNewStat)); break;
  926. }
  927. //+++++end+++++ added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
  928. if(strcmp(cNewStat,szOldNoSoundState[ch]) != 0 ) 
  929. {
  930. strcpy(szOldNoSoundState[ch],cNewStat);
  931. m_ChList.SetItemText( ch, ITEM_DetectNoSound, cNewStat );
  932. }
  933. if((lResult=SsmGetPlayedTime(ch)) != lOldPlayedTime[ch])
  934. {
  935. lOldPlayedTime[ch] = lResult;
  936. _itoa(lResult,cNewStat,10); 
  937. m_ChList.SetItemText( ch, ITEM_PlayTime, cNewStat );
  938. }
  939. //++++START++++ added by cqb for SHCTI030902 Test
  940. if((lResult=SsmGetPlayedTimeEx(ch)) != lOldPlayedTimeEx[ch])
  941. {
  942. lOldPlayedTimeEx[ch] = lResult;
  943. _itoa(lResult,cNewStat,10); 
  944. m_ChList.SetItemText( ch, ITEM_PlayTimeEx, cNewStat );
  945. }
  946. //++++END++++
  947. if((nResult=SsmGetPlayedPercentage(ch)) != nPlayedPct[ch])
  948. {
  949. nPlayedPct[ch] = nResult;
  950. _itoa(nResult,cNewStat,10);
  951. m_ChList.SetItemText( ch, ITEM_PlayPercentage, cNewStat );
  952. }
  953. if((nResult=SsmCheckPlay(ch)) != nOldChkPlay[ch])
  954. {
  955. nOldChkPlay[ch] = nResult;
  956. switch(nResult)
  957. {
  958. case -1: wsprintf(cNewStat,"-1"); break;
  959. case CHKPLAY_PLAYING: wsprintf(cNewStat,"Playing"); break;
  960. case CHKPLAY_NORMAL_END:wsprintf(cNewStat,"NmlEnd"); break;
  961. case CHKPLAY_DTMF_END: wsprintf(cNewStat,"DtmfEnd"); break;
  962. case CHKPLAY_BURGEIN: wsprintf(cNewStat,"BIEnd"); break;
  963. case CHKPLAY_REMOTEHANGUP_END:wsprintf(cNewStat,"REMOTE HANGUP"); break;
  964. case CHKPLAY_APPLICATION_END:wsprintf(cNewStat,"APP_STOPPLAY"); break;
  965. case CHKPLAY_PAUSED: wsprintf(cNewStat,"APP_PAUSED"); break;
  966. case CHKPLAY_LINKFROM_END: wsprintf(cNewStat,"LINKFORM_END"); break;
  967. case CHKPLAY_NETDISCONNECT: wsprintf(cNewStat,"NET_DISCONNECT"); break;//Added by yxh, for 网络文件放音改进, 2003.09.30
  968. }
  969. m_ChList.SetItemText( ch, ITEM_ChkPlay, cNewStat );
  970. }
  971.       if((nResult=SsmGetPlayType(ch))!= nOldGetPlayType[ch])
  972.   {
  973.   nOldGetPlayType[ch] = nResult;
  974.   switch(nResult)
  975.   {
  976. case -1: wsprintf(cNewStat,"-1"); break;
  977. case 0: wsprintf(cNewStat,"PLAY_NULL"); break;
  978. case 1:wsprintf(cNewStat,"PLAY_FILE"); break;
  979. case 2: wsprintf(cNewStat,"PLAY_FILE_PAUSED"); break;
  980. case 3: wsprintf(cNewStat,"PLAY_FILELIST"); break;
  981. case 4:wsprintf(cNewStat,"PLAY_INDEXLIST"); break;
  982. case 5:wsprintf(cNewStat,"PLAY_MEM"); break;
  983. case 6: wsprintf(cNewStat,"PLAY_MEMLIST"); break;
  984. case 7: wsprintf(cNewStat,"PLAY_FSK"); break;
  985. case 8: wsprintf(cNewStat,"PLAY_MONITOR"); break;
  986. case 9:wsprintf(cNewStat,"PLAY_MEMBLOCK");break;
  987.   }
  988.   m_ChList.SetItemText(ch,ITEM_GetPlayType,cNewStat);
  989.   }
  990. if((lResult=SsmGetRecTime(ch)) != lOldRecTime[ch])
  991. {
  992. lOldRecTime[ch] = lResult;
  993. _itoa(lResult,cNewStat,10); 
  994. m_ChList.SetItemText( ch, ITEM_RecTime, cNewStat );
  995. }
  996. if((nResult=SsmCheckRecord(ch)) != nOldChkRec[ch])
  997. {
  998. nOldChkRec[ch] = nResult;
  999. switch(nResult)
  1000. {
  1001. case -1:
  1002. wsprintf(cNewStat,"-1"); break;
  1003. case CHKRECORD_RECORDING:    //0: recording
  1004. wsprintf(cNewStat,"recording"); break;
  1005. case CHKRECORD_APPLICATION_END: //1: application end
  1006. wsprintf(cNewStat,"AppEnd"); break;
  1007. case CHKRECORD_DTMF_END:    //2: record operation is stopped by DTMF key
  1008. wsprintf(cNewStat,"DtmfEnd"); break;
  1009. case CHKRECORD_REMOTEHANGUP_END://3: recor operation is stopped by remote hangup
  1010. wsprintf(cNewStat,"REMOTE HANGUP"); break;
  1011. case CHECKRECORD_TIMEUP_END:    //4: end of record for time up.
  1012. wsprintf(cNewStat,"TIMEUP_END"); break;
  1013. case CHECKRECORD_FILE_PAUSED:    //5: file record is paused.
  1014. wsprintf(cNewStat,"FILE_PAUSED"); break;
  1015. case CHECKRECORD_FILE_WRITE_ERROR:
  1016. wsprintf(cNewStat,"FILE_WRITE_ERROR");
  1017. }
  1018. m_ChList.SetItemText( ch, ITEM_ChkRec, cNewStat );
  1019. }
  1020. if(bEnableOpEchoCanceller[ch])
  1021. {
  1022. if((nResult=SsmGetEchoCancellerState(ch)) != nOldEchoCancellerState[ch])
  1023. {
  1024. nOldEchoCancellerState[ch] = nResult;
  1025. _itoa(nResult,cNewStat,10);
  1026. m_ChList.SetItemText( ch, ITEM_AdaptiveFilter, cNewStat );
  1027. }
  1028. if((nResult=SsmGetEchoCancellerStudyState(ch)) != nOldEchoCancellerStudyState[ch])
  1029. {
  1030. nOldEchoCancellerStudyState[ch] = nResult;
  1031. _itoa(nResult,cNewStat,10);
  1032. m_ChList.SetItemText( ch, ITEM_AdaptiveFilterStudy, cNewStat );
  1033. }
  1034. if((nResult=SsmGetEchoCancellerRatio(ch)) != nOldEchoCancellerRatio[ch])
  1035. {
  1036. nOldEchoCancellerRatio[ch] = nResult;
  1037. _itoa(nResult,cNewStat,10);
  1038. m_ChList.SetItemText( ch, ITEM_ECRatio, cNewStat );
  1039. }
  1040. }
  1041. nResult = DTRGetLCDStr(ch, cNewStat);
  1042. if(nResult  == -1) wsprintf(cNewStat, "-1");
  1043. else if(nResult  == 0) wsprintf(cNewStat, "");
  1044. nResult = m_ChList.GetItemText(ch, ITEM_LCD, cOldStat, 300);
  1045. if(nResult == 0)
  1046. cOldStat[0] = '';
  1047. if (strcmp(cNewStat,cOldStat) != 0) 
  1048. m_ChList.SetItemText(ch, ITEM_LCD, cNewStat);
  1049. //+++START+++ added by yxh for GetDKeyStr, 2005.09.02
  1050. nResult = DTRGetDKeyStr(ch, cNewStat);
  1051. if(nResult  == -1) wsprintf(cNewStat, "-1");
  1052. else if(nResult  == 0) wsprintf(cNewStat, "");
  1053. nResult = m_ChList.GetItemText(ch, ITEM_DKEY, cOldStat, 300);
  1054. if(nResult == 0)
  1055. cOldStat[0] = '';
  1056. if (strcmp(cNewStat,cOldStat) != 0) 
  1057. m_ChList.SetItemText(ch, ITEM_DKEY, cNewStat);
  1058. //+++ END +++ added by yxh for GetDKeyStr, 2005.09.02
  1059. nResult = SsmGetCallerId(ch,cNewStat);
  1060. if(nResult  == -1) wsprintf(cNewStat, "-1");
  1061. else if(nResult  == 0) wsprintf(cNewStat, "");
  1062. nResult = m_ChList.GetItemText( ch, ITEM_CallerId, cOldStat, 300 );
  1063. if(nResult == 0)
  1064. cOldStat[0] = '';
  1065. if ( strcmp(cNewStat,cOldStat) != 0 ) 
  1066. m_ChList.SetItemText( ch, ITEM_CallerId, cNewStat );
  1067. //if((nResult=SsmGetCallerId(ch,cNewStat)) != nOldCallerI[ch]
  1068. // || nResult != 0)
  1069. //{
  1070. // nResult=SsmGetCallerId(ch,cNewStat);
  1071. // nOldCallerI[ch] = nResult;
  1072. // if(nResult == -1) wsprintf(cNewStat,"-1");
  1073. // else if(nResult == 0) wsprintf(cNewStat,"");
  1074. // m_ChList.SetItemText( ch, ITEM_CallerId, cNewStat );
  1075. //}
  1076. nResult = SsmGetCallerIdEx(ch,szRxCallerId);
  1077. if(nResult == -1) wsprintf(szRxCallerId, "");
  1078. else if(nResult == 0) wsprintf(szRxCallerId, "");
  1079. nRet = m_ChList.GetItemText( ch, ITEM_CallerIdEx, cOldStat, 300 );
  1080. if(nRet==0)
  1081. cOldStat[0]='';
  1082. if ( strcmp(szRxCallerId,cOldStat) != 0 ) 
  1083. {
  1084. wsprintf(cNewStat,"");
  1085. for(int k=0; k<nResult; k++) wsprintf(cNewStat,"%s%02x ",cNewStat,(UCHAR)szRxCallerId[k]);
  1086. m_ChList.SetItemText( ch, ITEM_CallerIdEx, cNewStat );
  1087. }
  1088. // if((nResult=SsmGetCallerIdEx(ch,szRxCallerId)) != nOldCallerIdEx[ch]
  1089. // || nResult != 0)
  1090. // {
  1091. // nResult=SsmGetCallerIdEx(ch,szRxCallerId);
  1092. // nOldCallerIdEx[ch] = nResult;
  1093. // if(nResult == -1) wsprintf(cNewStat,"-1");
  1094. // else if(nResult == 0) wsprintf(cNewStat,"");
  1095. // else
  1096. // {
  1097. // wsprintf(cNewStat,"");
  1098. // for(int k=0; k<nResult; k++) wsprintf(cNewStat,"%s%x",cNewStat,szRxCallerId[k]);
  1099. // }
  1100. // m_ChList.SetItemText( ch, ITEM_CallerIdEx, cNewStat );
  1101. // }
  1102. if(bEnableOpADC[ch])
  1103. {
  1104. if((nResult=SsmGetLineVoltage(ch)) != nOldLineVoltage[ch])
  1105. {
  1106. nOldLineVoltage[ch] = nResult;
  1107. _itoa(nResult,cNewStat,10);
  1108. m_ChList.SetItemText( ch, ITEM_Vad, cNewStat );
  1109. }
  1110. }
  1111. if((nResult=SsmGetCAS(ch)) != nOldGetCAS[ch])
  1112. {
  1113. nOldGetCAS[ch] = nResult;
  1114. if(nResult == -1) wsprintf(cNewStat,"-1",nResult);
  1115. else wsprintf(cNewStat,"0x%x",nResult);
  1116. m_ChList.SetItemText( ch, ITEM_RxCAS, cNewStat );
  1117. }
  1118. if((nResult=SsmGetSendingCAS(ch)) != nOldSendingCAS[ch])
  1119. {
  1120. nOldSendingCAS[ch] = nResult;
  1121. if(nResult == -1) wsprintf(cNewStat,"-1",nResult);
  1122. else wsprintf(cNewStat,"0x%x",nResult);
  1123. m_ChList.SetItemText( ch, ITEM_TxCAS, cNewStat );
  1124. }
  1125. if((nResult=SsmGetR2(ch)) != nOldGetR2[ch])
  1126. {
  1127. nOldGetR2[ch] = nResult;
  1128. wsprintf(cNewStat,"%d",nResult);
  1129. m_ChList.SetItemText( ch, ITEM_RxR2, cNewStat );
  1130. }
  1131. int nMode;
  1132. BYTE btRxR2;
  1133. nResult = SsmGetSendingR2(ch,&nMode,&btRxR2);
  1134. if(nResult != nOldGetSendingR2[ch])
  1135. {
  1136. nOldGetSendingR2[ch] = nResult;
  1137. if(nResult == -1) m_ChList.SetItemText( ch, 23, "-1");
  1138. else if(nOldSendingR2Mode[ch]!=nMode || nOldSendingR2[ch]!=btRxR2)
  1139. {
  1140. nOldSendingR2Mode[ch] = nMode;
  1141. nOldSendingR2[ch] = btRxR2;
  1142. if(nMode==0) wsprintf(cNewStat,"B:%d",btRxR2);
  1143. else         wsprintf(cNewStat,"F:%d",btRxR2);
  1144. m_ChList.SetItemText( ch, ITEM_TxR2, cNewStat );
  1145. }
  1146. }
  1147. //add by JK shi for 支持SetKB功能, begin
  1148. nShowUpdate=0;
  1149. if (nNewChState==S_CALL_PENDING)
  1150. {
  1151. if(nOldChState[ch]!=S_CALL_PENDING)
  1152. nShowUpdate=1;
  1153. else
  1154. {
  1155. nNewPendReason=SsmGetPendingReason(ch);
  1156. if (nOldPendReason[ch]!=nNewPendReason)
  1157. nShowUpdate=1;
  1158. }
  1159. }
  1160. //add by JK shi for 支持SetKB功能, end
  1161. //if(nOldChState[ch]!=S_CALL_PENDING && nNewChState==S_CALL_PENDING)
  1162. if (nShowUpdate)
  1163. {
  1164. //++++start++++ masked by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
  1165. /* switch(nResult=SsmGetPendingReason(ch))
  1166. {
  1167. case -1: wsprintf(cNewStat,"-1"); break;
  1168. case ANALOGOUT_NO_DIALTONE: wsprintf(cNewStat,"模拟:没有拨号音"); break;
  1169. case ANALOGOUT_BUSYTONE: wsprintf(cNewStat,"模拟:忙音"); break;
  1170. case ANALOGOUT_ECHO_NOVOICE: wsprintf(cNewStat,"模拟:回铃后无声"); break;
  1171. case ANALOGOUT_NOANSWER: wsprintf(cNewStat,"模拟:没有应答"); break;
  1172. case ANALOGOUT_TALKING_REMOTE_HANGUPED: wsprintf(cNewStat,"模拟:远端挂机"); break;
  1173. case ANALOGOUT_NOVOICE: wsprintf(cNewStat,"模拟:拨号后线路无声"); break;
  1174. case PEND_WaitBckStpMsg: wsprintf(cNewStat,"等待APP设置后向建立消息"); break;
  1175. case SS1IN_BWD_KB5: wsprintf(cNewStat,"SS1IN收到KB5"); break;
  1176. case PEND_RemoteHangupOnTalking: wsprintf(cNewStat,"呼入:通话时主叫先挂机"); break;
  1177. case PEND_SsxUnusable: wsprintf(cNewStat,"通话时信令不可用"); break;
  1178. case PEND_CircuitReset: wsprintf(cNewStat,"电路复原"); break;
  1179. case PEND_CalleeHangupOnTalking: wsprintf(cNewStat,"呼出:被叫先挂机"); break;
  1180. case SS1OUT_NOANSWER: wsprintf(cNewStat,"No1: 无人接听"); break;
  1181. case SS1OUT_NOBWDACK: wsprintf(cNewStat,"No1: 没有应答信号"); break;
  1182. case SS1OUT_DIALING_BWD_HANGUP: wsprintf(cNewStat,"No1: 检测到被叫拆线"); break;
  1183. case SS1OUT_BWD_A5: wsprintf(cNewStat,"No1: 收到后向A5"); break;
  1184. case SS1OUT_BWD_KB5: wsprintf(cNewStat,"No1: 收到后向KB5"); break;
  1185. case SS1OUT_BWD_KB2: wsprintf(cNewStat,"No1: 收到后向KB2"); break;
  1186. case SS1OUT_BWD_KB3: wsprintf(cNewStat,"No1: 收到后向KB3"); break;
  1187. case SS1OUT_BWD_A4: wsprintf(cNewStat,"No1: 收到后向A4"); break;
  1188. case SS1OUT_BWD_KB4: wsprintf(cNewStat,"No1: 收到后向KB4"); break;
  1189. case SS1OUT_TIMEOUT_BWD_A: wsprintf(cNewStat,"No1: 等待后向A超时"); break;
  1190. case SS1OUT_TIMEOUT_BWD_A_STOP: wsprintf(cNewStat,"No1: 等待后向A停发超时"); break;
  1191. case SS1OUT_TIMEOUT_BWD_KB: wsprintf(cNewStat,"No1: 等待KB超时"); break;
  1192. case SS1OUT_TIMEOUT_BWD_KB_STOP: wsprintf(cNewStat,"No1: 等待KB停发超时"); break;
  1193. case SS1OUT_TIMEOUT_CALLERID_BWD_A1: wsprintf(cNewStat,"No1: 发主叫等待A1超时"); break;
  1194. case SS1OUT_TIMEOUT_CALLERID_BWD_A1_STOP: wsprintf(cNewStat,"No1: 发主叫等待A1停发超时"); break;
  1195. case SS1OUT_UNDEFINED_CALLERID_BWD_A: wsprintf(cNewStat,"No1: 发主叫收到未定义后向A"); break;
  1196. case SS1OUT_UNDEFINED_BWD_A: wsprintf(cNewStat,"No1: 收到未定义后向A"); break;
  1197. case SS1OUT_UNDEFINED_BWD_KB: wsprintf(cNewStat,"No1: 收到未定义KB"); break;
  1198. case ISDN_CALLOVER: wsprintf(cNewStat,"ISDN:呼叫正常结束,对方先挂机"); break;
  1199. case ISDN_WAIT_RELEASE: wsprintf(cNewStat,"ISDN:等待释放" ); break;
  1200. case ISDN_HANGING: wsprintf(cNewStat,"ISDN:正在拆线" ); break;
  1201. case ISDN_RELEASING : wsprintf(cNewStat,"ISDN:正在释放" ); break;
  1202. case ISDN_UNALLOCATED_NUMBER: wsprintf(cNewStat,"ISDN:未分配的号码"); break;
  1203. case ISDN_NETWORK_BUSY: wsprintf(cNewStat,"ISDN:网络忙"); break;
  1204. case ISDN_CIRCUIT_NOT_AVAILABLE: wsprintf(cNewStat, "ISDN:指定的电路不可用"); break;
  1205. case ISDN_NO_ANSWER: wsprintf(cNewStat, "ISDN:无应答"); break;
  1206. case ISDN_CALL_REJ:     wsprintf(cNewStat, "ISDN:呼叫拒绝"); break;
  1207. case PEND_AutoDialFailed:
  1208. switch(SsmGetAutoDialFailureReason(ch))
  1209. {
  1210. case ATDL_NULL: wsprintf(cNewStat,""); break;
  1211. case ATDL_Cancel: wsprintf(cNewStat,"拨号失败:取消"); break;
  1212. case ATDL_WaitDialAnsTimeout: wsprintf(cNewStat,"拨号失败:等候应答超时"); break;
  1213. case ATDL_WaitRemotePickupTimeout: wsprintf(cNewStat,"拨号失败:等候被叫摘机超时");  break;
  1214. case ATDL_Mtp3Unusable: wsprintf(cNewStat,"拨号失败:MTP3不可用"); break;
  1215. case ATDL_RcvSSB: wsprintf(cNewStat,"拨号失败:收到SSB"); break;
  1216. case ATDL_RcvSLB: wsprintf(cNewStat,"拨号失败:收到SLB"); break;
  1217. case ATDL_RcvSTB: wsprintf(cNewStat,"拨号失败:收到STB"); break;
  1218. case ATDL_RcvUNN: wsprintf(cNewStat,"拨号失败:收到UNN"); break;
  1219. case ATDL_RcvSEC: wsprintf(cNewStat,"拨号失败:收到SEC"); break;
  1220. case ATDL_RcvCGC: wsprintf(cNewStat,"拨号失败:收到CGC"); break;
  1221. case ATDL_RcvNNC: wsprintf(cNewStat,"拨号失败:收到NNC"); break;
  1222. case ATDL_RcvCFL: wsprintf(cNewStat,"拨号失败:收到CFL"); break;
  1223. case ATDL_RcvLOS: wsprintf(cNewStat,"拨号失败:收到LOS"); break;
  1224. case ATDL_RcvSST: wsprintf(cNewStat,"拨号失败:收到SST"); break;
  1225. case ATDL_RcvACB: wsprintf(cNewStat,"拨号失败:收到ACB"); break;
  1226. case ATDL_RcvDPN: wsprintf(cNewStat,"拨号失败:收到DPN"); break;
  1227. case ATDL_RcvEUM: wsprintf(cNewStat,"拨号失败:收到EUM"); break;
  1228. case ATDL_RcvADI: wsprintf(cNewStat,"拨号失败:收到ADI"); break;
  1229. case ATDL_RcvBLO: wsprintf(cNewStat,"拨号失败:收到BLO"); break;
  1230. case ATDL_DoubleOccupy: wsprintf(cNewStat,"拨号失败:检出同抢"); break;
  1231. case ATDL_CircuitReset: wsprintf(cNewStat,"拨号失败:电路复原"); break;
  1232. case ATDL_BlockedByRemote: wsprintf(cNewStat,"拨号失败:对端闭塞"); break;
  1233. case ATDL_SS1WaitOccupyAckTimeout: wsprintf(cNewStat,"拨号失败:等待占用应答超时"); break;
  1234. case ATDL_SS1RcvCAS_HANGUP: wsprintf(cNewStat,"拨号失败:收到后向拆线信号"); break;
  1235. case ATDL_SS1RcvA4: wsprintf(cNewStat,"拨号失败:收到A4信号"); break;
  1236. case ATDL_SS1RcvA5: wsprintf(cNewStat,"拨号失败:收到A5信号"); break;
  1237. case ATDL_SS1RcvUndefinedAx: wsprintf(cNewStat,"拨号失败:收到未定义后向A"); break;
  1238. case ATDL_SS1RcvUndefinedAxOnTxCallerId: wsprintf(cNewStat,"拨号失败:送主叫收到未定义A"); break;
  1239. case ATDL_SS1WaitAxTimeout: wsprintf(cNewStat,"拨号失败:等候后向A超时"); break;
  1240. case ATDL_SS1WaitAxStopTimeout: wsprintf(cNewStat,"拨号失败:等候后向A组停发超时"); break;
  1241. case ATDL_SS1WaitAxTimeoutOnTxCallerId: wsprintf(cNewStat,"拨号失败:送主叫等候后向A超时"); break;
  1242. case ATDL_SS1WaitAxStopTimeoutOnTxCallerId: wsprintf(cNewStat,"拨号失败:送主叫等候后向A停发超时"); break;
  1243. case ATDL_SS1RcvKB2: wsprintf(cNewStat,"拨号失败:收到KB2信号"); break;
  1244. case ATDL_SS1RcvKB3: wsprintf(cNewStat,"拨号失败:收到KB3信号"); break;
  1245. case ATDL_SS1RcvKB4: wsprintf(cNewStat,"拨号失败:收到KB4信号"); break;
  1246. case ATDL_SS1RcvKB5: wsprintf(cNewStat,"拨号失败:收到KB5信号"); break;
  1247. case ATDL_SS1RcvUndefinedKB: wsprintf(cNewStat,"拨号失败:收到未定义KB信号"); break;
  1248. case ATDL_SS1WaitKBTimeout: wsprintf(cNewStat,"拨号失败:接收后向KB信号超时"); break;
  1249. case ATDL_SS1WaitKBStopTimeout: wsprintf(cNewStat,"拨号失败:等候被叫停发KB超时"); break;
  1250. case ATDL_ISDNNETISBUS  : wsprintf(cNewStat,"拨号失败:网络忙" ); break;
  1251. default :
  1252. wsprintf(cNewStat,"拨号失败: ???"); 
  1253. break;
  1254. }
  1255. break;
  1256. default:
  1257. wsprintf(cNewStat,"%d",nResult); break;
  1258. break;
  1259. }
  1260. */
  1261. //+++++end+++++ masked by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
  1262. //++++start++++ added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
  1263. switch(nResult=SsmGetPendingReason(ch))
  1264. {
  1265. case -1: wsprintf(cNewStat,"-1"); break;
  1266. case ANALOGOUT_NO_DIALTONE: LoadString(g_hInstance, IDS_ANALOGOUT_NO_DIALTONE, cNewStat, sizeof(cNewStat)); break;
  1267. case ANALOGOUT_BUSYTONE: LoadString(g_hInstance, IDS_ANALOGOUT_BUSYTONE, cNewStat, sizeof(cNewStat)); break;
  1268. case ANALOGOUT_ECHO_NOVOICE: LoadString(g_hInstance, IDS_ANALOGOUT_ECHO_NOVOICE, cNewStat, sizeof(cNewStat)); break;
  1269. case ANALOGOUT_NOANSWER: LoadString(g_hInstance, IDS_ANALOGOUT_NOANSWER, cNewStat, sizeof(cNewStat)); break;
  1270. case ANALOGOUT_TALKING_REMOTE_HANGUPED: LoadString(g_hInstance, IDS_ANALOGOUT_TALKING_REMOTE_HANGUPED, cNewStat, sizeof(cNewStat)); break;
  1271. case ANALOGOUT_NOVOICE: LoadString(g_hInstance, IDS_ANALOGOUT_NOVOICE, cNewStat, sizeof(cNewStat)); break;
  1272. case PEND_WaitBckStpMsg: LoadString(g_hInstance, IDS_PEND_WaitBckStpMsg, cNewStat, sizeof(cNewStat)); break;
  1273. case SS1IN_BWD_KB5: LoadString(g_hInstance, IDS_SS1IN_BWD_KB5, cNewStat, sizeof(cNewStat)); break;
  1274. case PEND_RemoteHangupOnTalking: LoadString(g_hInstance, IDS_PEND_RemoteHangupOnTalking, cNewStat, sizeof(cNewStat)); break;
  1275. case PEND_SsxUnusable: LoadString(g_hInstance, IDS_PEND_SsxUnusable, cNewStat, sizeof(cNewStat)); break;
  1276. case PEND_CircuitReset: LoadString(g_hInstance, IDS_PEND_CircuitReset, cNewStat, sizeof(cNewStat)); break;
  1277. case PEND_CalleeHangupOnTalking: LoadString(g_hInstance, IDS_PEND_CalleeHangupOnTalking, cNewStat, sizeof(cNewStat)); break;
  1278. case SS1OUT_NOANSWER: LoadString(g_hInstance, IDS_SS1OUT_NOANSWER, cNewStat, sizeof(cNewStat)); break;
  1279. case SS1OUT_NOBWDACK: LoadString(g_hInstance, IDS_SS1OUT_NOBWDACK, cNewStat, sizeof(cNewStat)); break;
  1280. case SS1OUT_DIALING_BWD_HANGUP: LoadString(g_hInstance, IDS_SS1OUT_DIALING_BWD_HANGUP, cNewStat, sizeof(cNewStat)); break;
  1281. case SS1OUT_BWD_A5: LoadString(g_hInstance, IDS_SS1OUT_BWD_A5, cNewStat, sizeof(cNewStat)); break;
  1282. case SS1OUT_BWD_KB5: LoadString(g_hInstance, IDS_SS1OUT_BWD_KB5, cNewStat, sizeof(cNewStat)); break;
  1283. case SS1OUT_BWD_KB2: LoadString(g_hInstance, IDS_SS1OUT_BWD_KB2, cNewStat, sizeof(cNewStat)); break;
  1284. case SS1OUT_BWD_KB3: LoadString(g_hInstance, IDS_SS1OUT_BWD_KB3, cNewStat, sizeof(cNewStat)); break;
  1285. case SS1OUT_BWD_A4: LoadString(g_hInstance, IDS_SS1OUT_BWD_A4, cNewStat, sizeof(cNewStat)); break;
  1286. case SS1OUT_BWD_KB4: LoadString(g_hInstance, IDS_SS1OUT_BWD_KB4, cNewStat, sizeof(cNewStat)); break;
  1287. case SS1OUT_TIMEOUT_BWD_A: LoadString(g_hInstance, IDS_SS1OUT_TIMEOUT_BWD_A, cNewStat, sizeof(cNewStat)); break;
  1288. case SS1OUT_TIMEOUT_BWD_A_STOP: LoadString(g_hInstance, IDS_SS1OUT_TIMEOUT_BWD_A_STOP, cNewStat, sizeof(cNewStat)); break;
  1289. case SS1OUT_TIMEOUT_BWD_KB: LoadString(g_hInstance, IDS_SS1OUT_TIMEOUT_BWD_KB, cNewStat, sizeof(cNewStat)); break;
  1290. case SS1OUT_TIMEOUT_BWD_KB_STOP: LoadString(g_hInstance, IDS_SS1OUT_TIMEOUT_BWD_KB_STOP, cNewStat, sizeof(cNewStat)); break;
  1291. case SS1OUT_TIMEOUT_CALLERID_BWD_A1: LoadString(g_hInstance, IDS_SS1OUT_TIMEOUT_CALLERID_BWD_A1, cNewStat, sizeof(cNewStat)); break;
  1292. case SS1OUT_TIMEOUT_CALLERID_BWD_A1_STOP: LoadString(g_hInstance, IDS_SS1OUT_TIMEOUT_CALLERID_BWD_A1_STOP, cNewStat, sizeof(cNewStat)); break;
  1293. case SS1OUT_UNDEFINED_CALLERID_BWD_A: LoadString(g_hInstance, IDS_SS1OUT_UNDEFINED_CALLERID_BWD_A, cNewStat, sizeof(cNewStat)); break;
  1294. case SS1OUT_UNDEFINED_BWD_A: LoadString(g_hInstance, IDS_SS1OUT_UNDEFINED_BWD_A, cNewStat, sizeof(cNewStat)); break;
  1295. case SS1OUT_UNDEFINED_BWD_KB: LoadString(g_hInstance, IDS_SS1OUT_UNDEFINED_BWD_KB, cNewStat, sizeof(cNewStat)); break;
  1296. case ISDN_CALLOVER: LoadString(g_hInstance, IDS_ISDN_CALLOVER, cNewStat, sizeof(cNewStat)); break;
  1297. case ISDN_WAIT_RELEASE: LoadString(g_hInstance, IDS_ISDN_WAIT_RELEASE, cNewStat, sizeof(cNewStat)); break;
  1298. case ISDN_HANGING: LoadString(g_hInstance, IDS_ISDN_HANGING, cNewStat, sizeof(cNewStat)); break;
  1299. case ISDN_RELEASING : LoadString(g_hInstance, IDS_ISDN_RELEASING, cNewStat, sizeof(cNewStat)); break;
  1300. case ISDN_UNALLOCATED_NUMBER: LoadString(g_hInstance, IDS_ISDN_UNALLOCATED_NUMBER, cNewStat, sizeof(cNewStat)); break;
  1301. case ISDN_NETWORK_BUSY: LoadString(g_hInstance, IDS_ISDN_NETWORK_BUSY, cNewStat, sizeof(cNewStat)); break;
  1302. case ISDN_CIRCUIT_NOT_AVAILABLE: LoadString(g_hInstance, IDS_ISDN_CIRCUIT_NOT_AVAILABLE, cNewStat, sizeof(cNewStat)); break;
  1303. case ISDN_NO_ANSWER: LoadString(g_hInstance, IDS_ISDN_NO_ANSWER, cNewStat, sizeof(cNewStat)); break;
  1304. case ISDN_CALL_REJ:     LoadString(g_hInstance, IDS_ISDN_CALL_REJ, cNewStat, sizeof(cNewStat)); break;
  1305. case PEND_AutoDialFailed:
  1306. switch(SsmGetAutoDialFailureReason(ch))
  1307. {
  1308. case ATDL_NULL: LoadString(g_hInstance, IDS_ATDL_NULL, cNewStat, sizeof(cNewStat)); break;
  1309. case ATDL_Cancel: LoadString(g_hInstance, IDS_ATDL_Cancel, cNewStat, sizeof(cNewStat)); break;
  1310. case ATDL_WaitDialAnsTimeout: LoadString(g_hInstance, IDS_ATDL_WaitDialAnsTimeout, cNewStat, sizeof(cNewStat)); break;
  1311. case ATDL_WaitRemotePickupTimeout: LoadString(g_hInstance, IDS_ATDL_WaitRemotePickupTimeout, cNewStat, sizeof(cNewStat));  break;
  1312. case ATDL_Mtp3Unusable: LoadString(g_hInstance, IDS_ATDL_Mtp3Unusable, cNewStat, sizeof(cNewStat)); break;
  1313. case ATDL_RcvSSB: LoadString(g_hInstance, IDS_ATDL_RcvSSB, cNewStat, sizeof(cNewStat)); break;
  1314. case ATDL_RcvSLB: LoadString(g_hInstance, IDS_ATDL_RcvSLB, cNewStat, sizeof(cNewStat)); break;
  1315. case ATDL_RcvSTB: LoadString(g_hInstance, IDS_ATDL_RcvSTB, cNewStat, sizeof(cNewStat)); break;
  1316. case ATDL_RcvUNN: LoadString(g_hInstance, IDS_ATDL_RcvUNN, cNewStat, sizeof(cNewStat)); break;
  1317. case ATDL_RcvSEC: LoadString(g_hInstance, IDS_ATDL_RcvSEC, cNewStat, sizeof(cNewStat)); break;
  1318. case ATDL_RcvCGC: LoadString(g_hInstance, IDS_ATDL_RcvCGC, cNewStat, sizeof(cNewStat)); break;
  1319. case ATDL_RcvNNC: LoadString(g_hInstance, IDS_ATDL_RcvNNC, cNewStat, sizeof(cNewStat)); break;
  1320. case ATDL_RcvCFL: LoadString(g_hInstance, IDS_ATDL_RcvCFL, cNewStat, sizeof(cNewStat)); break;
  1321. case ATDL_RcvLOS: LoadString(g_hInstance, IDS_ATDL_RcvLOS, cNewStat, sizeof(cNewStat)); break;
  1322. case ATDL_RcvSST: LoadString(g_hInstance, IDS_ATDL_RcvSST, cNewStat, sizeof(cNewStat)); break;
  1323. case ATDL_RcvACB: LoadString(g_hInstance, IDS_ATDL_RcvACB, cNewStat, sizeof(cNewStat)); break;
  1324. case ATDL_RcvDPN: LoadString(g_hInstance, IDS_ATDL_RcvDPN, cNewStat, sizeof(cNewStat)); break;
  1325. case ATDL_RcvEUM: LoadString(g_hInstance, IDS_ATDL_RcvEUM, cNewStat, sizeof(cNewStat)); break;
  1326. case ATDL_RcvADI: LoadString(g_hInstance, IDS_ATDL_RcvADI, cNewStat, sizeof(cNewStat)); break;
  1327. case ATDL_RcvBLO: LoadString(g_hInstance, IDS_ATDL_RcvBLO, cNewStat, sizeof(cNewStat)); break;
  1328. case ATDL_DoubleOccupy: LoadString(g_hInstance, IDS_ATDL_DoubleOccupy, cNewStat, sizeof(cNewStat)); break;
  1329. case ATDL_CircuitReset: LoadString(g_hInstance, IDS_ATDL_CircuitReset, cNewStat, sizeof(cNewStat)); break;
  1330. case ATDL_BlockedByRemote: LoadString(g_hInstance, IDS_ATDL_BlockedByRemote, cNewStat, sizeof(cNewStat)); break;
  1331. case ATDL_SS1WaitOccupyAckTimeout: LoadString(g_hInstance, IDS_ATDL_SS1WaitOccupyAckTimeout, cNewStat, sizeof(cNewStat)); break;
  1332. case ATDL_SS1RcvCAS_HANGUP: LoadString(g_hInstance, IDS_ATDL_SS1RcvCAS_HANGUP, cNewStat, sizeof(cNewStat)); break;
  1333. case ATDL_SS1RcvA4: LoadString(g_hInstance, IDS_ATDL_SS1RcvA4, cNewStat, sizeof(cNewStat)); break;
  1334. case ATDL_SS1RcvA5: LoadString(g_hInstance, IDS_ATDL_SS1RcvA5, cNewStat, sizeof(cNewStat)); break;
  1335. case ATDL_SS1RcvUndefinedAx: LoadString(g_hInstance, IDS_ATDL_SS1RcvUndefinedAx, cNewStat, sizeof(cNewStat)); break;
  1336. case ATDL_SS1RcvUndefinedAxOnTxCallerId: LoadString(g_hInstance, IDS_ATDL_SS1RcvUndefinedAxOnTxCallerId, cNewStat, sizeof(cNewStat)); break;
  1337. case ATDL_SS1WaitAxTimeout: LoadString(g_hInstance, IDS_ATDL_SS1WaitAxTimeout, cNewStat, sizeof(cNewStat)); break;
  1338. case ATDL_SS1WaitAxStopTimeout: LoadString(g_hInstance, IDS_ATDL_SS1WaitAxStopTimeout, cNewStat, sizeof(cNewStat)); break;
  1339. case ATDL_SS1WaitAxTimeoutOnTxCallerId: LoadString(g_hInstance, IDS_ATDL_SS1WaitAxTimeoutOnTxCallerId, cNewStat, sizeof(cNewStat)); break;
  1340. case ATDL_SS1WaitAxStopTimeoutOnTxCallerId: LoadString(g_hInstance, IDS_ATDL_SS1WaitAxStopTimeoutOnTxCallerId, cNewStat, sizeof(cNewStat)); break;
  1341. case ATDL_SS1RcvKB2: LoadString(g_hInstance, IDS_ATDL_SS1RcvKB2, cNewStat, sizeof(cNewStat)); break;
  1342. case ATDL_SS1RcvKB3: LoadString(g_hInstance, IDS_ATDL_SS1RcvKB3, cNewStat, sizeof(cNewStat)); break;
  1343. case ATDL_SS1RcvKB4: LoadString(g_hInstance, IDS_ATDL_SS1RcvKB4, cNewStat, sizeof(cNewStat)); break;
  1344. case ATDL_SS1RcvKB5: LoadString(g_hInstance, IDS_ATDL_SS1RcvKB5, cNewStat, sizeof(cNewStat)); break;
  1345. case ATDL_SS1RcvUndefinedKB: LoadString(g_hInstance, IDS_ATDL_SS1RcvUndefinedKB, cNewStat, sizeof(cNewStat)); break;
  1346. case ATDL_SS1WaitKBTimeout: LoadString(g_hInstance, IDS_ATDL_SS1WaitKBTimeout, cNewStat, sizeof(cNewStat)); break;
  1347. case ATDL_SS1WaitKBStopTimeout: LoadString(g_hInstance, IDS_ATDL_SS1WaitKBStopTimeout, cNewStat, sizeof(cNewStat)); break;
  1348. case ATDL_ISDNNETISBUS  : LoadString(g_hInstance, IDS_ATDL_ISDNNETISBUS, cNewStat, sizeof(cNewStat)); break;
  1349. case ATDL_IPInvalidPhonum: LoadString(g_hInstance, IDS_ATDL_IPInvalidPhonum, cNewStat, sizeof(cNewStat)); break;
  1350. case ATDL_IPRemoteBusy: LoadString(g_hInstance, IDS_ATDL_IPRemoteBusy, cNewStat, sizeof(cNewStat)); break;
  1351. case ATDL_IPBeenRefused: LoadString(g_hInstance, IDS_ATDL_IPBeenRefused, cNewStat, sizeof(cNewStat)); break;
  1352. case ATDL_IPDnsFail  : LoadString(g_hInstance, IDS_ATDL_IPDnsFail, cNewStat, sizeof(cNewStat)); break;
  1353. case ATDL_IPCodecUnSupport  : LoadString(g_hInstance, IDS_ATDL_IPCodecUnSupport, cNewStat, sizeof(cNewStat)); break;
  1354. case ATDL_IPOutOfResources  : LoadString(g_hInstance, IDS_ATDL_IPOutOfResources, cNewStat, sizeof(cNewStat)); break;
  1355. case ATDL_IPLocalNetworkErr  : LoadString(g_hInstance, IDS_ATDL_IPLocalNetworkErr, cNewStat, sizeof(cNewStat)); break;
  1356. case ATDL_IPRemoteNetworkErr  : LoadString(g_hInstance, IDS_ATDL_IPRemoteNetworkErr, cNewStat, sizeof(cNewStat)); break;
  1357. default :
  1358. LoadString(g_hInstance, IDS_ATDL_DEFAULT, cNewStat, sizeof(cNewStat)); 
  1359. break;
  1360. }
  1361. break;
  1362. default:
  1363. wsprintf(cNewStat,"%d",nResult); break;
  1364. break;
  1365. }
  1366. //+++++end+++++ added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
  1367. m_ChList.SetItemText( ch, ITEM_PendReason, cNewStat );
  1368. }
  1369. else if((nOldChState[ch]==S_CALL_PENDING   && nNewChState!=S_CALL_PENDING)   ||
  1370.     (nOldChState[ch]==S_CALL_RemoteBlock     && nNewChState!=S_CALL_RemoteBlock)     ||
  1371. (nOldChState[ch]==S_CALL_LocalBlock&&nNewChState!=S_CALL_LocalBlock)    )
  1372. {
  1373. m_ChList.SetItemText( ch, ITEM_PendReason, "" );
  1374. }
  1375. //long WINAPI SsmGetChStateKeepTime(int ch)
  1376. lResult = SsmGetChStateKeepTime(ch);
  1377. if(lResult  != lOldTime[ch])
  1378. {
  1379. lOldTime[ch] = lResult ;
  1380. wsprintf(cNewStat,"%dms",lResult);
  1381. m_ChList.SetItemText( ch, ITEM_ChStateKeepTime, cNewStat );
  1382. }
  1383. // wsprintf(cNewStat,"%dms",SsmGetChStateKeepTime(ch));
  1384. // m_ChList.SetItemText( ch, ITEM_ChStateKeepTime, cNewStat );
  1385. nResult = SsmGetPhoNumStr(ch,cNewStat);
  1386. if(nResult  == -1) wsprintf(cNewStat, "-1");
  1387. else if(nResult  == 0) wsprintf(cNewStat, "");
  1388. nResult = m_ChList.GetItemText( ch, ITEM_PhoneNumber, cOldStat, 255 );
  1389. if(nResult==0)
  1390. cOldStat[0]='';
  1391. if ( strcmp(cNewStat,cOldStat) != 0 ) 
  1392. m_ChList.SetItemText( ch, ITEM_PhoneNumber, cNewStat );
  1393. //int WINAPI SsmGetPolarRvrsCount(int ch)
  1394. //if(SsmQueryOpPolarRvrs(CurCh) == 1) nResult = SsmGetPolarRvrsCount(CurCh);//masked by sh for the error of PolarRvrs, 2007-10-26
  1395. if(SsmQueryOpPolarRvrs(ch) == 1) nResult = SsmGetPolarRvrsCount(ch); //added by sh for the error of PolarRvrs, 2007-10-26
  1396. else                                nResult = -1;
  1397. if(nResult != nOldPloarRvrsCount[ch])
  1398. {
  1399. nOldPloarRvrsCount[ch] = nResult;
  1400. m_ChList.SetItemText( ch, ITEM_Ploar, _itoa(nResult,cNewStat,10) );
  1401. }
  1402. if(bEnableOpBlockRemoteCh[ch])
  1403. {
  1404. if((nResult=SsmGetRemoteChBlockStatus(ch)) != nOldBlockRemoteStatus[ch])
  1405. {
  1406. nOldBlockRemoteStatus[ch] = nResult;
  1407. //++++start++++ masked by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
  1408. /* switch(nResult)
  1409. {
  1410. case -1 : wsprintf(cNewStat,"不支持"); break;
  1411. case BLOCKREMOTE_Unblocked : wsprintf(cNewStat,""); break;
  1412. case BLOCKREMOTE_Blocked : wsprintf(cNewStat,"闭塞"); break;
  1413. case BLOCKREMOTE_WaitBlockAck : wsprintf(cNewStat,"等待闭塞证实"); break;
  1414. case BLOCKREMOTE_WaitUnblockAck : wsprintf(cNewStat,"等待解除闭塞证实"); break;
  1415. }
  1416. */ //+++++end+++++ masked by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
  1417. //++++start++++ added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
  1418. switch(nResult)
  1419. {
  1420. case -1 : LoadString(g_hInstance, IDS_BLOCKREMOTE_INVALID, cNewStat, sizeof(cNewStat)); break;
  1421. case BLOCKREMOTE_Unblocked : LoadString(g_hInstance, IDS_BLOCKREMOTE_Unblocked, cNewStat, sizeof(cNewStat)); break;
  1422. case BLOCKREMOTE_Blocked : LoadString(g_hInstance, IDS_BLOCKREMOTE_Blocked, cNewStat, sizeof(cNewStat)); break;
  1423. case BLOCKREMOTE_WaitBlockAck : LoadString(g_hInstance, IDS_BLOCKREMOTE_WaitBlockAck, cNewStat, sizeof(cNewStat)); break;
  1424. case BLOCKREMOTE_WaitUnblockAck : LoadString(g_hInstance, IDS_BLOCKREMOTE_WaitUnblockAck, cNewStat, sizeof(cNewStat)); break;
  1425. }
  1426. //+++++end+++++ added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
  1427. m_ChList.SetItemText( ch, ITEM_BlockRemote, cNewStat );
  1428. }
  1429. }
  1430. if(CallTest[ch].bEnIn) CallinTestHandler(ch, nNewChState);
  1431. if(CallTest[ch].bEnOut) CalloutTestHandler(ch, nNewChState);
  1432. nOldChState[ch] = nNewChState;
  1433. //add by JK shi for 支持SetKB功能, begin
  1434. nOldPendReason[ch] = nNewPendReason;
  1435. //add by JK shi for 支持SetKB功能, end
  1436. if(SsmGetChType(ch) == 15 || SsmGetChType(ch) == 16)
  1437. {
  1438. char szUsingCodecType[50] = {''};
  1439. memset(szUsingCodecType, 0, sizeof(szUsingCodecType));
  1440. int nResult = SsmIpGetSessionCodecType(ch);
  1441. switch(nResult)
  1442. {
  1443. case 6:
  1444. wsprintf(szUsingCodecType, "G.711 aLaw"); 
  1445. break;
  1446. case 7:
  1447. wsprintf(szUsingCodecType, "G.711 muLaw"); 
  1448. break;
  1449. case 131:
  1450. wsprintf(szUsingCodecType, "G.729"); 
  1451. break;
  1452. }
  1453. m_ChList.SetItemText(ch, ITEM_CodecType, szUsingCodecType);
  1454. }
  1455. else
  1456. m_ChList.SetItemText(ch, ITEM_CodecType, "-1");
  1457. }
  1458. if(bEnSearchIdleCh) SearchIdleChCallout();
  1459. CFormView::OnTimer(nIDEvent);
  1460. }
  1461. void CTestView::OnSelchangeComboSelcurch()
  1462. {
  1463. CurCh = m_SelCurCh.GetCurSel();
  1464. m_ChList.EnsureVisible(CurCh, FALSE);
  1465. m_dlgBase.OnSelchangeCurCh(CurCh);
  1466. m_dlgPlay.OnSelchangeCurCh(CurCh);
  1467. m_dlgRec.OnSelchangeCurCh(CurCh);
  1468. m_dlgEvent.OnSelchangeCurCh(CurCh);
  1469. m_dlgOther.OnSelchangeCurCh(CurCh);
  1470. m_dlgIP.OnSelchangeCurCh(CurCh);
  1471. SetDlgItemInt(IDC_EDIT_LocalFlashTime, 500, TRUE);
  1472. UpdateData(FALSE);
  1473. }
  1474. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  1475. //@@@@@@@@@@@@@@@@@@@@@@@@@@   RxDTMF OPERATION   @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  1476. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  1477. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  1478. //@@@@@@@@@@@@@@@@@@@@@@@@ TXDTMF OPERATION  @@@@@@@@@@@@@@@@@@@@@@@@@@@@
  1479. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  1480. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  1481. //@@@@@@@@@@@@@@@@@@@ SEND TONE OPERATION  @@@@@@@@@@@@@@@@@@@@@@@@@@
  1482. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  1483. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  1484. //@@@@@@@@@@@@@@@@@@@ INTER-CH OPERATION  @@@@@@@@@@@@@@@@@@@@@@@@@@@
  1485. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  1486. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  1487. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ PLAY OPERATION @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  1488. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  1489. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  1490. //@@@@@@@@@@@@@@@@@@@@@@@@@@    RECORD OPERATION   @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  1491. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  1492. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  1493. //@@@@@@@@@@@@@@@@@@@ SET TONE-CHECK PARAMETERS @@@@@@@@@@@@@@@@@@@@@
  1494. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  1495. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  1496. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@ CONFERENCE OPERATION  @@@@@@@@@@@@@@@@@@@@@@@@@@@@
  1497. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  1498. LPBYTE pszMemDot=NULL, pszBuf[100];
  1499. DWORD dwMemSize=4096L;
  1500. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  1501. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@ echo-killer OPERATION  @@@@@@@@@@@@@@@@@@@@@@@@@@@@
  1502. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  1503. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  1504. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@ echo-killer OPERATION  @@@@@@@@@@@@@@@@@@@@@@@@@@@@
  1505. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  1506. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1507. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CALL TEST ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1508. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1509. void CTestView::InitCallTest()
  1510. {
  1511. PCALLTEST p;
  1512. for(int ch=0; ch<nMaxCh; ch++)
  1513. {
  1514. p = &CallTest[ch];
  1515. p->bEnIn       = FALSE;
  1516. p->bEnInRxDtmf = FALSE;
  1517. p->bEnInTxDtmf = FALSE;
  1518. p->nInTotTest  = 0;
  1519. p->nInCallOK   = 0;
  1520. p->nInRxDtmfOk = 0;
  1521. p->bEnOut       = FALSE;
  1522. p->bEnOutRxDtmf = FALSE;
  1523. p->bEnOutTxDtmf = FALSE;
  1524. p->nOutTotTest  = 0;
  1525. p->nOutCallOK   = 0;
  1526. p->nOutRxDtmfOK = 0;
  1527. p->nStep     = CALLTEST_IDLE;
  1528. p->dwTimeOut = 0L;
  1529. p->bEnRec    = FALSE;
  1530. }
  1531. bEnSearchIdleCh  = FALSE;
  1532. bEnCallOutRxDtmf = FALSE;
  1533. bEnCallOutTxDtmf = FALSE;
  1534. nCallInterval    = 1;
  1535. }
  1536. void CTestView::CallinTestHandler(int ch, int nChState)
  1537. {
  1538. char szBuf[100],szPhoNum[100];
  1539. PCALLTEST p = &CallTest[ch];
  1540. int nRet;
  1541. time_t ltime;
  1542. switch(p->nStep)
  1543. {
  1544. case CALLTEST_IDLE:
  1545. if(nChState == S_CALL_RINGING)
  1546. {
  1547. SsmPickup(ch);
  1548. SsmGetCallerId(ch,szBuf);
  1549. SsmGetPhoNumStr(ch,szPhoNum);
  1550. if(strcmp(szBuf,CALLERID)==0 && strcmp(szPhoNum,PHONE_NUMBER)==0) p->nInCallOK++;
  1551. p->nInTotTest++;
  1552. p->dwTimeOut = 0l;
  1553. if(p->bInIsSaveOldRecFile)
  1554. {
  1555. time(&ltime);
  1556. wsprintf(p->szRecFile,"Rectime#ldch%d.wav", ltime, ch);
  1557. }
  1558. else
  1559. wsprintf(p->szRecFile, "RecCh%d.wav", ch);
  1560. if(p->bEnRec)
  1561. {
  1562. if( SsmChkRecToFile( ch )==1) //recording now
  1563. SsmStopRecToFile(ch);
  1564. nRet = SsmRecToFile(ch, p->szRecFile , 6, 0, -1, 0, 0);
  1565. if(nRet)
  1566. myShowErrMsg();
  1567. }
  1568. if(p->bEnInRxDtmf) p->nStep = CALLTEST_IN_WaitDtmf;
  1569. else               p->nStep = CALLTEST_IN_StartSendDtmf;
  1570. }
  1571. else if(nChState == S_CALL_PENDING)
  1572. {
  1573. nRet = SsmGetChStateKeepTime(ch);
  1574. if(nRet > 2000) //pending longer than 2s
  1575. {
  1576. SsmHangup(ch);
  1577. p->nInTotTest++;
  1578. wsprintf(szBuf,"%d/%d/%d",p->nInRxDtmfOk,p->nInCallOK,p->nInTotTest);
  1579. m_ChList.SetItemText( ch, ITEM_CallInTest, szBuf);
  1580. p->dwTimeOut = 0l;
  1581. p->nStep  = CALLTEST_IDLE;
  1582. }
  1583. }
  1584. break;
  1585. case CALLTEST_IN_WaitDtmf:
  1586. SsmGetDtmfStr(ch,szBuf);
  1587. if(strcmp(szBuf,TEST_DTMF) == 0)
  1588. {
  1589. p->nInRxDtmfOk++;
  1590. p->dwTimeOut = 0l;
  1591. p->nStep = CALLTEST_IN_StartSendDtmf;
  1592. }
  1593. else if(nChState!=S_CALL_TALKING || ++p->dwTimeOut>40)
  1594. {
  1595. SsmHangup(ch);
  1596. wsprintf(szBuf,"%d/%d/%d",p->nInRxDtmfOk,p->nInCallOK,p->nInTotTest);
  1597. m_ChList.SetItemText( ch, ITEM_CallInTest, szBuf);
  1598. p->dwTimeOut = 0l;
  1599. p->nStep  = CALLTEST_IDLE;
  1600. }
  1601. break;
  1602. case CALLTEST_IN_StartSendDtmf:
  1603. if(p->bEnInTxDtmf) 
  1604. {
  1605. SsmTxDtmf(ch,TEST_DTMF);
  1606. p->nStep = CALLTEST_IN_ChkTxDtmf;
  1607. }
  1608. else 
  1609. {
  1610. SsmHangup(ch);
  1611. wsprintf(szBuf,"%d/%d/%d",p->nInRxDtmfOk,p->nInCallOK,p->nInTotTest);
  1612. m_ChList.SetItemText( ch, ITEM_CallInTest, szBuf);
  1613. p->nStep = CALLTEST_IDLE;
  1614. }
  1615. break;
  1616. case CALLTEST_IN_ChkTxDtmf:
  1617. if(SsmChkTxDtmf(ch)==0)
  1618. {
  1619. SsmHangup(ch);
  1620. wsprintf(szBuf,"%d/%d/%d",p->nInRxDtmfOk,p->nInCallOK,p->nInTotTest);
  1621. m_ChList.SetItemText( ch, ITEM_CallInTest, szBuf);
  1622. p->nStep = CALLTEST_IDLE;
  1623. }
  1624. break;
  1625. }
  1626. }
  1627. //int WINAPI SsmSearchIdleCallOutCh(WORD wSearchMode, DWORD dwPrecedence)
  1628. void CTestView::SearchIdleChCallout()
  1629. {
  1630. int ch;
  1631. while((ch=SsmSearchIdleCallOutCh(0x26,0)) != -1)
  1632. {
  1633. // if(++nWaitSearchIdleChTimeCnt[ch] <= nCallInterval) return; //changed  2002.12.6
  1634. nWaitSearchIdleChTimeCnt[ch] = 0;
  1635. PCALLTEST p = &CallTest[ch];
  1636. p->bEnOut = TRUE;
  1637. p->bEnRec = FALSE;
  1638. p->bEnOutRxDtmf = bEnCallOutRxDtmf;
  1639. p->bEnOutTxDtmf = bEnCallOutTxDtmf;
  1640. if(bDialAtOnce)
  1641. {
  1642. SsmPickup(ch);
  1643. SsmSetTxCallerId(ch, CALLERID);
  1644. if(SsmAutoDial(ch,PHONE_NUMBER) == -1) 
  1645. {
  1646. SsmHangup(ch);
  1647. }
  1648. else
  1649. {
  1650. p->nOutTotTest++;
  1651. p->dwTimeOut = 0L;
  1652. p->nStep = CALLTEST_OUT_WaitDial;
  1653. }
  1654. }
  1655. else p->nStep  = CALLTEST_IDLE;
  1656. if(bOneCallOnly) break;
  1657. }
  1658. }
  1659. void CTestView::CalloutTestHandler(int ch, int nChState)
  1660. {
  1661. int nResult, nDirection;
  1662. char szBuf[100];
  1663. PCALLTEST p = &CallTest[ch];
  1664. nResult = SsmGetAutoCallDirection(ch,&nDirection);
  1665. if(nResult==-1 || nDirection<1) return;
  1666. switch(p->nStep)
  1667. {
  1668. case CALLTEST_IDLE:
  1669. if(++nWaitSearchIdleChTimeCnt[ch] <= nCallInterval) break; //changed 2002.12.6
  1670. nWaitSearchIdleChTimeCnt[ch] = 0;
  1671. if(bEnSearchIdleCh || (!bEnSearchIdleCh&&nChState==S_CALL_STANDBY)) 
  1672. {
  1673. SsmPickup(ch);
  1674. SsmSetTxCallerId(ch, CALLERID);
  1675. if(SsmAutoDial(ch,PHONE_NUMBER) == -1) 
  1676. {
  1677. SsmHangup(ch);
  1678. return;
  1679. }
  1680. p->nOutTotTest++;
  1681. p->dwTimeOut = 0L;
  1682. p->nStep = CALLTEST_OUT_WaitDial;
  1683. }
  1684. break;
  1685. case CALLTEST_OUT_WaitDial:
  1686. switch(SsmChkAutoDial(ch))
  1687. {
  1688. case DIAL_VOICE: //"通话"状态
  1689. case DIAL_VOICEF1:
  1690. case DIAL_VOICEF2:
  1691. p->nOutCallOK++;
  1692. p->dwTimeOut = 0L;
  1693. if(p->bEnOutTxDtmf) p->nStep = CALLTEST_OUT_StartSendDtmf;
  1694. else                p->nStep = CALLTEST_OUT_WaitDtmf;
  1695. break;
  1696. case DIAL_NO_DIALTONE:
  1697. case DIAL_BUSYTONE:
  1698. case DIAL_ECHO_NOVOICE:
  1699. case DIAL_NOVOICE:
  1700. case DIAL_NOANSWER:
  1701. case DIAL_FAILURE:
  1702. case DIAL_INVALID_PHONUM:
  1703. p->nAutoDialFailed ++;
  1704. SsmHangup(ch);
  1705. wsprintf(szBuf,"%d/%d/%d/%d/%d",p->nOutRxDtmfOK,p->nOutCallOK,p->nOutTotTest, p->nAutoDialFailed, p->nOutRxDtmfFailed);
  1706. m_ChList.SetItemText( ch, ITEM_CallTest, szBuf);
  1707. p->dwTimeOut = 0L;
  1708. if(bEnSearchIdleCh) p->bEnOut = FALSE;
  1709. p->nStep = CALLTEST_IDLE;
  1710. break;
  1711. case DIAL_STANDBY:
  1712. nResult = SsmGetChStateKeepTime(ch);
  1713. if(nResult > 2000)
  1714. {
  1715. p->nAutoDialFailed ++;
  1716. SsmHangup(ch);
  1717. wsprintf(szBuf,"%d/%d/%d/%d/%d",p->nOutRxDtmfOK,p->nOutCallOK,p->nOutTotTest, p->nAutoDialFailed, p->nOutRxDtmfFailed);
  1718. m_ChList.SetItemText( ch, ITEM_CallTest, szBuf);
  1719. p->dwTimeOut = 0L;
  1720. if(bEnSearchIdleCh) p->bEnOut = FALSE;
  1721. p->nStep = CALLTEST_IDLE;
  1722. }
  1723. break;
  1724. case DIAL_DIALING:
  1725. case DIAL_ECHOTONE:
  1726. default:
  1727. break;
  1728. }
  1729. break;
  1730. case CALLTEST_OUT_StartSendDtmf:
  1731. SsmTxDtmf(ch,TEST_DTMF);
  1732. p->nStep = CALLTEST_OUT_ChkTxDtmf;
  1733. break;
  1734. case CALLTEST_OUT_ChkTxDtmf:
  1735. if(SsmChkTxDtmf(ch) == 0)
  1736. {
  1737. p->nStep = CALLTEST_OUT_WaitDtmf;
  1738. }
  1739. break;
  1740. case CALLTEST_OUT_WaitDtmf:
  1741. if(p->bEnOutRxDtmf)
  1742. {
  1743. SsmGetDtmfStr(ch,szBuf);
  1744. if(strcmp(szBuf,TEST_DTMF) == 0)
  1745. {
  1746. SsmHangup(ch);
  1747. p->nOutRxDtmfOK++;
  1748. wsprintf(szBuf,"%d/%d/%d/%d/%d",p->nOutRxDtmfOK,p->nOutCallOK,p->nOutTotTest, p->nAutoDialFailed, p->nOutRxDtmfFailed);
  1749. m_ChList.SetItemText( ch, ITEM_CallTest, szBuf);
  1750. if(bEnSearchIdleCh) p->bEnOut = FALSE;
  1751. p->nStep = CALLTEST_IDLE;
  1752. }
  1753. else if(++p->dwTimeOut > 40)
  1754. {
  1755. SsmHangup(ch);
  1756. p->nOutRxDtmfFailed++;
  1757. wsprintf(szBuf,"%d/%d/%d/%d/%d",p->nOutRxDtmfOK,p->nOutCallOK,p->nOutTotTest, p->nAutoDialFailed, p->nOutRxDtmfFailed);
  1758. m_ChList.SetItemText( ch, ITEM_CallTest, szBuf);
  1759. if(bEnSearchIdleCh) p->bEnOut = FALSE;
  1760. p->nStep = CALLTEST_IDLE;
  1761. }
  1762. }
  1763. else
  1764. {
  1765. SsmHangup(ch);
  1766. wsprintf(szBuf,"%d/%d/%d",p->nOutRxDtmfOK,p->nOutCallOK,p->nOutTotTest);
  1767. m_ChList.SetItemText( ch, ITEM_CallTest, szBuf);
  1768. if(bEnSearchIdleCh) p->bEnOut = FALSE;
  1769. p->nStep = CALLTEST_IDLE;
  1770. }
  1771. break;
  1772. }
  1773. }
  1774. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1775. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SS7 FUNCTION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1776. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1777. void CTestView::OnClickChlist(NMHDR* pNMHDR, LRESULT* pResult) 
  1778. {
  1779. // TODO: Add your control notification handler code here
  1780. int nItem, nFlags;
  1781.     
  1782.     nFlags = LVNI_SELECTED;
  1783.     nItem = m_ChList.GetNextItem(-1, nFlags );
  1784.     if ( nItem != -1 )
  1785. {
  1786. m_SelCurCh.SetCurSel(nItem);        
  1787. CurCh = m_SelCurCh.GetCurSel();
  1788. }
  1789. OnSelchangeComboSelcurch();
  1790. *pResult = 0;
  1791. }
  1792. void CTestView::OnOpenShconfig() 
  1793. {
  1794. // TODO: Add your command handler code here
  1795. TCHAR lpstrActual[300];
  1796. TCHAR command[400] = TEXT("notepad ");
  1797. STARTUPINFO si = {sizeof(si) };
  1798. PROCESS_INFORMATION pi;
  1799. DWORD dwExitCode;
  1800. GetCurrentDirectory(MAX_PATH,lpstrActual);
  1801. lstrcat(lpstrActual,"\ShConfig.ini");
  1802. lstrcat(command, lpstrActual);
  1803. //WinExec( command, SW_SHOWNORMAL);
  1804. BOOL fSucess = CreateProcess(NULL, command, NULL, NULL, 
  1805. FALSE, 0, NULL, NULL, &si, &pi);
  1806. if(fSucess)
  1807. {
  1808. // OnBUTTONSsmCloseCti();
  1809. Sleep(200);
  1810. CloseHandle(pi.hThread);
  1811. WaitForSingleObject(pi.hProcess , INFINITE);
  1812. GetExitCodeProcess(pi.hProcess , &dwExitCode);
  1813. CloseHandle(pi.hProcess);
  1814. // OnBUTTONSsmStartCti();
  1815. }
  1816. }
  1817. void CTestView::OnOpenShcticonfig() 
  1818. {
  1819. // TODO: Add your command handler code here
  1820. TCHAR lpstrActual[300];
  1821. // TCHAR command[400] = TEXT("notepad ");
  1822. STARTUPINFO si = {sizeof(si) };
  1823. PROCESS_INFORMATION pi;
  1824. DWORD dwExitCode;
  1825. GetCurrentDirectory(MAX_PATH,lpstrActual);
  1826. lstrcat(lpstrActual,"\ShCtiConfig.exe");
  1827. // lstrcat(command, lpstrActual);
  1828. BOOL fSucess = CreateProcess(NULL, lpstrActual, NULL, NULL, 
  1829. FALSE, 0, NULL, NULL, &si, &pi);
  1830. if(fSucess)
  1831. {
  1832. // OnBUTTONSsmCloseCti();
  1833. Sleep(200);
  1834. CloseHandle(pi.hThread);
  1835. WaitForSingleObject(pi.hProcess , INFINITE);
  1836. GetExitCodeProcess(pi.hProcess , &dwExitCode);
  1837. CloseHandle(pi.hProcess);
  1838. // OnBUTTONSsmStartCti();
  1839. }
  1840. else
  1841. {
  1842. // MessageBox("在当前目录下没有找到ShCtiConfig.exe程序!", MB_OK);//masked by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.11
  1843. MessageBox(BoxMsg_NoConfigExe, MB_OK);//added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.11
  1844. }
  1845. }
  1846. void CTestView::OnVer34() 
  1847. {
  1848. // TODO: Add your command handler code here
  1849. CVer34 dlg;
  1850. dlg.DoModal();
  1851. }
  1852. void CTestView::Ontimeflag()
  1853. {
  1854. // TODO: Add your command handler code here
  1855. bTimerOpen = !bTimerOpen;
  1856. m_dlgBase.OnSetTimer(bTimerOpen);
  1857. m_dlgPlay.OnSetTimer(bTimerOpen);
  1858. m_dlgRec.OnSetTimer(bTimerOpen);
  1859. m_dlgOther.OnSetTimer(bTimerOpen);
  1860. m_dlgIP.OnSetTimer(bTimerOpen);
  1861. return;
  1862. }
  1863. void CTestView::OnUpdateOntimeflag(CCmdUI* pCmdUI) 
  1864. {
  1865. // TODO: Add your command update UI handler code here
  1866. pCmdUI->SetCheck(bTimerOpen);
  1867. }
  1868. void CTestView::myShowErrMsg(int ch)
  1869. {
  1870. char szErrMsg[300], szErrCode[20];
  1871. wsprintf(szErrCode,"ch=%d ErrorCode=%d",ch,SsmGetLastErrCode());
  1872. SsmGetLastErrMsg(szErrMsg);
  1873. // lstrcat(szErrMsg, szErrCode);
  1874. AfxMessageBox(szErrMsg, MB_OK, 0);
  1875. }
  1876. void WriteLog(char *pMsg)
  1877. {
  1878. SYSTEMTIME st;
  1879. GetLocalTime(&st);
  1880. FILE* pFile = fopen( "T3523.txt", "a+t" );
  1881. if(pFile != NULL) 
  1882. {
  1883. fprintf( pFile,"%04u-%02u-%02u %02u:%02u:%02u %sn",
  1884.   st.wYear,
  1885.   st.wMonth,
  1886.   st.wDay,
  1887.   st.wHour,
  1888.   st.wMinute,
  1889.   st.wSecond,   
  1890.   pMsg);
  1891. fclose(pFile);
  1892. }
  1893. }
  1894. void CTestView::OnVer353() 
  1895. {
  1896. ver353 dlg;
  1897. dlg.DoModal();
  1898. }
  1899. void CTestView::OnOverallEnergyLevel() 
  1900. {
  1901. COverallEnergyLevelDlg dlg;
  1902. dlg.DoModal();
  1903. }
  1904. void CTestView::On40exOpenBus() 
  1905. {
  1906. C40ExDlg dlg;
  1907. dlg.nCurCh = CurCh;
  1908. dlg.DoModal();
  1909. }
  1910. void CTestView::OnSsmsetwaitdtmfex() 
  1911. {
  1912. // TODO: Add your command handler code here
  1913. CSetWaitDtmf dlg;
  1914. dlg.DoModal();
  1915. }
  1916. //+++START+++ added by yxh for SpyTest, 2003.08.22
  1917. void CTestView::OnButtonSpy()
  1918. {
  1919. // TODO: Add your command handler code here
  1920. pDlg->ShowWindow(SW_SHOW);
  1921. return;
  1922. }
  1923. //+++END+++  added by yxh for SpyTest, 2003.08.22
  1924. //++++START++++ added by cqb for SHCTI030902 Test
  1925. void CTestView::OnVer404() 
  1926. {
  1927. // TODO: Add your command handler code here
  1928. CVer404 dlg;
  1929. dlg.DoModal();
  1930. }
  1931. //++++END++++
  1932. void CTestView::OnVer444x() 
  1933. {
  1934. // TODO: Add your command handler code here
  1935. CVer444x dlg;
  1936. dlg.DoModal();
  1937. }
  1938. //++++START++++ added by cqb for 函数返回BUG Test , 2004.9.29
  1939. void CTestView::OnBoardinfo() 
  1940. {
  1941. CBoardInfo bi;
  1942. bi.DoModal();
  1943. }
  1944. //++++START++++ added by cqb for 函数返回BUG Test , 2004.9.29
  1945. void CTestView::OnSelchangeTabView(NMHDR* pNMHDR, LRESULT* pResult) 
  1946. {
  1947. // TODO: Add your control notification handler code here
  1948. int nCurSel = m_TabCtrl.GetCurSel();
  1949. for(int i=0; i<VIEW_MAX; i++)
  1950. {
  1951. ::ShowWindow(hwndView[i], SW_HIDE);
  1952. }
  1953. ::ShowWindow(hwndView[nCurSel], SW_SHOW);
  1954. *pResult = 0;
  1955. }
  1956. void CTestView::OnSelectAllch() 
  1957. {
  1958. // TODO: Add your control notification handler code here
  1959. UpdateData(TRUE);
  1960. int nStartCh = GetDlgItemInt(IDC_EDIT_SelectAllChStart, NULL, TRUE);
  1961. int nEndCh   = GetDlgItemInt(IDC_EDIT_SelectAllChEnd,   NULL, TRUE);
  1962. m_dlgBase.OnSetAllChPara(m_SelectAllCh, nStartCh, nEndCh);
  1963. m_dlgPlay.OnSetAllChPara(m_SelectAllCh, nStartCh, nEndCh);
  1964. m_dlgRec.OnSetAllChPara(m_SelectAllCh, nStartCh, nEndCh);
  1965. m_dlgOther.OnSetAllChPara(m_SelectAllCh, nStartCh, nEndCh);
  1966. m_dlgIP.OnSetAllChPara(m_SelectAllCh, nStartCh, nEndCh);
  1967. }
  1968. void CTestView::OnButtonSs7() 
  1969. {
  1970. // TODO: Add your command handler code here
  1971. CSs7 Ss7;
  1972. Ss7.DoModal();
  1973. }
  1974. void CTestView::OnBUTTONfsk() 
  1975. {
  1976. // TODO: Add your command handler code here
  1977. CFsk myFsk;
  1978. myFsk.DoModal();
  1979. }
  1980. void CTestView::OnButtonBus() 
  1981. {
  1982. // TODO: Add your command handler code here
  1983. BusChInfo myBusInfo;
  1984. myBusInfo.DoModal();
  1985. }
  1986. void CTestView::OnButtonConf() 
  1987. {
  1988. // TODO: Add your command handler code here
  1989. CConInfo myConf;
  1990. myConf.DoModal();
  1991. }
  1992. void CTestView::OnBUTTONSetChkTonePara() 
  1993. {
  1994. // TODO: Add your command handler code here
  1995. CSetChkTonePara mySetChkTonePara;
  1996. mySetChkTonePara.DoModal();
  1997. }
  1998. void CTestView::OnBUTTONPcmFunc() 
  1999. {
  2000. // TODO: Add your command handler code here
  2001. CPcmCompatible myPcmCompatible;
  2002. myPcmCompatible.DoModal();
  2003. }
  2004. void CTestView::OnBUTTONSS1Base() 
  2005. {
  2006. // TODO: Add your command handler code here
  2007. CSS1base mySS1Op;
  2008. mySS1Op.DoModal();
  2009. }
  2010. void CTestView::OnVER458x() 
  2011. {
  2012. // TODO: Add your command handler code here
  2013. CDlgver456x dlg;
  2014. dlg.DoModal();
  2015. }
  2016. void CTestView::OnVer4605() 
  2017. {
  2018. // TODO: Add your command handler code here
  2019. CDlgIsupAdv dlg;
  2020. dlg.DoModal();
  2021. }
  2022. void CTestView::OnVer4720Shv() 
  2023. {
  2024. // TODO: Add your command handler code here
  2025. CShvDlg dlg;
  2026. dlg.DoModal();
  2027. }
  2028. //++++start++++ added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007-1-9
  2029. void CTestView::InitLang()
  2030. {
  2031. if (g_dwLanguageID == LANGUAGE_CHINESE_SIMPLIFIED)
  2032. {
  2033. return;
  2034. }
  2035. else// if (PRIMARYLANGID(g_dwLanguageID) == LANG_ENGLISH)
  2036. {
  2037. //TabCtrl
  2038. TC_ITEM * pTCItem;
  2039. pTCItem = new TC_ITEM;
  2040. pTCItem->mask = TCIF_TEXT;
  2041. pTCItem->pszText = ENG_TESTFORM_TABCTRL_LAB1;
  2042. m_TabCtrl.SetItem(0, pTCItem);
  2043. pTCItem->pszText = ENG_TESTFORM_TABCTRL_LAB2;
  2044. m_TabCtrl.SetItem(1, pTCItem);
  2045. pTCItem->pszText = ENG_TESTFORM_TABCTRL_LAB3;
  2046. m_TabCtrl.SetItem(2, pTCItem);
  2047. pTCItem->pszText = ENG_TESTFORM_TABCTRL_LAB4;
  2048. m_TabCtrl.SetItem(3, pTCItem);
  2049. pTCItem->pszText = ENG_TESTFORM_TABCTRL_LAB5;
  2050. m_TabCtrl.SetItem(4, pTCItem);
  2051. pTCItem->pszText = ENG_TESTFORM_TABCTRL_LAB6;
  2052. m_TabCtrl.SetItem(5, pTCItem);
  2053. delete pTCItem;
  2054. //ChList
  2055. LV_COLUMN lvc;
  2056. lvc.mask = LVCF_TEXT;
  2057. lvc.pszText = ENG_TESTFORM_CHLIST_LAB2;
  2058. m_ChList.SetColumn(1, &lvc);
  2059. lvc.pszText = ENG_TESTFORM_CHLIST_LAB3;
  2060. m_ChList.SetColumn(2, &lvc);
  2061. lvc.pszText = ENG_TESTFORM_CHLIST_LAB6;
  2062. m_ChList.SetColumn(5, &lvc);
  2063. lvc.pszText = ENG_TESTFORM_CHLIST_LAB32;
  2064. m_ChList.SetColumn(31, &lvc);
  2065. lvc.pszText = ENG_TESTFORM_CHLIST_LAB33;
  2066. m_ChList.SetColumn(32, &lvc);
  2067. lvc.pszText = ENG_TESTFORM_CHLIST_LAB34;
  2068. m_ChList.SetColumn(33, &lvc);
  2069. lvc.pszText = ENG_TESTFORM_CHLIST_LAB35;
  2070. m_ChList.SetColumn(34, &lvc);
  2071. lvc.pszText = ENG_TESTFORM_CHLIST_LAB36;
  2072. m_ChList.SetColumn(35, &lvc);
  2073. lvc.pszText = ENG_TESTFORM_CHLIST_LAB37;
  2074. m_ChList.SetColumn(36, &lvc);
  2075. lvc.pszText = ENG_TESTFORM_CHLIST_LAB38;
  2076. m_ChList.SetColumn(37, &lvc);
  2077. lvc.pszText = ENG_TESTFORM_CHLIST_LAB39;
  2078. m_ChList.SetColumn(38, &lvc);
  2079. }
  2080. }
  2081. //+++++end+++++ added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007-1-9
  2082. //+++start+++ add by hunnad for 多路呼叫,2007.10.15
  2083. void CTestView::OnMulticall() 
  2084. {
  2085. // TODO: Add your command handler code here
  2086. CDlgMultiCall dlg;
  2087. dlg.DoModal();
  2088. }
  2089. //+++end+++ add by hunnad for 多路呼叫,2007.10.15
  2090. //+++start+++ add by hunnad for 全部挂机,2007.10.15
  2091. void CTestView::OnHangupall() 
  2092. {
  2093. // TODO: Add your command handler code here
  2094. for(int ch = 0; ch < SsmGetMaxCh(); ch++)
  2095. SsmHangup(ch);
  2096. }
  2097. //+++start+++ add by hunnad for 全部挂机,2007.10.15
  2098. //+++start+++ add by hunnad for 全部摘机,2007.10.15
  2099. void CTestView::OnPickupall() 
  2100. {
  2101. // TODO: Add your command handler code here
  2102. for(int ch = 0; ch < SsmGetMaxCh(); ch++)
  2103. {
  2104. int nState = SsmGetChState(ch);
  2105. if(nState == S_CALL_RINGING)
  2106. SsmPickup(ch);
  2107. }
  2108. }
  2109. //+++end+++ add by hunnad for 全部摘机,2007.10.15
一、源码描述 呼叫中心系统利用传统企业呼叫中心技术和互联网技术,具有传统联系与在线沟 通的特点;并针对集团业务,量身定制的一个集客服用户投诉受理、用户资料收 集整理、公司内各业务部门间有关用户问题信息沟通、联络系统。该系统,可以 为客服咨询服务工作提供一个服务平台,并把公司经营中的各类用户反映的问题 通过统计报表,实时地传递给指定的接口或人员。同时,已经发送的信息可以根 据公司经营的需要,进行信息归类、查询整理和统计分析。 二、功能介绍 1、采用两层架构:实体层(包括逻辑处理)web、数据访问层DBClass。 2、实体层:包括页面的展现形式,调用数据显示到页面,对业务逻辑进行处理。 3、数据访问层:提供操作数据库的方法,主要包括增删改查,方便实体层进行调用。 4、前台:电话功能区域、客户资料模块、工单模块、知识库模块、传真管理模块、座 席监控模块。 5、后台: 人员管理,参数管理,知识库维护,系统服务,呼叫详单。 三、注意事项 1、后台管理员用户名1222,密码是:123;前台用户名118,密码666666。 2、开发环境为Visual Studio 2010,数据库为SQL Server 2008,数据库文件在DB 文件夹中,使用.net 2.0开发。 3、默认数据库连接字符串在webconfig配置文件中修改。 4、该源码可以用作二次开发或者学习交流使用,不可用于商业。 5、有关该源码的具体使用情况请参照源码里面的说明文档
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值