📄 pctalk.c.bak
字号:
//******************************************************************************************
//File : pctalk.c
//Function: communication between handset and pc , protocol for database data transmit layer
//*****************************************************************************************
#include <database.h>
#include <api.h>
#include <string.h>
#include "hd_DT_wl.h"
#include "db.h"
#include "ExEH0218.h"
#include "common.h"
extern unsigned short g_rec_size[NUMOFDBTABLE];
extern char g_blocknum[NUMOFDBTABLE];
extern unsigned char *g_strTableName[];
extern unsigned char g_desk_NO[4+1];
extern unsigned char g_person_num;
extern unsigned char g_waiter_NO[4+1];
extern unsigned char g_waiter_PWD[4+1];
extern unsigned char g_comm_current_id;
extern unsigned char g_id_self;
extern unsigned char g_upld_client_mode;
int append_count_count;
char des_recv_lack ;
char src_recv_lack;
extern short g_com_port;
int g_upld_client_mode1;
unsigned char query_desk_no[10];
short DelFSID(int fsid);
short dt_send_tab_data_doing(unsigned char des,unsigned char src,int fsid,int type_comm);
short wait_for_tab_data(unsigned char des,unsigned char src,int fsid,unsigned long);
short wait_send_result(unsigned char des,unsigned char src);
void order_dish_relay();
void order_dish_leap();
short comm_search();
short dt_send_tab_data_search(unsigned char des,unsigned char src,unsigned char fsid);
unsigned long g_arr_total_exist[NUMOFDBTABLE];
short data_transmit()
{
unsigned char cmd_op, cmd_type;
unsigned short Acknowledge;
int datalen;
int ret,fsid = 0;
unsigned long count;
typ_msg_word msg_buffer;
unsigned long count_recv = 0;
unsigned char str_dsp[100];
unsigned char src=ID_BROARDCAST,des=0xFF,src_recv,des_recv;
unsigned char data[MAX_NUMBER_DT_DATA+30];
DispStr_CE(0,2,"计算数据条数...",DISP_CENTER|DISP_CLRSCR);
for(fsid=0;fsid<=NUMOFDBTABLE;fsid++)
g_arr_total_exist[fsid] = DB_count_records(fsid);
if(set_com_port()!=SUCCESSFUL) return FAILURE;
RECONNECT:
DispStr_CE(2,2,"等待连接...",DISP_CENTER|DISP_CLRSCR);
count_recv = 0;
if(g_com_port==PORT_UART_232||g_com_port==PORT_UART_IRDA)
dt_init(g_com_port,115200);
else
dt_init(g_com_port,9600);
while(1)
{
msg_buffer.s_word = sys_msg(SM_STAY_AWAKE);
if (msg_buffer.bits.key_available)
{
if(KEY_read()==KEY_F1)
{
dt_exit();
return FAILURE;
}
}
if(SUCCESSFUL == dt_connect_recv(&src_recv,src))
{
if(des != src_recv)
{
TRACE("d_t:des err");
//continue;
}
sprintf(str_dsp,"连接成功 %d:%d",src_recv,src);
DispStr_CE(2,2,str_dsp,DISP_CENTER|DISP_CLRSCR);
break;
}
}
//初始化数据库API函数参数
while (1)
{
if (dt_recv(&des_recv,&src_recv,data, &datalen,&Acknowledge) != SUCCESSFUL)
{
//if the K_C press down ,
msg_buffer.s_word = sys_msg(SM_STAY_AWAKE);
if (msg_buffer.bits.key_available)
{
if(KEY_read()==KEY_F1) break;
}
// TRACE("Waitting 1");
continue;
}
if(des_recv!=src||src_recv!=des)
{
TRACE("src or des error");
sprintf(str_dsp,"%02x:%02x:%02x:%02x",des_recv,src,src_recv,des);
TRACE(str_dsp);
//continue;
}
cmd_type = data[0];
cmd_op = data[1];
if ((cmd_type == CMD_REQ) && (cmd_op == CMD_RECV_DATA) )
{
//接收到PC机所请求的数据库记录的发送请求 POS -> PC
fsid = data[2];
if(fsid<0||fsid>NUMOFDBTABLE) continue;
ret = dt_send_tab_data_doing(des,src,fsid,0);
if(ret!=SUCCESSFUL) break;
}
else if ((cmd_type == CMD_REQ) && (cmd_op == CMD_SEND_DATA)) //pc -->pos
{
fsid = data[2];
memcpy(&count,data+3,4);
data[0] = CMD_REQ;
data[1] = CMD_RECV_DATA;
datalen = 2;
if ((dt_send(des,src,data, datalen) != SUCCESSFUL))
{
TRACE("dt_send err:recv doing");
delay_and_wait_key(0,EXIT_KEY_ALL,0);
return FAILURE;
}
ret = wait_for_tab_data(des_recv,src_recv,fsid,count);
if(ret!=SUCCESSFUL) break;
}
else if ((cmd_type == CMD_REQ) && (cmd_op == CMD_DISCONNECT)) //disconnect
{
data[0] = CMD_RTC;
data[1] = CMD_DISCONNECT;
datalen = 2;
if ((dt_send(des,src,data, datalen) != SUCCESSFUL))
{
TRACE("dt_send err:disc");
}
dt_exit();
goto RECONNECT;
}
else if ((cmd_type == CMD_REQ) && (cmd_op == CMD_SET_TIME)) //set date and time
{
char hour,minute,second;
char month,day;
int year;
hour = data[4];
minute = data[5];
second = data[6];
year = data[7]+2000;
month = data[8];
day = data[9];
if(RTC_set_date(MAKE_DATE(year,month,day))==-1)
{
DispStr_CE(0,6,"MAKE_DATE错误",DISP_CENTER|DISP_CLRSCR);
delay_and_wait_key( 2, 0, 0 );
}
if(RTC_set_time(MAKE_TIME(hour, minute, second)) == -1)
;//dt_DetectStatus(MSG_FAILURE);
else {
// refresh_icon();
}
data[0] = CMD_RTC;
data[1] = CMD_SET_TIME;
datalen = 2;
if ((dt_send(des,src,data, datalen) != SUCCESSFUL))
{
TRACE("dt_send err:set date");
}
}
else if((cmd_type == CMD_REQ) && (cmd_op == CMD_DATA_COUNT))//pc ask how many records
{
fsid = data[2];
count = DB_count_records(fsid);
data[0] = CMD_RTD;
data[1] = CMD_DATA_COUNT;
data[2] = fsid;
data[3] = count>>24;
data[4] = count>>16;
data[5] = count>>8;
data[6] = count;
datalen = 7;
if(dt_send(des,src,data, datalen) != SUCCESSFUL)
{
DispStr_CE(0,2,"通讯出错",DISP_CENTER|DISP_CLRSCR);
TRACE("dt_send:err ask num");
}
}
else if((cmd_type == CMD_REQ) && (cmd_op == CMD_DEL_FSID))//pc del fsid table
{
fsid = data[2];
data[0] = CMD_RTC;
data[1] = CMD_DEL_FSID;
datalen = 2;
if ((dt_send(des,src,data, datalen) != SUCCESSFUL))
{
TRACE("dt_send err:del tab");
}
DelFSID(fsid);
}
else if((cmd_type == CMD_REQ) && (cmd_op == CMD_DEL_ALLFS))//pc del all fs
{
data[0] = CMD_RTC;
data[1] = CMD_DEL_ALLFS;
datalen = 2;
if ((dt_send(des,src,data, datalen) != SUCCESSFUL))
{
TRACE("dt_send err:del tab all");
}
DelFSID(100);
}
else if((cmd_type == CMD_REQ) && (cmd_op == CMD_VERIFY_TAB))//Verify table data
{
fsid = data[2];
data[0] = CMD_RTC;
data[1] = CMD_VERIFY_TAB;
datalen = 2;
if ((dt_send(des,src,data, datalen) != SUCCESSFUL))
{
TRACE("dt_send err:veri");
}
DB_tab_check(fsid);
}
} //end of while
dt_exit();
return SUCCESSFUL;
}
short DelFSID(int fsid)
{
unsigned char msg[20],msg1[20],ret;
int i;
get_db_sys_param(&dsp);
file_sys_cnt = DB_check_db(filesys);
if(fsid>=NUMOFDBTABLE)
{
sprintf(msg,"删除所有数据");
sprintf(msg1,"表吗?");
}else
{
sprintf(msg,"删除");
sprintf(msg1,"%s吗?",g_strTableName[fsid]);
}
DispStr_CE(0,0,msg,DISP_CENTER|DISP_CLRSCR);
DispStr_CE(0,2,msg1,DISP_CENTER|DISP_CLRSCR);
DispStr_CE(0,2,"稍候...",DISP_CENTER|DISP_CLRSCR);
if(fsid>=NUMOFDBTABLE)
{
append_count_count_count(0);
init_db();
for(i=0;i<NUMOFDBTABLE;i++)
g_arr_total_exist[i] = 0;
} else {
if(ret=DB_erase_filesys(fsid)){
sprintf(msg,"删除%s出错",g_strTableName[fsid]);
DispStr_CE(0,2,msg,DISP_CENTER|DISP_CLRSCR);
delay_and_wait_key( 5, EXIT_KEY_ALL, 0 );
return FAILURE;
}else{
g_arr_total_exist[fsid] = 0;
if((fsid+1)==3) append_count_count_count(g_arr_total_exist[fsid]);
}
}
DispStr_CE(0,2,"删除成功",DISP_CENTER|DISP_CLRSCR);
return SUCCESSFUL;
}
//---------------------------------------------------------------------------------------------
void order_dish_relay(){//加菜
g_upld_client_mode1=2;
order_dish();
return 0;
}
void order_dish_leap(){//点菜
g_upld_client_mode1=0;
order_dish();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -