?? jbscall.c
字號(hào):
/**********************************************************
*
* FileName: jScall.c
* Function: 被叫程序
*
**********************************************************/
//#pragma DEBUG
#include <jbScall.h>
void OldSlaveCall(void)
{
byte bSlaveStatus=0x30; // 被叫狀態(tài)控制字
byte bUnitTariff; // 被叫計(jì)費(fèi)費(fèi)率
byte bUnitTime; // 被叫計(jì)費(fèi)時(shí)長
byte bDelayTime;
bool fMustSaveRecord=0;
pReadNumber=0;
pWriteNumber=0;
memset(&aNumBuf,0x0c,16);
fFanjiRequest=1;
fFanJi=0;
DispClr();
DispSymbol(LARGE_HOOK);
AutoReadPara(206);
bUnitTime=bParaByte; // 被叫計(jì)費(fèi)時(shí)長
AutoReadPara(207);
bUnitTariff=bParaByte; // 被叫計(jì)費(fèi)費(fèi)率
AutoReadPara(208);
bDelayTime=bParaByte; // 被叫計(jì)費(fèi)延時(shí)時(shí)間
iTotalTime=1; // 計(jì)費(fèi)時(shí)間提前1秒
lTotalTariff=0;
bDialType=0;
if(fSlaveCallEnable&&(bUnitTariff!=0)){ // 被叫是否允許計(jì)費(fèi)
bSlaveStatus=0x31;
if(!fSlaveCalcForm)
bSlaveStatus=0x32; // 手動(dòng)計(jì)費(fèi)狀態(tài)
}
SaveCurrentTime();
ciDelaySecond=0;
fiDelaySecond=0;
iAddress=0;
while(TRUE){
switch(bSlaveStatus){
case 0x30: // 免費(fèi)通話過程
fDelay5MS=1;
fDelayLock=0;
while(1){
IDLE;
Flash(1);
if(OnHookDelay()||(pReadNumber==4)||(fFanJi&&(pReadNumber>2))){
fLockRequest=1; // 若掛機(jī),則鎖機(jī)退出
bSlaveStatus=0x34;
break;
}
JudgeNum();
if(fSecond){
fSecond=0;
iAddress++;
}
if(KeyPro()){
fLockRequest=1;
bSlaveStatus=0x34;
break;
}
} // End while(1)
break;
case 0x31:
if(bDelayTime==0){
bSlaveStatus=0x33;
break;
}
ciDelaySecond=bDelayTime; //自動(dòng)計(jì)費(fèi)延時(shí)過程
fiDelaySecond=0;
while(1){
IDLE;
Flash(1);
if(OnHookDelay()||(pReadNumber==4)||(fFanJi&&(pReadNumber>2))){
fLockRequest=1;
bSlaveStatus=0x34;
break;
}
JudgeNum();
if(fiDelaySecond){
bSlaveStatus=0x33; // 自動(dòng)計(jì)費(fèi)延時(shí)時(shí)間到
break;
}
if(fSecond){
fSecond=0;
iAddress++;
}
if(KeyPro()){
fLockRequest=1;
bSlaveStatus=0x34;
break;
}
} // End while(1)
break;
case 0x32: // 等待手動(dòng)啟動(dòng)計(jì)費(fèi)
while(1){
IDLE;
Flash(1);
if(OnHookDelay()||(pReadNumber==4)||(fFanJi&&(pReadNumber>2))){
fLockRequest=1;
bSlaveStatus=0x34;
break;
}
JudgeNum();
if(fSecond){
fSecond=0;
iAddress++;
}
if(fKey&&(bKeyBuf==K4)){ // 手動(dòng)計(jì)費(fèi)狀態(tài)下,啟動(dòng)計(jì)費(fèi)
fKey=0;
bSlaveStatus=0x33; // 手動(dòng)計(jì)費(fèi)開始
break;
}
} // End while(1)
break;
case 0x33: //被叫計(jì)費(fèi)狀態(tài)
lTotalTariff+=(ulint)bUnitTariff;
fMustSaveRecord=1;
DispCharge(lTotalTariff,1);
DispCharge(lTotalTariff,2);
DispTime(iTotalTime);
fSecond=0;
if(bUnitTime==0){
bSlaveStatus=0x30;
break;
}
ciDelaySecond=bUnitTime;
fiDelaySecond=0;
while(1){
IDLE;
Flash(1);
if(fSecond){
fSecond=0;
DispTime(++iTotalTime);
iAddress++;
if(fiDelaySecond)
break;
}
if(OnHookDelay()||(fFanJi&&(pReadNumber>2))||(pReadNumber==4)){
fLockRequest=1;
bSlaveStatus=0x34;
break;
}
JudgeNum();
if(KeyPro()){
fLockRequest=1;
bSlaveStatus=0x34;
break;
}
} // End while(1)
break;
case 0x34: // 被叫通話結(jié)束,統(tǒng)計(jì)、存儲(chǔ)過程
cbFangDao=200;
Close(MLD);
DispSymbol(LARGE_UNHOOK);
DispSymbol(LARGE_UNFLASH);
DispSymbol(LARGE_PHONE);
if(fLocked)
DispSymbol(LARGE_LOCK);
fDelaySecond=1;
Speaker(255);
if(fMustSaveRecord){
fMustSaveRecord=0;
memset(aNumBuf,0x0c,15); // 被叫存儲(chǔ)零號(hào)碼話單
bIDL=0;
SaveRecord();
if(!fLOCPrintLimit)
PrintTalkRecord();
cbDelaySecond=5;
fDelaySecond=0;
}
SaveTotal(); // 被叫通話次數(shù)、收費(fèi)累計(jì)
pReadNumber=pWriteNumber=0;
bStatusWord=S_OLDLOCKWAIT;
return;
}
// End switch(bSlaveStatus)
}
// End while(1)
}
// End function: SlaveCall()
void NewSlaveCall(void)
{
byte bSlaveStatus=0x30;
uint iMTTime;
uint iRT0Time;
uint iRT1Time;
uint iRF0Tariff;
uint iRF1Tariff;
bool fMustDelay=0;
//初始化被叫被叫參數(shù)
AutoReadPara(24);
iMTTime=iParaWord; // 被叫限時(shí)時(shí)長
AutoReadPara(25);
iRF0Tariff=iParaWord; // 被叫初始收費(fèi)
AutoReadPara(26);
iRT0Time=iParaWord; // 被叫初始時(shí)長
AutoReadPara(27);
iRF1Tariff=iParaWord; // 被叫單位收費(fèi)
AutoReadPara(28);
iRT1Time=iParaWord; // 被叫單位時(shí)長
pReadNumber=0;
pWriteNumber=0;
memset(aNumBuf,0x0c,16);
fFanjiRequest=1;
fFanJi=0;
DispClr();
DispSymbol(LARGE_HOOK);
if((iMTTime==0)||((iRT1Time==0)&&(iRT0Time==0)))
bSlaveStatus=0x33;
else if((iRF0Tariff==0)&&(iRF1Tariff==0))
bSlaveStatus=0x30;
else if(fSlaveCalcForm) // 呼入計(jì)費(fèi)方式
bSlaveStatus=0x31; // 自動(dòng)計(jì)費(fèi)
lTotalTariff=0;
iTotalTime=1; // 預(yù)設(shè)1秒鐘
fDelayLock=0;
bDialType=0;
fSecond=0;
fDelay5MS=1;
iAddress=0;
bClass=0;
SaveCurrentTime();
while(1){
switch(bSlaveStatus){
case 0x30: // 手動(dòng)計(jì)時(shí)狀態(tài)下,或被叫不計(jì)費(fèi),未啟動(dòng)計(jì)費(fèi)
while(1){
IDLE;
Flash(1);
if(OnHookDelay()||(pReadNumber==4)){
bSlaveStatus=0x33;
break;
}
if(fFanJiFangDao&&fFanJi){
//if(bClass>2){
bSlaveStatus=0x33;
break;
//}
//fFanjiRequest=1;
//fFanJi=0;
}
JudgeNum();
if(fSecond){
fSecond=0;
iAddress++;
iTotalTime++;
if(iMTTime!=9999){ // 是否要被叫限時(shí)
if((iTotalTime-1)>=iMTTime){
bSlaveStatus=0x33;
break;
}
}
}
if((!fSlaveCalcForm)&&fKey){ // 允許手動(dòng)計(jì)費(fèi)時(shí),手動(dòng)啟動(dòng)計(jì)費(fèi)
fKey=0;
if(bKeyBuf==K4){
bSlaveStatus=0x31;
break;
}
}
}
break;
case 0x31: // 自動(dòng)或手動(dòng)計(jì)費(fèi)準(zhǔn)備
TotalAdd(iRF0Tariff);
ciDelaySecond=iRT0Time;
fiDelaySecond=0;
fSecond=0;
fMustDelay=1;
iTotalTime=1;
bSlaveStatus=0x32;
break;
case 0x32:
DispCharge(lTotalTariff,1);
DispCharge(lTotalTariff,2);
DispTime(iTotalTime);
while(1){
IDLE;
Flash(1);
if(fSecond){
fSecond=0;
iAddress++;
DispTime(++iTotalTime);
if(iMTTime!=9999){ //是否要被叫限時(shí)
if((iTotalTime-1)>=iMTTime){
bSlaveStatus=0x33;
break;
}
}
if(fiDelaySecond){
fiDelaySecond=0;
ciDelaySecond=iRT1Time;
TotalAdd(iRF1Tariff);
break;
}
}
if(OnHookDelay()||(pReadNumber==4)||KeyPro()){
bSlaveStatus=0x33;
break;
}
if(fFanJiFangDao&&fFanJi){
//if(bClass>2){
bSlaveStatus=0x33;
break;
//}
//fFanjiRequest=1;
//fFanJi=0;
}
JudgeNum();
}
break;
case 0x33:
Close(MLD);
fLockRequest=1;
Speaker(255);
SaveTotal(); //被叫通話次數(shù)、收費(fèi)累計(jì)
cbFangDao=200; //關(guān)閉防盜聯(lián)絡(luò)音
if(fMustDelay){
DispSymbol(LARGE_UNFLASH);
DispSymbol(LARGE_PHONE);
if(fLocked)
DispSymbol(LARGE_LOCK);
bIDL=0;
memset(aNumBuf,0x0c,16); //被叫存儲(chǔ)零號(hào)碼話單
if(fSaveInTalk)
SaveRecord();
if(!fLOCPrintLimit)
PrintTalkRecord();
cbDelaySecond=5;
fDelaySecond=0;
}
else
fDelaySecond=1;
if(fLocked)
bStatusWord=S_NEWLOCKWAIT;
else
bStatusWord=S_NEWUNLOCKWAIT;
return;
}
}
}
void JudgeNum(void)
{
if(iAddress>90)
return;
if(pReadNumber<pWriteNumber){
bClass++;
pReadNumber++;
cbDelaySecond=10;
}
if(cbDelaySecond==0){
pReadNumber=0;
pWriteNumber=0;
}
}
/*
if(pReadNumber<pWriteNumber){
if(iAddress>60){
pReadNumber=0;
pWriteNumber=0;
}
else{
pReadNumber++;
cbDelaySecond=8;
fDelaySecond=0;
}
}
if(fDelaySecond){
fDelaySecond=0;
pReadNumber=0;
pWriteNumber=0;
}
}
*/
bool OnHookDelay(void)
{
if(fiiDelaySecond){
Close(MLD);
if(OnHook())
return TRUE;
else
return FALSE;
}
AutoReadPara(55);
if((bParaByte==1)&&(ciiDelaySecond==1)) //不并模擬負(fù)載
Close(MLD);
return FALSE;
}
bool KeyPro(void)
{
if(!fKey)
return FALSE;
fKey=0;
if((bKeyBuf==K4)&&(cbKey>=225)){
if(!fDelayLock){
fDelayLock=1;
cbKey=30;
}
else
return TRUE;
}
return FALSE;
}
// End function: KeyPro()
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -