📄 doorphone.c
字号:
#include "main.h"
void fnDoorphone_Free(void)
{
DoorRingRd=PINB & 0x04; //PB4:HoldDoor PB2:CheckDoorRing PB1:Out PB0:In
if(DoorRingPre!=DoorRingRd) //去抖动
{
DoorRingPre=DoorRingRd; //更新寄存值 OutsideRingRd: 1=Nothing 0=Ring
return;
}
if(CallCenterState)return;
if(DoorRingRd)return;
if(bit_is_clear(OutsideBusy_Free,4)) //查找空闲外线
{
SetBit(OutsideBusy_Free,4); //外线被占
Door_LineY4Y5Num=4;
}
else if(bit_is_clear(OutsideBusy_Free,5)) //查找空闲外线
{
SetBit(OutsideBusy_Free,5); //外线被占
Door_LineY4Y5Num=5;
}
else
{
return; //没有空闲线路
}
if(!fnFind_4FreeExt(3)) // 查找空闲分机响铃
{
if (Door_LineY4Y5Num==4) { ClrBit(OutsideBusy_Free,4);} //没有空闲分机
else { ClrBit(OutsideBusy_Free,5);}
Door_LineY4Y5Num=0;
}else
{
Doorphone_FunPt=1;
tFSKPhoneNumber[10]=0x30;
}
}
void fnDoorphone_Ringing(void) //1
{
DoorRingRd=PINB & 0x04; //PB4:HoldDoor PB2:CheckDoorRing PB1:Out PB0:In
if(DoorRingPre!=DoorRingRd) //去抖动
{
DoorRingPre=DoorRingRd; //更新寄存值 OutsideRingRd: 1=Nothing 0=Ring
return;
}
Doorphone_time=1000;
if(bit_is_clear(PINB,CheckDoorRing))return;
if(Door_LineY4Y5Num==4) { ClrBit(OutsideBusy_Free,4); } //外线被占
else if (Door_LineY4Y5Num==5) { ClrBit(OutsideBusy_Free,5); } //外线被占
Door_LineY4Y5Num=0;
Doorphone_FunPt=2;
fnStopAllExtRingFor_OutLine();
}
void fnDoorphone_Delay1s(void)//2
{
if(!Doorphone_time)
{
Doorphone_FunPt=0;
}
Doorphone_time--;
}
void fnDoorphone_ExtHook(void) //3 分机提起
{
DoorRingRd=PINB & 0x04; //PB4:HoldDoor PB2:CheckDoorRing PB1:Out PB0:In
if(DoorRingPre!=DoorRingRd) //去抖动
{
DoorRingPre=DoorRingRd; //更新寄存值 OutsideRingRd: 1=Nothing 0=Ring
return;
}
Doorphone_time=1000;
if(bit_is_clear(PINB,CheckDoorRing))return;
fnCutOffY4Y5(Door_LineY4Y5Num);
NotHoldDoorphone();
Door_LineY4Y5Num=0;
Doorphone_FunPt=2;
}
const void (*Doorphone_FunTab[]) PROGMEM=
{
fnDoorphone_Free, //0
fnDoorphone_Ringing, //1
fnDoorphone_Delay1s, //2
fnDoorphone_ExtHook //3 分机提起
};
void fnTelRountineDoorphone(void)
{
void (*pp)(void);
pp= (void *) pgm_read_word_near(Doorphone_FunTab+Doorphone_FunPt);
pp();
}
unsigned char NotHoldDoorphone(void)
{
SetBit(PORTB,HoldDoor);
if(Ext1_FunPt==17) //分机接听,但还没挂线
{
Ext1_FunPt=5;
Writesoundway(Connect_Busy,cExt1Num,ON); //;连接忙音
return 0;
}
if(Ext2_FunPt==17) //分机接听,但还没挂线
{
Ext2_FunPt=5;
Writesoundway(Connect_Busy,cExt2Num,ON); //;连接忙音
return 0;
}
if(Ext3_FunPt==17) //分机接听,但还没挂线
{
Ext3_FunPt=5;
Writesoundway(Connect_Busy,cExt3Num,ON); //;连接忙音
return 0;
}
if(Ext4_FunPt==17) //分机接听,但还没挂线
{
Ext4_FunPt=5;
Writesoundway(Connect_Busy,cExt4Num,ON); //;连接忙音
return 0;
}
if(Ext5_FunPt==17) //分机接听,但还没挂线
{
Ext5_FunPt=5;
Writesoundway(Connect_Busy,cExt5Num,ON); //;连接忙音
return 0;
}
if(Ext6_FunPt==17) //分机接听,但还没挂线
{
Ext6_FunPt=5;
Writesoundway(Connect_Busy,cExt6Num,ON); //;连接忙音
return 0;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -