📄 jbserver.c
字号:
aLargeBuf[bWork]=0x00;
}
else
{
memset(aLargeBuf,0x00,11);
memset(&aLargeBuf[15],0x00,5);
}
}
else
{
for(i=0;i<bLength;i++)
{
if(i<11) bWork=i;
else bWork=30-i;
ToDisplay(i,bWork);
}
}
return bFirst_Flash;
} // End of DispFlash()
/*****************************************************************************
*
* 函数名: SelectPara
*
* 说 明: 选择参数显示内容
*
*****************************************************************************/
bool SelectPara(byte bParaNo,bool fAttribute)
{
byte i,bWork,btemp;
btemp=bParaNo;
if(pWriteNumber>0) // 话机键盘输入
{
bWork=aNumBuf[0];
pWriteNumber=0;
if(pReadNumber==0)
memset(aLargeBuf,0x00,20);
/*
while(pReadNumber==0) // 第一个键为大于3的数字键
{
//
if((bWork>3)&&(bWork<10));
else
break;
// yang add
if(bParaNo==btemp)
{
aServer[0]=btemp;
return TRUE;
}
if(GetParaNo(bParaNo,fAttribute))
{
aServer[0]=bParaNo;
return TRUE;
}
}
*/
if(bWork<10) // 按数字键
{
if(pReadNumber<3)
{
aServer[pReadNumber++]=bWork;
aLargeBuf[14]=0x73;
for(i=0;i<pReadNumber;i++)
ToDisplay(pReadNumber-i-1,11+i);
}
else
Speaker(5);
return FALSE;
}
if(bWork==11) // 按 * 键
{
if(pReadNumber==0)
bMenuLevel=1;
else{
aServer[0]=btemp;
pReadNumber=0;
}
return TRUE;
}
if(bWork==12) // 按 # 键
{
if(pReadNumber==0)
aServer[0]=btemp;
else{
bWork=BCDConvBIN(pReadNumber,1);
pReadNumber=0;
if((bWork>1)||(aServer[0]==255)
||(!GetParaNo(aServer[0],fAttribute))){
aServer[0]=btemp;
Speaker(10);
}
fDelaySecond=1; //add by yang
}
return TRUE;
}
if(pReadNumber>0)
return FALSE;
aServer[0]=btemp;
return TRUE;
}
bWork=bKeyBuf; // 计费器按键输入
fKey=0;
if(cbKey>=200) cbKey=180;
switch(bWork){
case K1 :
if(pReadNumber==0)
bMenuLevel=1;
else
aServer[0]=btemp;
pReadNumber=0;
return TRUE;
case K2 :
case K3 :
if(pReadNumber!=0)
{
Speaker(5);
aServer[0]=btemp;
return FALSE;
}
while(TRUE) // 找参数代码
{
if(bWork==K2){
if(bParaNo<=01)
bParaNo=233;
else bParaNo--;
}
else{
if(bParaNo>=233)
bParaNo=01;
else bParaNo++;
}
if(bParaNo==btemp){
aServer[0]=btemp;
break;
}
if(GetParaNo(bParaNo,fAttribute)){
aServer[0]=bParaNo;
break;
}
}
return TRUE;
case K4 :
if(pReadNumber==0)
aServer[0]=btemp;
else
{
bWork=BCDConvBIN(pReadNumber,1);
pReadNumber=0;
if((aServer[0]==255)||(bWork>1)
||(!GetParaNo(aServer[0],fAttribute)))
{
aServer[0]=btemp;
Speaker(10);
}
fDelaySecond=1;
}
return TRUE;
default :
Speaker(5);
aServer[0]=btemp;
return TRUE;
}
} // End of SelectPara();
/*****************************************************************************
*
* 函数名: Cancel
*
* 说 明: 取消输入
*
*****************************************************************************/
void Cancel(byte bParaNo)
{
pWriteNumber=0;
if(pReadNumber==0)
return;
if((bParaNo==01)||(bParaNo==02)||(bParaNo==202)||(bParaNo==210))
memset(aServer,0x0C,20);
else memset(aServer,0x00,20);
Confirm(bParaNo);
return;
} // End of Cancel()
/*****************************************************************************
*
* 函数名: Confirm
*
* 说 明: 确认输入
*
*****************************************************************************/
bool Confirm(byte bParaNo)
{
byte i,bWork;
uint pAddress;
if(pReadNumber==0)
return TRUE;
pReadNumber=0;
GetParaAttr(bParaNo);
pAddress=((uint)aParaBuf[3]<<8)+aParaBuf[4];
if((bParaNo==203)||(bParaNo==204))
{
BCDConvBIN(2,1);
bWork=aServer[0];
if(bWork>15)
return FALSE;
if(bParaNo==203)
{
GetParaContent(204);
BCDConvBIN(2,1);
aServer[0]=(bWork<<4)|aServer[0];
}
else
{
GetParaContent(203);
BCDConvBIN(2,1);
aServer[0]=bWork|(aServer[0]<<4);
}
}
else if((aParaBuf[2]&0x0F)==0x01)
{
for(i=0;i<aParaBuf[1];i++)
aServer[i]=(aServer[2*i]<<4)+aServer[2*i+1];
}
else if((aParaBuf[2]&0x0F)==0x05)
{
aServer[0]=aServer[0]<<7;
for(i=1;i<8;i++)
{
bWork=aServer[i];
aServer[0]=aServer[0]|(bWork<<(7-i));
}
}
else
{
bWork=BCDConvBIN(aBCDNumber[aParaBuf[1]-1],aParaBuf[1]);
if(bWork>aParaBuf[1]) return FALSE;
}
WriteData(aParaBuf[5],pAddress,aParaBuf[1],&aServer);
return TRUE;
} // End of Confirm()
/*****************************************************************************
*
* 函数名: GetParaNo
*
* 说 明: 取参数号码
*
*****************************************************************************/
bool GetParaNo(byte bParaNo,bool fAttri)
{
byte code *Point;
Point=PARA_START;
//if((bParaNo==00)||(bParaNo==75)||(bParaNo==200))
if(bParaNo==75)
return FALSE;
while(TRUE) // 找参数代码
{
if((*Point)==bParaNo)
break;
Point+=6;
if(Point>=PARA_END)
return FALSE;
}
if(!fAttri) return TRUE;
if(((*(Point+2))&0x80)==0)
return FALSE;
return TRUE;
}
/*****************************************************************************
*
* 函数名: GetParaAttr
*
* 说 明: 取参数属性
*
*****************************************************************************/
bool GetParaAttr(byte bParaNo)
{
byte i;
byte code *Point;
Point=PARA_START;
while(TRUE) // 找参数代码
{
if(*Point==bParaNo)
break;
Point+=6;
if(Point>=PARA_END)
return FALSE;
}
for(i=0;i<6;i++,Point++)
aParaBuf[i]=*Point;
return TRUE;
} // End of GetparaAttr()
/*****************************************************************************
*
* 函数名: GetParaContent
*
* 说 明: 取参数内容
*
*****************************************************************************/
byte GetParaContent(byte bParaNo)
{
byte i,bWork,bLength;
uint iAddr;
if(!GetParaAttr(bParaNo))
return 0;
iAddr=(((uint)aParaBuf[3])<<8)+aParaBuf[4];
ReadData(aParaBuf[5],iAddr,aParaBuf[1],aServer); // 读出参数内容
if(bParaNo==221)
{
memcpy(aCallTime,aServer,6); // 共用缓冲区aCallTime[]
for(i=0;i<6;i++)
{
aServer[0]=aCallTime[i];
BINConvBCD(1);
aSelfForm[2*i]=aServer[1];
aSelfForm[2*i+1]=aServer[2];
}
memcpy(aServer,aSelfForm,12);
bLength=12;
}
else if((bParaNo==203)||(bParaNo==204))
{
if(bParaNo==203)
bWork=aServer[0]>>4;
if(bParaNo==204)
bWork=aServer[0]&0x0F;
aServer[0]=bWork;
BINConvBCD(1);
aServer[0]=aServer[1];
aServer[1]=aServer[2];
bLength=2;
}
else if(bParaNo==50)
{
for(i=0;i<10;i++)
aLargeBuf[i]=ASCIICode(aServer[i]);
bLength=10;
}
else if((bParaNo==232)||(bParaNo==233)||(aParaBuf[2]&0x0F==1))
{
for(i=0;i<3;i++)
{
bWork=aServer[2-i];
aServer[4-2*i]=bWork>>4;
aServer[5-2*i]=bWork&0x0F;
}
bLength=6;
}
else if((aParaBuf[2]&0x0F)==1)
{
for(i=0;i<8;i++)
{
bWork=aServer[7-i];
aServer[14-2*i]=bWork>>4;
aServer[15-2*i]=bWork&0x0F;
}
bLength=2*aParaBuf[1];
}
else if((aParaBuf[2]&0x0F)==5)
{
bWork=aServer[0];
for(i=0;i<8;i++)
aServer[i]=(bWork>>(7-i))&0x01;
bLength=8;
}
else
{
BINConvBCD(aParaBuf[1]);
bLength=aBCDNumber[aParaBuf[1]-1];
}
return bLength;
}
/*****************************************************************************
*
* 函数名: ASCIICode
*
* 说 明: 把ASCII码转换为七段显示码
*
*****************************************************************************/
byte ASCIICode(byte bInNumber)
{
byte code *pDispCode;
pDispCode=DISP_CODE_ADDR;
while(1)
{
if(pDispCode>DISP_CODE_END)
return 0x00;
if(bInNumber==*pDispCode) //查字符表
{
bInNumber=*(++pDispCode);
return bInNumber;
}
else
pDispCode+=2;
}
} // End of ASCIICode()
/*****************************************************************************
*
* 函数名: BINConvBCD
*
* 说 明: 把长度为bLongth(<=3)个字节的BIN型数据转换为BCD型数据
*
*****************************************************************************/
byte BINConvBCD(byte bLongth) // OK ! blongth=3
{
byte i,j,bWork;
byte * pWork;
ulint lWork0,lWork1=1;
bWork=aBCDNumber[bLongth-1];
if(bLongth>4) return 99;
lWork0=0;
pWork=(byte *)&lWork0;
for(i=0;i<bLongth;i++) pWork[3-i]=aServer[bLongth-1-i];
for(i=0;i<bWork-1;i++) lWork1=lWork1*10;
for(i=0;i<bWork;i++)
{
for(j=0;j<10;j++)
{
if(lWork0<lWork1) break;
lWork0=lWork0-lWork1;
}
if(j==10) return 99;
aServer[i]=j;
lWork1=lWork1/10;
}
return bWork;
} // End of BINConvBCD()
/*****************************************************************************
*
* 函数名: BCDConvBIN
*
* 说 明: 把BCD型数据转换为BIN型数据
*
*****************************************************************************/
byte BCDConvBIN(byte cbInput,byte cbOutput ) // OK !
{
byte * ptemp,i;
ulint lWork0=0;
ulint lWork1=1;
for(i=0;i<cbInput;i++)
{
lWork0=lWork0+(uint)(aServer[cbInput-1-i]*lWork1);
lWork1=lWork1*10;
}
ptemp=(byte *)&lWork0;
for(i=0;i<cbOutput;i++) aServer[cbOutput-1-i]=ptemp[3-i];
for(i=0;i<4;i++) if(ptemp[i]!=0) break;
return (4-i);
} // End of BCDConvBIN()
/*****************************************************************************
*
* 函数名: FD_Lock
*
* 说 明: 计费器防盗打
*
*****************************************************************************/
void FD_Lock(bool fHook)
{
byte btemp;
btemp=cbFangDao;
if(OffHook())
{
if(fFDToneRequest){
if(cbFangDao>150)
cbFangDao=0;
}
else
cbFangDao=200;
AutoReadPara(36);
if(bParaByte<10)
bParaByte=10;
if(fDelaySecond) fLockRequest=1;
if(fDelaySecond||(fFDToneRequest&&(btemp>=200)))
{
cbDelaySecond=bParaByte;
fDelaySecond=0;
}
if(fHook)
{
aLargeBuf[1]=aLargeBuf[1]&0xF7;
aLargeBuf[2]=aLargeBuf[2]|0x08;
}
}
else
{
cbFangDao=200;
if(fHook)
{
aLargeBuf[1]=aLargeBuf[1]|0x08;
aLargeBuf[2]=aLargeBuf[2]&0xF7;
}
}
} // End of FD_Lock();
/*****************************************************************************
*
* 函数名: ToDisplay
*
* 说 明: 把中的数据转换成七段显示码送至显示缓冲区
*
*****************************************************************************/
void ToDisplay(byte paServer,byte pDispBuf)
{
aLargeBuf[pDispBuf]=aDispCode[aServer[paServer]];
} // End of ToDisplay()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -