1.  // TestView.cpp : implementation of the CTestView class
2.  //
3. 
4.  #include "stdafx.h"
5.  #include "Test.h"
6. 
7.  #include "TestDoc.h"
8.  #include "TestView.h"
9. 
10.  #include "Fsk.h"
11.  #include "BusChInfo.h"
12.  #include "ConInfo.h"
13.  #include "SetChkTonePara.h"
14.  #include "PcmCompatible.h"
15.  #include "SS1base.h"
16.  #include "Ss7.h"
17.  #include "TsToChList.h"
18.  #include "CallTest.h"
19.  #include "direct.h"
20.  #include <errno.h>
21.  //#include "../shp_a3/shpa3api.h"
22.  #include "ver34.h"
23.  #include "ver353.h"
24.  #include "ver404.h"
25.  #include "time.h"
26.  #define _TESTDATA
27.  #include "TestData.h"
28.  #include "OverallEnergyLevelDlg.h"
29.  #include "40ExDlg.h"
30.  #include "SetWaitDtmf.h"
31.  #include "Ver444x.h"
32.  #include "BoardInfo.h"
33.  #include "DlgMultiCall.h" // added by hunnad for 多路呼叫, 2007.10.15
34. 
35.  #include "Dlgver456x.h"
36.  #include "DlgIsupAdv.h"
37.  #include "ShvDlg.h"
38.  #ifdef _DEBUG
39.  #define new DEBUG_NEW
40.  #undef THIS_FILE
41.  static char THIS_FILE[] = __FILE__;
42.  #endif
43. 
44.  enum{

45.  CHKPLAY_PLAYING,
46.  CHKPLAY_NORMAL_END,
47.  CHKPLAY_DTMF_END,
48.  CHKPLAY_BURGEIN,
49.  CHKPLAY_REMOTEHANGUP_END, //added by xxb for 恒生,01.09,2002 +++++
50.  CHKPLAY_APPLICATION_END, //added by xxb for 恒生,01.09,2002 +++++
51.  CHKPLAY_PAUSED,//added by xxb,2002.8.2
52.  CHKPLAY_LINKFROM_END,//Added by xxb, for 因下总线而中止,2003.04.17
53.  CHKPLAY_NETDISCONNECT,//Added by yxh, for 网络文件放音改进, 2003.09.30
54.  };
55. 
56.  enum
57.  {

58.  CHKRECORD_RECORDING,    //0: recording
59.  CHKRECORD_APPLICATION_END, //1: application end
60.  CHKRECORD_DTMF_END,    //2: record operation is stopped by DTMF key
61.  CHKRECORD_REMOTEHANGUP_END,//3: recor operation is stopped by remote hangup
62.  CHECKRECORD_TIMEUP_END,    //4: end of record for time up.
63.  CHECKRECORD_FILE_PAUSED,   //5: file record is paused.
64.  CHECKRECORD_FILE_WRITE_ERROR,//6:file write error
65.  };
66. 
67.  extern int nIsSsmStartCtiOK;
68. 
69.  BOOL bEnableOpToneAnalyze[MAX_CH];
70.  BOOL bEnableOpRingDetect[MAX_CH];
71.  BOOL bEnableOpBlockRemoteCh[MAX_CH];
72.  BOOL bEnableOpEchoCanceller[MAX_CH];
73.  BOOL bEnableOpADC[MAX_CH];
74. 
75.  BOOL bTimerOpen = TRUE;
76. 
77.  HANDLE hFile;
78. 
79.  /
80.  // CTestView
81. 
82.  IMPLEMENT_DYNCREATE(CTestView, CFormView)
83. 
84.  BEGIN_MESSAGE_MAP(CTestView, CFormView)
85.  //{{AFX_MSG_MAP(CTestView)
86.  ON_CBN_SELCHANGE(IDC_COMBO_SELCURCH, OnSelchangeComboSelcurch)
87.  ON_NOTIFY(NM_CLICK, IDC_CHLIST, OnClickChlist)
88.  ON_WM_TIMER()
89.  ON_WM_DESTROY()
90.  ON_COMMAND(ID_OPEN_SHCONFIG, OnOpenShconfig)
91.  ON_COMMAND(ID_OPEN_SHCTICONFIG, OnOpenShcticonfig)
92.  ON_COMMAND(ID_VER34, OnVer34)
93.  ON_COMMAND(ID_ONTIMEFLAG, Ontimeflag)
94.  ON_UPDATE_COMMAND_UI(ID_ONTIMEFLAG, OnUpdateOntimeflag)
95.  ON_COMMAND(ID_VER353, OnVer353)
96.  ON_COMMAND(ID_OVERALL_ENERGY_LEVEL, OnOverallEnergyLevel)
97.  ON_COMMAND(ID_40EX_OPEN_BUS, On40exOpenBus)
98.  ON_COMMAND(ID_SSMSETWAITDTMFEX, OnSsmsetwaitdtmfex)
99.  ON_COMMAND(ID_BUTTON_SPY, OnButtonSpy)
100.  ON_COMMAND(ID_VER404, OnVer404)
101.  ON_COMMAND(ID_VER444x, OnVer444x)
102.  ON_COMMAND(ID_BOARDINFO, OnBoardinfo)
103.  ON_NOTIFY(TCN_SELCHANGE, IDC_TAB_VIEW, OnSelchangeTabView)
104.  ON_BN_CLICKED(IDC_SELECT_ALLCH, OnSelectAllch)
105.  ON_COMMAND(IDC_BUTTON_SS7, OnButtonSs7)
106.  ON_COMMAND(IDC_BUTTON_fsk, OnBUTTONfsk)
107.  ON_COMMAND(IDC_BUTTON_BUS, OnButtonBus)
108.  ON_COMMAND(IDC_BUTTON_CONF, OnButtonConf)
109.  ON_COMMAND(IDC_BUTTON_SetChkTonePara, OnBUTTONSetChkTonePara)
110.  ON_COMMAND(IDC_BUTTON_PcmFunc, OnBUTTONPcmFunc)
111.  ON_COMMAND(IDC_BUTTON_SS1Base, OnBUTTONSS1Base)
112.  ON_COMMAND(ID_VER458x, OnVER458x)
113.  ON_COMMAND(ID_VER4605, OnVer4605)
114.  ON_COMMAND(IDC_VER_4720_SHV, OnVer4720Shv)
115.  ON_COMMAND(ID_MULTICALL, OnMulticall)
116.  ON_COMMAND(ID_HANGUPALL, OnHangupall)
117.  ON_COMMAND(ID_PICKUPALL, OnPickupall)
118.  //}}AFX_MSG_MAP
119.  // Standard printing commands
120.  ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
121.  ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
122.  ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
123.  END_MESSAGE_MAP()
124. 
125.  /
126.  // CTestView construction/destruction
127. 
128.  CTestView::CTestView()
129.  : CFormView(CTestView::IDD)
130.  {

131.  //{{AFX_DATA_INIT(CTestView)
132.  m_SelectAllCh = FALSE;
133.  //}}AFX_DATA_INIT
134.  // TODO: add construction code here
135. 
136.  }
137. 
138.  CTestView::~CTestView()
139.  {

140.  }
141. 
142.  void CTestView::DoDataExchange(CDataExchange* pDX)
143.  {

144.  CFormView::DoDataExchange(pDX);
145.  //{{AFX_DATA_MAP(CTestView)
146.  DDX_Control(pDX, IDC_TAB_VIEW, m_TabCtrl);
147.  DDX_Control(pDX, IDC_COMBO_SELCURCH, m_SelCurCh);
148.  DDX_Control(pDX, IDC_CHLIST, m_ChList);
149.  DDX_Check(pDX, IDC_SELECT_ALLCH, m_SelectAllCh);
150.  //}}AFX_DATA_MAP
151.  }
152. 
153.  BOOL CTestView::PreCreateWindow(CREATESTRUCT& cs)
154.  {

155.  // TODO: Modify the Window class or styles here by modifying
156.  //  the CREATESTRUCT cs
157. 
158.  return CFormView::PreCreateWindow(cs);
159.  }
160.  enum{

161.  ITEM_Ch,
162.  ITEM_ChHwType,
163.  ITEM_ChState,
164.  ITEM_RingCount,
165.  ITEM_SendRingCount,//added by LCL for RingCounter, 2005.09.19
166.  ITEM_RxDTMF,
167.  ITEM_ToneAnalyzeResult,
168.      ITEM_2ndToneAnalyzeResult, //ADDED BY yxd 2003.3.20
169.  ITEM_Burgein,
170.  ITEM_DetectNoSound,
171.  ITEM_PlayTime,
172.  ITEM_PlayTimeEx,
173.  ITEM_PlayPercentage,
174.  ITEM_ChkPlay,
175.  ITEM_GetPlayType,
176.  ITEM_RecTime,
177.  ITEM_ChkRec,
178.  ITEM_OverallEnergy,
179.  ITEM_AdaptiveFilter,
180.  ITEM_AdaptiveFilterStudy,
181.  ITEM_ECRatio,
182.  ITEM_LCD,
183.  ITEM_DKEY, //added by yxh for GetDKeyStr, 2005.09.02
184.  ITEM_CallerId,
185.  ITEM_CallerIdEx,
186.  ITEM_Vad,
187.  ITEM_PeakFreq,
188.  ITEM_RxCAS,
189.  ITEM_TxCAS,
190.  ITEM_RxR2,
191.  ITEM_TxR2,
192.  ITEM_PendReason,
193.  ITEM_ChStateKeepTime,
194.  ITEM_PhoneNumber,
195.  ITEM_Ploar,
196.  ITEM_BlockRemote,
197.  ITEM_CallTest,
198.  ITEM_CallInTest,
199.  ITEM_CodecType
200.  };
201. 
202.  void CTestView::OnInitialUpdate()
203.  {

204.  CFormView::OnInitialUpdate();
205.  GetParentFrame()->RecalcLayout();
206.  ResizeParentToFit();
207.  /*
208.  char szPathName[MAX_PATH];
209.  memset(szPathName, 0, MAX_PATH);
210.  GetCurrentDirectory(MAX_PATH, szPathName);
211.  strcat(szPathName, "\TestRecFiles");
212.  if(_mkdir(szPathName)==-1 && errno!=EEXIST) //创建文件夹,创建失败而且失败原因不是文件夹已经存在
213.  {

214.  MessageBox("创建存放录音文件的文件夹失败", "警告", MB_OK|MB_ICONSTOP);
215.  return;
216.  }
217.  */
218.  if(SsmGetMaxUsableBoard() != SsmGetMaxCfgBoard())
219.  {

220.  bIsInitError = TRUE;
221.  char t[1000];
222.  SsmGetLastErrMsg(szErrMsg);
223.  // wsprintf(t,"警告: 板卡总数=%d, 初始化成功板卡数=%d!n 错误信息="%s"",//masked by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.11
224.  wsprintf(t,BoxMsg_Fmt_InitBoard,//added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.11
225.  SsmGetMaxCfgBoard(),
226.  SsmGetMaxUsableBoard(),
227.  szErrMsg);
228.  if(AfxMessageBox(t, MB_OK, 0) == IDOK)
229.  bIsInitError = FALSE;
230.  }
231. 
232.  nMaxCh = SsmGetMaxCh();
233. 
234.  TC_ITEM * m_pTCItem;
235.  m_pTCItem = new TC_ITEM;
236.  m_pTCItem->mask = TCIF_TEXT;
237.  m_pTCItem->pszText = "基本函数";
238.  m_TabCtrl.InsertItem(0, m_pTCItem);
239.  m_pTCItem->pszText = "放音函数";
240.  m_TabCtrl.InsertItem(1, m_pTCItem);
241.  m_pTCItem->pszText = "录音函数";
242.  m_TabCtrl.InsertItem(2, m_pTCItem);
243.  m_pTCItem->pszText = "事件驱动";
244.  m_TabCtrl.InsertItem(3, m_pTCItem);
245.  m_pTCItem->pszText = "IP函数";
246.  m_TabCtrl.InsertItem(4, m_pTCItem);
247.  m_pTCItem->pszText = "其它函数";
248.  m_TabCtrl.InsertItem(5, m_pTCItem);
249. 
250.  delete m_pTCItem; //added by xxh for memory leak output, 2006.12.06
251.  CRect rcBaseFram;
252.  GetDlgItem(IDC_TAB_VIEW)->GetWindowRect(&rcBaseFram);
253.  m_dlgBase.Create(IDD_VIEW_BASE, this);
254.  m_dlgPlay.Create(IDD_VIEW_PLAY, this);
255.  m_dlgRec.Create(IDD_VIEW_REC, this);
256.  m_dlgEvent.Create(IDD_VIEW_EVENT, this);
257.  m_dlgIP.Create(IDD_VIEW_IP, this);
258.  m_dlgOther.Create(IDD_VIEW_OTHER, this);
259.  hwndView[VIEW_BASE] = m_dlgBase.GetSafeHwnd();
260.  hwndView[VIEW_PLAY] = m_dlgPlay.GetSafeHwnd(); 
261.  hwndView[VIEW_REC] = m_dlgRec.GetSafeHwnd();
262.  hwndView[VIEW_EVENT] = m_dlgEvent.GetSafeHwnd();
263.  hwndView[VIEW_IP] = m_dlgIP.GetSafeHwnd();
264.  hwndView[VIEW_OTHER] = m_dlgOther.GetSafeHwnd();
265.  ScreenToClient(&rcBaseFram);
266.  ::MoveWindow(hwndView[VIEW_BASE], rcBaseFram.left + 1, rcBaseFram.top + 20, rcBaseFram.Width() - 2, rcBaseFram.Height() - 21, 0);
267.  ::MoveWindow(hwndView[VIEW_PLAY], rcBaseFram.left + 1, rcBaseFram.top + 20, rcBaseFram.Width() - 2, rcBaseFram.Height() - 21, 0);
268.  ::MoveWindow(hwndView[VIEW_REC], rcBaseFram.left + 1, rcBaseFram.top + 20, rcBaseFram.Width() - 2, rcBaseFram.Height() - 21, 0);
269.  ::MoveWindow(hwndView[VIEW_EVENT], rcBaseFram.left + 1, rcBaseFram.top + 20, rcBaseFram.Width() - 2, rcBaseFram.Height() - 21, 0);
270.  ::MoveWindow(hwndView[VIEW_IP], rcBaseFram.left + 1, rcBaseFram.top + 20, rcBaseFram.Width() - 2, rcBaseFram.Height() - 21, 0);
271.  ::MoveWindow(hwndView[VIEW_OTHER], rcBaseFram.left + 1, rcBaseFram.top + 20, rcBaseFram.Width() - 2, rcBaseFram.Height() - 21, 0);
272.  ::ShowWindow(hwndView[VIEW_BASE], SW_SHOW);
273. 
274.  InitChList(TRUE);
275. 
276.  char szTmp[MAX_CH];
277. 
278.  for(int ch=0; ch<nMaxCh; ch++)
279.  {

280.  m_SelCurCh.InsertString(ch, _itoa(ch,szTmp,10));
281.  }
282.  m_SelCurCh.SetCurSel(0);
283. 
284.  InitChVariable();
285.  OnSelchangeComboSelcurch();
286. 
287.  InitCallTest();
288. 
289.  SetDlgItemInt(IDC_EDIT_SelectAllChStart, 0,TRUE);
290.  SetDlgItemInt(IDC_EDIT_SelectAllChEnd, nMaxCh-1,TRUE);
291. 
292.  uTimerId = SetTimer(1,200,NULL); 
293.  if(uTimerId == 0)
294.  {

295.  char t[200];
296.  bIsInitError = TRUE;
297.  // wsprintf(t,"错误:启动主定时器失败,请退出一些应用程序后,重新启动Testn");//masked by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.11
298.  wsprintf(t,BoxMsg_TimerFail);//added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.11
299.  if(AfxMessageBox(t, MB_OK, 0) == IDOK)
300.  bIsInitError = FALSE;
301.  PostQuitMessage(0);
302.  return ;
303.  }
304.  nISDNItemCnt = 0;
305. 
306.  char cNewStat[100];
307. 
308.  for(ch=0; ch<nMaxCh; ch++)
309.  {

310.  wsprintf(cNewStat,"%dms",SsmGetChStateKeepTime(ch));
311.  m_ChList.SetItemText( ch, ITEM_ChStateKeepTime, cNewStat );
312.  }
313. 
314.  //+++START+++ added by yxh for SpyTest, 2003.08.22
315.  pDlg = new CSpyDialog;
316.  pDlg->Create(IDD_DIALOG_SPY, this);
317.  //+++END+++   added by yxh for SpyTest, 2003.08.22
318. 
319.  //++++start++++ added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
320.  InitLang();
321.  //+++++end+++++ added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
322.  }
323. 
324.  /
325.  // CTestView printing
326. 
327.  BOOL CTestView::OnPreparePrinting(CPrintInfo* pInfo)
328.  {

329.  // default preparation
330.  return DoPreparePrinting(pInfo);
331.  }
332. 
333.  void CTestView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
334.  {

335.  // TODO: add extra initialization before printing
336.  }
337. 
338.  void CTestView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
339.  {

340.  // TODO: add cleanup after printing
341.  }
342. 
343.  void CTestView::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
344.  {

345.  // TODO: add customized printing code here
346.  }
347. 
348.  /
349.  // CTestView diagnostics
350. 
351.  #ifdef _DEBUG
352.  void CTestView::AssertValid() const
353.  {

354.  CFormView::AssertValid();
355.  }
356. 
357.  void CTestView::Dump(CDumpContext& dc) const
358.  {

359.  CFormView::Dump(dc);
360.  }
361. 
362.  CTestDoc* CTestView::GetDocument() // non-debug version is inline
363.  {

364.  ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTestDoc)));
365.  return (CTestDoc*)m_pDocument;
366.  }
367.  #endif //_DEBUG
368. 
369.  /
370.  // CTestView message handlers
371. 
372. 
373.  void CTestView::InitChVariable()
374.  {

375.  int ch;
376.  // char szTmp[60];
377. 
378.  // strcpy(szTmp,"\..\..\testvoc");
379.  GetCurrentDirectory(MAX_PATH,szCurPath);
380.  // strcat(szCurPath,szTmp);
381. 
382.  for(ch=0; ch<nMaxCh; ch++) bEnableOpToneAnalyze[ch]   = (SsmQueryOpToneAnalyze(ch)==1) ? TRUE : FALSE;
383.  for(ch=0; ch<nMaxCh; ch++) bEnableOpBlockRemoteCh[ch] = (SsmQueryOpBlockRemoteCh(ch)==1) ? TRUE : FALSE;
384.  for(ch=0; ch<nMaxCh; ch++) bEnableOpRingDetect[ch]    = (SsmQueryOpRingDetect(ch)==1) ? TRUE : FALSE;
385.  for(ch=0; ch<nMaxCh; ch++) bEnableOpEchoCanceller[ch] = (SsmQueryOpEchoCanceller(ch)==1) ? TRUE : FALSE;
386.  for(ch=0; ch<nMaxCh; ch++) bEnableOpADC[ch]           = (SsmQueryOpADC(ch)==1) ? TRUE : FALSE;
387. 
388.  SetDlgItemInt(IDC_EDIT_LocalFlashTime, 500, TRUE);
389.  }
390. 
391.  //#define MAXITEM 35 //masked by yxh for GetDKeyStr, 2005.09.02
392.  //#define  MAXITEM 36 //added by yxh for GetDKeyStr, 2005.09.02//masked by LCL for RingCounter, 2005.09.19
393.  //#define  MAXITEM 37 added by LCL for RingCounter, 2005.09.19
394.  //#define  MAXITEM 38 added by cy for GetPLayType, 2006.07.10
395.  #define  MAXITEM 39 added by hunnad for GetPLayType, 2007.10.18
396. 
397.  enum{

398.  ITEM_PcmNo,
399.  ITEM_TIME,
400.  ITEM_L2Status,
401.  ITEM_L2D_L3Atom,
402.  ITEM_L3Start,
403.  ITEM_L3_L2DAtom,
404.  ITEM_RefInd,
405.  };
406. 
407.  #define MAXISDNITEM 7
408. 
409.  void CTestView::UpdateChList()
410.  {

411.  for(int ch=0; ch<nMaxCh; ch++)
412.  {

413.  char cNewStat[250]; 
414.  int nDirection;
415.  switch(SsmGetChType(ch))
416.  {

417.  //++++start++++ masked by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
418.  /* case 14: wsprintf(cNewStat, "变声"); break;
419.  case 9: wsprintf(cNewStat,"软传真"); break;
420.  case 10: wsprintf(cNewStat,"磁石"); break;
421.  case 0: wsprintf(cNewStat,"模拟"); break;
422.  case 1: wsprintf(cNewStat,"内线"); break;
423.  case 2: wsprintf(cNewStat,"坐席"); break;
424.  case 3: wsprintf(cNewStat,"录音"); break;
425.  case 4:
426.  if(SsmGetAutoCallDirection(ch,&nDirection) == 0) 
427.  {

428.  if (nDirection==3)
429.  wsprintf(cNewStat,"SS1Spy"); 
430.  else
431.  wsprintf(cNewStat,"SS1");
432.  }
433.  else if(nDirection==0)                           wsprintf(cNewStat,"SS1i"); 
434.  else if(nDirection==1)                           wsprintf(cNewStat,"SS1o"); 
435.  else                                          wsprintf(cNewStat,"SS1io"); 
436.  break;
437.  case 5: wsprintf(cNewStat,"传真"); break;
438.  case 6:
439.  if(SsmGetAutoCallDirection(ch,&nDirection) == 0) 
440.  {

441.  if (nDirection==3)
442.  wsprintf(cNewStat,"SS7Spy"); 
443.  else
444.  wsprintf(cNewStat,"SS7");
445.  }
446.  else if(nDirection==0)                           wsprintf(cNewStat,"TUPi"); 
447.  else if(nDirection==1)                           wsprintf(cNewStat,"TUPo"); 
448.  else if(nDirection==2)                           wsprintf(cNewStat,"TUPio"); 
449.  else                                             wsprintf(cNewStat,"TUP-x");
450.  break;
451.  case 7: //ISDN User ch
452.  if(SsmGetAutoCallDirection(ch,&nDirection) == 0) 
453.  {

454.  if (nDirection==3)
455.  wsprintf(cNewStat,"ISDNSpy"); 
456.  else
457.  wsprintf(cNewStat,"ISDN");
458.  }
459.  else if(nDirection==0)                           wsprintf(cNewStat,"ISDNi"); 
460.  else if(nDirection==1)                           wsprintf(cNewStat,"ISDNo"); 
461.  else if(nDirection==2)                           wsprintf(cNewStat,"ISDNio"); 
462.  else  wsprintf(cNewStat,"ISDN");
463.  break;
464.  case 8: //Isdn Net ch
465.  if(SsmGetAutoCallDirection(ch,&nDirection) == 0) 
466.  {

467.  if (nDirection==3)
468.  wsprintf(cNewStat,"ISDNNetSpy"); 
469.  else
470.  wsprintf(cNewStat,"ISDNNet");
471.  }
472.  else if(nDirection==0)                           wsprintf(cNewStat,"ISDNNeti"); 
473.  else if(nDirection==1)                           wsprintf(cNewStat,"ISDNNeto"); 
474.  else if(nDirection==2)                           wsprintf(cNewStat,"ISDNNetio"); 
475.  else  wsprintf(cNewStat,"ISDNNet");
476.  break;
477. 
478.  case 11:    wsprintf(cNewStat,"ISUPio");break;
479. 
480.  //+++START+++ added by yxh for 2B+D, 2005.01.26
481.  case 12: wsprintf(cNewStat, "DTR"); break;
482.  //+++ END +++ added by yxh for 2B+D, 2005.01.26
483.  default:
484.  wsprintf(cNewStat,"-1"); break;
485.  break;
486.  }
487.  */
488.  //+++++end+++++ masked by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
489.  //++++start++++ added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
490.  case 14: LoadString(g_hInstance, IDS_CHTYPE_14, cNewStat, sizeof(cNewStat)); break;
491.  case 9: LoadString(g_hInstance, IDS_CHTYPE_9, cNewStat, sizeof(cNewStat)); break;
492.  case 10: LoadString(g_hInstance, IDS_CHTYPE_10, cNewStat, sizeof(cNewStat)); break;
493.  case 0: LoadString(g_hInstance, IDS_CHTYPE_0, cNewStat, sizeof(cNewStat)); break;
494.  case 1: LoadString(g_hInstance, IDS_CHTYPE_1, cNewStat, sizeof(cNewStat)); break;
495.  case 2: LoadString(g_hInstance, IDS_CHTYPE_2, cNewStat, sizeof(cNewStat)); break;
496.  case 3: LoadString(g_hInstance, IDS_CHTYPE_3, cNewStat, sizeof(cNewStat)); break;
497.  case 4:
498.  if(SsmGetAutoCallDirection(ch,&nDirection) == 0) 
499.  {

500.  if (nDirection==3)
501.  wsprintf(cNewStat,"SS1Spy"); 
502.  else
503.  wsprintf(cNewStat,"SS1");
504.  }
505.  else if(nDirection==0)                           wsprintf(cNewStat,"SS1i"); 
506.  else if(nDirection==1)                           wsprintf(cNewStat,"SS1o"); 
507.  else                                          wsprintf(cNewStat,"SS1io"); 
508.  break;
509.  case 5: LoadString(g_hInstance, IDS_CHTYPE_5, cNewStat, sizeof(cNewStat)); break;
510.  case 6:
511.  if(SsmGetAutoCallDirection(ch,&nDirection) == 0) 
512.  {

513.  if (nDirection==3)
514.  wsprintf(cNewStat,"SS7Spy"); 
515.  else
516.  wsprintf(cNewStat,"SS7");
517.  }
518.  else if(nDirection==0)                           wsprintf(cNewStat,"TUPi"); 
519.  else if(nDirection==1)                           wsprintf(cNewStat,"TUPo"); 
520.  else if(nDirection==2)                           wsprintf(cNewStat,"TUPio"); 
521.  else                                             wsprintf(cNewStat,"TUP-x");
522.  break;
523.  case 7: //ISDN User ch
524.  if(SsmGetAutoCallDirection(ch,&nDirection) == 0) 
525.  {

526.  if (nDirection==3)
527.  wsprintf(cNewStat,"ISDNSpy"); 
528.  else
529.  wsprintf(cNewStat,"ISDN");
530.  }
531.  else if(nDirection==0)                           wsprintf(cNewStat,"ISDNi"); 
532.  else if(nDirection==1)                           wsprintf(cNewStat,"ISDNo"); 
533.  else if(nDirection==2)                           wsprintf(cNewStat,"ISDNio"); 
534.  else  wsprintf(cNewStat,"ISDN");
535.  break;
536.  case 8: //Isdn Net ch
537.  if(SsmGetAutoCallDirection(ch,&nDirection) == 0) 
538.  {

539.  if (nDirection==3)
540.  wsprintf(cNewStat,"ISDNNetSpy"); 
541.  else
542.  wsprintf(cNewStat,"ISDNNet");
543.  }
544.  else if(nDirection==0)                           wsprintf(cNewStat,"ISDNNeti"); 
545.  else if(nDirection==1)                           wsprintf(cNewStat,"ISDNNeto"); 
546.  else if(nDirection==2)                           wsprintf(cNewStat,"ISDNNetio"); 
547.  else  wsprintf(cNewStat,"ISDNNet");
548.  break;
549. 
550.  case 11:    wsprintf(cNewStat,"ISUPio");break;
551. 
552.  //+++START+++ added by yxh for 2B+D, 2005.01.26
553.  case 12: wsprintf(cNewStat, "DTR"); break;
554.  //+++ END +++ added by yxh for 2B+D, 2005.01.26
555. 
556.  //+++START+++ added by wza for voip, 2006.12.27
557.  case 15: wsprintf(cNewStat, "H323"); break;
558.  case 16: wsprintf(cNewStat, "SIP"); break;
559.  //+++ END +++ added by wza for voip, 2005.12.27
560. 
561.  default:
562.  wsprintf(cNewStat,"-1"); break;
563.  break;
564.  }
565.  //+++++end+++++ added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
566.  m_ChList.SetItemText( ch, ITEM_ChHwType, cNewStat);
567.  }
568.  }
569. 
570.  void CTestView::InitChList(BOOL bFistTime)
571.  {

572.  LV_COLUMN lvc[MAXITEM];
573.  LIST_PARA MainList[MAXITEM] = 
574.  {

575.  {24 ,"Ch",},
576.  {60 ,"类型"},
577.  {60 ,"状态"},
578.  {45 ,"RCnt"},
579.  {80 ,"CheckSendRCnt"}, //added by LCL for RingCounter, 2005.09.19
580.  {100 ,"DTMF接收缓冲区"},
581.  {42 ,"TnChk"},
582.  {42 ,"2ndTnChk"},//ADDED BY yxd 2003.3.20
583.  {24 ,"BI"},
584.  {40 ,"Snd"},
585.  {45 ,"PTime"},
586.  {45 ,"PTimeEx"}, //Added By cqb For SHCTI030902 Test
587.  {30 ,"P%"},
588.  {55 ,"ChkPlay"},
589.  {55,"GetPlayType"},
590.  {55 ,"RecTime"},
591.  {55 ,"ChkRec"},
592.  {70 ,"OvrEnrg"},
593.  {30 ,"AF"},
594.  {30 ,"AFS"},
595.  {30 ,"ECR"},
596.  {80, "LCD"},
597.  {80, "DKEY"}, //added by yxh for GetDKeyStr, 2005.09.02
598.  {80 ,"CallerId"},
599.  {80 ,"CallerIdEx"},
600.  {30 ,"Vad"},
601.  {50 ,"Fpeak"},
602.  {45 ,"RxCAS"},
603.  {45 ,"TxCAS"},
604.  {45 ,"RxR2"},
605.  {45 ,"TxR2"},
606.  {160,"挂起原因"},
607.  {60 ,"状态时间"},
608.  {80 ,"被叫号码"},
609.  {60 ,"极性反转"},
610.  {120 ,"闭塞对端"},
611.  {150 ,"呼出统计:收号/接续/总数/接续错/收号错"},
612.  {150 ,"呼入统计:收号/接续/总数"} ,
613.  {150, "IP编码格式"}
614.  };
615. 
616.  m_ChList.SetBkColor(RGB(0,0,0));
617.  m_ChList.SetTextColor(RGB(0,255,0));
618.  m_ChList.SetTextBkColor(RGB(0,0,0));
619. 
620.  DWORD dwExtendedStyle = m_ChList.GetExtendedStyle();
621.  dwExtendedStyle |= LVS_EX_FULLROWSELECT;
622.  m_ChList.SetExtendedStyle(dwExtendedStyle);
623. 
624.  for(WORD i=0; i<MAXITEM; i++ )
625.  {

626.  lvc[i].mask     =  LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM | LVCF_FMT;
627.  lvc[i].iSubItem = i;
628.  lvc[i].pszText  = MainList[i].szText;
629.  lvc[i].cx       = MainList[i].ColumnWidth;
630.  if(i==0||i==17) lvc[i].fmt = LVCFMT_LEFT;
631.  else            lvc[i].fmt = LVCFMT_RIGHT;
632.  if(bFistTime)
633.  m_ChList.InsertColumn(i,&lvc[i]);
634.  }
635. 
636.  m_ChList.DeleteAllItems();
637. 
638.  char dig[4];
639. 
640.  for(i=0; i<nMaxCh; i++)
641.  m_ChList.InsertItem(i,_itoa(i,dig,10));
642. 
643. 
644.  for(int ch=0; ch<nMaxCh; ch++)
645.  {

646. 
647.  UpdateChList();
648. 
649.  nOldChState[ch] = -100;
650.  nOldRingCount[ch] = -100;
651.  nOldRingFlag[ch] = -100;
652.  nSendRingRst[ch] = -100; //added by LCL for RingCounter, 2005.09.19
653.  nSendRingCnt[ch] = -100; //added by LCL for RingCounter, 2005.09.19
654.  nToneAnalyzeResult[ch] = -100;
655.          n2ndToneAnalyzeResult[ch] = -100;//ADDED BY yxd 2003.3.20
656.  nOldChkPlay[ch] = -100;
657.  nOldGetPlayType[ch] = -100;
658.  nOldChkRec[ch] = -100;
659.  nOldSsmDetectBargeIn[ch] = -100;
660.  lOldPlayedTime[ch] = -100L;
661.  lOldPlayedTimeEx[ch] = -100L;
662.  lOldRecTime[ch] = -100l;
663.  lOldOverallEnergy[ch] = -100l;
664.  nPlayedPct[ch] = -100;
665.  nOldCallerIdEx[ch] = -100;
666.  nOldEchoCancellerState[ch] = -100;
667.  nOldEchoCancellerStudyState[ch] = -100;
668.  nOldEchoCancellerRatio[ch] = -100;
669.  nOldCallerI[ch] = -100;
670.  nOldRxPhoNumLen[ch] = -100;
671.  nOldLineVoltage[ch] = -100;
672.  nOldPeakFrq[ch] = -100;
673.  nOldGetCAS[ch] = -100;
674.  nOldSendingCAS[ch] = -100;
675.  nOldGetR2[ch] = -100;
676.  nOldSendingR2[ch] = -100;
677.  nOldGetSendingR2[ch] = -100;
678.  nOldSendingR2Mode[ch] = -100;
679.  nOldPhoNumStr[ch] = -100;
680.  nOldPloarRvrsCount[ch] = -100;
681.  nOldBlockRemoteStatus[ch] = -100;
682.  //add by JK shi for 支持SetKB功能, begin
683.  nOldPendReason[ch] = -100;
684.  //add by JK shi for 支持SetKB功能, end
685.  }
686.  }
687. 
688.  void CTestView::OnDestroy() 
689.  {

690.  CFormView::OnDestroy();
691. 
692.  // TODO: Add your message handler code here
693.  if(nIsSsmStartCtiOK == 0) 
694.  {

695.  SsmCloseCti();
696.  }
697.  KillTimer( uTimerId );
698.  //+++START+++ added by yxh for SpyTest, 2003.08.22
699.  if(pDlg != NULL)
700.  {

701.  delete pDlg;
702.  }
703.  //+++END+++   added by yxh for SpyTest, 2003.08.22
704.  }
705. 
706.  long lOldTime[MAX_CH];
707.  DWORD dwEnergyTable[MAX_CH];
708. 
709.  void CTestView::OnTimer(UINT nIDEvent) 
710.  {

711.  // TODO: Add your message handler code here and/or call default
712.  char cNewStat[600],cOldStat[600],szRxCallerId[300];
713.  //add by JK shi for 支持SetKB功能, begin
714.  int nNewPendReason, nShowUpdate ;
715.  //add by JK shi for 支持SetKB功能, end
716. 
717.  int nResult, nNewChState, nRingFlag, nRet ;
718.  long lResult;
719.  //static long lOldTime[MAX_CH];
720. 
721.  if(!bTimerOpen)
722.  return ;
723. 
724.  int nEnergy;
725.  // if((lResult=SsmGetOverallEnergyAllCh(0, 30, dwEnergyTable)) != -1)
726.  for(int k=0; k<nMaxCh; k++)
727.  {

728.  nEnergy=SsmGetOverallEnergy(k);
729.  if(nEnergy>=0)
730.  {

731.  _itoa(nEnergy,cNewStat,10); 
732.  m_ChList.SetItemText( k, ITEM_OverallEnergy, cNewStat );
733.  }
734.  }
735. 
736.  for(int ch=0; ch<nMaxCh; ch++)
737.  {

738.  if((nNewChState=SsmGetChState(ch)) != nOldChState[ch])
739.  { 
740.  //++++start++++ masked by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
741.  /* switch(nNewChState)
742.  {

743.  case -1: wsprintf(cNewStat,"-1"); break;
744.  case S_CALL_STANDBY: wsprintf(cNewStat,"空闲"); break;
745.  case S_CALL_PICKUPED: wsprintf(cNewStat,"摘机"); break;
746.  case S_CALL_RINGING: wsprintf(cNewStat,"振铃"); break;
747.  case S_CALL_TALKING: wsprintf(cNewStat,"通话"); break;
748. 
749.  case S_CALL_ANALOG_WAITDIALTONE: wsprintf(cNewStat,"WtDT"); break;
750.  case S_CALL_ANALOG_TXPHONUM: wsprintf(cNewStat,"Dl.."); break;
751.  case S_CALL_ANALOG_WAITDIALRESULT: wsprintf(cNewStat,"WtDl"); break;
752. 
753.  case S_CALL_PENDING: wsprintf(cNewStat,"挂起"); break;
754.  case S_CALL_OFFLINE: wsprintf(cNewStat,"断线"); break;
755.  case S_CALL_WAIT_REMOTE_PICKUP: wsprintf(cNewStat,"回铃"); break;
756.  case S_CALL_UNAVAILABLE: wsprintf(cNewStat,"不可用"); break;
757.  case S_CALL_LOCKED: wsprintf(cNewStat,"呼出保留"); break;
758. 
759.  case S_CALL_LocalBlock: wsprintf(cNewStat,"本地闭塞"); break;
760.  case S_CALL_RemoteBlock: wsprintf(cNewStat,"对端闭塞"); break;
761. 
762.  case S_CALL_Ss1InWaitPhoNum  : wsprintf(cNewStat,"接收被叫"); break;
763.  case S_CALL_Ss1InWaitFwdStop : wsprintf(cNewStat,"等待前向"); break;
764.  case S_CALL_Ss1InWaitCallerID: wsprintf(cNewStat,"接收主叫"); break;
765.  case S_CALL_Ss1InWaitKD      : wsprintf(cNewStat,"接收KD"); break;
766.  case S_CALL_Ss1InWaitKDStop  : wsprintf(cNewStat,"等KD停发"); break;
767.  case S_CALL_SS1_SAYIDLE      : wsprintf(cNewStat,"发送示闲"); break;
768.  case S_CALL_SS1WaitIdleCAS   : wsprintf(cNewStat,"等待示闲"); break;
769.  case S_CALL_SS1PhoNumHoldup  : wsprintf(cNewStat,"S_CALL_SS1PhoNumHoldup"); break;
770.  case S_CALL_Ss1InWaitStopSendA3p: wsprintf(cNewStat,"S_CALL_Ss1InWaitStopSendA3p"); break;
771. 
772.  case S_CALL_Ss1OutWaitBwdAck      : wsprintf(cNewStat,"等待后向占用证实信令”"); break;
773.  case S_CALL_Ss1OutTxPhoNum        : wsprintf(cNewStat,"发送被叫"); break;
774.  case S_CALL_Ss1OutWaitAppendPhoNum: wsprintf(cNewStat,"号码不足"); break;
775.  case S_CALL_Ss1OutTxCallerID      : wsprintf(cNewStat,"发送主叫"); break;
776.  case S_CALL_Ss1OutWaitKB          : wsprintf(cNewStat,"等待KB"); break;
777. 
778.  case S_FAX_ROUND   : wsprintf(cNewStat,"状态转移过程中"); break;
779.  case S_FAX_PhaseA  : wsprintf(cNewStat,"呼叫建立"); break;
780.  case S_FAX_PhaseB  : wsprintf(cNewStat,"报文前处理"); break;
781.  case S_FAX_SendDCS : wsprintf(cNewStat,"发送DCS信号"); break;
782.  case S_FAX_Train   : wsprintf(cNewStat,"传输训练"); break;
783.  case S_FAX_PhaseC  : wsprintf(cNewStat,"报文传输"); break;
784.  case S_FAX_PhaseD  : wsprintf(cNewStat,"报文后处理"); break;
785.  case S_FAX_NextPage: wsprintf(cNewStat,"传输下页"); break;
786.  case S_FAX_AllSent : wsprintf(cNewStat,"传输结束"); break;
787.  case S_FAX_PhaseE  : wsprintf(cNewStat,"呼叫释放"); break;
788.  case S_FAX_Reset   : wsprintf(cNewStat,"复位猫"); break;
789.  case S_FAX_Init    : wsprintf(cNewStat,"初始化猫"); break;
790.  case S_FAX_RcvDCS  : wsprintf(cNewStat,"接收DCS"); break;
791.  case S_FAX_SendFTT : wsprintf(cNewStat,"发送训练失败信号FTT"); break;
792.  case S_FAX_SendCFR : wsprintf(cNewStat,"发送证实信号CFR"); break;
793. 
794.  case S_TUP_WaitPcmReset: wsprintf(cNewStat,"电路复原"); break;
795.  case S_TUP_WaitSAM: wsprintf(cNewStat,"等待SAM"); break;
796.  case S_TUP_WaitGSM: wsprintf(cNewStat,"等待GSM"); break;
797.  case S_TUP_WaitCLF: wsprintf(cNewStat,"等待CLF"); break;
798.  case S_TUP_WaitPrefix: wsprintf(cNewStat,"接收局号"); break;
799.  case S_TUP_WaitDialAnswer: wsprintf(cNewStat,"等待应答"); break;
800.  case S_TUP_WaitRLG: wsprintf(cNewStat,"等待RLG"); break;
801. 
802.  case S_ISDN_OUT_WAIT_NET_RESPONSE: wsprintf(cNewStat, "等待网络响应"); break;
803.  case S_ISDN_OUT_PLS_APPEND_NO: wsprintf(cNewStat, "等待追加号码"); break;
804.  case S_ISDN_IN_CHK_CALL_IN: wsprintf(cNewStat, "检测到呼入"); break;
805.  case S_ISDN_IN_RCVING_NO: wsprintf(cNewStat,"正在接收号码"); break;
806.  case S_ISDN_IN_WAIT_TALK: wsprintf(cNewStat, "准备进入通话"); break;
807.  case S_ISDN_OUT_WAIT_ALERT: wsprintf(cNewStat, "等待提醒信号"); break;
808.  case S_ISDN_CALL_BEGIN: wsprintf(cNewStat, "呼叫起始"); break;
809.  case S_ISDN_WAIT_HUANGUP: wsprintf(cNewStat, "等待释放"); break;
810. 
811.  case S_CALL_SENDRING: wsprintf(cNewStat, "发送振铃"); break;
812. 
813.  case S_ISUP_WaitSAM:     wsprintf(cNewStat, "等待SAM");     break;
814.  case S_ISUP_WaitRLC:     wsprintf(cNewStat, "等待RLC");     break;
815.  case S_ISUP_WaitReset:     wsprintf(cNewStat, "电路复原");     break;
816.  case S_ISUP_LocallyBlocked: wsprintf(cNewStat, "本地阻断");     break;
817.  case S_ISUP_RemotelyBlocked: wsprintf(cNewStat, "远端阻断");     break;
818.  case S_ISUP_WaitDialAnswer:         wsprintf(cNewStat, "等待ACM"); break;
819.  case S_ISUP_WaitINF:     wsprintf(cNewStat, "等待INF");     break;
820.  case S_DTRC_ACTIVE: wsprintf(cNewStat, "Active");     break;
821. 
822.  default: wsprintf(cNewStat,"S=%d",nNewChState); break;
823.  }*/
824.  //+++++end+++++ masked by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
825.  //++++start++++ added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
826.  switch(nNewChState)
827.  {

828.  case -1: wsprintf(cNewStat,"-1"); break;
829.  case S_CALL_STANDBY: LoadString(g_hInstance, IDS_S_CALL_STANDBY, cNewStat, sizeof(cNewStat)); break;
830.  case S_CALL_PICKUPED: LoadString(g_hInstance, IDS_S_CALL_PICKUPED, cNewStat, sizeof(cNewStat)); break;
831.  case S_CALL_RINGING: LoadString(g_hInstance, IDS_S_CALL_RINGING, cNewStat, sizeof(cNewStat)); break;
832.  case S_CALL_TALKING: LoadString(g_hInstance, IDS_S_CALL_TALKING, cNewStat, sizeof(cNewStat)); break;
833. 
834.  case S_CALL_ANALOG_WAITDIALTONE: wsprintf(cNewStat,"WtDT"); break;
835.  case S_CALL_ANALOG_TXPHONUM: wsprintf(cNewStat,"Dl.."); break;
836.  case S_CALL_ANALOG_WAITDIALRESULT: wsprintf(cNewStat,"WtDl"); break;
837. 
838.  case S_CALL_PENDING: LoadString(g_hInstance, IDS_S_CALL_PENDING, cNewStat, sizeof(cNewStat)); break;
839.  case S_CALL_OFFLINE: LoadString(g_hInstance, IDS_S_CALL_OFFLINE, cNewStat, sizeof(cNewStat)); break;
840.  case S_CALL_WAIT_REMOTE_PICKUP: LoadString(g_hInstance, IDS_S_CALL_WAIT_REMOTE_PICKUP, cNewStat, sizeof(cNewStat)); break;
841.  case S_CALL_UNAVAILABLE: LoadString(g_hInstance, IDS_S_CALL_UNAVAILABLE, cNewStat, sizeof(cNewStat)); break;
842.  case S_CALL_LOCKED: LoadString(g_hInstance, IDS_S_CALL_LOCKED, cNewStat, sizeof(cNewStat)); break;
843. 
844.  case S_CALL_LocalBlock: LoadString(g_hInstance, IDS_S_CALL_LocalBlock, cNewStat, sizeof(cNewStat)); break;
845.  case S_CALL_RemoteBlock: LoadString(g_hInstance, IDS_S_CALL_RemoteBlock, cNewStat, sizeof(cNewStat)); break;
846. 
847.  case S_CALL_Ss1InWaitPhoNum  : LoadString(g_hInstance, IDS_S_CALL_Ss1InWaitPhoNum, cNewStat, sizeof(cNewStat)); break;
848.  case S_CALL_Ss1InWaitFwdStop : LoadString(g_hInstance, IDS_S_CALL_Ss1InWaitFwdStop, cNewStat, sizeof(cNewStat)); break;
849.  case S_CALL_Ss1InWaitCallerID: LoadString(g_hInstance, IDS_S_CALL_Ss1InWaitCallerID, cNewStat, sizeof(cNewStat)); break;
850.  case S_CALL_Ss1InWaitKD      : LoadString(g_hInstance, IDS_S_CALL_Ss1InWaitKD, cNewStat, sizeof(cNewStat)); break;
851.  case S_CALL_Ss1InWaitKDStop  : LoadString(g_hInstance, IDS_S_CALL_Ss1InWaitKDStop, cNewStat, sizeof(cNewStat)); break;
852.  case S_CALL_SS1_SAYIDLE      : LoadString(g_hInstance, IDS_S_CALL_SS1_SAYIDLE, cNewStat, sizeof(cNewStat)); break;
853.  case S_CALL_SS1WaitIdleCAS   : LoadString(g_hInstance, IDS_S_CALL_SS1WaitIdleCAS, cNewStat, sizeof(cNewStat)); break;
854.  case S_CALL_SS1PhoNumHoldup  : LoadString(g_hInstance, IDS_S_CALL_SS1PhoNumHoldup, cNewStat, sizeof(cNewStat)); break;
855.  case S_CALL_Ss1InWaitStopSendA3p: LoadString(g_hInstance, IDS_S_CALL_Ss1InWaitStopSendA3p, cNewStat, sizeof(cNewStat)); break;
856. 
857.  case S_CALL_Ss1OutWaitBwdAck      : LoadString(g_hInstance, IDS_S_CALL_Ss1OutWaitBwdAck, cNewStat, sizeof(cNewStat)); break;
858.  case S_CALL_Ss1OutTxPhoNum        : LoadString(g_hInstance, IDS_S_CALL_Ss1OutTxPhoNum, cNewStat, sizeof(cNewStat)); break;
859.  case S_CALL_Ss1OutWaitAppendPhoNum: LoadString(g_hInstance, IDS_S_CALL_Ss1OutWaitAppendPhoNum, cNewStat, sizeof(cNewStat)); break;
860.  case S_CALL_Ss1OutTxCallerID      : LoadString(g_hInstance, IDS_S_CALL_Ss1OutTxCallerID, cNewStat, sizeof(cNewStat)); break;
861.  case S_CALL_Ss1OutWaitKB          : LoadString(g_hInstance, IDS_S_CALL_Ss1OutWaitKB, cNewStat, sizeof(cNewStat)); break;
862. 
863.  case S_FAX_ROUND   : LoadString(g_hInstance, IDS_S_FAX_ROUND, cNewStat, sizeof(cNewStat)); break;
864.  case S_FAX_PhaseA  : LoadString(g_hInstance, IDS_S_FAX_PhaseA, cNewStat, sizeof(cNewStat)); break;
865.  case S_FAX_PhaseB  : LoadString(g_hInstance, IDS_S_FAX_PhaseB, cNewStat, sizeof(cNewStat)); break;
866.  case S_FAX_SendDCS : LoadString(g_hInstance, IDS_S_FAX_SendDCS, cNewStat, sizeof(cNewStat)); break;
867.  case S_FAX_Train   : LoadString(g_hInstance, IDS_S_FAX_Train, cNewStat, sizeof(cNewStat)); break;
868.  case S_FAX_PhaseC  : LoadString(g_hInstance, IDS_S_FAX_PhaseC, cNewStat, sizeof(cNewStat)); break;
869.  case S_FAX_PhaseD  : LoadString(g_hInstance, IDS_S_FAX_PhaseD, cNewStat, sizeof(cNewStat)); break;
870.  case S_FAX_NextPage: LoadString(g_hInstance, IDS_S_FAX_NextPage, cNewStat, sizeof(cNewStat)); break;
871.  case S_FAX_AllSent : LoadString(g_hInstance, IDS_S_FAX_AllSent, cNewStat, sizeof(cNewStat)); break;
872.  case S_FAX_PhaseE  : LoadString(g_hInstance, IDS_S_FAX_PhaseE, cNewStat, sizeof(cNewStat)); break;
873.  case S_FAX_Reset   : LoadString(g_hInstance, IDS_S_FAX_Reset, cNewStat, sizeof(cNewStat)); break;
874.  case S_FAX_Init    : LoadString(g_hInstance, IDS_S_FAX_Init, cNewStat, sizeof(cNewStat)); break;
875.  case S_FAX_RcvDCS  : LoadString(g_hInstance, IDS_S_FAX_RcvDCS, cNewStat, sizeof(cNewStat)); break;
876.  case S_FAX_SendFTT : LoadString(g_hInstance, IDS_S_FAX_SendFTT, cNewStat, sizeof(cNewStat)); break;
877.  case S_FAX_SendCFR : LoadString(g_hInstance, IDS_S_FAX_SendCFR, cNewStat, sizeof(cNewStat)); break;
878. 
879.  case S_TUP_WaitPcmReset: LoadString(g_hInstance, IDS_S_TUP_WaitPcmReset, cNewStat, sizeof(cNewStat)); break;
880.  case S_TUP_WaitSAM: LoadString(g_hInstance, IDS_S_TUP_WaitSAM, cNewStat, sizeof(cNewStat)); break;
881.  case S_TUP_WaitGSM: LoadString(g_hInstance, IDS_S_TUP_WaitGSM, cNewStat, sizeof(cNewStat)); break;
882.  case S_TUP_WaitCLF: LoadString(g_hInstance, IDS_S_TUP_WaitCLF, cNewStat, sizeof(cNewStat)); break;
883.  case S_TUP_WaitPrefix: LoadString(g_hInstance, IDS_S_TUP_WaitPrefix, cNewStat, sizeof(cNewStat)); break;
884.  case S_TUP_WaitDialAnswer: LoadString(g_hInstance, IDS_S_TUP_WaitDialAnswer, cNewStat, sizeof(cNewStat)); break;
885.  case S_TUP_WaitRLG: LoadString(g_hInstance, IDS_S_TUP_WaitRLG, cNewStat, sizeof(cNewStat)); break;
886. 
887.  case S_ISDN_OUT_WAIT_NET_RESPONSE: LoadString(g_hInstance, IDS_S_ISDN_OUT_WAIT_NET_RESPONSE, cNewStat, sizeof(cNewStat)); break;
888.  case S_ISDN_OUT_PLS_APPEND_NO: LoadString(g_hInstance, IDS_S_ISDN_OUT_PLS_APPEND_NO, cNewStat, sizeof(cNewStat)); break;
889.  case S_ISDN_IN_CHK_CALL_IN: LoadString(g_hInstance, IDS_S_ISDN_IN_CHK_CALL_IN, cNewStat, sizeof(cNewStat)); break;
890.  case S_ISDN_IN_RCVING_NO: LoadString(g_hInstance, IDS_S_ISDN_IN_RCVING_NO, cNewStat, sizeof(cNewStat)); break;
891.  case S_ISDN_IN_WAIT_TALK: LoadString(g_hInstance, IDS_S_ISDN_IN_WAIT_TALK, cNewStat, sizeof(cNewStat)); break;
892.  case S_ISDN_OUT_WAIT_ALERT: LoadString(g_hInstance, IDS_S_ISDN_OUT_WAIT_ALERT, cNewStat, sizeof(cNewStat)); break;
893.  case S_ISDN_CALL_BEGIN: LoadString(g_hInstance, IDS_S_ISDN_CALL_BEGIN, cNewStat, sizeof(cNewStat)); break;
894.  case S_ISDN_WAIT_HUANGUP: LoadString(g_hInstance, IDS_S_ISDN_WAIT_HUANGUP, cNewStat, sizeof(cNewStat)); break;
895. 
896.  case S_CALL_SENDRING: LoadString(g_hInstance, IDS_S_CALL_SENDRING, cNewStat, sizeof(cNewStat)); break;
897. 
898.  case S_ISUP_WaitSAM:     LoadString(g_hInstance, IDS_S_ISUP_WaitSAM, cNewStat, sizeof(cNewStat)); break;
899.  case S_ISUP_WaitRLC:     LoadString(g_hInstance, IDS_S_ISUP_WaitRLC, cNewStat, sizeof(cNewStat)); break;
900.  case S_ISUP_WaitReset:     LoadString(g_hInstance, IDS_S_ISUP_WaitReset, cNewStat, sizeof(cNewStat)); break;
901.  case S_ISUP_LocallyBlocked: LoadString(g_hInstance, IDS_S_ISUP_LocallyBlocked, cNewStat, sizeof(cNewStat)); break;
902.  case S_ISUP_RemotelyBlocked: LoadString(g_hInstance, IDS_S_ISUP_RemotelyBlocked, cNewStat, sizeof(cNewStat)); break;
903.  case S_ISUP_WaitDialAnswer:         LoadString(g_hInstance, IDS_S_ISUP_WaitDialAnswer, cNewStat, sizeof(cNewStat)); break;
904.  case S_ISUP_WaitINF:     LoadString(g_hInstance, IDS_S_ISUP_WaitINF, cNewStat, sizeof(cNewStat)); break;
905.  case S_DTRC_ACTIVE: LoadString(g_hInstance, IDS_S_DTRC_ACTIVE, cNewStat, sizeof(cNewStat)); break;
906. 
907.  case S_CALL_VOIP_DIALING: LoadString(g_hInstance, IDS_S_VOIP_DIALING, cNewStat, sizeof(cNewStat)); break;
908.  case S_CALL_VOIP_WAIT_CONNECTED: LoadString(g_hInstance, IDS_S_VOIP_WAIT_CONNECTED, cNewStat, sizeof(cNewStat)); break;
909.  case S_CALL_VOIP_CHANNEL_UNUSABLE: LoadString(g_hInstance, IDS_S_VOIP_CHANNEL_UNUSABLE, cNewStat, sizeof(cNewStat)); break;
910. 
911.  default: wsprintf(cNewStat,"S=%d",nNewChState); break;
912.  }
913.  //+++++end+++++ added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
914.  m_ChList.SetItemText( ch, ITEM_ChState, cNewStat );
915.  }
916. 
917.  if(bEnableOpRingDetect[ch])
918.  {

919.  nResult = SsmGetRingCount(ch);
920.  nRingFlag = SsmGetRingFlag(ch);
921.  if(nResult!=nOldRingCount[ch] || nRingFlag!=nOldRingFlag[ch])
922.  {

923.  wsprintf(cNewStat,"%d:%d",nRingFlag,nResult);
924.  m_ChList.SetItemText( ch, ITEM_RingCount, cNewStat );
925.  nOldRingCount[ch] = nResult;
926.  nOldRingFlag[ch] = nRingFlag;
927.  }
928.  }
929. 
930.  //+++START+++ added by LCL for RingCounter, 2005.09.19
931.  int nSendRCnt = 0;
932.  nResult = SsmCheckSendRing(ch, &nSendRCnt);
933.  if(nSendRingRst[ch] != nResult || nSendRingCnt[ch] != nSendRCnt)
934.  {

935.  wsprintf(cNewStat, "%d:%d", nSendRCnt, nResult);
936.  m_ChList.SetItemText(ch, ITEM_SendRingCount, cNewStat);
937.  nSendRingCnt[ch] = nSendRCnt;
938.  nSendRingRst[ch] = nResult;
939.  }
940.  //+++ END +++ added by LCL for RingCounter, 2005.09.19
941. 
942.  nResult = SsmGetDtmfStr(ch,cNewStat);
943.  if(nResult  == -1) wsprintf(cNewStat,"-1");
944.  else if (nResult  == 0) wsprintf(cNewStat,"");
945.  nResult = m_ChList.GetItemText( ch, ITEM_RxDTMF, cOldStat, 255 );
946.  if(nResult==0)
947.  cOldStat[0]='';
948.  if ( strcmp(cNewStat,cOldStat) != 0 ) 
949.  m_ChList.SetItemText( ch, ITEM_RxDTMF, cNewStat );
950. 
951. 
952.  if(bEnableOpToneAnalyze[ch])
953.  {

954.  if((nResult=SsmGetToneAnalyzeResult(ch)) != nToneAnalyzeResult[ch])
955.  {

956.  nToneAnalyzeResult[ch] = nResult;
957.  switch(nResult)
958.  {

959.  case -1: wsprintf(cNewStat,"-1"); break;
960.  case 0: wsprintf(cNewStat,"?"); break;
961.  case 1: wsprintf(cNewStat,"DlTn"); break;
962.  case 2: wsprintf(cNewStat,"BsTn"); break;
963.  case 3: wsprintf(cNewStat,"EcTn"); break;
964.  case 4: wsprintf(cNewStat,"ENoVc"); break;
965.  case 5: wsprintf(cNewStat,"NoVoc"); break;
966.  case 6: wsprintf(cNewStat,"Voc");  break;
967.  case 7: wsprintf(cNewStat,"VcF1"); break;
968.  case 8: wsprintf(cNewStat,"VcF2"); break;
969.  case 9: wsprintf(cNewStat,"AptTn"); break;//added by zyq for 060901-bug-测试组-修改Test的一些bug, 2006.09.05
970.  }
971.  m_ChList.SetItemText( ch, ITEM_ToneAnalyzeResult, cNewStat );
972.  }
973. 
974.              //++start++  ADDED BY yxd 2003.3.20
975.  if((nResult=SsmGet2ndToneAnalyzeResult(ch)) != n2ndToneAnalyzeResult[ch])
976.  {

977.  n2ndToneAnalyzeResult[ch] = nResult;
978.  switch(nResult)
979.  {

980.  case -1: wsprintf(cNewStat,"-1"); break;
981.  case 0: wsprintf(cNewStat,"?"); break;
982.  case 1: wsprintf(cNewStat,"DlTn"); break;
983.  case 2: wsprintf(cNewStat,"BsTn"); break;
984.  case 3: wsprintf(cNewStat,"EcTn"); break;
985.  //+++START+++ added by zyq for 060901-bug-测试组-修改Test的一些bug, 2006.09.05
986.  case 4: wsprintf(cNewStat,"ENoVc"); break;
987.  case 5: wsprintf(cNewStat,"NoVoc"); break;
988.  case 6: wsprintf(cNewStat,"Voc");  break;
989.  case 7: wsprintf(cNewStat,"VcF1"); break;
990.  case 8: wsprintf(cNewStat,"VcF2"); break;
991.  case 9: wsprintf(cNewStat,"AptTn"); break;
992.  //+++ END +++ added by zyq for 060901-bug-测试组-修改Test的一些bug, 2006.09.05
993. 
994.  }
995.  m_ChList.SetItemText( ch, ITEM_2ndToneAnalyzeResult, cNewStat );
996.  }
997.  //++end++
998. 
999.  /*
1000.  if((lResult=SsmGetOverallEnergy(ch)) != lOldOverallEnergy[ch])
1001.  {

1002.  lOldOverallEnergy[ch] = lResult;
1003.  _itoa(lResult,cNewStat,10); 
1004.  m_ChList.SetItemText( ch, ITEM_OverallEnergy, cNewStat );
1005.  }
1006.  */
1007. 
1008.  if((nResult=SsmGetPeakFrq(ch)) != nOldPeakFrq[ch])
1009.  {

1010.  nOldPeakFrq[ch] = nResult;
1011.  if(nResult==-1) wsprintf(cNewStat,"-1");
1012.  else            wsprintf(cNewStat,"%dHz",nResult);
1013.  m_ChList.SetItemText( ch, ITEM_PeakFreq, cNewStat );
1014.  }
1015.  }
1016. 
1017. 
1018. 
1019.  //int WINAPI SsmDetectBargeIn(int ch)
1020.  if((nResult=SsmDetectBargeIn(ch)) != nOldSsmDetectBargeIn[ch])
1021.  {

1022.  nOldSsmDetectBargeIn[ch] = nResult;
1023.  wsprintf(cNewStat,"%d",nResult); 
1024.  m_ChList.SetItemText( ch, ITEM_Burgein, cNewStat );
1025.  }
1026. 
1027.  //++++start++++ masked by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
1028.  /* switch(SsmDetectNoSound(ch))
1029.  {

1030.  case -1: wsprintf(cNewStat,"-1"); break;
1031.  case 0: wsprintf(cNewStat,"0:%d",SsmGetNoSoundTime(ch)/1000); break;
1032.  case 1: wsprintf(cNewStat,"无声",SsmGetNoSoundTime(ch)/1000); break;
1033.  }
1034.  */
1035.  //+++++end+++++ masked by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
1036.  //++++start++++ added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
1037.  switch(SsmDetectNoSound(ch))
1038.  {

1039.  case -1: wsprintf(cNewStat,"-1"); break;
1040.  case 0: wsprintf(cNewStat,"0:%d",SsmGetNoSoundTime(ch)/1000); break;
1041.  case 1: LoadString(g_hInstance, IDS_DetectSnd_NoSnd, cNewStat, sizeof(cNewStat)); break;
1042.  }
1043.  //+++++end+++++ added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
1044.  if(strcmp(cNewStat,szOldNoSoundState[ch]) != 0 ) 
1045.  {

1046.  strcpy(szOldNoSoundState[ch],cNewStat);
1047.  m_ChList.SetItemText( ch, ITEM_DetectNoSound, cNewStat );
1048.  }
1049. 
1050. 
1051.  if((lResult=SsmGetPlayedTime(ch)) != lOldPlayedTime[ch])
1052.  {

1053.  lOldPlayedTime[ch] = lResult;
1054.  _itoa(lResult,cNewStat,10); 
1055.  m_ChList.SetItemText( ch, ITEM_PlayTime, cNewStat );
1056.  }
1057. 
1058.  //++++START++++ added by cqb for SHCTI030902 Test
1059.  if((lResult=SsmGetPlayedTimeEx(ch)) != lOldPlayedTimeEx[ch])
1060.  {

1061.  lOldPlayedTimeEx[ch] = lResult;
1062.  _itoa(lResult,cNewStat,10); 
1063.  m_ChList.SetItemText( ch, ITEM_PlayTimeEx, cNewStat );
1064.  }
1065.  //++++END++++
1066. 
1067.  if((nResult=SsmGetPlayedPercentage(ch)) != nPlayedPct[ch])
1068.  {

1069.  nPlayedPct[ch] = nResult;
1070.  _itoa(nResult,cNewStat,10);
1071.  m_ChList.SetItemText( ch, ITEM_PlayPercentage, cNewStat );
1072.  }
1073. 
1074.  if((nResult=SsmCheckPlay(ch)) != nOldChkPlay[ch])
1075.  {

1076.  nOldChkPlay[ch] = nResult;
1077.  switch(nResult)
1078.  {

1079.  case -1: wsprintf(cNewStat,"-1"); break;
1080.  case CHKPLAY_PLAYING: wsprintf(cNewStat,"Playing"); break;
1081.  case CHKPLAY_NORMAL_END:wsprintf(cNewStat,"NmlEnd"); break;
1082.  case CHKPLAY_DTMF_END: wsprintf(cNewStat,"DtmfEnd"); break;
1083.  case CHKPLAY_BURGEIN: wsprintf(cNewStat,"BIEnd"); break;
1084.  case CHKPLAY_REMOTEHANGUP_END:wsprintf(cNewStat,"REMOTE HANGUP"); break;
1085.  case CHKPLAY_APPLICATION_END:wsprintf(cNewStat,"APP_STOPPLAY"); break;
1086.  case CHKPLAY_PAUSED: wsprintf(cNewStat,"APP_PAUSED"); break;
1087.  case CHKPLAY_LINKFROM_END: wsprintf(cNewStat,"LINKFORM_END"); break;
1088.  case CHKPLAY_NETDISCONNECT: wsprintf(cNewStat,"NET_DISCONNECT"); break;//Added by yxh, for 网络文件放音改进, 2003.09.30
1089.  }
1090.  m_ChList.SetItemText( ch, ITEM_ChkPlay, cNewStat );
1091.  }
1092. 
1093.        if((nResult=SsmGetPlayType(ch))!= nOldGetPlayType[ch])
1094.    {

1095.    nOldGetPlayType[ch] = nResult;
1096.    switch(nResult)
1097.    {

1098.  case -1: wsprintf(cNewStat,"-1"); break;
1099.  case 0: wsprintf(cNewStat,"PLAY_NULL"); break;
1100.  case 1:wsprintf(cNewStat,"PLAY_FILE"); break;
1101.  case 2: wsprintf(cNewStat,"PLAY_FILE_PAUSED"); break;
1102.  case 3: wsprintf(cNewStat,"PLAY_FILELIST"); break;
1103.  case 4:wsprintf(cNewStat,"PLAY_INDEXLIST"); break;
1104.  case 5:wsprintf(cNewStat,"PLAY_MEM"); break;
1105.  case 6: wsprintf(cNewStat,"PLAY_MEMLIST"); break;
1106.  case 7: wsprintf(cNewStat,"PLAY_FSK"); break;
1107.  case 8: wsprintf(cNewStat,"PLAY_MONITOR"); break;
1108.  case 9:wsprintf(cNewStat,"PLAY_MEMBLOCK");break;
1109. 
1110.    }
1111.    m_ChList.SetItemText(ch,ITEM_GetPlayType,cNewStat);
1112.    }
1113. 
1114. 
1115. 
1116. 
1117. 
1118.  if((lResult=SsmGetRecTime(ch)) != lOldRecTime[ch])
1119.  {

1120.  lOldRecTime[ch] = lResult;
1121.  _itoa(lResult,cNewStat,10); 
1122.  m_ChList.SetItemText( ch, ITEM_RecTime, cNewStat );
1123.  }
1124. 
1125.  if((nResult=SsmCheckRecord(ch)) != nOldChkRec[ch])
1126.  {

1127.  nOldChkRec[ch] = nResult;
1128.  switch(nResult)
1129.  {

1130.  case -1:
1131.  wsprintf(cNewStat,"-1"); break;
1132.  case CHKRECORD_RECORDING:    //0: recording
1133.  wsprintf(cNewStat,"recording"); break;
1134.  case CHKRECORD_APPLICATION_END: //1: application end
1135.  wsprintf(cNewStat,"AppEnd"); break;
1136.  case CHKRECORD_DTMF_END:    //2: record operation is stopped by DTMF key
1137.  wsprintf(cNewStat,"DtmfEnd"); break;
1138.  case CHKRECORD_REMOTEHANGUP_END://3: recor operation is stopped by remote hangup
1139.  wsprintf(cNewStat,"REMOTE HANGUP"); break;
1140.  case CHECKRECORD_TIMEUP_END:    //4: end of record for time up.
1141.  wsprintf(cNewStat,"TIMEUP_END"); break;
1142.  case CHECKRECORD_FILE_PAUSED:    //5: file record is paused.
1143.  wsprintf(cNewStat,"FILE_PAUSED"); break;
1144.  case CHECKRECORD_FILE_WRITE_ERROR:
1145.  wsprintf(cNewStat,"FILE_WRITE_ERROR");
1146. 
1147.  }
1148.  m_ChList.SetItemText( ch, ITEM_ChkRec, cNewStat );
1149.  }
1150. 
1151.  if(bEnableOpEchoCanceller[ch])
1152.  {

1153.  if((nResult=SsmGetEchoCancellerState(ch)) != nOldEchoCancellerState[ch])
1154.  {

1155.  nOldEchoCancellerState[ch] = nResult;
1156.  _itoa(nResult,cNewStat,10);
1157.  m_ChList.SetItemText( ch, ITEM_AdaptiveFilter, cNewStat );
1158.  }
1159. 
1160.  if((nResult=SsmGetEchoCancellerStudyState(ch)) != nOldEchoCancellerStudyState[ch])
1161.  {

1162.  nOldEchoCancellerStudyState[ch] = nResult;
1163.  _itoa(nResult,cNewStat,10);
1164.  m_ChList.SetItemText( ch, ITEM_AdaptiveFilterStudy, cNewStat );
1165.  }
1166. 
1167.  if((nResult=SsmGetEchoCancellerRatio(ch)) != nOldEchoCancellerRatio[ch])
1168.  {

1169.  nOldEchoCancellerRatio[ch] = nResult;
1170.  _itoa(nResult,cNewStat,10);
1171.  m_ChList.SetItemText( ch, ITEM_ECRatio, cNewStat );
1172.  }
1173.  }
1174. 
1175.  nResult = DTRGetLCDStr(ch, cNewStat);
1176.  if(nResult  == -1) wsprintf(cNewStat, "-1");
1177.  else if(nResult  == 0) wsprintf(cNewStat, "");
1178.  nResult = m_ChList.GetItemText(ch, ITEM_LCD, cOldStat, 300);
1179.  if(nResult == 0)
1180.  cOldStat[0] = '';
1181.  if (strcmp(cNewStat,cOldStat) != 0) 
1182.  m_ChList.SetItemText(ch, ITEM_LCD, cNewStat);
1183. 
1184.  //+++START+++ added by yxh for GetDKeyStr, 2005.09.02
1185.  nResult = DTRGetDKeyStr(ch, cNewStat);
1186.  if(nResult  == -1) wsprintf(cNewStat, "-1");
1187.  else if(nResult  == 0) wsprintf(cNewStat, "");
1188.  nResult = m_ChList.GetItemText(ch, ITEM_DKEY, cOldStat, 300);
1189.  if(nResult == 0)
1190.  cOldStat[0] = '';
1191.  if (strcmp(cNewStat,cOldStat) != 0) 
1192.  m_ChList.SetItemText(ch, ITEM_DKEY, cNewStat);
1193.  //+++ END +++ added by yxh for GetDKeyStr, 2005.09.02
1194. 
1195.  nResult = SsmGetCallerId(ch,cNewStat);
1196.  if(nResult  == -1) wsprintf(cNewStat, "-1");
1197.  else if(nResult  == 0) wsprintf(cNewStat, "");
1198.  nResult = m_ChList.GetItemText( ch, ITEM_CallerId, cOldStat, 300 );
1199.  if(nResult == 0)
1200.  cOldStat[0] = '';
1201.  if ( strcmp(cNewStat,cOldStat) != 0 ) 
1202.  m_ChList.SetItemText( ch, ITEM_CallerId, cNewStat );
1203. 
1204.  //if((nResult=SsmGetCallerId(ch,cNewStat)) != nOldCallerI[ch]
1205.  // || nResult != 0)
1206.  //{

1207.  // nResult=SsmGetCallerId(ch,cNewStat);
1208.  // nOldCallerI[ch] = nResult;
1209.  // if(nResult == -1) wsprintf(cNewStat,"-1");
1210.  // else if(nResult == 0) wsprintf(cNewStat,"");
1211.  // m_ChList.SetItemText( ch, ITEM_CallerId, cNewStat );
1212.  //}
1213. 
1214.  nResult = SsmGetCallerIdEx(ch,szRxCallerId);
1215.  if(nResult == -1) wsprintf(szRxCallerId, "");
1216.  else if(nResult == 0) wsprintf(szRxCallerId, "");
1217.  nRet = m_ChList.GetItemText( ch, ITEM_CallerIdEx, cOldStat, 300 );
1218.  if(nRet==0)
1219.  cOldStat[0]='';
1220.  if ( strcmp(szRxCallerId,cOldStat) != 0 ) 
1221.  {

1222.  wsprintf(cNewStat,"");
1223.  for(int k=0; k<nResult; k++) wsprintf(cNewStat,"%s%02x ",cNewStat,(UCHAR)szRxCallerId[k]);
1224.  m_ChList.SetItemText( ch, ITEM_CallerIdEx, cNewStat );
1225.  }
1226. 
1227. 
1228.  // if((nResult=SsmGetCallerIdEx(ch,szRxCallerId)) != nOldCallerIdEx[ch]
1229.  // || nResult != 0)
1230.  // {

1231.  // nResult=SsmGetCallerIdEx(ch,szRxCallerId);
1232.  // nOldCallerIdEx[ch] = nResult;
1233.  // if(nResult == -1) wsprintf(cNewStat,"-1");
1234.  // else if(nResult == 0) wsprintf(cNewStat,"");
1235.  // else
1236.  // {

1237.  // wsprintf(cNewStat,"");
1238.  // for(int k=0; k<nResult; k++) wsprintf(cNewStat,"%s%x",cNewStat,szRxCallerId[k]);
1239.  // }
1240.  // m_ChList.SetItemText( ch, ITEM_CallerIdEx, cNewStat );
1241.  // }
1242. 
1243.  if(bEnableOpADC[ch])
1244.  {

1245.  if((nResult=SsmGetLineVoltage(ch)) != nOldLineVoltage[ch])
1246.  {

1247.  nOldLineVoltage[ch] = nResult;
1248.  _itoa(nResult,cNewStat,10);
1249.  m_ChList.SetItemText( ch, ITEM_Vad, cNewStat );
1250.  }
1251.  }
1252. 
1253.  if((nResult=SsmGetCAS(ch)) != nOldGetCAS[ch])
1254.  {

1255.  nOldGetCAS[ch] = nResult;
1256.  if(nResult == -1) wsprintf(cNewStat,"-1",nResult);
1257.  else wsprintf(cNewStat,"0x%x",nResult);
1258.  m_ChList.SetItemText( ch, ITEM_RxCAS, cNewStat );
1259.  }
1260. 
1261.  if((nResult=SsmGetSendingCAS(ch)) != nOldSendingCAS[ch])
1262.  {

1263.  nOldSendingCAS[ch] = nResult;
1264.  if(nResult == -1) wsprintf(cNewStat,"-1",nResult);
1265.  else wsprintf(cNewStat,"0x%x",nResult);
1266.  m_ChList.SetItemText( ch, ITEM_TxCAS, cNewStat );
1267.  }
1268. 
1269.  if((nResult=SsmGetR2(ch)) != nOldGetR2[ch])
1270.  {

1271.  nOldGetR2[ch] = nResult;
1272.  wsprintf(cNewStat,"%d",nResult);
1273.  m_ChList.SetItemText( ch, ITEM_RxR2, cNewStat );
1274.  }
1275. 
1276.  int nMode;
1277.  BYTE btRxR2;
1278.  nResult = SsmGetSendingR2(ch,&nMode,&btRxR2);
1279.  if(nResult != nOldGetSendingR2[ch])
1280.  {

1281.  nOldGetSendingR2[ch] = nResult;
1282.  if(nResult == -1) m_ChList.SetItemText( ch, 23, "-1");
1283.  else if(nOldSendingR2Mode[ch]!=nMode || nOldSendingR2[ch]!=btRxR2)
1284.  {

1285.  nOldSendingR2Mode[ch] = nMode;
1286.  nOldSendingR2[ch] = btRxR2;
1287.  if(nMode==0) wsprintf(cNewStat,"B:%d",btRxR2);
1288.  else         wsprintf(cNewStat,"F:%d",btRxR2);
1289.  m_ChList.SetItemText( ch, ITEM_TxR2, cNewStat );
1290.  }
1291.  }
1292. 
1293.  //add by JK shi for 支持SetKB功能, begin
1294.  nShowUpdate=0;
1295. 
1296.  if (nNewChState==S_CALL_PENDING)
1297.  {

1298.  if(nOldChState[ch]!=S_CALL_PENDING)
1299.  nShowUpdate=1;
1300.  else
1301.  {

1302.  nNewPendReason=SsmGetPendingReason(ch);
1303.  if (nOldPendReason[ch]!=nNewPendReason)
1304.  nShowUpdate=1;
1305.  }
1306.  }
1307.  //add by JK shi for 支持SetKB功能, end
1308. 
1309.  //if(nOldChState[ch]!=S_CALL_PENDING && nNewChState==S_CALL_PENDING)
1310.  if (nShowUpdate)
1311.  {

1312.  //++++start++++ masked by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
1313.  /* switch(nResult=SsmGetPendingReason(ch))
1314.  {

1315.  case -1: wsprintf(cNewStat,"-1"); break;
1316.  case ANALOGOUT_NO_DIALTONE: wsprintf(cNewStat,"模拟:没有拨号音"); break;
1317.  case ANALOGOUT_BUSYTONE: wsprintf(cNewStat,"模拟:忙音"); break;
1318.  case ANALOGOUT_ECHO_NOVOICE: wsprintf(cNewStat,"模拟:回铃后无声"); break;
1319.  case ANALOGOUT_NOANSWER: wsprintf(cNewStat,"模拟:没有应答"); break;
1320.  case ANALOGOUT_TALKING_REMOTE_HANGUPED: wsprintf(cNewStat,"模拟:远端挂机"); break;
1321.  case ANALOGOUT_NOVOICE: wsprintf(cNewStat,"模拟:拨号后线路无声"); break;
1322. 
1323.  case PEND_WaitBckStpMsg: wsprintf(cNewStat,"等待APP设置后向建立消息"); break;
1324. 
1325.  case SS1IN_BWD_KB5: wsprintf(cNewStat,"SS1IN收到KB5"); break;
1326.  case PEND_RemoteHangupOnTalking: wsprintf(cNewStat,"呼入:通话时主叫先挂机"); break;
1327. 
1328.  case PEND_SsxUnusable: wsprintf(cNewStat,"通话时信令不可用"); break;
1329.  case PEND_CircuitReset: wsprintf(cNewStat,"电路复原"); break;
1330. 
1331.  case PEND_CalleeHangupOnTalking: wsprintf(cNewStat,"呼出:被叫先挂机"); break;
1332. 
1333.  case SS1OUT_NOANSWER: wsprintf(cNewStat,"No1: 无人接听"); break;
1334.  case SS1OUT_NOBWDACK: wsprintf(cNewStat,"No1: 没有应答信号"); break;
1335.  case SS1OUT_DIALING_BWD_HANGUP: wsprintf(cNewStat,"No1: 检测到被叫拆线"); break;
1336.  case SS1OUT_BWD_A5: wsprintf(cNewStat,"No1: 收到后向A5"); break;
1337.  case SS1OUT_BWD_KB5: wsprintf(cNewStat,"No1: 收到后向KB5"); break;
1338.  case SS1OUT_BWD_KB2: wsprintf(cNewStat,"No1: 收到后向KB2"); break;
1339.  case SS1OUT_BWD_KB3: wsprintf(cNewStat,"No1: 收到后向KB3"); break;
1340.  case SS1OUT_BWD_A4: wsprintf(cNewStat,"No1: 收到后向A4"); break;
1341.  case SS1OUT_BWD_KB4: wsprintf(cNewStat,"No1: 收到后向KB4"); break;
1342.  case SS1OUT_TIMEOUT_BWD_A: wsprintf(cNewStat,"No1: 等待后向A超时"); break;
1343.  case SS1OUT_TIMEOUT_BWD_A_STOP: wsprintf(cNewStat,"No1: 等待后向A停发超时"); break;
1344.  case SS1OUT_TIMEOUT_BWD_KB: wsprintf(cNewStat,"No1: 等待KB超时"); break;
1345.  case SS1OUT_TIMEOUT_BWD_KB_STOP: wsprintf(cNewStat,"No1: 等待KB停发超时"); break;
1346.  case SS1OUT_TIMEOUT_CALLERID_BWD_A1: wsprintf(cNewStat,"No1: 发主叫等待A1超时"); break;
1347.  case SS1OUT_TIMEOUT_CALLERID_BWD_A1_STOP: wsprintf(cNewStat,"No1: 发主叫等待A1停发超时"); break;
1348.  case SS1OUT_UNDEFINED_CALLERID_BWD_A: wsprintf(cNewStat,"No1: 发主叫收到未定义后向A"); break;
1349.  case SS1OUT_UNDEFINED_BWD_A: wsprintf(cNewStat,"No1: 收到未定义后向A"); break;
1350.  case SS1OUT_UNDEFINED_BWD_KB: wsprintf(cNewStat,"No1: 收到未定义KB"); break;
1351.  case ISDN_CALLOVER: wsprintf(cNewStat,"ISDN:呼叫正常结束,对方先挂机"); break;
1352.  case ISDN_WAIT_RELEASE: wsprintf(cNewStat,"ISDN:等待释放" ); break;
1353.  case ISDN_HANGING: wsprintf(cNewStat,"ISDN:正在拆线" ); break;
1354.  case ISDN_RELEASING : wsprintf(cNewStat,"ISDN:正在释放" ); break;
1355.  case ISDN_UNALLOCATED_NUMBER: wsprintf(cNewStat,"ISDN:未分配的号码"); break;
1356.  case ISDN_NETWORK_BUSY: wsprintf(cNewStat,"ISDN:网络忙"); break;
1357.  case ISDN_CIRCUIT_NOT_AVAILABLE: wsprintf(cNewStat, "ISDN:指定的电路不可用"); break;
1358.  case ISDN_NO_ANSWER: wsprintf(cNewStat, "ISDN:无应答"); break;
1359.  case ISDN_CALL_REJ:     wsprintf(cNewStat, "ISDN:呼叫拒绝"); break;
1360. 
1361.  case PEND_AutoDialFailed:
1362.  switch(SsmGetAutoDialFailureReason(ch))
1363.  {

1364.  case ATDL_NULL: wsprintf(cNewStat,""); break;
1365.  case ATDL_Cancel: wsprintf(cNewStat,"拨号失败:取消"); break;
1366.  case ATDL_WaitDialAnsTimeout: wsprintf(cNewStat,"拨号失败:等候应答超时"); break;
1367.  case ATDL_WaitRemotePickupTimeout: wsprintf(cNewStat,"拨号失败:等候被叫摘机超时");  break;
1368. 
1369.  case ATDL_Mtp3Unusable: wsprintf(cNewStat,"拨号失败:MTP3不可用"); break;
1370.  case ATDL_RcvSSB: wsprintf(cNewStat,"拨号失败:收到SSB"); break;
1371.  case ATDL_RcvSLB: wsprintf(cNewStat,"拨号失败:收到SLB"); break;
1372.  case ATDL_RcvSTB: wsprintf(cNewStat,"拨号失败:收到STB"); break;
1373.  case ATDL_RcvUNN: wsprintf(cNewStat,"拨号失败:收到UNN"); break;
1374.  case ATDL_RcvSEC: wsprintf(cNewStat,"拨号失败:收到SEC"); break;
1375.  case ATDL_RcvCGC: wsprintf(cNewStat,"拨号失败:收到CGC"); break;
1376.  case ATDL_RcvNNC: wsprintf(cNewStat,"拨号失败:收到NNC"); break;
1377.  case ATDL_RcvCFL: wsprintf(cNewStat,"拨号失败:收到CFL"); break;
1378.  case ATDL_RcvLOS: wsprintf(cNewStat,"拨号失败:收到LOS"); break;
1379.  case ATDL_RcvSST: wsprintf(cNewStat,"拨号失败:收到SST"); break;
1380.  case ATDL_RcvACB: wsprintf(cNewStat,"拨号失败:收到ACB"); break;
1381.  case ATDL_RcvDPN: wsprintf(cNewStat,"拨号失败:收到DPN"); break;
1382.  case ATDL_RcvEUM: wsprintf(cNewStat,"拨号失败:收到EUM"); break;
1383.  case ATDL_RcvADI: wsprintf(cNewStat,"拨号失败:收到ADI"); break;
1384.  case ATDL_RcvBLO: wsprintf(cNewStat,"拨号失败:收到BLO"); break;
1385.  case ATDL_DoubleOccupy: wsprintf(cNewStat,"拨号失败:检出同抢"); break;
1386.  case ATDL_CircuitReset: wsprintf(cNewStat,"拨号失败:电路复原"); break;
1387.  case ATDL_BlockedByRemote: wsprintf(cNewStat,"拨号失败:对端闭塞"); break;
1388. 
1389.  case ATDL_SS1WaitOccupyAckTimeout: wsprintf(cNewStat,"拨号失败:等待占用应答超时"); break;
1390.  case ATDL_SS1RcvCAS_HANGUP: wsprintf(cNewStat,"拨号失败:收到后向拆线信号"); break;
1391.  case ATDL_SS1RcvA4: wsprintf(cNewStat,"拨号失败:收到A4信号"); break;
1392.  case ATDL_SS1RcvA5: wsprintf(cNewStat,"拨号失败:收到A5信号"); break;
1393.  case ATDL_SS1RcvUndefinedAx: wsprintf(cNewStat,"拨号失败:收到未定义后向A"); break;
1394.  case ATDL_SS1RcvUndefinedAxOnTxCallerId: wsprintf(cNewStat,"拨号失败:送主叫收到未定义A"); break;
1395.  case ATDL_SS1WaitAxTimeout: wsprintf(cNewStat,"拨号失败:等候后向A超时"); break;
1396.  case ATDL_SS1WaitAxStopTimeout: wsprintf(cNewStat,"拨号失败:等候后向A组停发超时"); break;
1397.  case ATDL_SS1WaitAxTimeoutOnTxCallerId: wsprintf(cNewStat,"拨号失败:送主叫等候后向A超时"); break;
1398.  case ATDL_SS1WaitAxStopTimeoutOnTxCallerId: wsprintf(cNewStat,"拨号失败:送主叫等候后向A停发超时"); break;
1399.  case ATDL_SS1RcvKB2: wsprintf(cNewStat,"拨号失败:收到KB2信号"); break;
1400.  case ATDL_SS1RcvKB3: wsprintf(cNewStat,"拨号失败:收到KB3信号"); break;
1401.  case ATDL_SS1RcvKB4: wsprintf(cNewStat,"拨号失败:收到KB4信号"); break;
1402.  case ATDL_SS1RcvKB5: wsprintf(cNewStat,"拨号失败:收到KB5信号"); break;
1403.  case ATDL_SS1RcvUndefinedKB: wsprintf(cNewStat,"拨号失败:收到未定义KB信号"); break;
1404.  case ATDL_SS1WaitKBTimeout: wsprintf(cNewStat,"拨号失败:接收后向KB信号超时"); break;
1405.  case ATDL_SS1WaitKBStopTimeout: wsprintf(cNewStat,"拨号失败:等候被叫停发KB超时"); break;
1406.  case ATDL_ISDNNETISBUS  : wsprintf(cNewStat,"拨号失败:网络忙" ); break;
1407. 
1408.  default :
1409.  wsprintf(cNewStat,"拨号失败: ???"); 
1410.  break;
1411.  }
1412.  break;
1413. 
1414.  default:
1415.  wsprintf(cNewStat,"%d",nResult); break;
1416.  break;
1417.  }
1418.  */
1419.  //+++++end+++++ masked by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
1420.  //++++start++++ added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
1421.  switch(nResult=SsmGetPendingReason(ch))
1422.  {

1423.  case -1: wsprintf(cNewStat,"-1"); break;
1424.  case ANALOGOUT_NO_DIALTONE: LoadString(g_hInstance, IDS_ANALOGOUT_NO_DIALTONE, cNewStat, sizeof(cNewStat)); break;
1425.  case ANALOGOUT_BUSYTONE: LoadString(g_hInstance, IDS_ANALOGOUT_BUSYTONE, cNewStat, sizeof(cNewStat)); break;
1426.  case ANALOGOUT_ECHO_NOVOICE: LoadString(g_hInstance, IDS_ANALOGOUT_ECHO_NOVOICE, cNewStat, sizeof(cNewStat)); break;
1427.  case ANALOGOUT_NOANSWER: LoadString(g_hInstance, IDS_ANALOGOUT_NOANSWER, cNewStat, sizeof(cNewStat)); break;
1428.  case ANALOGOUT_TALKING_REMOTE_HANGUPED: LoadString(g_hInstance, IDS_ANALOGOUT_TALKING_REMOTE_HANGUPED, cNewStat, sizeof(cNewStat)); break;
1429.  case ANALOGOUT_NOVOICE: LoadString(g_hInstance, IDS_ANALOGOUT_NOVOICE, cNewStat, sizeof(cNewStat)); break;
1430. 
1431.  case PEND_WaitBckStpMsg: LoadString(g_hInstance, IDS_PEND_WaitBckStpMsg, cNewStat, sizeof(cNewStat)); break;
1432. 
1433.  case SS1IN_BWD_KB5: LoadString(g_hInstance, IDS_SS1IN_BWD_KB5, cNewStat, sizeof(cNewStat)); break;
1434.  case PEND_RemoteHangupOnTalking: LoadString(g_hInstance, IDS_PEND_RemoteHangupOnTalking, cNewStat, sizeof(cNewStat)); break;
1435. 
1436.  case PEND_SsxUnusable: LoadString(g_hInstance, IDS_PEND_SsxUnusable, cNewStat, sizeof(cNewStat)); break;
1437.  case PEND_CircuitReset: LoadString(g_hInstance, IDS_PEND_CircuitReset, cNewStat, sizeof(cNewStat)); break;
1438. 
1439.  case PEND_CalleeHangupOnTalking: LoadString(g_hInstance, IDS_PEND_CalleeHangupOnTalking, cNewStat, sizeof(cNewStat)); break;
1440. 
1441.  case SS1OUT_NOANSWER: LoadString(g_hInstance, IDS_SS1OUT_NOANSWER, cNewStat, sizeof(cNewStat)); break;
1442.  case SS1OUT_NOBWDACK: LoadString(g_hInstance, IDS_SS1OUT_NOBWDACK, cNewStat, sizeof(cNewStat)); break;
1443.  case SS1OUT_DIALING_BWD_HANGUP: LoadString(g_hInstance, IDS_SS1OUT_DIALING_BWD_HANGUP, cNewStat, sizeof(cNewStat)); break;
1444.  case SS1OUT_BWD_A5: LoadString(g_hInstance, IDS_SS1OUT_BWD_A5, cNewStat, sizeof(cNewStat)); break;
1445.  case SS1OUT_BWD_KB5: LoadString(g_hInstance, IDS_SS1OUT_BWD_KB5, cNewStat, sizeof(cNewStat)); break;
1446.  case SS1OUT_BWD_KB2: LoadString(g_hInstance, IDS_SS1OUT_BWD_KB2, cNewStat, sizeof(cNewStat)); break;
1447.  case SS1OUT_BWD_KB3: LoadString(g_hInstance, IDS_SS1OUT_BWD_KB3, cNewStat, sizeof(cNewStat)); break;
1448.  case SS1OUT_BWD_A4: LoadString(g_hInstance, IDS_SS1OUT_BWD_A4, cNewStat, sizeof(cNewStat)); break;
1449.  case SS1OUT_BWD_KB4: LoadString(g_hInstance, IDS_SS1OUT_BWD_KB4, cNewStat, sizeof(cNewStat)); break;
1450.  case SS1OUT_TIMEOUT_BWD_A: LoadString(g_hInstance, IDS_SS1OUT_TIMEOUT_BWD_A, cNewStat, sizeof(cNewStat)); break;
1451.  case SS1OUT_TIMEOUT_BWD_A_STOP: LoadString(g_hInstance, IDS_SS1OUT_TIMEOUT_BWD_A_STOP, cNewStat, sizeof(cNewStat)); break;
1452.  case SS1OUT_TIMEOUT_BWD_KB: LoadString(g_hInstance, IDS_SS1OUT_TIMEOUT_BWD_KB, cNewStat, sizeof(cNewStat)); break;
1453.  case SS1OUT_TIMEOUT_BWD_KB_STOP: LoadString(g_hInstance, IDS_SS1OUT_TIMEOUT_BWD_KB_STOP, cNewStat, sizeof(cNewStat)); break;
1454.  case SS1OUT_TIMEOUT_CALLERID_BWD_A1: LoadString(g_hInstance, IDS_SS1OUT_TIMEOUT_CALLERID_BWD_A1, cNewStat, sizeof(cNewStat)); break;
1455.  case SS1OUT_TIMEOUT_CALLERID_BWD_A1_STOP: LoadString(g_hInstance, IDS_SS1OUT_TIMEOUT_CALLERID_BWD_A1_STOP, cNewStat, sizeof(cNewStat)); break;
1456.  case SS1OUT_UNDEFINED_CALLERID_BWD_A: LoadString(g_hInstance, IDS_SS1OUT_UNDEFINED_CALLERID_BWD_A, cNewStat, sizeof(cNewStat)); break;
1457.  case SS1OUT_UNDEFINED_BWD_A: LoadString(g_hInstance, IDS_SS1OUT_UNDEFINED_BWD_A, cNewStat, sizeof(cNewStat)); break;
1458.  case SS1OUT_UNDEFINED_BWD_KB: LoadString(g_hInstance, IDS_SS1OUT_UNDEFINED_BWD_KB, cNewStat, sizeof(cNewStat)); break;
1459.  case ISDN_CALLOVER: LoadString(g_hInstance, IDS_ISDN_CALLOVER, cNewStat, sizeof(cNewStat)); break;
1460.  case ISDN_WAIT_RELEASE: LoadString(g_hInstance, IDS_ISDN_WAIT_RELEASE, cNewStat, sizeof(cNewStat)); break;
1461.  case ISDN_HANGING: LoadString(g_hInstance, IDS_ISDN_HANGING, cNewStat, sizeof(cNewStat)); break;
1462.  case ISDN_RELEASING : LoadString(g_hInstance, IDS_ISDN_RELEASING, cNewStat, sizeof(cNewStat)); break;
1463.  case ISDN_UNALLOCATED_NUMBER: LoadString(g_hInstance, IDS_ISDN_UNALLOCATED_NUMBER, cNewStat, sizeof(cNewStat)); break;
1464.  case ISDN_NETWORK_BUSY: LoadString(g_hInstance, IDS_ISDN_NETWORK_BUSY, cNewStat, sizeof(cNewStat)); break;
1465.  case ISDN_CIRCUIT_NOT_AVAILABLE: LoadString(g_hInstance, IDS_ISDN_CIRCUIT_NOT_AVAILABLE, cNewStat, sizeof(cNewStat)); break;
1466.  case ISDN_NO_ANSWER: LoadString(g_hInstance, IDS_ISDN_NO_ANSWER, cNewStat, sizeof(cNewStat)); break;
1467.  case ISDN_CALL_REJ:     LoadString(g_hInstance, IDS_ISDN_CALL_REJ, cNewStat, sizeof(cNewStat)); break;
1468. 
1469.  case PEND_AutoDialFailed:
1470.  switch(SsmGetAutoDialFailureReason(ch))
1471.  {

1472.  case ATDL_NULL: LoadString(g_hInstance, IDS_ATDL_NULL, cNewStat, sizeof(cNewStat)); break;
1473.  case ATDL_Cancel: LoadString(g_hInstance, IDS_ATDL_Cancel, cNewStat, sizeof(cNewStat)); break;
1474.  case ATDL_WaitDialAnsTimeout: LoadString(g_hInstance, IDS_ATDL_WaitDialAnsTimeout, cNewStat, sizeof(cNewStat)); break;
1475.  case ATDL_WaitRemotePickupTimeout: LoadString(g_hInstance, IDS_ATDL_WaitRemotePickupTimeout, cNewStat, sizeof(cNewStat));  break;
1476. 
1477.  case ATDL_Mtp3Unusable: LoadString(g_hInstance, IDS_ATDL_Mtp3Unusable, cNewStat, sizeof(cNewStat)); break;
1478.  case ATDL_RcvSSB: LoadString(g_hInstance, IDS_ATDL_RcvSSB, cNewStat, sizeof(cNewStat)); break;
1479.  case ATDL_RcvSLB: LoadString(g_hInstance, IDS_ATDL_RcvSLB, cNewStat, sizeof(cNewStat)); break;
1480.  case ATDL_RcvSTB: LoadString(g_hInstance, IDS_ATDL_RcvSTB, cNewStat, sizeof(cNewStat)); break;
1481.  case ATDL_RcvUNN: LoadString(g_hInstance, IDS_ATDL_RcvUNN, cNewStat, sizeof(cNewStat)); break;
1482.  case ATDL_RcvSEC: LoadString(g_hInstance, IDS_ATDL_RcvSEC, cNewStat, sizeof(cNewStat)); break;
1483.  case ATDL_RcvCGC: LoadString(g_hInstance, IDS_ATDL_RcvCGC, cNewStat, sizeof(cNewStat)); break;
1484.  case ATDL_RcvNNC: LoadString(g_hInstance, IDS_ATDL_RcvNNC, cNewStat, sizeof(cNewStat)); break;
1485.  case ATDL_RcvCFL: LoadString(g_hInstance, IDS_ATDL_RcvCFL, cNewStat, sizeof(cNewStat)); break;
1486.  case ATDL_RcvLOS: LoadString(g_hInstance, IDS_ATDL_RcvLOS, cNewStat, sizeof(cNewStat)); break;
1487.  case ATDL_RcvSST: LoadString(g_hInstance, IDS_ATDL_RcvSST, cNewStat, sizeof(cNewStat)); break;
1488.  case ATDL_RcvACB: LoadString(g_hInstance, IDS_ATDL_RcvACB, cNewStat, sizeof(cNewStat)); break;
1489.  case ATDL_RcvDPN: LoadString(g_hInstance, IDS_ATDL_RcvDPN, cNewStat, sizeof(cNewStat)); break;
1490.  case ATDL_RcvEUM: LoadString(g_hInstance, IDS_ATDL_RcvEUM, cNewStat, sizeof(cNewStat)); break;
1491.  case ATDL_RcvADI: LoadString(g_hInstance, IDS_ATDL_RcvADI, cNewStat, sizeof(cNewStat)); break;
1492.  case ATDL_RcvBLO: LoadString(g_hInstance, IDS_ATDL_RcvBLO, cNewStat, sizeof(cNewStat)); break;
1493.  case ATDL_DoubleOccupy: LoadString(g_hInstance, IDS_ATDL_DoubleOccupy, cNewStat, sizeof(cNewStat)); break;
1494.  case ATDL_CircuitReset: LoadString(g_hInstance, IDS_ATDL_CircuitReset, cNewStat, sizeof(cNewStat)); break;
1495.  case ATDL_BlockedByRemote: LoadString(g_hInstance, IDS_ATDL_BlockedByRemote, cNewStat, sizeof(cNewStat)); break;
1496. 
1497.  case ATDL_SS1WaitOccupyAckTimeout: LoadString(g_hInstance, IDS_ATDL_SS1WaitOccupyAckTimeout, cNewStat, sizeof(cNewStat)); break;
1498.  case ATDL_SS1RcvCAS_HANGUP: LoadString(g_hInstance, IDS_ATDL_SS1RcvCAS_HANGUP, cNewStat, sizeof(cNewStat)); break;
1499.  case ATDL_SS1RcvA4: LoadString(g_hInstance, IDS_ATDL_SS1RcvA4, cNewStat, sizeof(cNewStat)); break;
1500.  case ATDL_SS1RcvA5: LoadString(g_hInstance, IDS_ATDL_SS1RcvA5, cNewStat, sizeof(cNewStat)); break;
1501.  case ATDL_SS1RcvUndefinedAx: LoadString(g_hInstance, IDS_ATDL_SS1RcvUndefinedAx, cNewStat, sizeof(cNewStat)); break;
1502.  case ATDL_SS1RcvUndefinedAxOnTxCallerId: LoadString(g_hInstance, IDS_ATDL_SS1RcvUndefinedAxOnTxCallerId, cNewStat, sizeof(cNewStat)); break;
1503.  case ATDL_SS1WaitAxTimeout: LoadString(g_hInstance, IDS_ATDL_SS1WaitAxTimeout, cNewStat, sizeof(cNewStat)); break;
1504.  case ATDL_SS1WaitAxStopTimeout: LoadString(g_hInstance, IDS_ATDL_SS1WaitAxStopTimeout, cNewStat, sizeof(cNewStat)); break;
1505.  case ATDL_SS1WaitAxTimeoutOnTxCallerId: LoadString(g_hInstance, IDS_ATDL_SS1WaitAxTimeoutOnTxCallerId, cNewStat, sizeof(cNewStat)); break;
1506.  case ATDL_SS1WaitAxStopTimeoutOnTxCallerId: LoadString(g_hInstance, IDS_ATDL_SS1WaitAxStopTimeoutOnTxCallerId, cNewStat, sizeof(cNewStat)); break;
1507.  case ATDL_SS1RcvKB2: LoadString(g_hInstance, IDS_ATDL_SS1RcvKB2, cNewStat, sizeof(cNewStat)); break;
1508.  case ATDL_SS1RcvKB3: LoadString(g_hInstance, IDS_ATDL_SS1RcvKB3, cNewStat, sizeof(cNewStat)); break;
1509.  case ATDL_SS1RcvKB4: LoadString(g_hInstance, IDS_ATDL_SS1RcvKB4, cNewStat, sizeof(cNewStat)); break;
1510.  case ATDL_SS1RcvKB5: LoadString(g_hInstance, IDS_ATDL_SS1RcvKB5, cNewStat, sizeof(cNewStat)); break;
1511.  case ATDL_SS1RcvUndefinedKB: LoadString(g_hInstance, IDS_ATDL_SS1RcvUndefinedKB, cNewStat, sizeof(cNewStat)); break;
1512.  case ATDL_SS1WaitKBTimeout: LoadString(g_hInstance, IDS_ATDL_SS1WaitKBTimeout, cNewStat, sizeof(cNewStat)); break;
1513.  case ATDL_SS1WaitKBStopTimeout: LoadString(g_hInstance, IDS_ATDL_SS1WaitKBStopTimeout, cNewStat, sizeof(cNewStat)); break;
1514.  case ATDL_ISDNNETISBUS  : LoadString(g_hInstance, IDS_ATDL_ISDNNETISBUS, cNewStat, sizeof(cNewStat)); break;
1515. 
1516.  case ATDL_IPInvalidPhonum: LoadString(g_hInstance, IDS_ATDL_IPInvalidPhonum, cNewStat, sizeof(cNewStat)); break;
1517.  case ATDL_IPRemoteBusy: LoadString(g_hInstance, IDS_ATDL_IPRemoteBusy, cNewStat, sizeof(cNewStat)); break;
1518.  case ATDL_IPBeenRefused: LoadString(g_hInstance, IDS_ATDL_IPBeenRefused, cNewStat, sizeof(cNewStat)); break;
1519.  case ATDL_IPDnsFail  : LoadString(g_hInstance, IDS_ATDL_IPDnsFail, cNewStat, sizeof(cNewStat)); break;
1520.  case ATDL_IPCodecUnSupport  : LoadString(g_hInstance, IDS_ATDL_IPCodecUnSupport, cNewStat, sizeof(cNewStat)); break;
1521.  case ATDL_IPOutOfResources  : LoadString(g_hInstance, IDS_ATDL_IPOutOfResources, cNewStat, sizeof(cNewStat)); break;
1522.  case ATDL_IPLocalNetworkErr  : LoadString(g_hInstance, IDS_ATDL_IPLocalNetworkErr, cNewStat, sizeof(cNewStat)); break;
1523.  case ATDL_IPRemoteNetworkErr  : LoadString(g_hInstance, IDS_ATDL_IPRemoteNetworkErr, cNewStat, sizeof(cNewStat)); break;
1524. 
1525.  default :
1526.  LoadString(g_hInstance, IDS_ATDL_DEFAULT, cNewStat, sizeof(cNewStat)); 
1527.  break;
1528.  }
1529.  break;
1530. 
1531.  default:
1532.  wsprintf(cNewStat,"%d",nResult); break;
1533.  break;
1534.  }
1535.  //+++++end+++++ added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
1536.  m_ChList.SetItemText( ch, ITEM_PendReason, cNewStat );
1537.  }
1538.  else if((nOldChState[ch]==S_CALL_PENDING   && nNewChState!=S_CALL_PENDING)   ||
1539.      (nOldChState[ch]==S_CALL_RemoteBlock     && nNewChState!=S_CALL_RemoteBlock)     ||
1540.  (nOldChState[ch]==S_CALL_LocalBlock&&nNewChState!=S_CALL_LocalBlock)    )
1541.  {

1542.  m_ChList.SetItemText( ch, ITEM_PendReason, "" );
1543.  }
1544. 
1545. 
1546.  //long WINAPI SsmGetChStateKeepTime(int ch)
1547. 
1548.  lResult = SsmGetChStateKeepTime(ch);
1549.  if(lResult  != lOldTime[ch])
1550.  {

1551.  lOldTime[ch] = lResult ;
1552.  wsprintf(cNewStat,"%dms",lResult);
1553.  m_ChList.SetItemText( ch, ITEM_ChStateKeepTime, cNewStat );
1554.  }
1555. 
1556. 
1557.  // wsprintf(cNewStat,"%dms",SsmGetChStateKeepTime(ch));
1558.  // m_ChList.SetItemText( ch, ITEM_ChStateKeepTime, cNewStat );
1559. 
1560. 
1561.  nResult = SsmGetPhoNumStr(ch,cNewStat);
1562.  if(nResult  == -1) wsprintf(cNewStat, "-1");
1563.  else if(nResult  == 0) wsprintf(cNewStat, "");
1564.  nResult = m_ChList.GetItemText( ch, ITEM_PhoneNumber, cOldStat, 255 );
1565.  if(nResult==0)
1566.  cOldStat[0]='';
1567.  if ( strcmp(cNewStat,cOldStat) != 0 ) 
1568.  m_ChList.SetItemText( ch, ITEM_PhoneNumber, cNewStat );
1569. 
1570. 
1571.  //int WINAPI SsmGetPolarRvrsCount(int ch)
1572.  //if(SsmQueryOpPolarRvrs(CurCh) == 1) nResult = SsmGetPolarRvrsCount(CurCh);//masked by sh for the error of PolarRvrs, 2007-10-26
1573.  if(SsmQueryOpPolarRvrs(ch) == 1) nResult = SsmGetPolarRvrsCount(ch); //added by sh for the error of PolarRvrs, 2007-10-26
1574.  else                                nResult = -1;
1575.  if(nResult != nOldPloarRvrsCount[ch])
1576.  {

1577.  nOldPloarRvrsCount[ch] = nResult;
1578.  m_ChList.SetItemText( ch, ITEM_Ploar, _itoa(nResult,cNewStat,10) );
1579.  }
1580. 
1581.  if(bEnableOpBlockRemoteCh[ch])
1582.  {

1583.  if((nResult=SsmGetRemoteChBlockStatus(ch)) != nOldBlockRemoteStatus[ch])
1584.  {

1585.  nOldBlockRemoteStatus[ch] = nResult;
1586.  //++++start++++ masked by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
1587.  /* switch(nResult)
1588.  {

1589.  case -1 : wsprintf(cNewStat,"不支持"); break;
1590.  case BLOCKREMOTE_Unblocked : wsprintf(cNewStat,""); break;
1591.  case BLOCKREMOTE_Blocked : wsprintf(cNewStat,"闭塞"); break;
1592.  case BLOCKREMOTE_WaitBlockAck : wsprintf(cNewStat,"等待闭塞证实"); break;
1593.  case BLOCKREMOTE_WaitUnblockAck : wsprintf(cNewStat,"等待解除闭塞证实"); break;
1594.  }
1595.  */ //+++++end+++++ masked by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
1596.  //++++start++++ added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
1597.  switch(nResult)
1598.  {

1599.  case -1 : LoadString(g_hInstance, IDS_BLOCKREMOTE_INVALID, cNewStat, sizeof(cNewStat)); break;
1600.  case BLOCKREMOTE_Unblocked : LoadString(g_hInstance, IDS_BLOCKREMOTE_Unblocked, cNewStat, sizeof(cNewStat)); break;
1601.  case BLOCKREMOTE_Blocked : LoadString(g_hInstance, IDS_BLOCKREMOTE_Blocked, cNewStat, sizeof(cNewStat)); break;
1602.  case BLOCKREMOTE_WaitBlockAck : LoadString(g_hInstance, IDS_BLOCKREMOTE_WaitBlockAck, cNewStat, sizeof(cNewStat)); break;
1603.  case BLOCKREMOTE_WaitUnblockAck : LoadString(g_hInstance, IDS_BLOCKREMOTE_WaitUnblockAck, cNewStat, sizeof(cNewStat)); break;
1604.  }
1605.  //+++++end+++++ added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.9
1606.  m_ChList.SetItemText( ch, ITEM_BlockRemote, cNewStat );
1607.  }
1608.  }
1609. 
1610.  if(CallTest[ch].bEnIn) CallinTestHandler(ch, nNewChState);
1611.  if(CallTest[ch].bEnOut) CalloutTestHandler(ch, nNewChState);
1612. 
1613.  nOldChState[ch] = nNewChState;
1614.  //add by JK shi for 支持SetKB功能, begin
1615.  nOldPendReason[ch] = nNewPendReason;
1616.  //add by JK shi for 支持SetKB功能, end
1617. 
1618.  if(SsmGetChType(ch) == 15 || SsmGetChType(ch) == 16)
1619.  {

1620.  char szUsingCodecType[50] = {''};
1621. 
1622.  memset(szUsingCodecType, 0, sizeof(szUsingCodecType));
1623. 
1624.  int nResult = SsmIpGetSessionCodecType(ch);
1625. 
1626.  switch(nResult)
1627.  {

1628.  case 6:
1629.  wsprintf(szUsingCodecType, "G.711 aLaw"); 
1630.  break;
1631. 
1632.  case 7:
1633.  wsprintf(szUsingCodecType, "G.711 muLaw"); 
1634.  break;
1635. 
1636.  case 131:
1637.  wsprintf(szUsingCodecType, "G.729"); 
1638.  break;
1639.  }
1640. 
1641.  m_ChList.SetItemText(ch, ITEM_CodecType, szUsingCodecType);
1642.  }
1643.  else
1644.  m_ChList.SetItemText(ch, ITEM_CodecType, "-1");
1645.  }
1646. 
1647.  if(bEnSearchIdleCh) SearchIdleChCallout();
1648. 
1649.  CFormView::OnTimer(nIDEvent);
1650.  }
1651. 
1652.  void CTestView::OnSelchangeComboSelcurch()
1653.  {

1654.  CurCh = m_SelCurCh.GetCurSel();
1655. 
1656.  m_ChList.EnsureVisible(CurCh, FALSE);
1657. 
1658.  m_dlgBase.OnSelchangeCurCh(CurCh);
1659.  m_dlgPlay.OnSelchangeCurCh(CurCh);
1660.  m_dlgRec.OnSelchangeCurCh(CurCh);
1661.  m_dlgEvent.OnSelchangeCurCh(CurCh);
1662.  m_dlgOther.OnSelchangeCurCh(CurCh);
1663.  m_dlgIP.OnSelchangeCurCh(CurCh);
1664. 
1665.  SetDlgItemInt(IDC_EDIT_LocalFlashTime, 500, TRUE);
1666.  UpdateData(FALSE);
1667.  }
1668. 
1669.  //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1670.  //@@@@@@@@@@@@@@@@@@@@@@@@@@   RxDTMF OPERATION   @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1671.  //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1672. 
1673. 
1674.  //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1675.  //@@@@@@@@@@@@@@@@@@@@@@@@ TXDTMF OPERATION  @@@@@@@@@@@@@@@@@@@@@@@@@@@@
1676.  //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1677. 
1678. 
1679. 
1680. 
1681. 
1682.  //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1683.  //@@@@@@@@@@@@@@@@@@@ SEND TONE OPERATION  @@@@@@@@@@@@@@@@@@@@@@@@@@
1684.  //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1685. 
1686. 
1687.  //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1688.  //@@@@@@@@@@@@@@@@@@@ INTER-CH OPERATION  @@@@@@@@@@@@@@@@@@@@@@@@@@@
1689.  //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1690. 
1691. 
1692.  //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1693.  //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ PLAY OPERATION @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1694.  //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1695. 
1696. 
1697.  //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1698.  //@@@@@@@@@@@@@@@@@@@@@@@@@@    RECORD OPERATION   @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1699.  //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1700. 
1701. 
1702. 
1703.  //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1704.  //@@@@@@@@@@@@@@@@@@@ SET TONE-CHECK PARAMETERS @@@@@@@@@@@@@@@@@@@@@
1705.  //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1706. 
1707. 
1708.  //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1709.  //@@@@@@@@@@@@@@@@@@@@@@@@@@@@ CONFERENCE OPERATION  @@@@@@@@@@@@@@@@@@@@@@@@@@@@
1710.  //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1711.  LPBYTE pszMemDot=NULL, pszBuf[100];
1712.  DWORD dwMemSize=4096L;
1713. 
1714. 
1715. 
1716. 
1717.  //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1718.  //@@@@@@@@@@@@@@@@@@@@@@@@@@@@ echo-killer OPERATION  @@@@@@@@@@@@@@@@@@@@@@@@@@@@
1719.  //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1720. 
1721. 
1722. 
1723. 
1724. 
1725.  //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1726.  //@@@@@@@@@@@@@@@@@@@@@@@@@@@@ echo-killer OPERATION  @@@@@@@@@@@@@@@@@@@@@@@@@@@@
1727.  //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1728. 
1729. 
1730.  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1731.  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CALL TEST ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1732.  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1733. 
1734.  void CTestView::InitCallTest()
1735.  {

1736.  PCALLTEST p;
1737. 
1738.  for(int ch=0; ch<nMaxCh; ch++)
1739.  {

1740.  p = &CallTest[ch];
1741. 
1742.  p->bEnIn       = FALSE;
1743.  p->bEnInRxDtmf = FALSE;
1744.  p->bEnInTxDtmf = FALSE;
1745.  p->nInTotTest  = 0;
1746.  p->nInCallOK   = 0;
1747.  p->nInRxDtmfOk = 0;
1748. 
1749.  p->bEnOut       = FALSE;
1750.  p->bEnOutRxDtmf = FALSE;
1751.  p->bEnOutTxDtmf = FALSE;
1752.  p->nOutTotTest  = 0;
1753.  p->nOutCallOK   = 0;
1754.  p->nOutRxDtmfOK = 0;
1755. 
1756.  p->nStep     = CALLTEST_IDLE;
1757.  p->dwTimeOut = 0L;
1758.  p->bEnRec    = FALSE;
1759.  }
1760.  bEnSearchIdleCh  = FALSE;
1761.  bEnCallOutRxDtmf = FALSE;
1762.  bEnCallOutTxDtmf = FALSE;
1763.  nCallInterval    = 1;
1764.  }
1765. 
1766.  void CTestView::CallinTestHandler(int ch, int nChState)
1767.  {

1768. 
1769.  char szBuf[100],szPhoNum[100];
1770.  PCALLTEST p = &CallTest[ch];
1771.  int nRet;
1772.  time_t ltime;
1773. 
1774.  switch(p->nStep)
1775.  {

1776.  case CALLTEST_IDLE:
1777.  if(nChState == S_CALL_RINGING)
1778.  {

1779.  SsmPickup(ch);
1780.  SsmGetCallerId(ch,szBuf);
1781.  SsmGetPhoNumStr(ch,szPhoNum);
1782.  if(strcmp(szBuf,CALLERID)==0 && strcmp(szPhoNum,PHONE_NUMBER)==0) p->nInCallOK++;
1783.  p->nInTotTest++;
1784.  p->dwTimeOut = 0l;
1785. 
1786.  if(p->bInIsSaveOldRecFile)
1787.  {

1788.  time(<ime);
1789.  wsprintf(p->szRecFile,"Rectime#ldch%d.wav", ltime, ch);
1790.  }
1791.  else
1792.  wsprintf(p->szRecFile, "RecCh%d.wav", ch);
1793. 
1794.  if(p->bEnRec)
1795.  {

1796.  if( SsmChkRecToFile( ch )==1) //recording now
1797.  SsmStopRecToFile(ch);
1798. 
1799.  nRet = SsmRecToFile(ch, p->szRecFile , 6, 0, -1, 0, 0);
1800.  if(nRet)
1801.  myShowErrMsg();
1802.  }
1803. 
1804.  if(p->bEnInRxDtmf) p->nStep = CALLTEST_IN_WaitDtmf;
1805.  else               p->nStep = CALLTEST_IN_StartSendDtmf;
1806.  }
1807.  else if(nChState == S_CALL_PENDING)
1808.  {

1809.  nRet = SsmGetChStateKeepTime(ch);
1810.  if(nRet > 2000) //pending longer than 2s
1811.  {

1812.  SsmHangup(ch);
1813.  p->nInTotTest++;
1814.  wsprintf(szBuf,"%d/%d/%d",p->nInRxDtmfOk,p->nInCallOK,p->nInTotTest);
1815.  m_ChList.SetItemText( ch, ITEM_CallInTest, szBuf);
1816.  p->dwTimeOut = 0l;
1817.  p->nStep  = CALLTEST_IDLE;
1818.  }
1819.  }
1820.  break;
1821. 
1822.  case CALLTEST_IN_WaitDtmf:
1823.  SsmGetDtmfStr(ch,szBuf);
1824.  if(strcmp(szBuf,TEST_DTMF) == 0)
1825.  {

1826.  p->nInRxDtmfOk++;
1827.  p->dwTimeOut = 0l;
1828.  p->nStep = CALLTEST_IN_StartSendDtmf;
1829.  }
1830.  else if(nChState!=S_CALL_TALKING || ++p->dwTimeOut>40)
1831.  {

1832.  SsmHangup(ch);
1833.  wsprintf(szBuf,"%d/%d/%d",p->nInRxDtmfOk,p->nInCallOK,p->nInTotTest);
1834.  m_ChList.SetItemText( ch, ITEM_CallInTest, szBuf);
1835.  p->dwTimeOut = 0l;
1836.  p->nStep  = CALLTEST_IDLE;
1837.  }
1838.  break;
1839. 
1840.  case CALLTEST_IN_StartSendDtmf:
1841.  if(p->bEnInTxDtmf) 
1842.  {

1843.  SsmTxDtmf(ch,TEST_DTMF);
1844.  p->nStep = CALLTEST_IN_ChkTxDtmf;
1845.  }
1846.  else 
1847.  {

1848.  SsmHangup(ch);
1849.  wsprintf(szBuf,"%d/%d/%d",p->nInRxDtmfOk,p->nInCallOK,p->nInTotTest);
1850.  m_ChList.SetItemText( ch, ITEM_CallInTest, szBuf);
1851.  p->nStep = CALLTEST_IDLE;
1852.  }
1853.  break;
1854. 
1855.  case CALLTEST_IN_ChkTxDtmf:
1856.  if(SsmChkTxDtmf(ch)==0)
1857.  {

1858.  SsmHangup(ch);
1859.  wsprintf(szBuf,"%d/%d/%d",p->nInRxDtmfOk,p->nInCallOK,p->nInTotTest);
1860.  m_ChList.SetItemText( ch, ITEM_CallInTest, szBuf);
1861.  p->nStep = CALLTEST_IDLE;
1862.  }
1863.  break;
1864.  }
1865.  }
1866. 
1867. 
1868.  //int WINAPI SsmSearchIdleCallOutCh(WORD wSearchMode, DWORD dwPrecedence)
1869.  void CTestView::SearchIdleChCallout()
1870.  {

1871.  int ch;
1872. 
1873. 
1874.  while((ch=SsmSearchIdleCallOutCh(0x26,0)) != -1)
1875.  {

1876.  // if(++nWaitSearchIdleChTimeCnt[ch] <= nCallInterval) return; //changed  2002.12.6
1877.  nWaitSearchIdleChTimeCnt[ch] = 0;
1878. 
1879.  PCALLTEST p = &CallTest[ch];
1880. 
1881.  p->bEnOut = TRUE;
1882.  p->bEnRec = FALSE;
1883.  p->bEnOutRxDtmf = bEnCallOutRxDtmf;
1884.  p->bEnOutTxDtmf = bEnCallOutTxDtmf;
1885.  if(bDialAtOnce)
1886.  {

1887.  SsmPickup(ch);
1888.  SsmSetTxCallerId(ch, CALLERID);
1889.  if(SsmAutoDial(ch,PHONE_NUMBER) == -1) 
1890.  {

1891.  SsmHangup(ch);
1892.  }
1893.  else
1894.  {

1895.  p->nOutTotTest++;
1896.  p->dwTimeOut = 0L;
1897.  p->nStep = CALLTEST_OUT_WaitDial;
1898.  }
1899.  }
1900.  else p->nStep  = CALLTEST_IDLE;
1901.  if(bOneCallOnly) break;
1902.  }
1903.  }
1904. 
1905.  void CTestView::CalloutTestHandler(int ch, int nChState)
1906.  {

1907.  int nResult, nDirection;
1908.  char szBuf[100];
1909.  PCALLTEST p = &CallTest[ch];
1910. 
1911.  nResult = SsmGetAutoCallDirection(ch,&nDirection);
1912.  if(nResult==-1 || nDirection<1) return;
1913. 
1914.  switch(p->nStep)
1915.  {

1916.  case CALLTEST_IDLE:
1917. 
1918.  if(++nWaitSearchIdleChTimeCnt[ch] <= nCallInterval) break; //changed 2002.12.6
1919.  nWaitSearchIdleChTimeCnt[ch] = 0;
1920. 
1921.  if(bEnSearchIdleCh || (!bEnSearchIdleCh&&nChState==S_CALL_STANDBY)) 
1922.  {

1923.  SsmPickup(ch);
1924.  SsmSetTxCallerId(ch, CALLERID);
1925.  if(SsmAutoDial(ch,PHONE_NUMBER) == -1) 
1926.  {

1927.  SsmHangup(ch);
1928.  return;
1929.  }
1930.  p->nOutTotTest++;
1931.  p->dwTimeOut = 0L;
1932.  p->nStep = CALLTEST_OUT_WaitDial;
1933.  }
1934.  break;
1935. 
1936.  case CALLTEST_OUT_WaitDial:
1937.  switch(SsmChkAutoDial(ch))
1938.  {

1939.  case DIAL_VOICE: //"通话"状态
1940.  case DIAL_VOICEF1:
1941.  case DIAL_VOICEF2:
1942.  p->nOutCallOK++;
1943.  p->dwTimeOut = 0L;
1944.  if(p->bEnOutTxDtmf) p->nStep = CALLTEST_OUT_StartSendDtmf;
1945.  else                p->nStep = CALLTEST_OUT_WaitDtmf;
1946.  break;
1947.  case DIAL_NO_DIALTONE:
1948.  case DIAL_BUSYTONE:
1949.  case DIAL_ECHO_NOVOICE:
1950.  case DIAL_NOVOICE:
1951.  case DIAL_NOANSWER:
1952.  case DIAL_FAILURE:
1953.  case DIAL_INVALID_PHONUM:
1954.  p->nAutoDialFailed ++;
1955.  SsmHangup(ch);
1956.  wsprintf(szBuf,"%d/%d/%d/%d/%d",p->nOutRxDtmfOK,p->nOutCallOK,p->nOutTotTest, p->nAutoDialFailed, p->nOutRxDtmfFailed);
1957.  m_ChList.SetItemText( ch, ITEM_CallTest, szBuf);
1958.  p->dwTimeOut = 0L;
1959.  if(bEnSearchIdleCh) p->bEnOut = FALSE;
1960.  p->nStep = CALLTEST_IDLE;
1961.  break;
1962.  case DIAL_STANDBY:
1963.  nResult = SsmGetChStateKeepTime(ch);
1964.  if(nResult > 2000)
1965.  {

1966.  p->nAutoDialFailed ++;
1967.  SsmHangup(ch);
1968.  wsprintf(szBuf,"%d/%d/%d/%d/%d",p->nOutRxDtmfOK,p->nOutCallOK,p->nOutTotTest, p->nAutoDialFailed, p->nOutRxDtmfFailed);
1969.  m_ChList.SetItemText( ch, ITEM_CallTest, szBuf);
1970.  p->dwTimeOut = 0L;
1971.  if(bEnSearchIdleCh) p->bEnOut = FALSE;
1972.  p->nStep = CALLTEST_IDLE;
1973.  }
1974.  break;
1975. 
1976.  case DIAL_DIALING:
1977.  case DIAL_ECHOTONE:
1978.  default:
1979.  break;
1980.  }
1981.  break;
1982. 
1983.  case CALLTEST_OUT_StartSendDtmf:
1984.  SsmTxDtmf(ch,TEST_DTMF);
1985.  p->nStep = CALLTEST_OUT_ChkTxDtmf;
1986.  break;
1987. 
1988.  case CALLTEST_OUT_ChkTxDtmf:
1989.  if(SsmChkTxDtmf(ch) == 0)
1990.  {

1991.  p->nStep = CALLTEST_OUT_WaitDtmf;
1992.  }
1993.  break;
1994.  case CALLTEST_OUT_WaitDtmf:
1995.  if(p->bEnOutRxDtmf)
1996.  {

1997.  SsmGetDtmfStr(ch,szBuf);
1998.  if(strcmp(szBuf,TEST_DTMF) == 0)
1999.  {

2000.  SsmHangup(ch);
2001.  p->nOutRxDtmfOK++;
2002.  wsprintf(szBuf,"%d/%d/%d/%d/%d",p->nOutRxDtmfOK,p->nOutCallOK,p->nOutTotTest, p->nAutoDialFailed, p->nOutRxDtmfFailed);
2003.  m_ChList.SetItemText( ch, ITEM_CallTest, szBuf);
2004.  if(bEnSearchIdleCh) p->bEnOut = FALSE;
2005.  p->nStep = CALLTEST_IDLE;
2006.  }
2007.  else if(++p->dwTimeOut > 40)
2008.  {

2009.  SsmHangup(ch);
2010.  p->nOutRxDtmfFailed++;
2011.  wsprintf(szBuf,"%d/%d/%d/%d/%d",p->nOutRxDtmfOK,p->nOutCallOK,p->nOutTotTest, p->nAutoDialFailed, p->nOutRxDtmfFailed);
2012.  m_ChList.SetItemText( ch, ITEM_CallTest, szBuf);
2013.  if(bEnSearchIdleCh) p->bEnOut = FALSE;
2014.  p->nStep = CALLTEST_IDLE;
2015.  }
2016.  }
2017.  else
2018.  {

2019.  SsmHangup(ch);
2020.  wsprintf(szBuf,"%d/%d/%d",p->nOutRxDtmfOK,p->nOutCallOK,p->nOutTotTest);
2021.  m_ChList.SetItemText( ch, ITEM_CallTest, szBuf);
2022.  if(bEnSearchIdleCh) p->bEnOut = FALSE;
2023.  p->nStep = CALLTEST_IDLE;
2024.  }
2025.  break;
2026.  }
2027.  }
2028. 
2029.  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2030.  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SS7 FUNCTION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2031.  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2032. 
2033.  void CTestView::OnClickChlist(NMHDR* pNMHDR, LRESULT* pResult) 
2034.  {

2035.  // TODO: Add your control notification handler code here
2036.  int nItem, nFlags;
2037.      
2038.      nFlags = LVNI_SELECTED;
2039.      nItem = m_ChList.GetNextItem(-1, nFlags );
2040.      if ( nItem != -1 )
2041.  {

2042.  m_SelCurCh.SetCurSel(nItem);        
2043.  CurCh = m_SelCurCh.GetCurSel();
2044.  }
2045. 
2046.  OnSelchangeComboSelcurch();
2047. 
2048.  *pResult = 0;
2049.  }
2050. 
2051.  void CTestView::OnOpenShconfig() 
2052.  {

2053.  // TODO: Add your command handler code here
2054.  TCHAR lpstrActual[300];
2055.  TCHAR command[400] = TEXT("notepad ");
2056.  STARTUPINFO si = {sizeof(si) };
2057.  PROCESS_INFORMATION pi;
2058.  DWORD dwExitCode;
2059. 
2060.  GetCurrentDirectory(MAX_PATH,lpstrActual);
2061.  lstrcat(lpstrActual,"\ShConfig.ini");
2062.  lstrcat(command, lpstrActual);
2063.  //WinExec( command, SW_SHOWNORMAL);
2064.  BOOL fSucess = CreateProcess(NULL, command, NULL, NULL, 
2065.  FALSE, 0, NULL, NULL, &si, &pi);
2066.  if(fSucess)
2067.  {

2068.  // OnBUTTONSsmCloseCti();
2069.  Sleep(200);
2070. 
2071.  CloseHandle(pi.hThread);
2072.  WaitForSingleObject(pi.hProcess , INFINITE);
2073.  GetExitCodeProcess(pi.hProcess , &dwExitCode);
2074.  CloseHandle(pi.hProcess);
2075.  // OnBUTTONSsmStartCti();
2076.  }
2077.  }
2078. 
2079.  void CTestView::OnOpenShcticonfig() 
2080.  {

2081.  // TODO: Add your command handler code here
2082.  TCHAR lpstrActual[300];
2083.  // TCHAR command[400] = TEXT("notepad ");
2084.  STARTUPINFO si = {sizeof(si) };
2085.  PROCESS_INFORMATION pi;
2086.  DWORD dwExitCode;
2087. 
2088.  GetCurrentDirectory(MAX_PATH,lpstrActual);
2089.  lstrcat(lpstrActual,"\ShCtiConfig.exe");
2090.  // lstrcat(command, lpstrActual);
2091. 
2092.  BOOL fSucess = CreateProcess(NULL, lpstrActual, NULL, NULL, 
2093.  FALSE, 0, NULL, NULL, &si, &pi);
2094.  if(fSucess)
2095.  {

2096.  // OnBUTTONSsmCloseCti();
2097.  Sleep(200);
2098. 
2099.  CloseHandle(pi.hThread);
2100.  WaitForSingleObject(pi.hProcess , INFINITE);
2101.  GetExitCodeProcess(pi.hProcess , &dwExitCode);
2102.  CloseHandle(pi.hProcess);
2103. 
2104.  // OnBUTTONSsmStartCti();
2105.  }
2106.  else
2107.  {

2108.  // MessageBox("在当前目录下没有找到ShCtiConfig.exe程序!", MB_OK);//masked by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.11
2109.  MessageBox(BoxMsg_NoConfigExe, MB_OK);//added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007.1.11
2110.  }
2111.  }
2112. 
2113.  void CTestView::OnVer34() 
2114.  {

2115.  // TODO: Add your command handler code here
2116.  CVer34 dlg;
2117.  dlg.DoModal();
2118.  }
2119. 
2120.  void CTestView::Ontimeflag()
2121.  {

2122.  // TODO: Add your command handler code here
2123.  bTimerOpen = !bTimerOpen;
2124.  m_dlgBase.OnSetTimer(bTimerOpen);
2125.  m_dlgPlay.OnSetTimer(bTimerOpen);
2126.  m_dlgRec.OnSetTimer(bTimerOpen);
2127.  m_dlgOther.OnSetTimer(bTimerOpen);
2128.  m_dlgIP.OnSetTimer(bTimerOpen);
2129. 
2130.  return;
2131.  }
2132. 
2133.  void CTestView::OnUpdateOntimeflag(CCmdUI* pCmdUI) 
2134.  {

2135.  // TODO: Add your command update UI handler code here
2136.  pCmdUI->SetCheck(bTimerOpen);
2137.  }
2138. 
2139.  void CTestView::myShowErrMsg(int ch)
2140.  {

2141.  char szErrMsg[300], szErrCode[20];
2142. 
2143.  wsprintf(szErrCode,"ch=%d ErrorCode=%d",ch,SsmGetLastErrCode());
2144.  SsmGetLastErrMsg(szErrMsg);
2145.  // lstrcat(szErrMsg, szErrCode);
2146. 
2147.  AfxMessageBox(szErrMsg, MB_OK, 0);
2148.  }
2149. 
2150.  void WriteLog(char *pMsg)
2151.  {

2152.  SYSTEMTIME st;
2153.  GetLocalTime(&st);
2154. 
2155.  FILE* pFile = fopen( "T3523.txt", "a+t" );
2156.  if(pFile != NULL) 
2157.  {

2158.  fprintf( pFile,"%04u-%02u-%02u %02u:%02u:%02u %sn",
2159.    st.wYear,
2160.    st.wMonth,
2161.    st.wDay,
2162.    st.wHour,
2163.    st.wMinute,
2164.    st.wSecond,   
2165.    pMsg);
2166.  fclose(pFile);
2167.  }
2168.  }
2169. 
2170.  void CTestView::OnVer353() 
2171.  {

2172.  ver353 dlg;
2173.  dlg.DoModal();
2174.  }
2175. 
2176.  void CTestView::OnOverallEnergyLevel() 
2177.  {

2178.  COverallEnergyLevelDlg dlg;
2179.  dlg.DoModal();
2180.  }
2181. 
2182.  void CTestView::On40exOpenBus() 
2183.  {

2184.  C40ExDlg dlg;
2185.  dlg.nCurCh = CurCh;
2186.  dlg.DoModal();
2187.  }
2188. 
2189.  void CTestView::OnSsmsetwaitdtmfex() 
2190.  {

2191.  // TODO: Add your command handler code here
2192.  CSetWaitDtmf dlg;
2193.  dlg.DoModal();
2194.  }
2195. 
2196.  //+++START+++ added by yxh for SpyTest, 2003.08.22
2197.  void CTestView::OnButtonSpy()
2198.  {

2199.  // TODO: Add your command handler code here
2200.  pDlg->ShowWindow(SW_SHOW);
2201.  return;
2202.  }
2203.  //+++END+++  added by yxh for SpyTest, 2003.08.22
2204. 
2205.  //++++START++++ added by cqb for SHCTI030902 Test
2206.  void CTestView::OnVer404() 
2207.  {

2208.  // TODO: Add your command handler code here
2209.  CVer404 dlg;
2210.  dlg.DoModal();
2211.  }
2212.  //++++END++++
2213. 
2214.  void CTestView::OnVer444x() 
2215.  {

2216.  // TODO: Add your command handler code here
2217.  CVer444x dlg;
2218.  dlg.DoModal();
2219.  }
2220. 
2221.  //++++START++++ added by cqb for 函数返回BUG Test , 2004.9.29
2222.  void CTestView::OnBoardinfo() 
2223.  {

2224.  CBoardInfo bi;
2225.  bi.DoModal();
2226.  }
2227.  //++++START++++ added by cqb for 函数返回BUG Test , 2004.9.29
2228. 
2229.  void CTestView::OnSelchangeTabView(NMHDR* pNMHDR, LRESULT* pResult) 
2230.  {

2231.  // TODO: Add your control notification handler code here
2232.  int nCurSel = m_TabCtrl.GetCurSel();
2233. 
2234.  for(int i=0; i<VIEW_MAX; i++)
2235.  {

2236.  ::ShowWindow(hwndView[i], SW_HIDE);
2237.  }
2238.  ::ShowWindow(hwndView[nCurSel], SW_SHOW);
2239. 
2240.  *pResult = 0;
2241.  }
2242. 
2243.  void CTestView::OnSelectAllch() 
2244.  {

2245.  // TODO: Add your control notification handler code here
2246.  UpdateData(TRUE);
2247.  int nStartCh = GetDlgItemInt(IDC_EDIT_SelectAllChStart, NULL, TRUE);
2248.  int nEndCh   = GetDlgItemInt(IDC_EDIT_SelectAllChEnd,   NULL, TRUE);
2249.  m_dlgBase.OnSetAllChPara(m_SelectAllCh, nStartCh, nEndCh);
2250.  m_dlgPlay.OnSetAllChPara(m_SelectAllCh, nStartCh, nEndCh);
2251.  m_dlgRec.OnSetAllChPara(m_SelectAllCh, nStartCh, nEndCh);
2252.  m_dlgOther.OnSetAllChPara(m_SelectAllCh, nStartCh, nEndCh);
2253.  m_dlgIP.OnSetAllChPara(m_SelectAllCh, nStartCh, nEndCh);
2254.  }
2255. 
2256.  void CTestView::OnButtonSs7() 
2257.  {

2258.  // TODO: Add your command handler code here
2259.  CSs7 Ss7;
2260.  Ss7.DoModal();
2261.  }
2262. 
2263.  void CTestView::OnBUTTONfsk() 
2264.  {

2265.  // TODO: Add your command handler code here
2266.  CFsk myFsk;
2267.  myFsk.DoModal();
2268.  }
2269. 
2270.  void CTestView::OnButtonBus() 
2271.  {

2272.  // TODO: Add your command handler code here
2273.  BusChInfo myBusInfo;
2274.  myBusInfo.DoModal();
2275.  }
2276. 
2277.  void CTestView::OnButtonConf() 
2278.  {

2279.  // TODO: Add your command handler code here
2280.  CConInfo myConf;
2281.  myConf.DoModal();
2282.  }
2283. 
2284.  void CTestView::OnBUTTONSetChkTonePara() 
2285.  {

2286.  // TODO: Add your command handler code here
2287.  CSetChkTonePara mySetChkTonePara;
2288.  mySetChkTonePara.DoModal();
2289.  }
2290. 
2291.  void CTestView::OnBUTTONPcmFunc() 
2292.  {

2293.  // TODO: Add your command handler code here
2294.  CPcmCompatible myPcmCompatible;
2295.  myPcmCompatible.DoModal();
2296.  }
2297. 
2298.  void CTestView::OnBUTTONSS1Base() 
2299.  {

2300.  // TODO: Add your command handler code here
2301.  CSS1base mySS1Op;
2302.  mySS1Op.DoModal();
2303.  }
2304. 
2305.  void CTestView::OnVER458x() 
2306.  {

2307.  // TODO: Add your command handler code here
2308.  CDlgver456x dlg;
2309.  dlg.DoModal();
2310.  }
2311. 
2312.  void CTestView::OnVer4605() 
2313.  {

2314.  // TODO: Add your command handler code here
2315.  CDlgIsupAdv dlg;
2316.  dlg.DoModal();
2317.  }
2318. 
2319.  void CTestView::OnVer4720Shv() 
2320.  {

2321.  // TODO: Add your command handler code here
2322.  CShvDlg dlg;
2323.  dlg.DoModal();
2324.  }
2325. 
2326.  //++++start++++ added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007-1-9
2327.  void CTestView::InitLang()
2328.  {

2329.  if (g_dwLanguageID == LANGUAGE_CHINESE_SIMPLIFIED)
2330.  {

2331.  return;
2332.  }
2333.  else// if (PRIMARYLANGID(g_dwLanguageID) == LANG_ENGLISH)
2334.  {

2335.  //TabCtrl
2336.  TC_ITEM * pTCItem;
2337.  pTCItem = new TC_ITEM;
2338.  pTCItem->mask = TCIF_TEXT;
2339.  pTCItem->pszText = ENG_TESTFORM_TABCTRL_LAB1;
2340.  m_TabCtrl.SetItem(0, pTCItem);
2341.  pTCItem->pszText = ENG_TESTFORM_TABCTRL_LAB2;
2342.  m_TabCtrl.SetItem(1, pTCItem);
2343.  pTCItem->pszText = ENG_TESTFORM_TABCTRL_LAB3;
2344.  m_TabCtrl.SetItem(2, pTCItem);
2345.  pTCItem->pszText = ENG_TESTFORM_TABCTRL_LAB4;
2346.  m_TabCtrl.SetItem(3, pTCItem);
2347.  pTCItem->pszText = ENG_TESTFORM_TABCTRL_LAB5;
2348.  m_TabCtrl.SetItem(4, pTCItem);
2349.  pTCItem->pszText = ENG_TESTFORM_TABCTRL_LAB6;
2350.  m_TabCtrl.SetItem(5, pTCItem);
2351.  delete pTCItem;
2352. 
2353.  //ChList
2354.  LV_COLUMN lvc;
2355.  lvc.mask = LVCF_TEXT;
2356.  lvc.pszText = ENG_TESTFORM_CHLIST_LAB2;
2357.  m_ChList.SetColumn(1, &lvc);
2358.  lvc.pszText = ENG_TESTFORM_CHLIST_LAB3;
2359.  m_ChList.SetColumn(2, &lvc);
2360.  lvc.pszText = ENG_TESTFORM_CHLIST_LAB6;
2361.  m_ChList.SetColumn(5, &lvc);
2362.  lvc.pszText = ENG_TESTFORM_CHLIST_LAB32;
2363.  m_ChList.SetColumn(31, &lvc);
2364.  lvc.pszText = ENG_TESTFORM_CHLIST_LAB33;
2365.  m_ChList.SetColumn(32, &lvc);
2366.  lvc.pszText = ENG_TESTFORM_CHLIST_LAB34;
2367.  m_ChList.SetColumn(33, &lvc);
2368.  lvc.pszText = ENG_TESTFORM_CHLIST_LAB35;
2369.  m_ChList.SetColumn(34, &lvc);
2370.  lvc.pszText = ENG_TESTFORM_CHLIST_LAB36;
2371.  m_ChList.SetColumn(35, &lvc);
2372.  lvc.pszText = ENG_TESTFORM_CHLIST_LAB37;
2373.  m_ChList.SetColumn(36, &lvc);
2374.  lvc.pszText = ENG_TESTFORM_CHLIST_LAB38;
2375.  m_ChList.SetColumn(37, &lvc);
2376.  lvc.pszText = ENG_TESTFORM_CHLIST_LAB39;
2377.  m_ChList.SetColumn(38, &lvc);
2378.  }
2379.  }
2380.  //+++++end+++++ added by jyp for 061228-bug-技术部门-提供TEST程序的中英文合一的版本, 2007-1-9
2381. 
2382.  //+++start+++ add by hunnad for 多路呼叫,2007.10.15
2383.  void CTestView::OnMulticall() 
2384.  {

2385.  // TODO: Add your command handler code here
2386.  CDlgMultiCall dlg;
2387.  dlg.DoModal();
2388. 
2389.  }
2390.  //+++end+++ add by hunnad for 多路呼叫,2007.10.15
2391.  //+++start+++ add by hunnad for 全部挂机,2007.10.15
2392.  void CTestView::OnHangupall() 
2393.  {

2394.  // TODO: Add your command handler code here
2395.  for(int ch = 0; ch < SsmGetMaxCh(); ch++)
2396.  SsmHangup(ch);
2397.  }
2398.  //+++start+++ add by hunnad for 全部挂机,2007.10.15
2399.  //+++start+++ add by hunnad for 全部摘机,2007.10.15
2400.  void CTestView::OnPickupall() 
2401.  {

2402.  // TODO: Add your command handler code here
2403.  for(int ch = 0; ch < SsmGetMaxCh(); ch++)
2404.  {

2405.  int nState = SsmGetChState(ch);
2406.  if(nState == S_CALL_RINGING)
2407.  SsmPickup(ch);
2408.  }
2409.  }
2410.  //+++end+++ add by hunnad for 全部摘机,2007.10.15
2411.