📄 ext5.c
字号:
{
DoorRingPre=DoorRingRd; //更新寄存值 OutsideRingRd: 1=Nothing 0=Ring
return;
}
if(DoorRingRd)
{
Ext5_FunPt=5; // fnExt5_Err
Writesoundway(Connect_Busy,cX_Ext5,ON);
CallCenterState=0;
SetBit(PORTB,HoldDoor);
fnCutOffY4Y5(Ext5_LineY4Y5Num);
Ext5_LineY4Y5Num=0;
return;
}
if(bit_is_clear(ExtTelStateCheck,cExt5Num))
{
Ext5_FunPt=0; //0 fnExt5_Free 内线空闲
fnCutOffY4Y5(Ext5_LineY4Y5Num);
Ext5_LineY4Y5Num=0;
SetBit(PORTB,HoldDoor);
CallCenterState=0;
return;
}
}
void fnExt5_FlashDTMF(void) //10
{
if(!(ExtTelStateCheck & cExt5Bit))
{
if(!(ExtTelFlashState & cExt5Bit)) //挂机
{
Ext5_FunPt=0; //0 fnExt5_Free 内线空闲
FlashtimeState=0; //只允许一次拍打
MulTalkState=0;
fnCutOffDTMF(mExt5_Link[1]);
Writesoundway(Connect_Flash,(mExt5_Link[1]+13),OFF); //连接模拟电信音
Writesoundway(Connect_Flash,cX_Ext5,OFF); //连接模拟电信音
if(Flash_For_Out_Ext) //0 For Out 1 For Ext
{
fnCutOffY4Y5(Ext5_LineY4Y5Num);
if(fnFindExtStillSong())
{
fnCutOffExtLineAndLinkToBusy(Ext5_LineY4Y5Num);
}
Ext5_LineY4Y5Num=0;
return;
}
else
{
fnCutOffLineIn(mExt5_Link[0]);
}
}
}
else
{
if((ExtTelFlashState & cExt5Bit )|| !Ext5_dialtime) //转接
{
goto Ext_Flashback1;
}
Ext5_dialtime--;
}
mDTMF_In=DTMF_Decode(mExt5_Link[1]);
if (!mDTMF_In) return;
if (mDTMF_In== cExt5Num+1 ){ goto Ext_Flashback1; }
if(MulTalkState)
{
if (mDTMF_In==cXin){ goto Ext_Flashback1; } //再次按“ * ”则为出错
}
else
{
if (mDTMF_In==cXin){ MulTalkState=1;return; } //按“ * ”设置三方通话标志 MulTalkState=1
}
fnCutOffDTMF(mExt5_Link[1]);
Writesoundway(Connect_Flash,(mExt5_Link[1]+13),OFF); //连接模拟电信音
if(fnExt_DTMFIN1(mDTMF_In,Ext5_LineY4Y5Num,cExt5Num,Ext5_NumdialOut))
{
goto Ext_FlashWaitRing;
}
else
{
goto Ext_Flashback1;
}
Ext_FlashWaitRing:
Ext5_FunPt=11;//本内线回铃
Ext5_dialtime=30000;
Writesoundway(Connect_Flash,WaitRing,ON); //连接回铃声
Ext5_FlashNumdialOut=mDTMF_In;
Ext5_MusicNumdialIn=Ext5_NumdialOut;
return;
Ext_Flashback1:
FlashtimeState=0; //只允许一次拍打
MulTalkState=0;
Ext5_dialtime=0;
fnCutOffDTMF(mExt5_Link[1]);
Writesoundway(Connect_Flash,(mExt5_Link[1]+13),OFF); //连接模拟电信音
Writesoundway(Connect_Flash,cX_Ext5,OFF); //连接模拟电信音
if(Flash_For_Out_Ext) //0 For Out 1 For Ext
{
if(fnFindExtStillSong())
{
Ext5_FunPt=7;
fnExtCutOffMusic(7,Ext5_NumdialOut);
Writesoundway(Ext5_LineY4Y5Num,cExt5Num,ON);
}
else
{
Ext5_FunPt=5; //5 fnExt5_Err Dial Wong Extension Numer / LintOut be TimeOut;
Writesoundway(Connect_Busy,cX_Ext5,ON); //;连接忙音
}
return;
}
else
{
Ext5_FunPt=2;
Writesoundway(mExt5_Link[0]-1,cX_Music,OFF);
Writesoundway(mExt5_Link[0]-1,cExt5Num,ON);
return;
}
}
void fnExt5_FlashWaitRing(void) //11
{
if(!(ExtTelStateCheck & cExt5Bit))
{
if(!(ExtTelFlashState & cExt5Bit)) //挂机
{
Ext5_FunPt=0; //0 fnExt5_Free 内线空闲
FlashtimeState=0; //只允许一次拍打
MulTalkState=0;
fnCutOffFlash();
if(Flash_For_Out_Ext) //0 For Out 1 For Ext
{
fnConnectMtoRExt(Ext5_MusicNumdialIn, Ext5_FlashNumdialOut);
}
else
{
fnConnectMtoROut(Ext5_MusicNumdialIn,Ext5_FlashNumdialOut);
}
}
}
else
{
if((ExtTelFlashState & cExt5Bit )|| !Ext5_dialtime) //
{
Ext5_dialtime=0;
FlashtimeState=0; //只允许一次拍打
MulTalkState=0;
fnCutOffFlash();
fnStopExtRing(Ext5_FlashNumdialOut);
if(Flash_For_Out_Ext) //0 For Out 1 For Ext
{
if(fnFindExtStillSong())
{
fnExtCutOffMusic(7,Ext5_NumdialOut);
Ext5_FunPt=7;
Writesoundway(Ext5_LineY4Y5Num,cExt5Num,ON);
return;
}
else
{
Ext5_FunPt=5; //5 fnExt5_Err Dial Wong Extension Numer / LintOut be TimeOut;
Writesoundway(Connect_Busy,cX_Ext5,ON); //;连接忙音
return;
}
}
else
{
Ext5_FunPt=2;
Writesoundway(mExt5_Link[0]-1,cX_Music,OFF);
Writesoundway(mExt5_Link[0]-1,cExt5Num,ON);
return;
}
}
Ext5_dialtime--;
}
}
void fnExt5_FlashRing(void) //12
{
if (bit_is_clear(ExtTelStateCheck,cExt5Num)) return; //本内线提机
Writesoundway(SigCallID,cX_Ext5,OFF); //断开响铃
ClrBit(ExtTelRingState,cExt5Num);
Writesoundway(Connect_Flash,WaitRing,OFF);
if(MulTalkState)
{
Writesoundway(Ext5_LineY4Y5Num,cX_Ext5,ON);
if(Flash_For_Out_Ext) //0 For Out 1 For Ext
{
Ext5_FunPt=7;
fnConnectMtoExt(Ext5_MusicNumdialIn,Ext5_FlashNumdialOut);
}
else
{
Ext5_FunPt=15;
fnConnectMtoOut(Ext5_MusicNumdialIn,Ext5_FlashNumdialOut);
}
}
else
{
Ext5_FunPt=18; //7 fnExt2_LinkExtPhone 内线连内线
fnStopExtWaitRing(Ext5_FunPt,Ext5_FlashNumdialOut);
Writesoundway(Connect_Flash,cX_Ext5,ON); //提机接听
}
Ext5_dialtime = cTelTm50ms;
}
void fnExt5_FlashLinkExtPhone(void)
{
if (Ext5_dialtime) { Ext5_dialtime--; return; } // 10ms Delay
if (bit_is_set(ExtTelStateCheck,cExt5Num)) return;
Ext5_FunPt=0; //0 fnExt5_Free 内线空闲
fnCutOffFlash();
if(Flash_For_Out_Ext) //0 For Out 1 For Ext
{
fnConnectMtoExt(Ext5_MusicNumdialIn,Ext5_FlashNumdialOut);
}
else
{
fnConnectMtoOut(Ext5_MusicNumdialIn,Ext5_FlashNumdialOut);
}
}
void fnExt5_LinkMusic(void) //13 连音乐 11->0,
{
if(!(ExtTelStateCheck & cExt5Bit)) //挂机
{
Ext5_FunPt=0; //0 fnExt5_Free 内线空闲
fnCutOffY4Y5(Ext5_LineY4Y5Num);
}
}
void fnExt5_LinkDTMF_InputExtNm(void) //14 内线连DTMF Wait Input (1-6,7,#) 3 ->5,6
{
unsigned char i;
if(bit_is_clear(ExtTelStateCheck,cExt5Num))
{
Ext5_FunPt=0; //0 fnExt5_Free 内线空闲
fnCutOffY4Y5(mExt5_Link[0]);
fnCutOffDTMF(mExt5_Link[1]);
return;
}
if(!Ext5_dialtime)
{
Ext5_FunPt=5; // fnExt5_Err
fnCutOffY4Y5(mExt5_Link[0]);
fnCutOffDTMF(mExt5_Link[1]);
Writesoundway(Connect_Busy,cX_Ext5,ON); //;连接忙音
return;
}
Ext5_dialtime--;
mDTMF_In=DTMF_Decode(mExt5_Link[1]);
if (!mDTMF_In) return;
Writesoundway(mExt5_Link[0],(mExt5_Link[0]+10),OFF); //断开模拟电信音
fnCutOffDTMF(mExt5_Link[1]);
if (mDTMF_In== cExt5Num+1 ) goto Lb_Warring; //拨打本机为出错
if(mDTMF_In==0x07) //呼叫中心
{
if(Doorphone_FunPt){ goto Lb_Warring; } //门口机在使用中
if(CallCenterState){ goto Lb_Warring; } //只允许一台分机呼叫中心
ClrBit(PORTB,HoldDoor);
CallCenterState=1;
Ext5_FunPt=19;
Ext5_dialtime =1000;
Ext5_LineY4Y5Num = mExt5_Link[0];
Writesoundway(Ext5_LineY4Y5Num,Doorphone,ON);
return;
}
if(mDTMF_In==cJing)//代接
{
if( !ExtTelRingState) goto Lb_Warring;
fnCutOffY4Y5(mExt5_Link[0]);
if (fnFindRingOutLine()) //代接外线
{
Ext5_FunPt=20; //fnExt5_4_RingForLineIn
return;
}
if (Doorphone_FunPt==1)
{
Ext5_FunPt=20;
return;
}
i=fnFindRingExtLine(cExt5Num);
if(i) //代接内线
{
Ext5_FunPt=9;
Ext5_NumdialIn =i;
Ext5_LineY4Y5Num=fnFindRingExtY4Y5();
return;
}
}
if(fnExt_DTMFIN2(mDTMF_In,cExt5Num,mExt5_Link[0]))
{
goto Ext_dialOut;
}
else
{
goto Lb_Warring;
}
Ext_dialOut:
Writesoundway(mExt5_Link[0],WaitRing,ON); //连接回铃声
Ext5_FunPt=6; //本内线回铃
Ext5_dialtime=30000; //20s
Ext5_NumdialOut=mDTMF_In;
Ext5_NumdialIn =Ext5_NumdialOut;
Ext5_LineY4Y5Num = mExt5_Link[0];
return;
Lb_Warring:
fnCutOffY4Y5(mExt5_Link[0]);
Ext5_FunPt=5; //5 fnExt5_Err Dial Wong Extension Numer / LintOut be TimeOut;
Writesoundway(Connect_Busy,cX_Ext5,ON); //;连接忙音
return;
}
const void (*Ext5_FunTab[]) PROGMEM=
{
fnExt5_Free, //0 内线空闲 - Check Hook 0-> 1,2,3,4
fnExt5_LinkLineOut_DTMF, //1 内线连外线 + DTMF 1-> 0,14,5(TimeOut) mExt5_Link[0] = Line In Num mExt5_Link[1]=DTMF Num
fnExt5_LinkLineOut, //2 内线连外线 2 ->0 mExt5_Link[x]
fnExt5_LinkDTMF, //3 内线连DTMF 3 ->14,5,6 mExt5_Link[0]=Y4Y5 mExt5_Link[1]=DTMF Num
fnExt5_NotLinkAnyThing, //4 内线没连任何线 4 -> 0 mExt5_Link[x]
fnExt5_Err, //5 Dial Wong Extension Numer / LintOut be TimeOut
fnExt5_WaitRing, //6 mExt5_Link[0]=Y4Y5 mExt5_Link[1]= Calling To Ext Number
fnExt5_LinkExtPhone, //7 内线连内线N 7 ->0, 8 mExt5_Link[0]=Y4Y5 mExt5_Link[1]= Calling To Ext Number
fnExt5_LinkBuzzSong, //8
fnExt5_Ringing, //9 响铃 9->2,7 mExt5_Link[0]=Y4Y5/Line In Num mExt5_Link[1]: 0=Line In 1=Ext Phone
fnExt5_FlashDTMF, //10
fnExt5_FlashWaitRing, //11
fnExt5_FlashRing, //12
fnExt5_LinkMusic, //13 连音乐 11->0,
fnExt5_LinkDTMF_InputExtNm, //14 内线连DTMF Wait Input (1-6,7,#) 3 ->5,6 mExt5_Link[0]=Y4Y5 mExt5_Link[1]=DTMF Num
fnExt5_RingingForLineIn, //15 Line In Call ->响铃
fnExt5_RingingForDoorphone, //16 Doorphone In Call ->响铃
fnExt5_LinkDoorphone, //17
fnExt5_FlashLinkExtPhone, //18
fnExt5_CenterWaitRing, //19
fnExt5_4_RingForLineIn //20 外线拨打分机,四台分机响铃
};
void fnTelRountineExt5(void)
{
void (*pp)(void);
pp= (void *) pgm_read_word_near(Ext5_FunTab+Ext5_FunPt);
pp();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -