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

📄 funccallrecord.c

📁 本人编写的无线电话程序,给予PIC18C801设计,包括了uCOS的移植以及菜单,自己设计的拼音注入法,完整地一级汉字库,希望对大家有所帮助
💻 C
字号:
#include "includes.h"


#define	MENU_BOOK_END		5
#define	MENU_ROOT			0

extern INT8U rom PIC_RETURN;		//返回(取消)
extern INT8U rom PIC_SAVE;			//保存
extern rom INT8U	CurPhoneNum[];				//电话号码(ASCII代码)
extern INT8U		CurPhoneNumLen;					//电话号码长度

extern INT8U CurMenu;
extern INT8U PrevMenu;	//used when exit from MENU_BOOK_END
extern rom INT16U	*CurText;						//文本字符串或姓名字符串指针(必须指向RAM的变量,因为可能要修改其中的内容)
extern INT8U		CurTextLen;						//文本字符串或姓名字符串的长度

extern OS_EVENT  *rom DisplaySem;

extern rom INT16U TextNoRecord[6];
extern rom INT16U *app_printf(rom INT16U *,INT8U,INT8U,INT8U);

extern INT8U Save_Domain(INT8U domain, INT8U rom * ptrData);
extern INT8U Read_Domain(INT8U domain, INT8U rom * ptrData);
extern INT8U MFunc_InsertPhoneBookItem(INT16U rom * pName, INT8U NameLen, INT8U rom * pNum, INT8U NumLen, INT8U Group);

extern void Display_Menu_Icon(INT8U LorR, INT8U rom * ptrD);
extern void Do_Clear_Screen(unsigned char startX,unsigned char startY,unsigned char endX,unsigned char endY);
extern unsigned char Disp_Word(unsigned char PosX,unsigned char PosY,unsigned int unicode,unsigned char Type);
void Func_DisplayNumAndTime(INT8U rom * ptrNum, INT8U Len, NM_TIME * ptrTime);
void Func_DisplaySmallIndex (INT8U Index);
INT8U MFunc_WaitForInput(INT8U);
INT8U EnterPhoneEdit(void);
void MFunc_DirectCall(INT8U rom * ptrData, INT8U Len);
void MenuDisplayKey(INT8U menu);



INT8U CallRecord_Check(INT8U record){
//INT8U CallRecord_Check(INT8U domain, CALL_RECORD * ptrRecord){
	INT8U head, tail,err,len, current,fhdl;//,i,pos,chrTemp;
	INT8U i;		//zwm changed
	//F_UserPrivate * pup;
	CALLRECORD * prp;

	Display_Menu_Icon(0,&PIC_SAVE);
	Display_Menu_Icon(1,&PIC_RETURN);
	Do_Clear_Screen(6,32,7,95);
	
	fhdl = file_open(usrpri_file, &pup);//Read_Domain(domain, (INT8U rom *)ptrRecord); //refresh the record
	switch(record){
		case UNACCEPTCALL:
			prp = &(((F_UserPrivate *)prp)->UnAcceptCall);
			break;
		case RECENTTXCALL:
			prp = &(((F_UserPrivate *)prp)->RecentTxCall);
			break;
		case RECENTRXCALL:
			prp = &(((F_UserPrivate *)prp)->RecentRxCall);
			break;
	}
	

	if((prp->Head > CALLRECORD-1) || (prp->Len > CALLRECORD)){
		head = 0;
		tail = 0;
		len = 0;
		current = 0;
	}
	else{
		head = prp->Head;
		len = prp->Len;
		tail = (head+len-1)%CALLRECORD;
		current = tail;
	}
	for(;;){
		if(len == 0){
			app_printf(TextNoRecord,3,2,0);
		}
		else{
			Do_Clear_Screen(6,32,7,95);
			Do_Clear_Screen(2,0,5,127);
			
			Func_DisplayNumAndTime(&(prp->Number[current][0]), 12, &(prp->Time[current]));
			Func_DisplaySmallIndex (((tail + CALLRECORD - current) % CALLRECORD)+1);
			
			//zwm changed below
			
			CurPhoneNumLen = app_c2a(&prp->Number[current][0], 12, CurPhoneNum);
		}
		
		switch(MFunc_WaitForInput(0)){
			case 0xff:
				return(1);
			case KEY_FUNC1:	//Save
				PrevMenu=CurMenu;
				CurMenu=MENU_BOOK_END; 
				i=EnterPhoneEdit();
				CurMenu=PrevMenu;
				
				if(i==2){
					//Save to PhoneBook
					MFunc_InsertPhoneBookItem(CurText, CurTextLen, CurPhoneNum, CurPhoneNumLen, 0);
					return(0);
				}
				break;

			case KEY_FUNC2:	//Cancel
				return(0);
			case KEY_C:		//Cancel
				return(0);
			case KEY_UP:
				if(len != 0){
					if(current != tail)
						current = (current + 1)%CALLRECORD;
					else
						current = head;
				}
				break;
			case KEY_DOWN:
				if(len != 0){
					if(current != head)
						current = (current + CALLRECORD - 1)%CALLRECORD;
					else
						current = tail;
				}
				break;
			case KEY_SEND:
				MFunc_DirectCall(prp->Number[current],12);
				CurMenu=MENU_ROOT;
				MenuDisplayKey(CurMenu);
				Do_Clear_Screen(6,32,7,95);	//clear the menu index field
				break;
			
		}
	}
}


//save to call records, in BUSPHONE version, this part is needed
//#pragma romdata EXTRAM
//INT8U rom CompressBuf[12];
#pragma code MYCODE
void CallRecord_Save(INT8U rom * ptrNum, INT8U NumLen, NM_TIME * ptrCallStartTime, INT8U record){
	CALL_RECORD * prp;
	INT8U Temp,i,j;
	INT16U offset;

	fhdl = file_open(usrpri_file, &pup);
	switch(record){
		case UNACCEPTCALL:
			prp = &(((F_UserPrivate *)prp)->UnAcceptCall);
			offset = offsetof(F_UserPrivate,UnAcceptCall);
			break;
		case RECENTTXCALL:
			prp = &(((F_UserPrivate *)prp)->RecentTxCall);
			offset = offsetof(F_UserPrivate,RecentTxCall);
			break;
		case RECENTRXCALL:
			prp = &(((F_UserPrivate *)prp)->RecentRxCall);
			offset = offsetof(F_UserPrivate,RecentRxCall);
			break;
	}

	if(prp->head > CALLRECORD-1 || prp->len > CALLRECORD){
		prp->head = 0;
		prp->len = 0;
	}
	if(ptrRecord->len == CALLRECORD){
		Temp = prp->head;
		prp->head=(prp->head+1)%CALLRECORD;
	}
	else{
		Temp = (prp->head + prp->len)%CALLRECORD;
		prp->len++;
	}
	
	app_a2c(ptrNum, NumLen, &prp->num[Temp][0]);
	
	prp->time[Temp].chrYear = ptrCallStartTime->chrYear;
	prp->time[Temp].chrMonth = ptrCallStartTime->chrMonth;
	prp->time[Temp].chrDate = ptrCallStartTime->chrDate;
	prp->time[Temp].chrHour = ptrCallStartTime->chrHour;
	prp->time[Temp].chrMinute = ptrCallStartTime->chrMinute;
	prp->time[Temp].chrSecond = ptrCallStartTime->chrSecond;
	
	file_save(	fhdl,
				offset+offsetof(CALL_RECORD, num[Temp][0]),
				12);
	file_save(	fhdl,
				offset+offsetof(CALL_RECORD, time[Temp]),
				sizeof(NM_TIME));
	file_save(	fhdl,
				offset+offsefof(CALL_RECORD, head),
				2*sizeof(INT8U));
/*
	FileSave(SYS_FILE_ID,
			(INT16U)((INT24U)&(ptrRecord->Number[Temp][0]) - (INT24U)&SystemFile),
			&(ptrRecord->Number[Temp][0]),
			12);
	FileSave(SYS_FILE_ID,
			(INT16U)((INT24U)&(ptrRecord->Time[Temp]) - (INT24U)&SystemFile),
			&(ptrRecord->Time[Temp]),
			sizeof(NM_TIME));
	FileSave(SYS_FILE_ID,
			((INT24U)ptrRecord - (INT24U)&SystemFile),
			&(ptrRecord->Head),
			2);
*/
}

⌨️ 快捷键说明

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