⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.c

📁 一个具体的项目程序
💻 C
📖 第 1 页 / 共 2 页
字号:
    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 + -