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

📄 db.c

📁 m68k手持机的通讯相关源码
💻 C
字号:
//*********************************************************************************************
//File    : db.c
//Function: define database table struct and size
//          format database and give some simple data for test
//          backup data manage, handset parameters manage
//*********************************************************************************************
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <api.h>
#include <database.h>

#include "db.h"
#include "hd_dt_wl.h"
#include "ExEH0218.h"

//how many blocks of every db table 
short g_blocknum[NUMOFDBTABLE] = {2,1,2,1,1,1};
//every record's size of db table  
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 int ac_time;
extern unsigned char g_id_self;
extern unsigned char g_id_server;

unsigned short g_rec_size[NUMOFDBTABLE] = {sizeof(TAB1_STRUCT),
					   sizeof(TAB2_STRUCT),
					   sizeof(TAB3_STRUCT)};

unsigned char *g_strTableName[NUMOFDBTABLE] = {"部门表",
					       "职务表",
					       "职员表"};

short clear_all_backup_data();

//int get_flash_size()
//{
//   int size_rom = 0;
//   while(1)
//   {
//   	if(!memcmp((unsigned char*)0,(unsigned char*)(++size_rom*0x100000),10)) break;
//   }
//   return size_rom;
//}
				    
//-----------------------------------------------------------------------------
//Function   : init_tab1() <--> init_tab5() and init_data()
//Description: give some simple data for test
//-----------------------------------------------------------------------------
int init_tab1()
{

}

int init_tab2()
{
}

int init_tab3()
{
}

int init_tab4()
{
}

int init_tab5()
{
}

void init_data()
{
	int i;
	unsigned char str_dsp[100];
	unsigned long count;
	char *recwfbuf;
	char fsid;
	char flag;
	
	DispStr_CE(0,0,"初始化表1",DISP_CENTER|DISP_CLRSCR);
	DispStr_CE(0,2,"......",DISP_CENTER);
	init_tab1();
    
	DispStr_CE(0,0,"初始化表2",DISP_CENTER|DISP_CLRSCR);
	DispStr_CE(0,2,"......",DISP_CENTER);
	init_tab2();
    
	DispStr_CE(0,0,"初始化表3",DISP_CENTER|DISP_CLRSCR);
	DispStr_CE(0,2,"......",DISP_CENTER);
	init_tab3();
	
	DispStr_CE(0,0,"初始化表4",DISP_CENTER|DISP_CLRSCR);
	DispStr_CE(0,2,"......",DISP_CENTER);
	init_tab4();
	
	DispStr_CE(0,0,"初始化表5",DISP_CENTER|DISP_CLRSCR);
	DispStr_CE(0,2,"......",DISP_CENTER);
	init_tab5();
	
	clr_scr();
	for(i=0;i<NUMOFDBTABLE;i++)
	{
		count = DB_count_records(i);
		sprintf(str_dsp,"tab%d:%d",i,count);
		DispStr_CE(0,i,str_dsp,DISP_POSITION|DISP_5x7);
		getch();
	}
	for(fsid=0;fsid<NUMOFDBTABLE;fsid++)
	{
		for(i=0;i<NUMOFDBTABLE;i++)
		{
			clr_scr();
		        recwfbuf = (char*)DB_jump_to_record(fsid, i, &flag);	
			sprintf(str_dsp,"tab%d:%d",fsid,i);
			DispStr_CE(0,0,str_dsp,DISP_POSITION|DISP_5x7);
			dump_memory(recwfbuf,10,1);
			dump_memory(recwfbuf+10,10,2);
			dump_memory(recwfbuf+20,10,3);
			dump_memory(recwfbuf+30,10,4);
			dump_memory(recwfbuf+40,10,5);
			dump_memory(recwfbuf+50,10,6);
			dump_memory(recwfbuf+60,10,7);
			dump_memory(recwfbuf+70,10,8);
			getch();
		}
	}
}

//-------------------------------------------------------------------------------
//Function     : init_db
//Descritiption: format database
//Input	       : None
//Output       : None
//Return       :
//Note         : Please format your database followed this function one by one
//-------------------------------------------------------------------------------
int init_db()
{
	int ret;
	int i;
	char strDsp[80];
	typ_RTC_time_rec dRec;
		
	clr_scr();
	get_db_sys_param(&dsp);
	DispStr_CE(0,0,"初始化数据库",DISP_CENTER|DISP_CLRSCR);
	DispStr_CE(0,2,"可能需要较长时间",DISP_CENTER);
	DispStr_CE(0,4,"稍后......",DISP_CENTER);
    	dRec.l_word =RTC_read_time();
	erase_db_sys();
	for (i =0; i < NUMOFDBTABLE; i++)
	{
		ret = DB_format_db(i, g_blocknum[i], g_rec_size[i]);
		if(ret)
		{
			DispStr_CE(0,0,"DB_format_db 错误!",DISP_CENTER|DISP_CLRSCR);
			dump_memory((unsigned char*)&ret,sizeof(ret),2);
			dump_memory((unsigned char*)&i,sizeof(i),4);
			while(1);
		}
	}
	file_sys_cnt=DB_check_db(filesys);
//	init_data();
	DispStr_CE(0,2,"初始化成功",DISP_CENTER|DISP_CLRSCR);
        sprintf( strDsp, "Start:%04d:%02d:%02d",dRec.fields.hour,dRec.fields.minute,dRec.fields.second);
	DispStr_E(0,6,strDsp,DISP_5x7|DISP_CENTER);
        dRec.l_word =RTC_read_time();
        sprintf( strDsp, "  End:%04d:%02d:%02d",dRec.fields.hour,dRec.fields.minute,dRec.fields.second);
	DispStr_E(0,7,strDsp,DISP_5x7|DISP_CENTER);
	delay_and_wait_key( 10, EXIT_KEY_ALL, 0 );
	return 0;
}
//------------------------------------------------------------------------------------------
//Function  : DB_tab_check
//Desciption: check the database's data validity by CRC
//-------------------------------------------------------------------------------------------
int DB_tab_check(int fsid)
{
	long count;
	int i;
	short ret;
	unsigned char str_dsp[100];
	short flag = 0;

	count = DB_count_records(fsid);
	sprintf(str_dsp,"校验%s",g_strTableName[fsid]);
	DispStr_CE(0,0,str_dsp,DISP_POSITION|DISP_CLRSCR);
	sprintf(str_dsp,"共%d条,稍候...",count);
	DispStr_CE(0,2,str_dsp,DISP_POSITION);
	for(i=0;i<count;i++)
	{
		ret = DB_check_record(fsid,i);
		if(!ret) {
			sprintf(str_dsp,"检验表%d出错%d",fsid,i);
			DispStr_CE(0,4,str_dsp,DISP_POSITION);
			flag = 1;
			if(delay_and_wait_key( 0, EXIT_KEY_ALL, 0 ) == EXIT_KEY_F1)
			  return FAILURE;
		}
		sprintf(str_dsp,"%d",i+1);
		DispStr_CE(2,4,str_dsp,DISP_POSITION);
	}
	if(flag) 
		return FAILURE;
	else 
	{
		DispStr_CE(0,6,"校验成功!",DISP_POSITION);
	        return 	SUCCESSFUL;
	}
}
//------------------------------------------------------------------------------------------------------
//Function     : chk_sys_db_format
//Descritiption: check the handset database struct, and decide whether to format the handset database or not
//		 用于手持机第一次启功时判断是否需要初始化数据库
//Input	       : None
//Output       : None
//Return       :
//Note         : Please apply the function when handset reset. two functions:get_db_sys_param and DB_check_db 
//		 must be applied when handset reset, otherwise problem will occur when to read and write database
//---------------------------------------------------------------------------------------------------------------
int chk_sys_db_format()
{
	// init for database 
	int ret,i;
	int db_flag = 0;
	char str_dsp[80];
	
	get_db_sys_param(&dsp);
	if(!(file_sys_cnt = DB_check_db(filesys))) 
	{
		DispStr_CE(0,0,"数据库未初始化",DISP_CENTER|DISP_CLRSCR);
		DispStr_CE(0,2,"Enter - 初始化",DISP_CENTER);
		DispStr_CE(0,4,"其他  - 取消",DISP_CENTER);
		ret = delay_and_wait_key(0,EXIT_KEY_ALL,0);
		if(ret == EXIT_KEY_ENTER) {
		   BEEPER_sound(0);
	           init_db();
	        }
	}
	if(file_sys_cnt != NUMOFDBTABLE) {
		//sprintf(str_dsp,"cnt:%d",file_sys_cnt);
		//DispStr_CE(0,0,str_dsp,DISP_CENTER|DISP_CLRSCR);
		//delay_and_wait_key(0,EXIT_KEY_ALL,0);
		db_flag	= 1;
	} else {
		for(i=0;i<NUMOFDBTABLE;i++)
		{
			if(filesys[i].block_cnt != g_blocknum[i]-1) 
			{
				sprintf(str_dsp,"db error:%d,%d,%d",filesys[i].block_cnt,
								    g_blocknum[i]-1,
								    i);
		        	DispStr_CE(0,0,str_dsp,DISP_CENTER|DISP_CLRSCR);
		        	delay_and_wait_key(0,EXIT_KEY_ALL,0);
				db_flag = 1;
				break;	
			}
		}
	}
	if(db_flag) {
		DispStr_CE(0,0,"数据库格式不对",DISP_CENTER|DISP_CLRSCR);
		DispStr_CE(0,2,"需要重新初始化",DISP_CENTER);
		DispStr_CE(0,4,"Enter - 初始化",DISP_CENTER);
		DispStr_CE(0,6,"其他  - 取消",DISP_CENTER);
		ret = delay_and_wait_key(0,EXIT_KEY_ALL,0);
		if(ret == EXIT_KEY_ENTER) {
		   BEEPER_sound(0);
	           init_db();
	    }				
	}
	return SUCCESSFUL;
}

int count_db_toal(int fsid,unsigned long *p_total,unsigned long *p_total_all)
{
	unsigned long counter,counter1;
	unsigned long i;
	void *pRec;
	char flag;
	
	counter = DB_count_records(fsid);
	for(i=0,counter1=0;i<counter;i++)
	{
		pRec = DB_jump_to_record(fsid,i,&flag);   //
		if(flag) continue;
		else {
			counter1++;
		}
	}
	if(p_total) *p_total = counter1;
	if(p_total_all) *p_total_all = counter;
	return SUCCESSFUL;	
}




//---------------------------------------------------------------------------------------------
//End
//---------------------------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -