📄 phone.c
字号:
//name[15]='\0';
showMessage(2, name);
phoneDialStatus = PCS_DIAL;
// pMemberActive = &gMemberActive;
v_WriteLcdBuff();
}
/* 来电显示 */
static void showCallIn(void)
{
char name[60];
int aint;
memset(&gMemberActive, 0, sizeof(TALKING_MEMBER));
strncpy(gMemberActive.rec.number, g_pDialWnd->number, NUMBER_LEN-1);
gMemberActive.recType = PH_REC_UNTALK;
gMemberActive.callType= PCT_CALLIN;
gMemberActive.status = PCS_WAIT;
memset(name, 0, 60);
showMessage(0, TranslateChar("有来电"));
aint=GetNameFromNumber(g_pDialWnd->number, name);
if(aint<0)
showMessage(2, name);
else
{
showMessage(2, name);
showMessage(3, g_pDialWnd->number);//yu add
}
phoneDialStatus = PCS_WAIT;
v_WriteLcdBuff();
}
static void showSendDtmf(char ch)
{
if (phoneDialStatus == PCS_TALK) {
memset(gDtmfBuffer, 0, MAX_DTMF);
gDtmfLength = 0;
}
AT_SendDTMF(ch);
if (gDtmfLength < MAX_DTMF) {
gDtmfBuffer[gDtmfLength++] = ch;
}
else {
gDtmfLength--;
memmove(gDtmfBuffer, gDtmfBuffer+1, gDtmfLength);
gDtmfBuffer[gDtmfLength++] = ch;
}
showNumberOnLCD(gDtmfBuffer, gDtmfLength);
phoneDialStatus = PCS_DTMF;
}
static void showTalkStop(void)
{
char time[16];
showMessage(0, TranslateChar("通话结束"));
// Phone_StoreRec(talkingMem[0].number, recordType, talkingMem[0].time);
sprintf(time, "%02d:%02d", gMemberActive.rec.seconds/60, gMemberActive.rec.seconds%60);
showMessage(2, time);
gMemberActive.secStop = 0;
phoneDialStatus = PCS_STOP;
v_WriteLcdBuff();
}
static int CallastrictoutFun(void)
{int ret;
int tmp;
ret=0;
tmp=strlen(gDevicePara.Callastrict.IDD_head);
if(1==gDevicePara.Callastrict.out)
ret=-2;
else if((1==gDevicePara.Callastrict.IDD_out)&&\
(g_pDialWnd->input > tmp))
{
if(0==strncmp(g_pDialWnd->number,gDevicePara.Callastrict.IDD_head,tmp))
ret=-1;
}
debug_print_str(DM_RUNINFO, (info_buffer, "呼叫限制(-1: IDD ;-2 All;0:no): %d", ret));
return ret;
}
#if 1
#define TimeOut_xms 200 //单位是10ms 系统时钟10ms
NU_TIMER TimeOutTimer;
static void disable_TimeOut_timer(void)
{
NU_Control_Timer(&TimeOutTimer, NU_DISABLE_TIMER);
}
static void OnTimeout(UNSIGNED id)
{ disable_TimeOut_timer();
StoreMessage(MSG_TIMEOUT, 0, 0);
}
static void enable_TimeOut_Msg(int Time_xms)
{
NU_Control_Timer(&TimeOutTimer,NU_DISABLE_TIMER);
NU_Reset_Timer(&TimeOutTimer, OnTimeout, \
Time_xms, Time_xms, NU_ENABLE_TIMER);
}
void init_TimeOut_timer(void)
{
//===============================
//===============================
NU_Create_Timer(&TimeOutTimer, "TIMOUT", OnTimeout, 10,
TimeOut_xms, TimeOut_xms, NU_DISABLE_TIMER);
//NU_Create_Timer(&keytimer, "KEYTIM", OnKeyScan, 4,
// 初值, 间隔, NU_ENABLE_TIMER);
//OnKeyScan(timer ID)
//===============================
//===============================
}
#endif
extern void SetHandleKey(int id);
extern int AT_SetMicAGC(int vol);
static void Start_Dial_gotoTalk(void)
{char *Number;
Number=CutPauseNumber(g_pDialWnd->number);
showDialOut(Number);
if(0>CallastrictoutFun())
{
AT_Hangup();
showMessage(0, TranslateChar("呼叫限制"));
Waiting(2000);//yu add
showIdleStatus();//yu add
return;
}
/* ATD here */
if (AT_Dial(Number) == 0) //if (AT_Dial(g_pDialWnd->number) == 0)
{char *idex;
AT_SetMicAGC(gDevicePara.sysdata.MICAGC);//YU ADD
SwitchAudioOnDial(); /* */
idex=strpbrk(g_pDialWnd->number,"P");
if(idex!=NULL)
{//有p
char OPchar;
//SetHandleKey(0);
phoneDialStatus = PCS_DTMF;
for(;0<strlen(idex);)
{
OPchar=idex[0];
idex++;
if('P'==OPchar)
{
enable_TimeOut_Msg(302);
if(ID_OK != STimeOutMessageBox(TranslateChar("暂停..."),idex))
break;
}
else
{
enable_TimeOut_Msg(120);
AT_SendDTMF(OPchar);
if(ID_OK != STimeOutMessageBox(TranslateChar("正在发送..."),idex))
break;
}
}
//SetHandleKey(1);
}
//yu
phoneDialStatus = PCS_TALK;
OnSecondShow();//Start_Dial_gotoTalk
g_pDialWnd->input = 0;
memset(g_pDialWnd->number, 0, NUMBER_LEN);
}
else {
AT_Hangup();
showMessage(0, TranslateChar("拨号失败"));
Waiting(2000);//yu add
showIdleStatus();//yu add
}
}
/* 停止拨号,发起拨号后取消 */
static void OnStopDial(void)
{
/* 停止拨号 ATH */
AT_Hangup();
REC_Talk_TimeNummber(PH_REC_DIALED, &gMemberActive.rec);
showIdleStatus();
}
/* 拒绝接听,来电后拒绝接听 */
static void OnRejectCall(int id)
{
/* 拒绝接听 ATH */
if (id)
AT_Hangup();
REC_Talk_TimeNummber(PH_REC_TALKED, &gMemberActive.rec);
showIdleStatus();
}
/* 接听电话,来电后接听 */
static void OnAcceptCall(int id)
{
/* 接听 */
if (id)
AT_AcceptCall();
gMemberActive.status = PCS_TALK;
gMemberActive.recType = PH_REC_TALKED;
phoneDialStatus = PCS_TALK;
OnTalkConnect(0);
// AudioControl(VM_HANDLE);
// AT_SelectChannel(HANDFREE);
OnSecondShow();
}
/* 挂断电话,通话后主动挂断 */
static void OnHangupTalk(void)
{
if (phoneDialStatus == PCS_IDLE)
return;
/* 断开连接 ATH */
AT_Hangup();
REC_Talk_TimeNummber(gMemberActive.recType, &gMemberActive.rec);
StopVoiceMenu(); /* 停止播放任务 */
showTalkStop();
show_Icon_SPK_Hand(0); //yu
}
/* 挂断电话,通话后被动断开 */
static void OnCutoffTalk(void)
{
StopVoiceMenu(); /* 停止播放任务 */
REC_Talk_TimeNummber(gMemberActive.recType, &gMemberActive.rec);
showTalkStop();
show_Icon_SPK_Hand(0); //yu
}
extern void onPlayDialTone(int mode);
static void OnKeySPK(void)
{
switch (phoneDialStatus) {
case PCS_TALK:
case PCS_DTMF:
//----------------
if (1 == gTalkWithHandle)
SwitchToHandfree();
else
{
if(HOOK_ON==gRunParam.handleHook)
SwitchToHandset();
else
{
g_pDialWnd->input = 0;
g_pDialWnd->number[0] = 0;
OnHangupTalk();
}
}
// SwitchToHandset();/**/
//----------------
break;
case PCS_STOP:
showIdleStatus();
case PCS_IDLE:
phoneDialStatus=PCS_INPUT;
ClearPhoneLCD();
MoveTo(0, 30);//36);//yu add
DrawString((BYTE*)TranslateChar("请拨号"));
v_WriteLcdBuff();
onPlayDialTone(HANDFREE);
break;
case PCS_INPUT:
// if(g_pDialWnd->input)
// {
// Start_Dial_gotoTalk();
// }
// else
// {
g_pDialWnd->input = 0;
g_pDialWnd->number[g_pDialWnd->input] = 0;
showIdleStatus();
// }
break;
case PCS_WAIT://来铃接听
if(1==gDevicePara.sysdata.en_RecieveCAll)
{
StopRingNotify();
OnAcceptCall(1);
SwitchToHandfree();/**/
}
break;
case PCS_DIAL:
//yu case PCS_STOP:
default:
break;
}
}
extern void onPlayStart(int PlayID);
extern void onToneStopPlay(void);
static void OnHOOKeyUP(void)
{
#ifdef HARDWARE
#else
gRunParam_handleHook=1;
#endif
debug_out_str(DM_RUNINFO, "OnHOOKeyUP(void)");
sprintf(info, "UPin_phoneDialStatus:%d\r\n", phoneDialStatus);
debug_out_str(DM_RUNINFO, info);
switch (phoneDialStatus) {
case PCS_TALK:
case PCS_DTMF:
//----------------
//if (1 == gTalkWithHandle)
// SwitchToHandfree();
//else
SwitchToHandset();/**/
//----------------
//showSendDtmf(ch);
break;
case PCS_INPUT:
if(g_pDialWnd->input)
{
Start_Dial_gotoTalk();
break;
}
case PCS_STOP:
showIdleStatus();
case PCS_IDLE:
phoneDialStatus=PCS_INPUT;
ClearPhoneLCD();
MoveTo(0, 30);//36);//yu add
DrawString((BYTE*)TranslateChar("请拨号"));
v_WriteLcdBuff();
onPlayDialTone(HANDHELD);//播放假拨号音
break;
case PCS_WAIT://来铃接听
if(1==gDevicePara.sysdata.en_RecieveCAll)
{
StopRingNotify();
OnAcceptCall(1);
SwitchToHandset();/**/
}
break;
case PCS_DIAL:
//yu case PCS_STOP:
default:
break;
}
}
static void OnHOOKeyDown(void)
{
#ifdef HARDWARE
#else
gRunParam_handleHook=0;
#endif
debug_out_str(DM_RUNINFO, "OnHOOKeyDown(void)");
sprintf(info, "Downin_phoneDialStatus:%d\r\n", phoneDialStatus);
debug_out_str(DM_RUNINFO, info);
switch (phoneDialStatus) {
case PCS_TALK:
case PCS_DTMF:
if (1 == gTalkWithHandle)
{
g_pDialWnd->input = 0;
g_pDialWnd->number[0] = 0;
OnHangupTalk();
}
//showSendDtmf(ch);
break;
case PCS_IDLE:
break;
case PCS_INPUT:
g_pDialWnd->input = 0;
g_pDialWnd->number[g_pDialWnd->input] = 0;
showIdleStatus();
break;
case PCS_WAIT:
case PCS_DIAL:
case PCS_STOP:
default:
break;
}
}
extern int SetAudioMessageNum(void);
static void OnKeyD1_PCS_IDLE(void)
{//Audio Message
if(0<strlen(gDevicePara.sysdata.AudioMessage))
{
strcpy(g_pDialWnd->number,gDevicePara.sysdata.AudioMessage);
g_pDialWnd->input=strlen(g_pDialWnd->number);
//直接进入拨号画面showDialNumber();
Start_Dial_gotoTalk();
}
else
{
SetAudioMessageNum();
showIdleStatus();
}
}
static void OnKeyD9_PCS_IDLE(void)
{//Audio Message
if(0<strlen(&gDevicePara.sysdata.D112[0][0]))
{
strcpy(g_pDialWnd->number,&gDevicePara.sysdata.D112[0][0]);
g_pDialWnd->input=strlen(g_pDialWnd->number);
//直接进入拨号画面showDialNumber();
Start_Dial_gotoTalk();
}
else
{
}
}
static void OnInputKey(char ch)
{
switch (phoneDialStatus) {
case PCS_TALK:
case PCS_DTMF:
showSendDtmf(ch);
break;
case PCS_IDLE:
//if(KEY_D1==ch)
// OnKeyD1_PCS_IDLE();
break;//yu 禁止预拨号
case PCS_INPUT:
if (g_pDialWnd->input < NUMBER_LEN-1) {
g_pDialWnd->number[g_pDialWnd->input++] = ch;
g_pDialWnd->number[g_pDialWnd->input] = 0;
showDialNumber(); // 10
}
break;
case PCS_WAIT:
case PCS_DIAL:
case PCS_STOP:
default:
break;
}
}
extern WORD REC_Read_Redial(PHONE_RECORD *pRec);
static void OnkeyRedial(void)
{PHONE_RECORD pRedial;
if((phoneDialStatus==PCS_IDLE)||\
((phoneDialStatus==PCS_INPUT)&&(g_pDialWnd->input==0)))
{
REC_Read_Redial(&pRedial);
strcpy(g_pDialWnd->number,pRedial.number);
g_pDialWnd->input=strlen(g_pDialWnd->number);
if (g_pDialWnd->input)
Start_Dial_gotoTalk();//yu 8 showDialNumber();
else
showIdleStatus();
XSetBaseWindow(&g_pDialWnd->wnd);
debug_print_str(DM_RUNINFO, (info_buffer, "input: %d\n number:", g_pDialWnd->input));
debug_print_str(DM_RUNINFO, (info_buffer,g_pDialWnd->number));
}
}
static int OnKeyDEL(void)//yu
{
switch (phoneDialStatus)
{
case PCS_INPUT:
if (g_pDialWnd->input)
{
g_pDialWnd->input--;
g_pDialWnd->number[g_pDialWnd->input] = 0;
}
if (g_pDialWnd->input)
showDialNumber(); // 7
else
showIdleStatus();
break;
//------------------------
default:
break;
}
return 0;
}
static int OnKeyCancel(void)
{
switch (phoneDialStatus) {
case PCS_INPUT:
showIdleStatus();
break;
case PCS_DIAL:
OnStopDial(); /* 保存通话记录 */
strncpy(g_pDialWnd->number, gMemberActive.rec.number, NUMBER_LEN-1);
g_pDialWnd->input = strlen(g_pDialWnd->number);
g_pDialWnd->number[g_pDialWnd->input] = 0;
showDialNumber(); //6
break;
case PCS_FWAIT:
debug_out_str(DM_RUNINFO, "Press NO");
StopVoiceMenu();
//yu SetHandleRing(0, 1);
OnRejectCall(1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -