📄 xms_demo_sub.cpp
字号:
AllDeviceRes[pDevice->m_s8ModuleID].lVocFreeNum ++;
DrawCount_Voc ( pDevice->m_s8ModuleID );
}
if ( pDevice->m_s16DeviceMain == XMS_DEVMAIN_DIGITAL_PORT )
{
M_OnePcm(*pDevice).deviceID.m_CallID = pDevice->m_CallID; // this is very important
M_OnePcm(*pDevice).bOpenFlag = true;
// init the Device: Pcm
XMS_ctsResetDevice ( g_acsHandle, pDevice, NULL );
XMS_ctsGetDevState ( g_acsHandle, pDevice, NULL );
DrawPcm_TypeAndAlarm ( &M_OnePcm(*pDevice) );
// moidfy the count
g_iTotalPcmOpened ++;
AllDeviceRes[pDevice->m_s8ModuleID].lPcmOpened ++;
DrawCount_Pcm ( pDevice->m_s8ModuleID );
}
}
// --------------------------------------------------------------------------------
void CloseDeviceOK ( DeviceID_t *pDevice )
{
TRUNK_STRUCT *pOneTrunk;
AllDeviceRes[pDevice->m_s8ModuleID].bErrFlag = true;
DrawCount_ErrFlag (pDevice->m_s8ModuleID);
if ( pDevice->m_s16DeviceMain == XMS_DEVMAIN_BOARD )
{
AllDeviceRes[pDevice->m_s8ModuleID].bOpenFlag = false;
}
if ( pDevice->m_s16DeviceMain == XMS_DEVMAIN_INTERFACE_CH )
{
pOneTrunk = &M_OneTrunk(*pDevice);
Change_State ( pOneTrunk, TRK_WAITOPEN );
// modify the count
g_iTotalTrunkOpened --;
AllDeviceRes[pDevice->m_s8ModuleID].lTrunkOpened --;
DrawCount_Trunk ( pDevice->m_s8ModuleID );
}
if ( pDevice->m_s16DeviceMain == XMS_DEVMAIN_VOICE )
{
// init this Device: Voice
Change_Voc_State ( &M_OneVoice(*pDevice), VOC_WAITOPEN);
// modify the count
g_iTotalVoiceOpened --;
g_iTotalVoiceFree --;
AllDeviceRes[pDevice->m_s8ModuleID].lVocOpened --;
AllDeviceRes[pDevice->m_s8ModuleID].lVocFreeNum --;
DrawCount_Voc ( pDevice->m_s8ModuleID );
}
if ( pDevice->m_s16DeviceMain == XMS_DEVMAIN_DIGITAL_PORT )
{
M_OnePcm(*pDevice).bOpenFlag = false;
// moidfy the count
g_iTotalPcmOpened --;
AllDeviceRes[pDevice->m_s8ModuleID].lPcmOpened --;
DrawCount_Pcm ( pDevice->m_s8ModuleID );
}
}
// --------------------------------------------------------------------------------
void CloseTrunkDevice ( TRUNK_STRUCT *pOneTrunk )
{
RetCode_t r;
pOneTrunk->State= TRK_WAITOPEN;
r = XMS_ctsCloseDevice ( g_acsHandle, &pOneTrunk->deviceID, NULL );
if ( r < 0 )
{
AddMsg ( "XMS_ctsCloseDevice Fail in CloseTrunkDevice()!" );
}
}
void CloseVoiceDevice ( VOICE_STRUCT *pOneVoice )
{
RetCode_t r;
r = XMS_ctsCloseDevice ( g_acsHandle, &pOneVoice->deviceID, NULL );
if ( r < 0 )
{
AddMsg ( "XMS_ctsCloseDevice Fail in CloseVoiceDevice()!" );
}
}
void ClosePcmDevice ( PCM_STRUCT *pOnePcm )
{
RetCode_t r;
r = XMS_ctsCloseDevice ( g_acsHandle, &pOnePcm->deviceID, NULL );
if ( r < 0 )
{
AddMsg ( "XMS_ctsCloseDevice Fail in ClosePcmDevice()!" );
}
}
void CloseBoardDevice ( DeviceID_t *pBoardDevID )
{
RetCode_t r;
r = XMS_ctsCloseDevice ( g_acsHandle, pBoardDevID, NULL );
if ( r < 0 )
{
AddMsg ( "XMS_ctsCloseDevice Fail in CloseBoardDevice()!" );
}
}
void CloseAllDevice_Dsp ( DJ_S8 s8DspModID )
{
int i;
// close Board
CloseBoardDevice ( &AllDeviceRes[s8DspModID].deviceID );
// pTrunk
for ( i = 0; i < AllDeviceRes[s8DspModID].lTrunkNum; i++ )
{
CloseTrunkDevice ( &AllDeviceRes[s8DspModID].pTrunk[i] );
}
// pVoice
for ( i = 0; i < AllDeviceRes[s8DspModID].lVocNum; i++ )
{
CloseVoiceDevice ( &AllDeviceRes[s8DspModID].pVoice[i] );
}
// pPcm
for ( i = 0; i < AllDeviceRes[s8DspModID].lPcmNum; i++ )
{
ClosePcmDevice ( &AllDeviceRes[s8DspModID].pPcm[i] );
}
}
// -------------------------------------------------------------------------------------------------
void HandleDevState ( Acs_Evt_t *pAcsEvt )
{
TRUNK_STRUCT *pOneTrunk;
PCM_STRUCT *pOnePcm;
Acs_GeneralProc_Data *pGeneralData = NULL;
pGeneralData = (Acs_GeneralProc_Data *)FetchEventData(pAcsEvt);
if ( pAcsEvt->m_DeviceID.m_s16DeviceMain == XMS_DEVMAIN_INTERFACE_CH )
{
pOneTrunk = &M_OneTrunk(pAcsEvt->m_DeviceID);
pOneTrunk->iLineState = pGeneralData->m_s32DeviceState;
DrawMain_LineState( pOneTrunk );
}
if ( pAcsEvt->m_DeviceID.m_s16DeviceMain == XMS_DEVMAIN_DIGITAL_PORT )
{
pOnePcm = &M_OnePcm(pAcsEvt->m_DeviceID);
pOnePcm->u8E1Type = (pGeneralData->m_s32DeviceState >> 16) & 0xFF;
pOnePcm->s32AlarmVal = (pGeneralData->m_s32DeviceState & 0xFFFF);
DrawPcm_TypeAndAlarm ( pOnePcm );
}
}
// -------------------------------------------------------------------------------------------------
void CheckRemoveReady ( DJ_S8 s8DspModID )
{
int i;
// check device : INTERFACE_CH
for ( i = 0; i < AllDeviceRes[s8DspModID].lTrunkNum; i ++ )
{
if ( (AllDeviceRes[s8DspModID].pTrunk[i].State != TRK_WAITOPEN)
&& (AllDeviceRes[s8DspModID].pTrunk[i].State != TRK_WAIT_REMOVE) )
{
return;
}
}
// check device : VOICE
for ( i = 0; i < AllDeviceRes[s8DspModID].lVocNum; i ++ )
{
if ( (AllDeviceRes[s8DspModID].pVoice[i].State != VOC_WAITOPEN)
&& (AllDeviceRes[s8DspModID].pVoice[i].State != VOC_WAIT_REMOVE) )
{
return;
}
}
// all device in this DSP is ready for remove
AllDeviceRes[s8DspModID].RemoveState = DSP_REMOVE_STATE_READY;
DrawCount_RemoveState ( s8DspModID );
}
void Remove_OneDsp(void)
{
POSITION pos;
int index, i;
DJ_S8 s8DspModID;
pos = pdlg->m_ListCount.GetFirstSelectedItemPosition();
index = pdlg->m_ListCount.GetNextSelectedItem ( pos);
if ( ( index <= 0 ) || ( index > g_iTotalModule ) )
{
AfxMessageBox ( "Please select a valid DSP module in the upper list!" );
return;
}
s8DspModID = MapTable_Module[index-1]; // -1 是因为第1行是total
AllDeviceRes[s8DspModID].RemoveState = DSP_REMOVE_STATE_START;
DrawCount_RemoveState ( s8DspModID );
// handle device : INTERFACE_CH
for ( i = 0; i < AllDeviceRes[s8DspModID].lTrunkNum; i ++ )
{
if ( AllDeviceRes[s8DspModID].pTrunk[i].State == TRK_FREE )
Change_State ( &AllDeviceRes[s8DspModID].pTrunk[i], TRK_WAIT_REMOVE );
}
// handle device : VOICE
for ( i = 0; i < AllDeviceRes[s8DspModID].lVocNum; i ++ )
{
if ( AllDeviceRes[s8DspModID].pVoice[i].State == VOC_FREE )
{
Change_Voc_State ( &AllDeviceRes[s8DspModID].pVoice[i], VOC_WAIT_REMOVE);
}
}
// check if all device is WAIT_OPEN or WAIT_REMOVE
CheckRemoveReady ( s8DspModID );
}
// -----------------------------------------------------------------------------
// --------------------------------------------------------------------------------
void My_BuildIndex ( DeviceID_t *pVocDevID )
{
RetCode_t r;
char FileName[256], MsgStr[256];
int i;
PlayProperty_t playProperty;
r = XMS_ctsInitPlayIndex ( g_acsHandle, pVocDevID, NULL );
if ( r < 0 )
{
sprintf ( MsgStr, "XMS_ctsInitPlayIndex() FAIL. ret = r", r );
AddMsg ( MsgStr );
return ;
}
memset ( &playProperty, 0, sizeof(playProperty) );
for ( i = 0; i < 17; i ++ )
{
if ( i == 16 )
{
playProperty.m_u16PlayType = XMS_BUILD_INDEX_FILE;
sprintf ( FileName, "%s\\bank.008", cfg_VocPath );
}
else
{
playProperty.m_u16PlayType = XMS_BUILD_INDEX_RAM;
sprintf ( FileName, "%s\\D%d", cfg_VocPath, i );
}
strcpy ( playProperty.m_s8PlayContent, FileName );
r = XMS_ctsBuildPlayIndex ( g_acsHandle, pVocDevID, &playProperty, NULL );
if ( r < 0 )
{
sprintf ( MsgStr, "XMS_ctsBuildPlayIndex(%s) FAIL. ret = r", FileName, r );
AddMsg ( MsgStr );
}
}
}
/*停止放音*/
DJ_S32 StopPlayFile ( DeviceID_t *pVocDevID )
{
RetCode_t r;
ControlPlay_t controlPlay;
controlPlay.m_u16ControlType = XMS_STOP_PLAY;
r = XMS_ctsControlPlay ( g_acsHandle, pVocDevID, &controlPlay, NULL );
return r;
}
/*放音处理*/
DJ_S32 PlayFile ( DeviceID_t *pVocDevID, DJ_S8 *s8FileName, DJ_U8 u8PlayTag, bool bIsQueue )
{
DJ_U32 i = 0;
PlayProperty_t playProperty;
RetCode_t r;
memset(&playProperty,0,sizeof(playProperty));
if ( bIsQueue )
playProperty.m_u16PlayType = XMS_PLAY_TYPE_FILE_QUEUE;
else
playProperty.m_u16PlayType = XMS_PLAY_TYPE_FILE;
playProperty.m_u8TaskID = u8PlayTag;
strcpy ( playProperty.m_s8PlayContent, s8FileName );
r = XMS_ctsPlay ( g_acsHandle, pVocDevID, &playProperty, NULL );
return r;
}
DJ_S32 PlayIndex ( DeviceID_t *pVocDevID, DJ_U16 u16Index, DJ_U8 u8PlayTag, bool bIsQueue )
{
DJ_U32 i = 0;
PlayProperty_t playProperty;
RetCode_t r;
memset(&playProperty,0,sizeof(playProperty));
if ( bIsQueue )
playProperty.m_u16PlayType = XMS_PLAY_TYPE_INDEX_QUEUE;
else
playProperty.m_u16PlayType = XMS_PLAY_TYPE_INDEX;
playProperty.m_u8TaskID = u8PlayTag;
playProperty.m_u16PlayIndex = u16Index;
r = XMS_ctsPlay ( g_acsHandle, pVocDevID, &playProperty, NULL );
return r;
}
bool CheckPlayEnd ( TRUNK_STRUCT *pOneTrunk, Acs_Evt_t *pAcsEvt )
{
Acs_MediaProc_Data *pMediaData = NULL;
if ( pAcsEvt->m_s32EventType == XMS_EVT_PLAY )
{
pMediaData = (Acs_MediaProc_Data *) FetchEventData(pAcsEvt);
if ( pMediaData->m_u8TaskID == pOneTrunk->u8PlayTag )
return true;
}
return false;
}
/*停止录音*/
DJ_S32 StopRecordFile ( DeviceID_t *pVocDevID )
{
RetCode_t r;
ControlRecord_t controlRecord;
controlRecord.m_u32ControlType = XMS_STOP_RECORD;
r = XMS_ctsControlRecord ( g_acsHandle, pVocDevID, &controlRecord, NULL );
return r;
}
/*录音处理*/
DJ_S32 RecordFile ( DeviceID_t *pVocDevID, DJ_S8 *s8FileName, DJ_U32 u32RecSize, bool bIsAppend )
{
DJ_U32 i = 0;
RecordProperty_t recordProperty;
RetCode_t r;
memset(&recordProperty,0,sizeof(RecordProperty_t));
recordProperty.m_u32MaxSize = u32RecSize;
if ( bIsAppend )
recordProperty.m_s8IsAppend = 1;
else
recordProperty.m_s8IsAppend = 0;
strcpy ( recordProperty.m_s8FileName, s8FileName );
r = XMS_ctsRecord ( g_acsHandle, pVocDevID, &recordProperty, NULL );
return r;
}
bool CheckRecordEnd ( TRUNK_STRUCT *pOneTrunk, Acs_Evt_t *pAcsEvt )
{
Acs_MediaProc_Data *pMediaData = NULL;
if ( pAcsEvt->m_s32EventType == XMS_EVT_RECORD )
{
return true;
}
return false;
}
void My_InitDtmfBuf ( TRUNK_STRUCT *pOneTrunk )
{
pOneTrunk->DtmfCount = 0;
pOneTrunk->DtmfBuf[0] = 0;
}
void My_AddDtmfBuf ( TRUNK_STRUCT *pOneTrunk, char TmpDtmf )
{
if ( pOneTrunk->DtmfCount < (32-1) )
{
pOneTrunk->DtmfBuf[pOneTrunk->DtmfCount] = TmpDtmf;
pOneTrunk->DtmfBuf[pOneTrunk->DtmfCount+1] = 0;
pOneTrunk->DtmfCount ++;
}
}
char My_GetDtmfCode ( Acs_Evt_t *pAcsEvt )
{
Acs_IO_Data *pIOData = NULL;
char sbuffer[200];
char *p;
memset(sbuffer,0,sizeof(sbuffer));
if ( pAcsEvt->m_s32EventType == XMS_EVT_RECVIODATA ) /*IO Data事件*/
{
pIOData = (Acs_IO_Data *)FetchEventData(pAcsEvt);
if ( ( pIOData->m_u16IoType== XMS_IO_TYPE_DTMF ) //XMS_IO_TYPE_GTG )
&& ( pIOData->m_u16IoDataLen > 0 ) )
{
p = (char *)FetchIOData(pAcsEvt);
sprintf(sbuffer,"[%s]",p);
AddMsg(sbuffer);
return *p;
}
else if( ( pIOData->m_u16IoType== XMS_IO_TYPE_FSK )
&& ( pIOData->m_u16IoDataLen > 0 ) )
{
p = (char *)FetchIOData(pAcsEvt);
sprintf(sbuffer,"[%s]",p);
AddMsg(sbuffer);
return *p;
}
else if( ( pIOData->m_u16IoType== XMS_IO_TYPE_GTG )
&& ( pIOData->m_u16IoDataLen > 0 ) )
{
p = (char *)FetchIOData(pAcsEvt);
sprintf(sbuffer,"[%s]",p);
AddMsg(sbuffer);
return *p;
}
}
return -1; // not a good DTMF
}
char My_GetFskCode ( Acs_Evt_t *pAcsEvt )
{
Acs_IO_Data *pIOData = NULL;
char *p;
if ( pAcsEvt->m_s32EventType == XMS_EVT_RECVIODATA ) /*IO Data事件*/
{
pIOData = (Acs_IO_Data *)FetchEventData(pAcsEvt);
if ( ( pIOData->m_u16IoType== XMS_IO_TYPE_FSK ) //XMS_IO_TYPE_GTG )
&& ( pIOData->m_u16IoDataLen > 0 ) )
{
p = (char *)FetchIOData(pAcsEvt);
return *p;
}
}
return -1; // not a good FSK
}
void My_DualLink ( DeviceID_t *pDev1, DeviceID_t *pDev2 )
{
XMS_ctsLinkDevice ( g_acsHandle, pDev1, pDev2, NULL );
XMS_ctsLinkDevice ( g_acsHandle, pDev2, pDev1, NULL );
}
void My_DualUnlink ( DeviceID_t *pDev1, DeviceID_t *pDev2 )
{
XMS_ctsUnlinkDevice ( g_acsHandle, pDev1, pDev2, NULL );
XMS_ctsUnlinkDevice ( g_acsHandle, pDev2, pDev1, NULL );
}
int SearchOneFreeVoice ( TRUNK_STRUCT *pOneTrunk, DeviceID_t *pFreeVocDeviceID )
{
DJ_S8 s8ModID;
DJ_S16 s16ChID;
int i;
static int iLoopStart = 0;
VOICE_STRUCT *pOneVoice;
DJ_S8 s8SearchModID;
long lNowMostFreeNum;
s8ModID = pOneTrunk->deviceID.m_s8ModuleID;
if ( cfg_iVoiceRule == 0 ) // Fix relationship between Trunk & Voice
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -