📄 funccallrecord.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 + -