| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- /*************************************************************************
- 【文件名】 DevSpan.h
- 【功能模块和目的】 数字中继通道管理类头文件
- 【开发者及日期】 郑石诺 2015/03/09
- 【版本】 V1.0.0
- 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司
- 【更改记录】
- *************************************************************************/
- #pragma once
- #include "DevResource.h"
- #include "SpanChannel.h"
- #include "MC.h"
- /*************************************************************************
- 【类名】 CDevSpan
- 【功能】
- 【接口说明】 数字中继通道管理类
- 【开发者及日期】 郑石诺 2015/03/09
- 【版本】 V1.0.0
- 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司
- 【更改记录】
- *************************************************************************/
- class CDevSpan : public CDevResource
- {
- private:
- class CSpan
- {
- public:
- CSpan(void) : m_CurPos(0) {}
- ~CSpan(void) {}
- int channelCount(void) const { return m_SpanChList.GetCount(); }
- int open(DEV_RES_NO_TYPE NodeNo, DEV_RES_NO_TYPE BoardNo, DEV_RES_NO_TYPE SpanNo)
- {
- m_CurPos = 0;
- for(int i = 1; i < 31; i++)
- {
- CSpanChannel* pChannel = new CSpanChannel(i, SpanNo, NodeNo, BoardNo);
- ASSERT(pChannel != NULL);
- if(pChannel != NULL)
- {
- if(pChannel->open())
- {
- m_SpanChList.Add(pChannel);
- CMC::GetInstance().onDevResCreate(pChannel->id());
- }
- else
- delete pChannel;
- }
- }
- return m_SpanChList.GetCount();
- }
- void close(void)
- {
- for(int i = 0; i < m_SpanChList.GetCount(); ++i)
- {
- CSpanChannel* pChannel = m_SpanChList[i];
- ASSERT(pChannel != NULL);
- CMC::GetInstance().onDevResDestroy(pChannel->id());
- pChannel->close();
- delete pChannel;
- }
- m_SpanChList.RemoveAll();
- m_CurPos = 0;
- }
- CSpanChannel* getFreeSpanCh(void)
- {
- for(int i = 0; i < m_SpanChList.GetCount(); ++i) // 保证遍历一轮
- {
- if(m_CurPos >= m_SpanChList.GetCount())
- m_CurPos = 0;
- CSpanChannel* pChannel = m_SpanChList[m_CurPos++];
- ASSERT(pChannel != NULL);
- // 当前外线是否空闲
- if(pChannel->isValid() && pChannel->isFree())
- return pChannel;
- }
- return NULL;
- }
- CSpanChannel* findChan(int ResId)
- {
- if(ResId > 0 && ResId < 31)
- return m_SpanChList[ResId - 1];
- else
- return NULL;
- }
- private:
- CArray<CSpanChannel*, CSpanChannel*> m_SpanChList;
- int m_CurPos;
- };
- public:
- CDevSpan(DEV_RES_NO_TYPE NodeNo, DEV_RES_NO_TYPE BoardNo);
- virtual ~CDevSpan(void);
- MIX_CAP mixCapacity(void) const { return m_MixCap; }
- int channelCount(void) const { return m_ChannelCount; }
- bool open(void) { return false; }
- bool open(DEV_RES_NO_TYPE SpanNo);
- void close(void);
- void close(DEV_RES_NO_TYPE SpanNo);
- bool isOk(void) const;
- CSpanChannel* getFreeSpanCh(void);
- CSpanChannel* getFreeSpanCh(int SpanNo);
- CSpanChannel* findChan(DEV_RES_NO_TYPE SpanNo, int ResId);
- private:
- bool __openMix(MIX_TYPE MixTp);
- CDevSpan::CSpan* __getSpan(DEV_RES_NO_TYPE SpanNo, bool NewWhenNull = false);
- bool __freeSpan(DEV_RES_NO_TYPE SpanNo);
- void __freeSpan(void);
- private:
- MIX_CAP m_MixCap;
- int m_ChannelCount;
- CArray<CSpan*, CSpan*> m_SpanList;
- };
|