华辉中间件项目(代码服务器上没有,用杨成电脑的源代码上传的)

DevDsp.cpp 5.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. #include "StdAfx.h"
  2. #include "DevDsp.h"
  3. #include "DspChannel.h"
  4. #include "MC.h"
  5. CDevDsp::CDevDsp(DEV_RES_NO_TYPE NodeNo, DEV_RES_NO_TYPE BoardNo) : CDevResource(NodeNo, BoardNo), m_CurPos(0), m_MeetingPool(this)
  6. {
  7. }
  8. CDevDsp::~CDevDsp(void)
  9. {
  10. close();
  11. }
  12. /*****************************************************************
  13. **【函数名称】 open
  14. **【函数功能】 DSP设备打开函数
  15. **【参数】
  16. **【返回值】
  17. ****************************************************************/
  18. bool CDevDsp::open( void )
  19. {
  20. if(m_state != STATUS_WORKING || m_DspChList.GetCount() > 0)
  21. return false;
  22. m_CurPos = 0;
  23. for (int i = 0; i < m_Capacity; i++)
  24. {
  25. CDspChannel* pChannel = new CDspChannel(i, m_NodeNo, m_BoardNo);
  26. ASSERT(pChannel != NULL);
  27. if(pChannel != NULL)
  28. {
  29. if(pChannel->open())
  30. {
  31. m_DspChList.Add(pChannel);
  32. CMC::GetInstance().onDevResCreate(pChannel->id());
  33. }
  34. else
  35. delete pChannel;
  36. }
  37. }
  38. LOGGER(LOG_CLASS_DEV, LOG_LEVEL_NORMAL, _T("{DevDsp}: DSP[%d-%d]成功打开%d条通道"), m_NodeNo, m_BoardNo, m_DspChList.GetCount());
  39. bool t_bRes = m_MeetingPool.open();
  40. if(t_bRes == false )
  41. LOGGER(LOG_CLASS_DEV, LOG_LEVEL_WARNING, _T("{DevDsp}: DSP[%d-%d]打开会议设备失败"), m_NodeNo, m_BoardNo);
  42. return true;
  43. }
  44. /*****************************************************************
  45. **【函数名称】 close
  46. **【函数功能】 DSP设备关闭函数
  47. **【参数】
  48. **【返回值】
  49. ****************************************************************/
  50. void CDevDsp::close( void )
  51. {
  52. for(int i = 0; i < m_DspChList.GetCount(); ++i)
  53. {
  54. CDspChannel* pChannel = m_DspChList[i];
  55. ASSERT(pChannel != NULL);
  56. CMC::GetInstance().onDevResDestroy(pChannel->id());
  57. pChannel->close();
  58. delete pChannel;
  59. }
  60. m_DspChList.RemoveAll();
  61. m_CurPos = 0;
  62. LOGGER(LOG_CLASS_DEV, LOG_LEVEL_NORMAL, _T("{DevDsp}: DSP[%d-%d]通道全部关闭"), m_NodeNo, m_BoardNo);
  63. m_MeetingPool.close();
  64. }
  65. /*****************************************************************
  66. **【函数名称】 getFreeDspCh
  67. **【函数功能】 获取空闲通道
  68. **【参数】
  69. **【返回值】
  70. ****************************************************************/
  71. CDspChannel* CDevDsp::getFreeDspCh( void )
  72. {
  73. CSingleLock locker(&m_LockSection);
  74. locker.Lock(); // 本操作需锁定
  75. for(int i = 0; i < m_DspChList.GetCount(); ++i) // 保证遍历一轮
  76. {
  77. if(m_CurPos >= m_DspChList.GetCount())
  78. m_CurPos = 0;
  79. CDspChannel* pChannel = m_DspChList[m_CurPos++];
  80. ASSERT(pChannel != NULL);
  81. // 当前是否空闲
  82. if(pChannel->isValid() && pChannel->isFree())
  83. return pChannel;
  84. }
  85. return NULL;
  86. }
  87. /*****************************************************************
  88. **【函数名称】 findChan
  89. **【函数功能】 查找指定资源
  90. **【参数】
  91. **【返回值】
  92. ****************************************************************/
  93. CDspChannel* CDevDsp::findChan( int ResId )
  94. {
  95. if(ResId < 0 || ResId >= m_DspChList.GetCount())
  96. return NULL;
  97. else
  98. return m_DspChList[ResId];
  99. }
  100. /*****************************************************************
  101. **【函数名称】 createMeeting
  102. **【函数功能】 创建会议
  103. **【参数】
  104. **【返回值】
  105. ****************************************************************/
  106. bool CDevDsp::createMeeting( MeetingInfo& MeetInfo )
  107. {
  108. return m_MeetingPool.createMeeting(MeetInfo);
  109. }
  110. /*****************************************************************
  111. **【函数名称】 deleteMeeting
  112. **【函数功能】 删除会议
  113. **【参数】
  114. **【返回值】
  115. ****************************************************************/
  116. void CDevDsp::deleteMeeting( MeetingInfo& MeetInfo )
  117. {
  118. return m_MeetingPool.deleteMeeting(MeetInfo.MeetingId);
  119. }
  120. /*****************************************************************
  121. **【函数名称】 meetingAccept
  122. **【函数功能】 接受与会方
  123. **【参数】
  124. **【返回值】
  125. ****************************************************************/
  126. bool CDevDsp::meetingAccept( int MeetingId, COneLeg* pAttendee, bool IsOneWay )
  127. {
  128. return m_MeetingPool.accept(MeetingId, pAttendee, IsOneWay);
  129. }
  130. /*****************************************************************
  131. **【函数名称】 meetingRemove
  132. **【函数功能】 删除一个与会方
  133. **【参数】
  134. **【返回值】
  135. ****************************************************************/
  136. bool CDevDsp::meetingRemove( int MeetingId, COneLeg* pAttendee )
  137. {
  138. return m_MeetingPool.remove(MeetingId, pAttendee);
  139. }
  140. /*****************************************************************
  141. **【函数名称】 meetingRecord
  142. **【函数功能】 为与会方录音
  143. **【参数】
  144. **【返回值】
  145. ****************************************************************/
  146. bool CDevDsp::meetingRecord( int MeetingId, COneLeg* pAttendee, RecordContent* pContent, bool IsStop )
  147. {
  148. return m_MeetingPool.record(MeetingId, pAttendee, pContent, IsStop);
  149. }
  150. /*****************************************************************
  151. **【函数名称】 meetingMute
  152. **【函数功能】 静音与会方
  153. **【参数】
  154. **【返回值】
  155. ****************************************************************/
  156. bool CDevDsp::meetingMute( int MeetingId, COneLeg* pAttendee, bool IsOff )
  157. {
  158. return m_MeetingPool.mute(MeetingId, pAttendee, IsOff);
  159. }
  160. /*****************************************************************
  161. **【函数名称】 isOk
  162. **【函数功能】 判断设备状态
  163. **【参数】
  164. **【返回值】
  165. ****************************************************************/
  166. bool CDevDsp::isOk( void ) const
  167. {
  168. return (m_state == STATUS_WORKING && m_DspChList.GetCount() == m_Capacity);
  169. }