📄 uart.c
字号:
BYTE dat = SUCCESS;
if(uartSbuf[DATLENGTH_PLACE]-DATAST_PLACE != 7)
{
dat = FORMAT_ERR;
}
else
{
nCount=DATAST_PLACE;
buf[YEAR_ADDR]=uartSbuf[nCount++];
buf[MOM_ADDR] =uartSbuf[nCount++];
buf[DATE_ADDR]=uartSbuf[nCount++];
buf[HOUR_ADDR]=uartSbuf[nCount++];
buf[MIN_ADDR] =uartSbuf[nCount++];
buf[SEC_ADDR] =uartSbuf[nCount++];
buf[DAY_ADDR] =uartSbuf[nCount++];
Do_WriteClock(buf);
}
uartSbuf[ASP_PLACE] = UP_ASP;
uartSbuf[TYPE_PLACE] = equip_addr.ntype;
uartSbuf[NUMBER_PLACE1] = ((BYTE*)&(equip_addr.number_addr))[0];
uartSbuf[NUMBER_PLACE2] = ((BYTE*)&(equip_addr.number_addr))[1];
//uartSbuf[DATLENGTH_PLACE]=
//uartSbuf[FRAMECODE_PLACE]= THELAST_FRAME;//保持原来下传的不变。
uartSbuf[ORDOR_PLACE] = AckSetGet_ORDOR;
nCount = DATAST_PLACE;
uartSbuf[nCount++] = dat;
uartSbuf[DATLENGTH_PLACE] = nCount;
Set_BCCsum(uartSbuf,nCount);
if(!SendStr(uartSbuf,nCount+1))Dis_Err(COMMERR);
if(dat==SUCCESS)
{
DisplayDate();
do_buzzer(BUZZER_WAIT);
}
}
void Do_GetSystemTime(void)
{
BYTE buf[7];// = {0x00,0x45,0x23,0x16,0x06,0x03,0x04};
BYTE nCount = ASP_PLACE;
uartSbuf[ASP_PLACE] = UP_ASP;
uartSbuf[TYPE_PLACE] = equip_addr.ntype;
uartSbuf[NUMBER_PLACE1] = ((BYTE*)&(equip_addr.number_addr))[0];
uartSbuf[NUMBER_PLACE2] = ((BYTE*)&(equip_addr.number_addr))[1];
//uartSbuf[DATLENGTH_PLACE]=
//uartSbuf[FRAMECODE_PLACE]= THELAST_FRAME;//保持原来下传的不变。
uartSbuf[ORDOR_PLACE] = AckSetGet_ORDOR;
Do_ReadClock(buf);
nCount = DATAST_PLACE;
uartSbuf[nCount++]=buf[YEAR_ADDR];
uartSbuf[nCount++]=buf[MOM_ADDR];
uartSbuf[nCount++]=buf[DATE_ADDR];
uartSbuf[nCount++]=buf[HOUR_ADDR];
uartSbuf[nCount++]=buf[MIN_ADDR];
uartSbuf[nCount++]=buf[SEC_ADDR];
uartSbuf[nCount++]=buf[DAY_ADDR];
uartSbuf[DATLENGTH_PLACE] = nCount;
Set_BCCsum(uartSbuf,nCount);
if(!SendStr(uartSbuf,nCount+1))Dis_Err(COMMERR);
}
#define FRAME_CONSTRUCT_S (DATLENGTH_MAX/sizeof(Con_Record))
void Do_ReadConData(void)
{
Con_Record xdata con_record;
BYTE ii,dat,nCount;
//SendStr(uartSbuf,10);//for test.
if( ((uartSbuf[DATLENGTH_PLACE]-DATAST_PLACE) != 1)
||((dat=uartSbuf[DATAST_PLACE])<1 )
||( dat > FRAME_CONSTRUCT_S )
)
{
Do_CheckEquip(FORMAT_ERR);
return;
}
uartSbuf[ASP_PLACE] = UP_ASP;
uartSbuf[TYPE_PLACE] = equip_addr.ntype;
uartSbuf[NUMBER_PLACE1] = ((BYTE*)&(equip_addr.number_addr))[0];
uartSbuf[NUMBER_PLACE2] = ((BYTE*)&(equip_addr.number_addr))[1];
//uartSbuf[DATLENGTH_PLACE]=
//uartSbuf[FRAMECODE_PLACE]= THELAST_FRAME;//保持原来下传的不变。
uartSbuf[ORDOR_PLACE] = AckSetGet_ORDOR;
nCount = DATAST_PLACE;
if((uartSbuf[FRAMECODE_PLACE]&FRAMES_MAX)==0)
{
//do_buzzer(1);//Dis_Err(ii);
//SendStr((BYTE *)&myall_savedata.lread_page,2);
//SendStr((BYTE *)&myall_savedata.conread_page,2);
//SendStr((BYTE *)&myall_savedata.lread_byte,2);
//SendStr((BYTE *)&myall_savedata.conread_byte,2);
myall_savedata.lread_page = myall_savedata.conread_page;
myall_savedata.lread_byte = myall_savedata.conread_byte;
}
while(dat--)
{
if((ii=Read_ConData_From_Memory(&con_record))==SUCCESS)
{
memcpy(&uartSbuf[nCount],&con_record,sizeof(Con_Record));
nCount += sizeof(Con_Record);
//if(nCount>FRAMELENGTH_MAX)break;
}
else if(ii==NO_CON_RECORD)
{
uartSbuf[FRAMECODE_PLACE] |= THELAST_FRAME;
receive_timer = 0; //must!
break;
}
else
{
Equip_CurStatus=ii;
Do_CheckEquip(ii);
do_buzzer(BUZZER_ALARM);//Dis_Err(ii);
return;
}
}
uartSbuf[DATLENGTH_PLACE] = nCount;
Set_BCCsum(uartSbuf,nCount);
if(!SendStr(uartSbuf,nCount+1))Dis_Err(COMMERR);
/*
if(uartSbuf[FRAMECODE_PLACE]&THELAST_FRAME)
{
do_buzzer(2);//Dis_Err(ii);
myall_savedata.lread_page = myall_savedata.conread_page;
myall_savedata.lread_byte = myall_savedata.conread_byte;
}
*/
}
void Do_SetConRecode(void)
{
Con_Record xdata con_record;
bit renew_del_flag=FALSE;
signed short dat;
BYTE ii,nCount;
//SendStr(uartSbuf,10);//for test.
dat = *(signed short*)(&uartSbuf[DATAST_PLACE]);
//*((BYTE *)(&dat+1))=uartSbuf[DATAST_PLACE+1];
if(((uartSbuf[DATLENGTH_PLACE]-DATAST_PLACE) != 2)
||(dat==0)||(dat>+250)||(dat<-250))
{
Do_CheckEquip(FORMAT_ERR);
return;
}
uartSbuf[ASP_PLACE] = UP_ASP;
uartSbuf[TYPE_PLACE] = equip_addr.ntype;
uartSbuf[NUMBER_PLACE1] = ((BYTE*)&(equip_addr.number_addr))[0];
uartSbuf[NUMBER_PLACE2] = ((BYTE*)&(equip_addr.number_addr))[1];
//uartSbuf[DATLENGTH_PLACE]=
//uartSbuf[FRAMECODE_PLACE]= THELAST_FRAME;//保持原来下传的不变。
uartSbuf[ORDOR_PLACE] = AckSetGet_ORDOR;
nCount = DATAST_PLACE;
if(dat<0)
{
renew_del_flag=TRUE; //TRUE:恢复
dat=-dat;
}
//=============================================================
if(renew_del_flag)for(nCount=0;nCount<dat;nCount++) //TRUE:恢复
{
if((ii=Renew_ConData_From_Memory(&con_record))==SUCCESS)
{
con_statusinfo.con_records++;
con_statusinfo.con_allmoney+=con_record.con_Money;
}
else if(ii==NO_CON_RECORD)
{
uartSbuf[FRAMECODE_PLACE] |= THELAST_FRAME;
receive_timer = 0; //must!
break;
}
else
{
Equip_CurStatus=ii;
Do_CheckEquip(ii);
do_buzzer(BUZZER_ALARM);//Dis_Err(ii);
return;
}
}
//-----------------------------------------------------------
else for(nCount=0;nCount<dat;nCount++)
{
if((ii=Del_ConData_From_Memory(&con_record))==SUCCESS)
{
if((con_statusinfo.con_records>0))//&&(con_record.mark==CONSUME_FLAG))
{
con_statusinfo.con_records--;
con_statusinfo.con_allmoney-=con_record.con_Money;
if(con_statusinfo.con_allmoney<0)con_statusinfo.con_allmoney=0L;
}
}
else if(ii==NO_CON_RECORD)
{
con_statusinfo.con_records = 0; //理论上不必要!
con_statusinfo.con_allmoney= 0L; //理论上不必要!
uartSbuf[FRAMECODE_PLACE] |= THELAST_FRAME;
receive_timer = 0; //must!
break;
}
else
{
Equip_CurStatus=ii;
Do_CheckEquip(ii);
do_buzzer(BUZZER_ALARM);//Dis_Err(ii);
return;
}
}
//============================================================
if(nCount)Save_My_All_Data();//防乱掉电用。
uartSbuf[DATAST_PLACE] = nCount; //成功删除或恢复的记录个数。
nCount=DATAST_PLACE+1;
uartSbuf[DATLENGTH_PLACE] = nCount;
Set_BCCsum(uartSbuf,nCount);
if(!SendStr(uartSbuf,nCount+1))Dis_Err(COMMERR);
}
//设置自动充值数据
void Do_SetAutoGainCards(void)
{
WORD PageIndex=uartSbuf[DATAST_PLACE] * 0x100 + uartSbuf[DATAST_PLACE+1];
BYTE RecordCount=uartSbuf[DATAST_PLACE+2];
BYTE nCount,dat;
if(uartSbuf[DATLENGTH_PLACE]-DATAST_PLACE < (sizeof(sttFillPara)*RecordCount + 3))
{
dat = FORMAT_ERR;
}
else
{
//memcpy(stOrderDinnerParaList,&uartSbuf[DATAST_PLACE+2],Len);
dat=WriteFillPara(PageIndex,RecordCount,(sttFillPara*)&uartSbuf[DATAST_PLACE+3]);
}
uartSbuf[ASP_PLACE] = UP_ASP;
uartSbuf[TYPE_PLACE] = equip_addr.ntype;
uartSbuf[NUMBER_PLACE1] = ((BYTE*)&(equip_addr.number_addr))[0];
uartSbuf[NUMBER_PLACE2] = ((BYTE*)&(equip_addr.number_addr))[1];
//uartSbuf[DATLENGTH_PLACE]=
//uartSbuf[FRAMECODE_PLACE]= THELAST_FRAME;//保持原来下传的不变。
uartSbuf[ORDOR_PLACE] = AckSetGet_ORDOR;
nCount = DATAST_PLACE;
uartSbuf[nCount++] = dat;
uartSbuf[DATLENGTH_PLACE] = nCount;
Set_BCCsum(uartSbuf,nCount);
if(!SendStr(uartSbuf,nCount+1))Dis_Err(COMMERR);
if(dat==SUCCESS)
{
do_buzzer(BUZZER_WAIT);
}
}
//读取自动充值数据
void Do_GetAutoGainCards(void)
{
WORD PageIndex=uartSbuf[DATAST_PLACE] * 0x100 + uartSbuf[DATAST_PLACE+1];
BYTE RecordCount=uartSbuf[DATAST_PLACE+2];
BYTE nCount = ASP_PLACE,dat;
if((uartSbuf[DATLENGTH_PLACE]-DATAST_PLACE) != 3)return; //err.
//if((dat=uartSbuf[DATAST_PLACE])<1 || dat>8)return;
uartSbuf[ASP_PLACE] = UP_ASP;
uartSbuf[TYPE_PLACE] = equip_addr.ntype;
uartSbuf[NUMBER_PLACE1] = ((BYTE*)&(equip_addr.number_addr))[0];
uartSbuf[NUMBER_PLACE2] = ((BYTE*)&(equip_addr.number_addr))[1];
//uartSbuf[DATLENGTH_PLACE]=
//uartSbuf[FRAMECODE_PLACE]= THELAST_FRAME;//保持原来下传的不变。
uartSbuf[ORDOR_PLACE] = AckSetGet_ORDOR;
nCount = DATAST_PLACE;
if(dat=ReadFillPara(PageIndex,RecordCount,(sttFillPara*)&uartSbuf[DATAST_PLACE])!=SUCCESS)
{
Equip_CurStatus=dat;
Do_CheckEquip(dat);
do_buzzer(BUZZER_ALARM);//Dis_Err(ii);
return;
}
//memcpy(&uartSbuf[DATAST_PLACE],&card_class,sizeof(sttOrderDinnerParameter)*RecordCount);
nCount += sizeof(sttFillPara)*RecordCount;
uartSbuf[DATLENGTH_PLACE] = nCount;
Set_BCCsum(uartSbuf,nCount);
if(!SendStr(uartSbuf,nCount+1))Dis_Err(COMMERR);
}
void Do_SetNumber(void) //modify 2004-09-05
{
BYTE nCount = ASP_PLACE;
BYTE dat = SUCCESS;
if(uartSbuf[DATLENGTH_PLACE]-DATAST_PLACE != 2)
{
dat = FORMAT_ERR;
}
else if(con_statusinfo.con_records>0)
{
dat= OP_UNALLOWED;//可能还有消费数据
}
else
{
//memcpy(&equip_addr,&uartSbuf[DATAST_PLACE],sizeof(Equip_Addr));
equip_addr.number_addr=*(WORD *)&uartSbuf[DATAST_PLACE];
dat=Saveparam_To_Mem();
}
uartSbuf[ASP_PLACE] = UP_ASP;
uartSbuf[TYPE_PLACE] = equip_addr.ntype;
uartSbuf[NUMBER_PLACE1] = ((BYTE*)&(equip_addr.number_addr))[0];
uartSbuf[NUMBER_PLACE2] = ((BYTE*)&(equip_addr.number_addr))[1];
//uartSbuf[DATLENGTH_PLACE]=
//uartSbuf[FRAMECODE_PLACE]= THELAST_FRAME;//保持原来下传的不变。
uartSbuf[ORDOR_PLACE] = AckSetGet_ORDOR;
nCount = DATAST_PLACE;
uartSbuf[nCount++] = dat;
uartSbuf[DATLENGTH_PLACE] = nCount;
Set_BCCsum(uartSbuf,nCount);
if(!SendStr(uartSbuf,nCount+1))Dis_Err(COMMERR);
if(dat==SUCCESS)
{
do_buzzer(BUZZER_WAIT);
}
}
void Do_GetNumber(void)//and 2004-09-5
{
BYTE nCount;
uartSbuf[ASP_PLACE] = UP_ASP;
uartSbuf[TYPE_PLACE] = equip_addr.ntype;
uartSbuf[NUMBER_PLACE1] = ((BYTE*)&(equip_addr.number_addr))[0];
uartSbuf[NUMBER_PLACE2] = ((BYTE*)&(equip_addr.number_addr))[1];
//uartSbuf[DATLENGTH_PLACE]=
//uartSbuf[FRAMECODE_PLACE]= THELAST_FRAME;//保持原来下传的不变。
uartSbuf[ORDOR_PLACE] = AckSetGet_ORDOR;
nCount = DATAST_PLACE;
memcpy(&uartSbuf[nCount],&equip_addr,sizeof(Equip_Addr));
nCount += sizeof(Equip_Addr);
uartSbuf[DATLENGTH_PLACE] = nCount;
Set_BCCsum(uartSbuf,nCount);
if(!SendStr(uartSbuf,nCount+1))Dis_Err(COMMERR);
}
void Do_GetConStatusInfo(void)
{
BYTE nCount = ASP_PLACE;
uartSbuf[ASP_PLACE] = UP_ASP;
uartSbuf[TYPE_PLACE] = equip_addr.ntype;
uartSbuf[NUMBER_PLACE1] = ((BYTE*)&(equip_addr.number_addr))[0];
uartSbuf[NUMBER_PLACE2] = ((BYTE*)&(equip_addr.number_addr))[1];
//uartSbuf[DATLENGTH_PLACE]=
//uartSbuf[FRAMECODE_PLACE]= THELAST_FRAME;//保持原来下传的不变。
uartSbuf[ORDOR_PLACE] = AckSetGet_ORDOR;
nCount = DATAST_PLACE;
//dat=restoreparam_from_Mem();
memcpy(&uartSbuf[nCount],&con_statusinfo,sizeof(Con_StatusInfo));
nCount += sizeof(Con_StatusInfo);
uartSbuf[DATLENGTH_PLACE] = nCount;
Set_BCCsum(uartSbuf,nCount);
if(!SendStr(uartSbuf,nCount+1))Dis_Err(COMMERR);
}
extern const BYTE code YsnOysFlag_Str[];
extern const BYTE code MyReVision_Str[];
extern const BYTE code Con_Types_Str[];
void Do_GetEquipVersionInfo(void)
{
BYTE nCount = ASP_PLACE;
uartSbuf[ASP_PLACE] = UP_ASP;
uartSbuf[TYPE_PLACE] = equip_addr.ntype;
uartSbuf[NUMBER_PLACE1] = ((BYTE*)&(equip_addr.number_addr))[0];
uartSbuf[NUMBER_PLACE2] = ((BYTE*)&(equip_addr.number_addr))[1];
//uartSbuf[DATLENGTH_PLACE]=
//uartSbuf[FRAMECODE_PLACE]= THELAST_FRAME;//保持原来下传的不变。
uartSbuf[ORDOR_PLACE] = AckSetGet_ORDOR;
nCount = DATAST_PLACE;
memcpy(&uartSbuf[nCount],Con_Types_Str,strlen(Con_Types_Str));
nCount+=strlen(Con_Types_Str);
memcpy(&uartSbuf[nCount],",",1);
nCount+=1;
memcpy(&uartSbuf[nCount],MyReVision_Str,strlen(MyReVision_Str));
nCount+=strlen(MyReVision_Str);
memcpy(&uartSbuf[nCount],&YsnOysFlag_Str[3],strlen(YsnOysFlag_Str)-2);
nCount+=strlen(YsnOysFlag_Str)-2;
uartSbuf[DATLENGTH_PLACE] = nCount;
Set_BCCsum(uartSbuf,nCount);
if(!SendStr(uartSbuf,nCount+1))Dis_Err(COMMERR);
}
void Do_SendCardStatus(void)
{
WORD PageIndex;
BYTE Count=uartSbuf[DATAST_PLACE+2];
BYTE Status=uartSbuf[DATAST_PLACE+3];
BYTE nCount,dat;
memcpy(&PageIndex,&uartSbuf[DATAST_PLACE],2); //包序号。
if(uartSbuf[DATLENGTH_PLACE]-DATAST_PLACE < (4*Count + 4))
dat = FORMAT_ERR;
else
dat=SaveCardStatusTable(PageIndex,&uartSbuf[DATAST_PLACE+4],Count,Status);
uartSbuf[ASP_PLACE] = UP_ASP;
uartSbuf[TYPE_PLACE] = equip_addr.ntype;
uartSbuf[NUMBER_PLACE1] = ((BYTE*)&(equip_addr.number_addr))[0];
uartSbuf[NUMBER_PLACE2] = ((BYTE*)&(equip_addr.number_addr))[1];
//uartSbuf[DATLENGTH_PLACE]=
//uartSbuf[FRAMECODE_PLACE]= THELAST_FRAME;//保持原来下传的不变。
uartSbuf[ORDOR_PLACE] = AckSetGet_ORDOR;
nCount = DATAST_PLACE;
uartSbuf[nCount++] = dat;
uartSbuf[DATLENGTH_PLACE] = nCount;
Set_BCCsum(uartSbuf,nCount);
if(!SendStr(uartSbuf,nCount+1))Dis_Err(COMMERR);
if(dat==SUCCESS)
{
do_buzzer(BUZZER_WAIT);
}
}
void Do_GetCardStatus(void)
{
WORD PageIndex;
//BYTE Count=uartSbuf[DATAST_PLACE+2];
BYTE Status=uartSbuf[DATAST_PLACE+2];
BYTE nCount,dat;
memcpy(&PageIndex,&uartSbuf[DATAST_PLACE],2);
if((uartSbuf[DATLENGTH_PLACE]-DATAST_PLACE) != 3)return; //err.
uartSbuf[ASP_PLACE] = UP_ASP;
uartSbuf[TYPE_PLACE] = equip_addr.ntype;
uartSbuf[NUMBER_PLACE1] = ((BYTE*)&(equip_addr.number_addr))[0];
uartSbuf[NUMBER_PLACE2] = ((BYTE*)&(equip_addr.number_addr))[1];
//uartSbuf[DATLENGTH_PLACE]=
//uartSbuf[FRAMECODE_PLACE]= THELAST_FRAME;//保持原来下传的不变。
uartSbuf[ORDOR_PLACE] = AckSetGet_ORDOR;
nCount = DATAST_PLACE;
if(dat=ReadCardStatusTable(PageIndex,&uartSbuf[DATAST_PLACE],33,Status)!=SUCCESS)
{
Equip_CurStatus=dat;
Do_CheckEquip(dat);
do_buzzer(BUZZER_ALARM);//Dis_Err(ii);
return;
}
//memcpy(&uartSbuf[DATAST_PLACE],&card_class,sizeof(sttOrderDinnerParameter)*RecordCount);
nCount += 4 * 33;
uartSbuf[DATLENGTH_PLACE] = nCount;
Set_BCCsum(uartSbuf,nCount);
if(!SendStr(uartSbuf,nCount+1))Dis_Err(COMMERR);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -