📄 ext6.c
字号:
{
DoorRingPre=DoorRingRd; //更新寄存值 OutsideRingRd: 1=Nothing 0=Ring
return;
}
if(DoorRingRd)
{
Ext6_FunPt=5; // fnExt6_Err
Writesoundway(Connect_Busy,cX_Ext6,ON);
CallCenterState=0;
SetBit(PORTB,HoldDoor);
fnCutOffY4Y5(Ext6_LineY4Y5Num);
Ext6_LineY4Y5Num=0;
return;
}
if(bit_is_clear(ExtTelStateCheck,cExt6Num))
{
Ext6_FunPt=0; //0 fnExt6_Free 内线空闲
fnCutOffY4Y5(Ext6_LineY4Y5Num);
Ext6_LineY4Y5Num=0;
SetBit(PORTB,HoldDoor);
CallCenterState=0;
return;
}
}
void fnExt6_FlashDTMF(void) //10
{
if(!(ExtTelStateCheck & cExt6Bit))
{
if(!(ExtTelFlashState & cExt6Bit)) //挂机
{
Ext6_FunPt=0; //0 fnExt6_Free 内线空闲
FlashtimeState=0; //只允许一次拍打
MulTalkState=0;
fnCutOffDTMF(mExt6_Link[1]);
Writesoundway(Connect_Flash,(mExt6_Link[1]+13),OFF); //连接模拟电信音
Writesoundway(Connect_Flash,cX_Ext6,OFF); //连接模拟电信音
if(Flash_For_Out_Ext) //0 For Out 1 For Ext
{
fnCutOffY4Y5(Ext6_LineY4Y5Num);
if(fnFindExtStillSong())
{
fnCutOffExtLineAndLinkToBusy(Ext6_LineY4Y5Num);
}
Ext6_LineY4Y5Num=0;
return;
}
else
{
fnCutOffLineIn(mExt6_Link[0]);
}
}
}
else
{
if((ExtTelFlashState & cExt6Bit )|| !Ext6_dialtime) //转接
{
goto Ext_Flashback1;
}
Ext6_dialtime--;
}
mDTMF_In=DTMF_Decode(mExt6_Link[1]);
if (!mDTMF_In) return;
if (mDTMF_In== cExt6Num+1 ){ goto Ext_Flashback1; }
if(MulTalkState)
{
if (mDTMF_In==cXin){ goto Ext_Flashback1; } //再次按“ * ”则为出错
}
else
{
if (mDTMF_In==cXin){ MulTalkState=1;return; } //按“ * ”设置三方通话标志 MulTalkState=1
}
fnCutOffDTMF(mExt6_Link[1]);
Writesoundway(Connect_Flash,(mExt6_Link[1]+13),OFF); //连接模拟电信音
if(fnExt_DTMFIN1(mDTMF_In,Ext6_LineY4Y5Num,cExt6Num,Ext6_NumdialOut))
{
goto Ext_FlashWaitRing;
}
else
{
goto Ext_Flashback1;
}
Ext_FlashWaitRing:
Ext6_FunPt=11;//本内线回铃
Ext6_dialtime=30000;
Writesoundway(Connect_Flash,WaitRing,ON); //连接回铃声
Ext6_FlashNumdialOut=mDTMF_In;
Ext6_MusicNumdialIn=Ext6_NumdialOut;
return;
Ext_Flashback1:
FlashtimeState=0; //只允许一次拍打
MulTalkState=0;
Ext6_dialtime=0;
fnCutOffDTMF(mExt6_Link[1]);
Writesoundway(Connect_Flash,(mExt6_Link[1]+13),OFF); //连接模拟电信音
Writesoundway(Connect_Flash,cX_Ext6,OFF); //连接模拟电信音
if(Flash_For_Out_Ext) //0 For Out 1 For Ext
{
if(fnFindExtStillSong())
{
Ext6_FunPt=7;
fnExtCutOffMusic(7,Ext6_NumdialOut);
Writesoundway(Ext6_LineY4Y5Num,cExt6Num,ON);
}
else
{
Ext6_FunPt=5; //5 fnExt6_Err Dial Wong Extension Numer / LintOut be TimeOut;
Writesoundway(Connect_Busy,cX_Ext6,ON); //;连接忙音
}
return;
}
else
{
Ext6_FunPt=2;
Writesoundway(mExt6_Link[0]-1,cX_Music,OFF);
Writesoundway(mExt6_Link[0]-1,cExt6Num,ON);
return;
}
}
void fnExt6_FlashWaitRing(void) //11
{
if(!(ExtTelStateCheck & cExt6Bit))
{
if(!(ExtTelFlashState & cExt6Bit)) //挂机
{
Ext6_FunPt=0; //0 fnExt6_Free 内线空闲
FlashtimeState=0; //只允许一次拍打
MulTalkState=0;
fnCutOffFlash();
if(Flash_For_Out_Ext) //0 For Out 1 For Ext
{
fnConnectMtoRExt(Ext6_MusicNumdialIn, Ext6_FlashNumdialOut);
}
else
{
fnConnectMtoROut(Ext6_MusicNumdialIn,Ext6_FlashNumdialOut);
}
}
}
else
{
if((ExtTelFlashState & cExt6Bit )|| !Ext6_dialtime) //
{
Ext6_dialtime=0;
FlashtimeState=0; //只允许一次拍打
MulTalkState=0;
fnCutOffFlash();
fnStopExtRing(Ext6_FlashNumdialOut);
if(Flash_For_Out_Ext) //0 For Out 1 For Ext
{
if(fnFindExtStillSong())
{
fnExtCutOffMusic(7,Ext6_NumdialOut);
Ext6_FunPt=7;
Writesoundway(Ext6_LineY4Y5Num,cExt6Num,ON);
return;
}
else
{
Ext6_FunPt=5; //5 fnExt6_Err Dial Wong Extension Numer / LintOut be TimeOut;
Writesoundway(Connect_Busy,cX_Ext6,ON); //;连接忙音
return;
}
}
else
{
Ext6_FunPt=2;
Writesoundway(mExt6_Link[0]-1,cX_Music,OFF);
Writesoundway(mExt6_Link[0]-1,cExt6Num,ON);
return;
}
}
Ext6_dialtime--;
}
}
void fnExt6_FlashRing(void) //12
{
if (bit_is_clear(ExtTelStateCheck,cExt6Num)) return; //本内线提机
Writesoundway(SigCallID,cX_Ext6,OFF); //断开响铃
ClrBit(ExtTelRingState,cExt6Num);
Writesoundway(Connect_Flash,WaitRing,OFF);
if(MulTalkState)
{
Writesoundway(Ext6_LineY4Y5Num,cX_Ext6,ON);
if(Flash_For_Out_Ext) //0 For Out 1 For Ext
{
Ext6_FunPt=7;
fnConnectMtoExt(Ext6_MusicNumdialIn,Ext6_FlashNumdialOut);
}
else
{
Ext6_FunPt=15;
fnConnectMtoOut(Ext6_MusicNumdialIn,Ext6_FlashNumdialOut);
}
}
else
{
Ext6_FunPt=18; //7 fnExt2_LinkExtPhone 内线连内线
fnStopExtWaitRing(Ext6_FunPt,Ext6_FlashNumdialOut);
Writesoundway(Connect_Flash,cX_Ext6,ON); //提机接听
}
Ext6_dialtime = cTelTm50ms;
}
void fnExt6_FlashLinkExtPhone(void)
{
if (Ext6_dialtime) { Ext6_dialtime--; return; } // 10ms Delay
if (bit_is_set(ExtTelStateCheck,cExt6Num)) return;
Ext6_FunPt=0; //0 fnExt6_Free 内线空闲
fnCutOffFlash();
if(Flash_For_Out_Ext) //0 For Out 1 For Ext
{
fnConnectMtoExt(Ext6_MusicNumdialIn,Ext6_FlashNumdialOut);
}
else
{
fnConnectMtoOut(Ext6_MusicNumdialIn,Ext6_FlashNumdialOut);
}
}
void fnExt6_LinkMusic(void) //13 连音乐 11->0,
{
if(!(ExtTelStateCheck & cExt6Bit)) //挂机
{
Ext6_FunPt=0; //0 fnExt6_Free 内线空闲
fnCutOffY4Y5(Ext6_LineY4Y5Num);
}
}
void fnExt6_LinkDTMF_InputExtNm(void) //14 内线连DTMF Wait Input (1-6,7,#) 3 ->5,6
{
unsigned char i;
if(bit_is_clear(ExtTelStateCheck,cExt6Num))
{
Ext6_FunPt=0; //0 fnExt6_Free 内线空闲
fnCutOffY4Y5(mExt6_Link[0]);
fnCutOffDTMF(mExt6_Link[1]);
return;
}
if(!Ext6_dialtime)
{
Ext6_FunPt=5; // fnExt6_Err
fnCutOffY4Y5(mExt6_Link[0]);
fnCutOffDTMF(mExt6_Link[1]);
Writesoundway(Connect_Busy,cX_Ext6,ON); //;连接忙音
return;
}
Ext6_dialtime--;
mDTMF_In=DTMF_Decode(mExt6_Link[1]);
if (!mDTMF_In) return;
Writesoundway(mExt6_Link[0],(mExt6_Link[0]+10),OFF); //断开模拟电信音
fnCutOffDTMF(mExt6_Link[1]);
if (mDTMF_In== cExt6Num+1 ) goto Lb_Warring; //拨打本机为出错
if(mDTMF_In==0x07) //呼叫中心
{
if(Doorphone_FunPt){ goto Lb_Warring; } //门口机在使用中
if(CallCenterState){ goto Lb_Warring; } //只允许一台分机呼叫中心
ClrBit(PORTB,HoldDoor);
CallCenterState=1;
Ext6_FunPt=19;
Ext6_dialtime =1000;
Ext6_LineY4Y5Num = mExt6_Link[0];
Writesoundway(Ext6_LineY4Y5Num,Doorphone,ON);
return;
}
if(mDTMF_In==cJing)//代接
{
if( !ExtTelRingState) goto Lb_Warring;
fnCutOffY4Y5(mExt6_Link[0]);
if (fnFindRingOutLine()) //代接外线
{
Ext6_FunPt=20; //fnExt6_4_RingForLineIn
return;
}
if (Doorphone_FunPt==1)
{
Ext6_FunPt=20;
return;
}
i=fnFindRingExtLine(cExt6Num);
if(i) //代接内线
{
Ext6_FunPt=9;
Ext6_NumdialIn =i;
Ext6_LineY4Y5Num=fnFindRingExtY4Y5();
return;
}
}
if(fnExt_DTMFIN2(mDTMF_In,cExt6Num,mExt6_Link[0]))
{
goto Ext_dialOut;
}
else
{
goto Lb_Warring;
}
Ext_dialOut:
Writesoundway(mExt6_Link[0],WaitRing,ON); //连接回铃声
Ext6_FunPt=6; //本内线回铃
Ext6_dialtime=30000; //20s
Ext6_NumdialOut=mDTMF_In;
Ext6_NumdialIn =Ext6_NumdialOut;
Ext6_LineY4Y5Num = mExt6_Link[0];
return;
Lb_Warring:
fnCutOffY4Y5(mExt6_Link[0]);
Ext6_FunPt=5; //5 fnExt6_Err Dial Wong Extension Numer / LintOut be TimeOut;
Writesoundway(Connect_Busy,cX_Ext6,ON); //;连接忙音
return;
}
const void (*Ext6_FunTab[]) PROGMEM=
{
fnExt6_Free, //0 内线空闲 - Check Hook 0-> 1,2,3,4
fnExt6_LinkLineOut_DTMF, //1 内线连外线 + DTMF 1-> 0,14,5(TimeOut) mExt6_Link[0] = Line In Num mExt6_Link[1]=DTMF Num
fnExt6_LinkLineOut, //2 内线连外线 2 ->0 mExt6_Link[x]
fnExt6_LinkDTMF, //3 内线连DTMF 3 ->14,5,6 mExt6_Link[0]=Y4Y5 mExt6_Link[1]=DTMF Num
fnExt6_NotLinkAnyThing, //4 内线没连任何线 4 -> 0 mExt6_Link[x]
fnExt6_Err, //5 Dial Wong Extension Numer / LintOut be TimeOut
fnExt6_WaitRing, //6 mExt6_Link[0]=Y4Y5 mExt6_Link[1]= Calling To Ext Number
fnExt6_LinkExtPhone, //7 内线连内线N 7 ->0, 8 mExt6_Link[0]=Y4Y5 mExt6_Link[1]= Calling To Ext Number
fnExt6_LinkBuzzSong, //8
fnExt6_Ringing, //9 响铃 9->2,7 mExt6_Link[0]=Y4Y5/Line In Num mExt6_Link[1]: 0=Line In 1=Ext Phone
fnExt6_FlashDTMF, //10
fnExt6_FlashWaitRing, //11
fnExt6_FlashRing, //12
fnExt6_LinkMusic, //13 连音乐 11->0,
fnExt6_LinkDTMF_InputExtNm, //14 内线连DTMF Wait Input (1-6,7,#) 3 ->5,6 mExt6_Link[0]=Y4Y5 mExt6_Link[1]=DTMF Num
fnExt6_RingingForLineIn, //15 Line In Call ->响铃
fnExt6_RingingForDoorphone, //16 Doorphone In Call ->响铃
fnExt6_LinkDoorphone, //17
fnExt6_FlashLinkExtPhone, //18
fnExt6_CenterWaitRing, //19
fnExt6_4_RingForLineIn //20 外线拨打分机,四台分机响铃
};
void fnTelRountineExt6(void)
{
void (*pp)(void);
pp= (void *) pgm_read_word_near(Ext6_FunTab+Ext6_FunPt);
pp();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -