?? xms_confdemo_event.cpp
字號(hào):
AllDeviceRes[s8DspModID].pVoice[i].deviceID = pDev[i];
AllDeviceRes[s8DspModID].pVoice[i].State = VOC_WAITOPEN;
}
}
}
else if ( (AllDeviceRes[s8DspModID].lVocNum > 0) && (s32Num == 0) ) // 刪除該資源
{
// 如果有設(shè)備沒(méi)有關(guān)閉,則等同于關(guān)閉事件
for ( i = 0; i < AllDeviceRes[s8DspModID].lVocNum; i ++ )
{
if ( AllDeviceRes[s8DspModID].pVoice[i].State != VOC_WAITOPEN )
CloseDeviceOK ( &AllDeviceRes[s8DspModID].pVoice[i].deviceID );
}
AllDeviceRes[s8DspModID].lVocNum = 0;
AllDeviceRes[s8DspModID].lVocOpened = 0;
AllDeviceRes[s8DspModID].lVocFreeNum = 0;
delete [] AllDeviceRes[s8DspModID].pVoice;
AllDeviceRes[s8DspModID].pVoice = NULL;
}
}
void AddDeviceRes_Pcm ( DJ_S8 s8DspModID, Acs_Dev_List_Head_t *pAcsDevList )
{
DJ_S32 s32Num;
int i;
char TmpStr[256];
s32Num = pAcsDevList->m_s32DeviceNum;
if ( (AllDeviceRes[s8DspModID].lPcmNum == 0) && (s32Num > 0) ) // 新增加的資源
{
//
AllDeviceRes[s8DspModID].pPcm = new PCM_STRUCT[s32Num];
if( !AllDeviceRes[s8DspModID].pPcm )
{
AllDeviceRes[s8DspModID].lPcmNum = 0;
AllDeviceRes[s8DspModID].lPcmOpened = 0;
// alloc fail, maybe disp this error in your log
sprintf ( TmpStr, "new PCM_STRUCT[%d] fail in AddDeviceRes_Pcm()" );
AddMsg ( TmpStr );
}
else
{
memset ( AllDeviceRes[s8DspModID].pPcm, 0, sizeof(PCM_STRUCT)*s32Num );
AllDeviceRes[s8DspModID].lPcmNum = s32Num;
AllDeviceRes[s8DspModID].lPcmOpened = 0;
DeviceID_t *pDev;
pDev = (DeviceID_t *)((BYTE *)pAcsDevList + sizeof(Acs_Dev_List_Head_t));
for ( i = 0; i < s32Num; i ++ )
{
AllDeviceRes[s8DspModID].pPcm[i].deviceID = pDev[i];
AllDeviceRes[s8DspModID].pPcm[i].bOpenFlag = false;
}
}
}
else if ( (AllDeviceRes[s8DspModID].lPcmNum > 0) && (s32Num == 0) ) // 刪除該資源
{
// 如果有設(shè)備沒(méi)有關(guān)閉,則等同于關(guān)閉事件
for ( i = 0; i < AllDeviceRes[s8DspModID].lPcmNum; i ++ )
{
if ( AllDeviceRes[s8DspModID].pPcm[i].bOpenFlag != false )
CloseDeviceOK ( &AllDeviceRes[s8DspModID].pPcm[i].deviceID );
}
AllDeviceRes[s8DspModID].lPcmNum = 0;
AllDeviceRes[s8DspModID].lPcmOpened = 0;
delete [] AllDeviceRes[s8DspModID].pPcm;
AllDeviceRes[s8DspModID].pPcm = NULL;
}
}
void AddDeviceRes_Conf ( DJ_S8 s8DspModID, Acs_Dev_List_Head_t *pAcsDevList )
{
DJ_S32 s32Num;
int i;
char TmpStr[256];
s32Num = pAcsDevList->m_s32DeviceNum;
if ( (AllDeviceRes[s8DspModID].lConfNum == 0) && (s32Num > 0) ) // 新增加的資源
{
AllDeviceRes[s8DspModID].pConf = new CONF_STRUCT[s32Num];
if( !AllDeviceRes[s8DspModID].pConf )
{
AllDeviceRes[s8DspModID].lConfNum = 0;
AllDeviceRes[s8DspModID].lConfOpened = 0;
AllDeviceRes[s8DspModID].lConfFreeNum = 0;
// alloc fail, maybe disp this error in your log
sprintf ( TmpStr, "new CONF_STRUCT[%d] fail in AddDeviceRes_Conf()" );
AddMsg ( TmpStr );
}
else
{
AllDeviceRes[s8DspModID].lConfNum = s32Num;
AllDeviceRes[s8DspModID].lConfOpened = 0;
AllDeviceRes[s8DspModID].lConfFreeNum = 0;
memset ( AllDeviceRes[s8DspModID].pConf, 0, sizeof(CONF_STRUCT)*s32Num );
DeviceID_t *pDev;
pDev = (DeviceID_t *)((BYTE *)pAcsDevList + sizeof(Acs_Dev_List_Head_t));
for ( i = 0; i < s32Num; i ++ )
{
AllDeviceRes[s8DspModID].pConf[i].deviceID = pDev[i];
AllDeviceRes[s8DspModID].pConf[i].State = CONF_WAITOPEN;
}
}
}
else if ( (AllDeviceRes[s8DspModID].lConfNum > 0) && (s32Num == 0) ) // 刪除該資源
{
// 如果有設(shè)備沒(méi)有關(guān)閉,則等同于關(guān)閉事件
for ( i = 0; i < AllDeviceRes[s8DspModID].lConfNum; i ++ )
{
if ( AllDeviceRes[s8DspModID].pConf[i].State != CONF_WAITOPEN )
CloseDeviceOK ( &AllDeviceRes[s8DspModID].pConf[i].deviceID );
}
AllDeviceRes[s8DspModID].lConfNum = 0;
AllDeviceRes[s8DspModID].lConfOpened = 0;
AllDeviceRes[s8DspModID].lConfFreeNum = 0;
delete [] AllDeviceRes[s8DspModID].pConf;
AllDeviceRes[s8DspModID].pConf = NULL;
}
}
void AddDeviceRes_Board ( DJ_S8 s8DspModID, Acs_Dev_List_Head_t *pAcsDevList )
{
DJ_S32 s32Num;
s32Num = pAcsDevList->m_s32DeviceNum;
if ( (AllDeviceRes[s8DspModID].lFlag == 0) && (s32Num > 0) ) // 新增加的資源
{
DeviceID_t *pDev;
pDev = (DeviceID_t *)((BYTE *)pAcsDevList + sizeof(Acs_Dev_List_Head_t));
AllDeviceRes[s8DspModID].deviceID = pDev[0];
AllDeviceRes[s8DspModID].bOpenFlag = false;
AllDeviceRes[s8DspModID].bErrFlag = false;
AllDeviceRes[s8DspModID].RemoveState = DSP_REMOVE_STATE_NONE;
}
else if ( (AllDeviceRes[s8DspModID].lFlag == 1) && (s32Num == 0) ) // 刪除該資源
{
// 如果有設(shè)備沒(méi)有關(guān)閉,則等同于關(guān)閉事件
if ( AllDeviceRes[s8DspModID].bOpenFlag != false )
CloseDeviceOK ( &AllDeviceRes[s8DspModID].deviceID );
memset ( &AllDeviceRes[s8DspModID].deviceID, 0, sizeof(DeviceID_t) );
}
}
void AddDeviceRes ( Acs_Dev_List_Head_t *pAcsDevList )
{
DJ_S32 s32Type, s32Num;
DJ_S8 s8DspModID;
s32Type = pAcsDevList->m_s32DeviceMain;
s32Num = pAcsDevList->m_s32DeviceNum;
s8DspModID = (DJ_S8) pAcsDevList->m_s32ModuleID;
if ( (s8DspModID < 0) || (s8DspModID >= MAX_DSP_MODULE_NUMBER_OF_XMS) )
return; // invalid ModuleID
switch ( s32Type )
{
case XMS_DEVMAIN_VOICE:
AddDeviceRes_Voice ( s8DspModID, pAcsDevList );
break;
case XMS_DEVMAIN_FAX: break;
case XMS_DEVMAIN_DIGITAL_PORT:
AddDeviceRes_Pcm ( s8DspModID, pAcsDevList );
break;
case XMS_DEVMAIN_INTERFACE_CH:
AddDeviceRes_Trunk ( s8DspModID, pAcsDevList );
break;
case XMS_DEVMAIN_DSS1_LINK: break;
case XMS_DEVMAIN_SS7_LINK: break;
case XMS_DEVMAIN_BOARD:
AddDeviceRes_Board ( s8DspModID, pAcsDevList );
break;
case XMS_DEVMAIN_CTBUS_TS: break;
case XMS_DEVMAIN_VOIP: break;
case XMS_DEVMAIN_CONFERENCE:
AddDeviceRes_Conf ( s8DspModID, pAcsDevList );
break;
case XMS_DEVMAIN_VIDEO: break;
break;
}
}
// --------------------------------------------------------------------------
DJ_Void EvtHandler(DJ_U32 esrParam)
{
Acs_Evt_t * pAcsEvt = NULL;
Acs_Dev_List_Head_t * pAcsDevList = NULL;
pAcsEvt = (Acs_Evt_t *) esrParam;
DispEventInfo ( pAcsEvt );
switch ( pAcsEvt->m_s32EventType )
{
case XMS_EVT_QUERY_DEVICE:
if ( ( cfg_iPartWork == 0 ) || (pAcsEvt->m_DeviceID.m_s8ModuleID == cfg_iPartWorkModuleID) )
{
pAcsDevList = ( Acs_Dev_List_Head_t *) FetchEventData(pAcsEvt);
//收到設(shè)備變化的事件,增加/刪除 該設(shè)備資源
AddDeviceRes ( pAcsDevList );
}
break;
case XMS_EVT_QUERY_ONE_DSP_END:
case XMS_EVT_QUERY_REMOVE_ONE_DSP_END:
if ( ( cfg_iPartWork == 0 ) || (pAcsEvt->m_DeviceID.m_s8ModuleID == cfg_iPartWorkModuleID) )
{
if ( pAcsEvt->m_s32EventType == XMS_EVT_QUERY_ONE_DSP_END )
{
AllDeviceRes[pAcsEvt->m_DeviceID.m_s8ModuleID].lFlag = 1; // 該DSP可以用了
OpenAllDevice_Dsp ( pAcsEvt->m_DeviceID.m_s8ModuleID );
}
else
{
AllDeviceRes[pAcsEvt->m_DeviceID.m_s8ModuleID].lFlag = 0; // 該DSP已經(jīng)Remove完畢
}
RefreshMapTable ( );
ReDrawAll ();
}
break;
case XMS_EVT_QUERY_DEVICE_END: // 獲取設(shè)備列表結(jié)束
break;
case XMS_EVT_OPEN_DEVICE:
OpenDeviceOK ( &pAcsEvt->m_DeviceID );
break;
case XMS_EVT_CLOSE_DEVICE: // 在刪除設(shè)備之前,先發(fā)給應(yīng)用程序CloseDevice事件;調(diào)用函數(shù)XMS_ctsCloseDevicey也會(huì)產(chǎn)生本事件
CloseDeviceOK ( &pAcsEvt->m_DeviceID );
break;
case XMS_EVT_DEVICESTATE:
HandleDevState ( pAcsEvt );
break;
case XMS_EVT_UNIFAILURE:
// must handle this event in your real System
break;
default:
if ( pAcsEvt->m_DeviceID.m_s16DeviceMain == XMS_DEVMAIN_INTERFACE_CH )
{
TrunkWork ( &M_OneTrunk(pAcsEvt->m_DeviceID), pAcsEvt );
}
else if ( pAcsEvt->m_DeviceID.m_s16DeviceMain == XMS_DEVMAIN_VOICE )
{
DeviceID_t *pDevID;
pDevID = &M_OneVoice(pAcsEvt->m_DeviceID).UsedDevID;
if ( pDevID->m_s16DeviceMain == XMS_DEVMAIN_INTERFACE_CH )
{
TrunkWork ( &M_OneTrunk(*pDevID), pAcsEvt );
}
}
else if ( pAcsEvt->m_DeviceID.m_s16DeviceMain == XMS_DEVMAIN_CONFERENCE )
{
DeviceID_t *pDevID;
pDevID = &M_OneConf(pAcsEvt->m_DeviceID).UsedDevID;
if ( pDevID->m_s16DeviceMain == XMS_DEVMAIN_INTERFACE_CH )
{
TrunkWork ( &M_OneTrunk(*pDevID), pAcsEvt );
}
}
break;
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -