📄 xms_demo_sub.cpp
字号:
else
pdlg->m_ListPcm.SetItemText ( iDispRow, 3, "O" );
if ( AlarmVal & XMS_E1PORT_MASK_FAS_ALARM )
pdlg->m_ListPcm.SetItemText ( iDispRow, 4, " X" );
else
pdlg->m_ListPcm.SetItemText ( iDispRow, 4, "O" );
if ( AlarmVal & XMS_E1PORT_MASK_REMOTE_ALARM )
pdlg->m_ListPcm.SetItemText ( iDispRow, 5, " X" );
else
pdlg->m_ListPcm.SetItemText ( iDispRow, 5, "O" );
}
// -------------------------------------------------------------------------------------------------
void InitListCount(void)
{
LV_COLUMN lvc;
DWORD dwExStyle;
dwExStyle = LVS_EX_FULLROWSELECT | /*LVS_EX_GRIDLINES | LVS_EX_SUBITEMIMAGES |*/
LVS_EX_HEADERDRAGDROP;// | LVS_EX_TRACKSELECT;
pdlg->m_ListCount.SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LPARAM(dwExStyle));
lvc.mask = LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvc.iSubItem = 0;
lvc.pszText = "ID" ;
lvc.cx = 40;
pdlg->m_ListCount.InsertColumn ( 0, &lvc );
lvc.iSubItem = 1;
lvc.pszText = "ModID" ;
lvc.cx = 45;
pdlg->m_ListCount.InsertColumn ( 1, &lvc );
lvc.iSubItem = 2;
lvc.pszText = "Pcm/Open" ;
lvc.cx = 70;
pdlg->m_ListCount.InsertColumn ( 2, &lvc );
lvc.iSubItem = 3;
lvc.pszText = "Trk/Open" ;
lvc.cx = 70;
pdlg->m_ListCount.InsertColumn ( 3, &lvc );
lvc.iSubItem = 4;
lvc.pszText = "Voc/Open" ;
lvc.cx = 70;
pdlg->m_ListCount.InsertColumn ( 4, &lvc );
lvc.iSubItem = 5;
lvc.pszText = "VocFree" ;
lvc.cx = 55;
pdlg->m_ListCount.InsertColumn ( 5, &lvc );
lvc.iSubItem = 6;
lvc.pszText = "ErrFlag" ;
lvc.cx = 60;
pdlg->m_ListCount.InsertColumn ( 6, &lvc );
lvc.iSubItem = 7;
lvc.pszText = "RemoveState" ;
lvc.cx = 80;
pdlg->m_ListCount.InsertColumn ( 7, &lvc );
}
void DrawCount_Pcm ( DJ_S8 s8ModID )
{
char TmpStr[256];
int iDispRow;
iDispRow = AllDeviceRes[s8ModID].iSeqID + 1;
sprintf ( TmpStr, "%3d /%3d", AllDeviceRes[s8ModID].lPcmNum, AllDeviceRes[s8ModID].lPcmOpened );
pdlg->m_ListCount.SetItemText ( iDispRow, 2, TmpStr );
// total
iDispRow = 0;
sprintf ( TmpStr, "%3d /%3d", g_iTotalPcm, g_iTotalPcmOpened );
pdlg->m_ListCount.SetItemText ( iDispRow, 2, TmpStr );
}
void DrawCount_Trunk ( DJ_S8 s8ModID )
{
char TmpStr[256];
int iDispRow;
iDispRow = AllDeviceRes[s8ModID].iSeqID + 1;
sprintf ( TmpStr, "%3d/%3d", AllDeviceRes[s8ModID].lTrunkNum, AllDeviceRes[s8ModID].lTrunkOpened );
pdlg->m_ListCount.SetItemText ( iDispRow, 3, TmpStr );
// total
iDispRow = 0;
sprintf ( TmpStr, "%3d/%3d", g_iTotalTrunk, g_iTotalTrunkOpened );
pdlg->m_ListCount.SetItemText ( iDispRow, 3, TmpStr );
}
void DrawCount_Voc ( DJ_S8 s8ModID )
{
char TmpStr[256];
int iDispRow;
iDispRow = AllDeviceRes[s8ModID].iSeqID + 1;
sprintf ( TmpStr, "%3d/%3d", AllDeviceRes[s8ModID].lVocNum, AllDeviceRes[s8ModID].lVocOpened );
pdlg->m_ListCount.SetItemText ( iDispRow, 4, TmpStr );
sprintf ( TmpStr, "%3d", AllDeviceRes[s8ModID].lVocFreeNum );
pdlg->m_ListCount.SetItemText ( iDispRow, 5, TmpStr );
// total
iDispRow = 0;
sprintf ( TmpStr, "%3d/%3d", g_iTotalVoice, g_iTotalVoiceOpened );
pdlg->m_ListCount.SetItemText ( iDispRow, 4, TmpStr );
sprintf ( TmpStr, "%3d", g_iTotalVoiceFree );
pdlg->m_ListCount.SetItemText ( iDispRow, 5, TmpStr );
}
void DrawCount_ErrFlag ( DJ_S8 s8ModID )
{
char TmpStr[256];
int iDispRow;
iDispRow = AllDeviceRes[s8ModID].iSeqID + 1;
if ( AllDeviceRes[s8ModID].bErrFlag )
sprintf ( TmpStr, "T" );
else
sprintf ( TmpStr, "" );
pdlg->m_ListCount.SetItemText ( iDispRow, 6, TmpStr );
}
void DrawCount_RemoveState ( DJ_S8 s8ModID )
{
char TmpStr[256];
int iDispRow;
iDispRow = AllDeviceRes[s8ModID].iSeqID + 1;
switch ( AllDeviceRes[s8ModID].RemoveState )
{
case DSP_REMOVE_STATE_NONE:
sprintf ( TmpStr, "" );
break;
case DSP_REMOVE_STATE_START:
sprintf ( TmpStr, "Start" );
break;
case DSP_REMOVE_STATE_READY:
sprintf ( TmpStr, "Ready" );
break;
}
pdlg->m_ListCount.SetItemText ( iDispRow, 7, TmpStr );
}
// -------------------------------------------------------------------------------------------------
void ReDrawAll (void)
{
char TmpStr[256];
int i, iDispRow;
TRUNK_STRUCT *pOneTrunk;
// m_ListMain
pdlg->m_ListMain.DeleteAllItems ();
for ( i = 0; i < g_iTotalTrunk; i ++ )
{
iDispRow = CalDispRow ( i );
if ( iDispRow < 0 ) continue;
// 固定不变的内容
sprintf ( TmpStr, "%3d", iDispRow );
pdlg->m_ListMain.InsertItem ( iDispRow, TmpStr );
sprintf ( TmpStr, "%d,%d", MapTable_Trunk[i].m_s8ModuleID, MapTable_Trunk[i].m_s16ChannelID );
pdlg->m_ListMain.SetItemText ( iDispRow, 1, TmpStr );
pOneTrunk = &M_OneTrunk(MapTable_Trunk[i]);
pdlg->m_ListMain.SetItemText ( iDispRow, 2, GetString_DeviceSub( pOneTrunk->deviceID.m_s16DeviceSub) );
// 可能改变的内容
DrawMain_LineState ( pOneTrunk );
DrawMain_State ( pOneTrunk );
DrawMain_CallInfo ( pOneTrunk );
DrawMain_DTMF ( pOneTrunk );
}
// m_ListPcm
pdlg->m_ListPcm.DeleteAllItems ();
for ( i = 0; i < g_iTotalPcm; i ++ )
{
sprintf ( TmpStr, "%3d", i );
pdlg->m_ListPcm.InsertItem ( i, TmpStr );
// 可能改变的内容
DrawPcm_TypeAndAlarm ( &M_OnePcm(MapTable_Pcm[i]) );
}
// m_ListCount
pdlg->m_ListCount.DeleteAllItems ();
// 先添加行
pdlg->m_ListCount.InsertItem ( 0, "Total" );
for ( i = 0; i < g_iTotalModule; i ++ )
{
sprintf ( TmpStr, "%3d", i );
pdlg->m_ListCount.InsertItem ( i+1, TmpStr );
sprintf ( TmpStr, "%3d", MapTable_Module[i] );
pdlg->m_ListCount.SetItemText ( i+1, 1, TmpStr );
}
// 再显示内容
for ( i = 0; i < g_iTotalModule; i ++ )
{
DrawCount_Pcm ( MapTable_Module[i] );
DrawCount_Trunk ( MapTable_Module[i] );
DrawCount_Voc ( MapTable_Module[i] );
DrawCount_ErrFlag ( MapTable_Module[i] );
DrawCount_RemoveState ( MapTable_Module[i] );
}
}
// --------------------------------------------------------------------------------
bool InitSystem()
{
RetCode_t r;
char MsgStr[160];
pdlg = (CXMS_DemoDlg *)theApp.m_pMainWnd;
// Read From "XMS_Demo.INI"
ReadFromConfig();
// Special code for CAS(SS1)
// Read From "C:\\DJKeygoe\\Samples\\CAS_Common_Code\\SaXMS_CAS_Cfg.INI"
if ( CAS_Common_Cfg_ReadCfg ( &g_Param_CAS ) != 0 )
{
sprintf ( MsgStr, "CAS_Common_Cfg_ReadCfg \"C:\\DJKeygoe\\Samples\\CAS_Common_Code\\XMS_CAS_Cfg.INI\" Error!" );
MessageBox(NULL, MsgStr, "Init System", MB_OK ) ;
}
// end of code for CAS(SS1)
// Init m_ListMain
InitListMain();
// Init m_ListPcm
InitListPcm();
// Init m_ListMsg
InitListMsg();
// Init m_ListCount
InitListCount();
// Init Conifg's text box
InitTextBox();
// now open ACS Server
/*调用acsOpenStream 建立与ACS服务器的连接*/
r = XMS_acsOpenStream ( &g_acsHandle,
&cfg_ServerID,
g_u8UnitID, // App Unit ID
32, // sendQSize, in K Bytes
32, // recvQSize, in K Bytes
cfg_s32DebugOn, // Debug On/Off
NULL);
if ( r < 0 )
{
sprintf ( MsgStr, "XMS_acsOpenStream(IP Addr : %s, port : %d) FAIL. ret = %d",
cfg_ServerID.m_s8ServerIp, cfg_ServerID.m_u32ServerPort, r );
MessageBox(NULL, MsgStr, "Init System", MB_OK ) ;
AddMsg ( MsgStr );
return false;
}
else
{
sprintf ( MsgStr, "XMS_acsOpenStream(%s,%d) OK!", cfg_ServerID.m_s8ServerIp, cfg_ServerID.m_u32ServerPort );
AddMsg ( MsgStr );
}
r = XMS_acsSetESR ( g_acsHandle, (EsrFunc)EvtHandler, 0, 1 );
if ( r < 0 )
{
sprintf ( MsgStr, "XMS_acsSetESR() FAIL! ret = %d", r );
AddMsg ( MsgStr );
return false;
}
else
{
sprintf ( MsgStr, "XMS_acsSetESR() OK!" );
AddMsg ( MsgStr );
}
InitAllDeviceRes ();
XMS_acsGetDeviceList ( g_acsHandle, NULL );
return true;
}
void ExitSystem()
{
RetCode_t r;
int i;
// close all device
for ( i = 0; i < g_iTotalModule; i ++ )
{
CloseAllDevice_Dsp ( MapTable_Module[i] );
}
r = XMS_acsCloseStream ( g_acsHandle, NULL );
FreeAllDeviceRes ();
// save to "XMS_Demo.INI"
FetchFromText();
WriteToConfig();
}
// --------------------------------------------------------------------------------
void OpenTrunkDevice ( TRUNK_STRUCT *pOneTrunk )
{
RetCode_t r;
if ( pOneTrunk->State == TRK_WAITOPEN ) // 还没有Open
{
r = XMS_ctsOpenDevice ( g_acsHandle, &pOneTrunk->deviceID, NULL );
if ( r < 0 )
{
AddMsg ( "XMS_ctsOpenDevice Fail in OpenTrunkDevice()!" );
}
}
}
void OpenVoiceDevice ( VOICE_STRUCT *pOneVoice )
{
RetCode_t r;
if ( pOneVoice->State == VOC_WAITOPEN ) // 还没有Open
{
r = XMS_ctsOpenDevice ( g_acsHandle, &pOneVoice->deviceID, NULL );
if ( r < 0 )
{
AddMsg ( "XMS_ctsOpenDevice Fail in OpenVoiceDevice()!" );
}
}
}
void OpenPcmDevice ( PCM_STRUCT *pOnePcm )
{
RetCode_t r;
if ( pOnePcm->bOpenFlag == false ) // 还没有Open
{
r = XMS_ctsOpenDevice ( g_acsHandle, &pOnePcm->deviceID, NULL );
if ( r < 0 )
{
AddMsg ( "XMS_ctsOpenDevice Fail in OpenPcmDevice()!" );
}
}
}
void OpenBoardDevice ( DJ_S8 s8DspModID )
{
RetCode_t r;
if ( AllDeviceRes[s8DspModID].bOpenFlag == false ) // 还没有Open
{
r = XMS_ctsOpenDevice ( g_acsHandle, &AllDeviceRes[s8DspModID].deviceID, NULL );
if ( r < 0 )
{
AddMsg ( "XMS_ctsOpenDevice Fail in OpenBoardDevice()!" );
}
}
}
void OpenAllDevice_Dsp ( DJ_S8 s8DspModID )
{
int i;
AllDeviceRes[s8DspModID].bErrFlag = false;
DrawCount_ErrFlag (s8DspModID);
AllDeviceRes[s8DspModID].RemoveState = DSP_REMOVE_STATE_NONE;
DrawCount_RemoveState (s8DspModID);
// Open Board
OpenBoardDevice ( s8DspModID );
// pVoice
for ( i = 0; i < AllDeviceRes[s8DspModID].lVocNum; i++ )
{
OpenVoiceDevice ( &AllDeviceRes[s8DspModID].pVoice[i] );
}
// pPcm
for ( i = 0; i < AllDeviceRes[s8DspModID].lPcmNum; i++ )
{
OpenPcmDevice ( &AllDeviceRes[s8DspModID].pPcm[i] );
}
// pTrunk
for ( i = 0; i < AllDeviceRes[s8DspModID].lTrunkNum; i++ )
{
OpenTrunkDevice ( &AllDeviceRes[s8DspModID].pTrunk[i] );
}
}
void ReOpen_AllDevice (void)
{
int i;
for ( i = 0; i < g_iTotalModule; i ++ )
{
OpenAllDevice_Dsp ( MapTable_Module[i] );
}
}
void OpenDeviceOK ( DeviceID_t *pDevice )
{
TRUNK_STRUCT *pOneTrunk;
if ( pDevice->m_s16DeviceMain == XMS_DEVMAIN_BOARD )
{
AllDeviceRes[pDevice->m_s8ModuleID].deviceID.m_CallID = pDevice->m_CallID; // this line is very important, must before all operation
AllDeviceRes[pDevice->m_s8ModuleID].bOpenFlag = true;
}
if ( pDevice->m_s16DeviceMain == XMS_DEVMAIN_INTERFACE_CH )
{
pOneTrunk = &M_OneTrunk(*pDevice);
pOneTrunk->deviceID.m_CallID = pDevice->m_CallID; // this line is very important, must before all operation
// init this Device: Trunk
InitTrunkChannel ( pOneTrunk );
XMS_ctsResetDevice ( g_acsHandle, pDevice, NULL );
XMS_ctsGetDevState ( g_acsHandle, pDevice, NULL );
// modify the count
g_iTotalTrunkOpened ++;
AllDeviceRes[pDevice->m_s8ModuleID].lTrunkOpened ++;
DrawCount_Trunk ( pDevice->m_s8ModuleID );
if ( pOneTrunk->deviceID.m_s16DeviceSub == XMS_DEVSUB_ANALOG_TRUNK )
{
// Set AnalogTrunk
void* p = NULL;
DeviceID_t FreeVocDeviceID;
CmdParamData_AnalogTrunk_t cmdAnalogTrunk;
DJ_U16 u16ParamType = ANALOGTRUNK_PARAM_UNIPARAM ;
DJ_U16 u16ParamSize = sizeof(CmdParamData_AnalogTrunk_t);
memset(&cmdAnalogTrunk,0,sizeof(cmdAnalogTrunk));
cmdAnalogTrunk.m_u8CallerIdOption = XMS_ANALOG_TRUNK_CALLERID_FSK;;
cmdAnalogTrunk.m_u8CallInRingCount = 3;
//cmdAnalogTrunk.m_u16Rfu1 = ;
cmdAnalogTrunk.m_u8DialtoneDetect = XMS_ANALOG_TRUNK_DIALTONE_DETECT;
cmdAnalogTrunk.m_u8CallOutMethod = XMS_ANALOG_TRUNK_CALLOUT_NORMAL_PROGRESS; //XMS_ANALOG_TRUNK_CALLOUT_POLARITY_REVERSE;
//cmdAnalogTrunk.m_u16Rfu2 = ;
p = (void*)&cmdAnalogTrunk;
RetCode_t r ;
if ( SearchOneFreeVoice ( pOneTrunk, &FreeVocDeviceID ) >= 0 )
{
cmdAnalogTrunk.m_VocDevID = FreeVocDeviceID;
//指定绑定关系
pOneTrunk->VocDevID = FreeVocDeviceID;
M_OneVoice(FreeVocDeviceID).UsedDevID = pOneTrunk->deviceID;
DrawMain_VocInfo ( pOneTrunk );
r = XMS_ctsSetParam( g_acsHandle, & pOneTrunk->deviceID, u16ParamType, u16ParamSize, (DJ_Void *)p );
char szbuffer[1024];
memset(szbuffer,0,sizeof(szbuffer));
sprintf(szbuffer,"Set AnalogTrunk ret = %d\n",r);
AddMsg ( szbuffer );
}
}
}
if ( pDevice->m_s16DeviceMain == XMS_DEVMAIN_VOICE )
{
M_OneVoice(*pDevice).deviceID.m_CallID = pDevice->m_CallID; // this is very important
// init this Device: Voice
Change_Voc_State ( &M_OneVoice(*pDevice), VOC_FREE);
XMS_ctsResetDevice ( g_acsHandle, pDevice, NULL );
XMS_ctsGetDevState ( g_acsHandle, pDevice, NULL );
// Build Index
if ( g_iTotalVoiceOpened == 0 )
{
My_BuildIndex ( pDevice );
}
// modify the count
g_iTotalVoiceOpened ++;
g_iTotalVoiceFree ++;
AllDeviceRes[pDevice->m_s8ModuleID].lVocOpened ++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -