📄 db.c
字号:
p_client_menu_rec = (tab_client_menu *)DB_jump_to_record(ID_TAB_CLIENT_MENU,i,&flag); //
if(!flag) counter1++;
}
if(p_total) *p_total = counter1;
return SUCCESSFUL;
}
// 梅海华 2005/06/06
//Ouput: p_total -- 所有有效数据的条数
// p_total_all -- 所有数据的条数,包括被删除的
short counter_client_disk_total1(unsigned long *p_total,unsigned long *p_total_all)
{
unsigned long counter,counter1;
unsigned long i;
tab_client_menu *p_client_menu_rec;
char flag;
counter = DB_count_records(ID_TAB_CLIENT_MENU);
for(i=0,counter1=0;i<counter;i++)
{
p_client_menu_rec = (tab_client_menu *)DB_jump_to_record(ID_TAB_CLIENT_MENU,i,&flag); //
if(!flag) counter1++;
}
if(p_total) *p_total = counter1;
if(p_total_all) *p_total_all = counter;
return SUCCESSFUL;
}
short counter_client_dish(unsigned long *p_total,unsigned long *p_total_money,unsigned long *p_num_cool,unsigned long *p_num_hot)
{
unsigned long counter,counter1;
tab_client_menu *p_client_menu_rec;
char flag;
tab_menu *p_menu_rec;
unsigned long i;
short ret;
int num_cool=0,num_hot=0;
if(p_total_money) *p_total_money = 0;
counter = DB_count_records(ID_TAB_CLIENT_MENU);
for(i=0,counter1=0;i<counter;i++)
{
p_client_menu_rec = (tab_client_menu *)DB_jump_to_record(ID_TAB_CLIENT_MENU,i,&flag); //
if(flag) continue;
ret = get_dish_info_by_NO(p_client_menu_rec->menu_NO,&p_menu_rec);
if(ret!=SUCCESSFUL) return ret;
if(p_total_money) *p_total_money += p_client_menu_rec->menu_quant * p_menu_rec->price;
ret = memcmp(p_client_menu_rec->menu_NO,"3",1); //1:凉菜
if(ret==0)
{
num_cool++;
} else {
num_hot++;
}
counter1++;
}
if(p_total) *p_total = counter1;
if(p_num_cool) *p_num_cool = num_cool;
if(p_num_hot) *p_num_hot = num_hot;
return SUCCESSFUL;
}
//------------------------------------------------------------------------------------------------
//台号缩写 人数 服务员工号 手持机编号 记录数 时间
// 4 1 4 1 4 040709 120000
//------------------------------------------------------------------------------------------------
#define LEN_BACKUP_DATA_HEAD 26
//上传成功以后,备份客户的点菜信息
short backup_client_data()
{
//删除原有数据
int ret;
if(ret=DB_erase_filesys(ID_TAB_CLIENT_MENU))
{
DispStr_CE(0,2,"删除点菜数据出错",DISP_CENTER|DISP_CLRSCR);
delay_and_wait_key( 0, EXIT_KEY_ALL, 0 );
return FAILURE;
}
//DispStr_CE(0,2,"备份成功!",DISP_CENTER|DISP_CLRSCR);
//delay_and_wait_key(3,EXIT_KEY_ALL,0);
return SUCCESSFUL;
}
//d_type -- 0: 当前记录 1:客户历史备份记录 2:客户暂存数据
unsigned long DB_count_records_client_data(int d_type,int seq_backup,unsigned short fsid)
{
if(d_type == 0)
return DB_count_records(ID_TAB_CLIENT_MENU);
else if(d_type==1){ //历史数据
return *(unsigned long*)(CLIENT_DATA_BACKUP_START_ADDR+seq_backup*LEN_BLOCK_CLIENT_BACKUP+10);
}else if(d_type==2){//暂存数据
return *(unsigned long*)(CLIENT_DATA_TMP_SAVE_START_ADDR+seq_backup*LEN_BLOCK_CLIENT_BACKUP+10);
}
}
// d_type -- 0: 当前记录 1:客户历史备份记录 2:客户暂存数据
void* DB_jump_to_record_client_data(int d_type,int seq_backup,unsigned long rec_num,char *p_flag)
{
if(d_type == 0)
return DB_jump_to_record(ID_TAB_CLIENT_MENU,rec_num,p_flag);
else if(d_type==1){//历史数据
*p_flag = 0;
return (void*)(CLIENT_DATA_BACKUP_START_ADDR+seq_backup*LEN_BLOCK_CLIENT_BACKUP+
LEN_BACKUP_DATA_HEAD+(sizeof(tab_client_menu)+2)*rec_num );
}else if(d_type==2){//暂存数据
*p_flag = 0;
return (void*)(CLIENT_DATA_TMP_SAVE_START_ADDR+seq_backup*LEN_BLOCK_CLIENT_BACKUP+
LEN_BACKUP_DATA_HEAD+(sizeof(tab_client_menu)+2)*rec_num );
}
}
int read_addr_com(unsigned char *addr_com) //读取手持的通讯地址
{
info_handset info;
memcpy(&info,(char*)ADDR_HANDSET_INFO,sizeof(info_handset));
*addr_com = info.addr_com;
return 0;
}
int read_num_floor(unsigned short *num_floor) //读取手持的楼层数量
{
info_handset info;
memcpy(&info,(char*)ADDR_HANDSET_INFO,sizeof(info_handset));
*num_floor = info.num_floor;
return 0;
}
//修改手持机上的手持机的无线通讯地址记录
//输入参数: addr_com 无线手持机的无线通讯地址
//输出参数: 无
int modify_addr_com(unsigned char addr_com) //修改手持的通讯地址
{
unsigned char buf[1024];
FLASH_wr_param f_w_p;
info_handset *info;
//read
memcpy(buf,(char*)ADDR_HANDSET_INFO,sizeof(buf));
if(FLASH_erase_block((char*)ADDR_HANDSET_INFO)!=0x80) return FAILURE;
//write
info = (info_handset*)buf;
info->addr_com = addr_com;
f_w_p.ptr_buffer = buf;
f_w_p.ptr_FLASH_addr = (char*)ADDR_HANDSET_INFO;
f_w_p.data_length = sizeof(buf)/2;
if(FLASH_write_record(&f_w_p)==0x80) return SUCCESSFUL;
else return FAILURE;
}
//修改flash上楼层层数记录
//输入参数:num_floor 楼层的总数
//输出函数:无
int modify_num_floor(unsigned short num_floor)
{
unsigned char buf[1024];
FLASH_wr_param f_w_p;
info_handset *info;
//read
memcpy(buf,(char*)ADDR_HANDSET_INFO,sizeof(buf));
if(FLASH_erase_block((char*)ADDR_HANDSET_INFO)!=0x80) return FAILURE;
//write
info = (info_handset*)buf;
info->num_floor = num_floor;
f_w_p.ptr_buffer = buf;
f_w_p.ptr_FLASH_addr = (char*)ADDR_HANDSET_INFO;
f_w_p.data_length = sizeof(buf)/2;
if(FLASH_write_record(&f_w_p)==0x80) return SUCCESSFUL;
else return FAILURE;
}
//在flash上存放一条楼层信道设置记录
int add_floor_channel_info(floor_channels channel)//存放楼层的信道信息
{
unsigned char buf_null[4] = {0xff,0xff,0xff,0xff};
int i = 0;
FLASH_wr_param f_w_p;
for(i=0;i<100;i++) {
if(!memcmp((char*)ADDR_HANDSET_INFO + sizeof(info_handset) + i*sizeof(floor_channels),buf_null,4))
break;
}
if(i>=100) return FAILURE;
f_w_p.ptr_buffer = &channel;
f_w_p.ptr_FLASH_addr = (char*)(ADDR_HANDSET_INFO+4+i*sizeof(floor_channels));
f_w_p.data_length = sizeof(floor_channels)/2;
if(FLASH_write_record(&f_w_p)==0x80){
// clr_scr();
// dump_memory((char*)ADDR_HANDSET_INFO,10,0);
// dump_memory((char*)DDR_HANDSET_INFO+10,10,1);
// dump_memory((char*)ADDR_HANDSET_INFO+20,10,2);
// dump_memory((char*)ADDR_HANDSET_INFO+30,10,3);
// delay_and_wait_key(0,EXIT_KEY_ALL,0);
return SUCCESSFUL;
}else return FAILURE;
}
//读取flash上的楼层设置数据
//输入参数:无
//输出参数: num_floor flash上的楼层设置记录的个数,如果有五层,将返回5
// floors 楼层的编号数组,长度为num_floor返回
int read_floor_channel_info(int *num_floor,unsigned char *floors)
{
info_handset info;
unsigned char buf_null[4] = {0xff,0xff,0xff,0xff};
int i;
floor_channels ch;
memcpy(&info,(char*)ADDR_HANDSET_INFO,sizeof(info));
for(i=0;i<100;i++) {
if(!memcmp((char*)ADDR_HANDSET_INFO + sizeof(info_handset) + i*sizeof(floor_channels),buf_null,4))
break;
}
if(i>=100)
{
TRACE("AAA ERROR");
return FAILURE;
}
if(i!=info.num_floor)
{
TRACE("BBB ERROR");
return FAILURE;
}
*num_floor = info.num_floor;
for(i=0;i<info.num_floor;i++)
{
memcpy(&ch,(char*)ADDR_HANDSET_INFO + sizeof(info_handset) + i*sizeof(floor_channels),sizeof(floor_channels));
*(floors+i) = ch.floor_id;
}
return SUCCESSFUL;
}
//存放服务器来的信道消息
//服务器传送的数据的格式:
//该数据采用十六进制数据:
// 1. 每一层楼信道为:楼层号 + 楼层的信道号列表(变长).
// 2. 楼层间采用0xFF隔开
//输入参数:paths: 服务器传来的数据
// len : paths 的长度
//输出参数:无
int save_info_path_set(unsigned char *paths,int len)
{
unsigned char *pStart,*pEnd;
floor_channels channels;
int i;
int count;
FLASH_wr_param f_w_p;
info_handset info;
for(count=0,i=0;i<len;i++)
{
if(*(paths+i) == 0xff) count++;
}
if(count==0) return FAILURE;
//dump_memory(&count,4,0);
//delay_and_wait_key(0,EXIT_KEY_ALL,0);
memcpy(&info,(char*)ADDR_HANDSET_INFO,sizeof(info_handset));
info.num_floor = count; //修改楼层的数量
info.LCD_contrast = 30;
if(FLASH_erase_block((char*)ADDR_HANDSET_INFO)!=0x80) return FAILURE;
f_w_p.ptr_buffer = &info;
f_w_p.ptr_FLASH_addr = (char*)ADDR_HANDSET_INFO;
f_w_p.data_length = sizeof(info)/2;
if(FLASH_write_record(&f_w_p)!=0x80) return FAILURE; //写头信息
pEnd = paths-1;
for(i=0;i<count;i++)
{
pStart = pEnd+1;
while(*(++pEnd)!=0xff);
if(pEnd-pStart>16)
{
TRACE("GGG ERROR");
return FAILURE;
}
memset(channels.channels,0,sizeof(channels.channels));
channels.floor_id = *pStart;
channels.channel_num = pEnd - pStart - 1;
memcpy(channels.channels,pStart+1,channels.channel_num);
if(add_floor_channel_info(channels)!=SUCCESSFUL)
{
TRACE("add f i 0 err");
return FAILURE;
}
}
return SUCCESSFUL;
}
//---------------------------------------------------------------------------------------------
//End
//---------------------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -