📄 tskdvs.c
字号:
VoiceCh = HANDSET;
}
if(((INT24U)pMsg) == MSG_HOOK_ON){
OSQPost(peventCartoon, (OS_EVENT *)MSG_CARTOON_DIALOUTSTOP);
retval = DVS_ONHOOK;
}
if (((INT24U)pMsg) == MSG_WICRESP_RING){
OSQPost(peventWICCmd, (OS_EVENT *) MSG_VOICE_REJECT); //reject incoming call
}
else if(((INT24U)pMsg) == MSG_VOICE_CONNECT){
OSQPost(peventCartoon, (OS_EVENT *)MSG_CARTOON_DIALOUTSTOP);
retval = DVS_CONNECT;
}
else if(((INT24U)pMsg) == MSG_VOICE_BUSY){
OSQPost(peventCartoon, (OS_EVENT *)MSG_CARTOON_DIALOUTSTOP);
retval = DVS_BUSY;
}
if(((INT24U)pMsg)<= PTR_MAX){
if(((MSG_HEAD *)pMsg)->Msg_ID == MSG_KEY_PRESS){
if( ((MSG_KEYPRESS *)pMsg)->Key == KEY_HANDFREE && VoiceCh == HANDFREE){
OSQPost(peventCartoon, (OS_EVENT *)MSG_CARTOON_DIALOUTSTOP);
retval = DVS_ONHOOK;
}
}
Func_Clear_Msg(pMsg);
}
}
if(retval != 0) return(retval);
}
}
}
}
void Func_Busy(void){
INT8U rom *pMsg;
INT8U err,retval;
retval = 0;
Do_Clear_Screen(2,0,5,127);
Display_PleaseOnHook();
OSQPost(peventTone, (OS_EVENT *)MSG_TONE_BUSY);
for(;;){
pMsg = OSQPend(peventDVS, 0, &err);
if(err == OS_NO_ERR){
//waiting for on hook event
if(((INT24U)pMsg) >= PTR_MAX){
switch((INT24U)pMsg){
case MSG_HOOK_ON:
OSQPost(peventTone, (OS_EVENT *)MSG_TONE_STOP);
retval = 1;//return;
case MSG_HOOK_OFF:
Func_SetVoiceCh(VOX_HANDSET);
VoiceCh = HANDSET;
break;
case MSG_WICRESP_RING:
OSQPost(peventWICCmd, (OS_EVENT *) MSG_VOICE_REJECT); //reject incoming call
break;
}
}
if(((INT24U)pMsg)< PTR_MAX){
if(((MSG_HEAD *)pMsg)->Msg_ID == MSG_KEY_PRESS){
if( ((MSG_KEYPRESS *)pMsg)->Key == KEY_HANDFREE && VoiceCh == HANDFREE){
OSQPost(peventTone, (OS_EVENT *)MSG_TONE_STOP);
retval = 1;
}
}
Func_Clear_Msg(pMsg);
}
if(retval != 0) return;
}
}
}
void Func_Talking(void){
INT8U rom * pMsg;
INT8U err,retval,i,thirdparty;
INT8U rom * ptrTemp;
INT8U rom * ptrT1, *ptrT2;
retval = 0;
thirdparty = FALSE;
OSQPost(peventCharge, (OS_EVENT *) MSG_CHARGE_BEGIN);
Do_Clear_Screen(4,0,5,127);
Display_PhoneCallConnect();
Func_EnableChargeDisplay();
for(;;){
pMsg = OSQPend(peventDVS, 0, &err);
if(err == OS_NO_ERR){
if(((INT24U)pMsg) == MSG_HOOK_ON){
OSQPost(peventCharge, (OS_EVENT *)MSG_CHARGE_STOP);
OSQPost(peventWICCmd, (OS_EVENT *) MSG_VOICE_ONHOOK);
Func_DisableChargeDisplay();
retval = 1;
}
else if(((INT24U)pMsg) == MSG_VOICE_BUSY){
OSQPost(peventCharge, (OS_EVENT *)MSG_CHARGE_STOP);
Func_DisableChargeDisplay();
Func_Busy();
retval = 1;
}
else if(((INT24U)pMsg) == MSG_HOOK_OFF){
Func_SetVoiceCh(VOX_HANDSET);
VoiceCh = HANDSET;
}
else if (((INT24U)pMsg) ==MSG_MENU_EXIT){
MainWndType = WND_CALL;
IdleNumBufPTR = 0;
Func_EnableChargeDisplay();
}
if(((INT24U)pMsg)<= PTR_MAX){
if(((MSG_HEAD *)pMsg)->Msg_ID == MSG_KEY_PRESS){
err = ((MSG_KEYPRESS *)pMsg)->Key;
if(err == KEY_HANDFREE && VoiceCh == HANDFREE){
OSQPost(peventTone, (OS_EVENT *)MSG_TONE_STOP);
Func_DisableChargeDisplay();
retval = 1;
}
//else if((err == KEY_FUNC1) && (IdleNumBufPTR != 0)){
// MainWndType = WND_MENU;
// Func_DisableChargeDisplay();
// ptrTemp = OSMemGet(pMemSml,&err);
// if(err == OS_NO_ERR){
// ((MSG_HEAD *)ptrTemp)-> Msg_ID = MSG_MENU_KEY;
// ((MSG_HEAD *)ptrTemp)-> Origin = peventDVS;
// ((MSG_HEAD *)ptrTemp)-> pmemME = pMemSml;
// ((MSG_HEAD *)ptrTemp)-> Attached = FALSE;
// ((MSG_KEYPRESS *)ptrTemp)-> Key = ((MSG_KEYPRESS *)pMsg)->Key;
// OSQPost(peventMenu, (OS_EVENT *)ptrTemp);
// }
//}
else{
if((err >= '0' && err <= '9') || (err == KEY_STAR) || (err == KEY_CROSS)){
if (IdleNumBufPTR < 24){
IdleNumBuf[IdleNumBufPTR] = err;
IdleNumBufPTR++;
}
}
else if(err == KEY_C){
if(IdleNumBufPTR != 0) IdleNumBufPTR--;
Do_Clear_Screen(2,0,3,127);
}
if(IdleNumBufPTR == 1) Do_Clear_Screen(2,0,3,127); //add by ZWM
if(IdleNumBufPTR < 21) Display_Num(IdleNumBuf, IdleNumBufPTR);
else Display_Num(&IdleNumBuf[IdleNumBufPTR - 21], 21);
if(err == KEY_SEND){
if(IdleNumBufPTR != 0 && thirdparty == FALSE){
ptrT1 = OSMemGet(pMemSml, &err);
if(err == OS_NO_ERR){
ptrT2 = OSMemGet(pMemSml, &err);
if(err == OS_NO_ERR){
((MSG_HEAD *)ptrT1)-> Msg_ID = MSG_VOICE_3PARTY;
((MSG_HEAD *)ptrT1)-> Origin = peventDVS;
((MSG_HEAD *)ptrT1)-> pmemME = pMemSml;
((MSG_HEAD *)ptrT1)-> Attached = TRUE;
((MSG_HEAD *)ptrT1)-> LenOfAttach = IdleNumBufPTR;
((MSG_HEAD *)ptrT1)-> pMem = ptrT2;
((MSG_HEAD *)ptrT1)-> pmemATT = pMemSml;
}
//Add number process function here to replace the following codes
for(i = 0; i<IdleNumBufPTR; i++){
*ptrT2++ = IdleNumBuf[i];
}
IdleNumBufPTR = 0;
//
OSQPost(peventWICCmd, (OS_EVENT *)ptrT1);
pMsg = (INT8U rom *)PB_SearchMatchItem(NumBuf, ptrNumBuf);
if( pMsg != NULL_PTR){
Do_Clear_Screen(2,0,3,127);
app_printf((INT16U rom *)pMsg,10,2,0);
}
thirdparty = TRUE;
//Display_PhoneCallOut();
//OSQPost(peventCartoon, (OS_EVENT *)MSG_CARTOON_DIALOUT);
}
}
else OSQPost(peventWICCmd, (OS_EVENT *)MSG_VOICE_SWITCH);
}
}
}
else if(((MSG_HEAD *)pMsg)->Msg_ID ==MSG_WICRESP_CLIP){
Do_Clear_Screen(2,0,3,127); //add by ZWM
ptrTemp = (INT8U rom *)PB_SearchMatchItem(((MSG_HEAD *)pMsg)->pMem, ((MSG_HEAD *)pMsg)->LenOfAttach);
if( ptrTemp == NULL_PTR){
Display_Num(((MSG_HEAD *)pMsg)->pMem, ((MSG_HEAD *)pMsg)->LenOfAttach);
}
else{
app_printf((INT16U rom *)ptrTemp,10,2,0);
}
ptrTemp = ((MSG_HEAD *)pMsg)->pMem;
for(i=0; i<((MSG_HEAD *)pMsg)->LenOfAttach; i++){
if(i==MAX_NUMBER_LENGTH) break;
CallInNum[i] = *ptrTemp;
ptrTemp++;
}
ptrCallInNum = i;
thirdparty = TRUE;
}
Func_Clear_Msg(pMsg);
}
}
if(retval != 0) return;
}
}
void Func_CallFinish(void){
}
INT8U Func_EnterCallInStt(void){
INT8U rom * pMsg;
INT8U err;
INT8U Temp,i,j,retval;
INT8U rom *ptrTemp;
MainWndType = WND_CALL;
OSQPost(peventMenu, (OS_EVENT *)MSG_MENU_CANCEL);
retval = 0;
Do_Clear_Screen(2,0,5,127);
Display_Ring();
OSQPost(peventCartoon, (OS_EVENT *) MSG_CARTOON_RING); //Strat to display ring cartoon
Func_SetVoiceCh(VOX_HANDFREE);
OSQPost(peventWICCmd, (OS_EVENT *) MSG_RING_BEGIN); //Told WIC to send ring
Func_GetSysTime(&CurCallStartTime);
ptrCallInNum = 0; //clear the call in number buffer
for(;;){
pMsg = OSQPend(peventDVS, 0, &err);
if(err == OS_NO_ERR){
if(((INT24U)pMsg) == MSG_HOOK_OFF){
OSQPost(peventCharge, (OS_EVENT *)MSG_CHARGE_BEGIN);
OSQPost(peventCartoon, (OS_EVENT *)MSG_CARTOON_RINGSTOP);
OSQPost(peventWICCmd, (OS_EVENT *)MSG_VOICE_ANSWER);
Func_SetVoiceCh(VOX_HANDSET);
VoiceCh = HANDSET;
CallRecord_Save(&CallInNum[0], ptrCallInNum, &CurCallStartTime, RECENTRXCALL);//&SystemFile.RecentRxCall);
retval = DVS_CONNECT;
}
else if(((INT24U)pMsg) == MSG_VOICE_BUSY){
OSQPost(peventCartoon, (OS_EVENT *)MSG_CARTOON_RINGSTOP);
OSQPost(peventWICCmd, (OS_EVENT *)MSG_RING_STOP);
Func_SetVoiceCh(VOX_IDLE);
CallRecord_Save(&CallInNum[0], ptrCallInNum, &CurCallStartTime, UNACCEPTCALL);//&SystemFile.UnAcceptCall);
if(UnreadUnacceptCall<CALLRECORDNUM) UnreadUnacceptCall++;
retval = DVS_BUSY;
}
else if(((INT24U)pMsg) == MSG_MENU_EXIT){
Func_SetVoiceCh(VOX_HANDFREE);
}
if(((INT24U)pMsg)<= PTR_MAX){
if(((MSG_HEAD *)pMsg)->Msg_ID == MSG_KEY_PRESS){
if( ((MSG_KEYPRESS *)pMsg)->Key == KEY_HANDFREE ){
OSQPost(peventCharge, (OS_EVENT *)MSG_CHARGE_BEGIN);
OSQPost(peventCartoon, (OS_EVENT *)MSG_CARTOON_RINGSTOP);
OSQPost(peventWICCmd, (OS_EVENT *)MSG_VOICE_ANSWER);
VoiceCh = HANDFREE;
Func_SetVoiceCh(VOX_HANDFREE);
CallRecord_Save(&CallInNum[0], ptrCallInNum, &CurCallStartTime, RECENTRXCALL);//&SystemFile.RecentRxCall);
retval = DVS_CONNECT;
}
else if(((MSG_KEYPRESS *)pMsg)->Key == KEY_C){
OSQPost(peventCartoon, (OS_EVENT *)MSG_CARTOON_RINGSTOP);
retval = DVS_REJECT;
}
}
else if(((MSG_HEAD *)pMsg)->Msg_ID ==MSG_WICRESP_CLIP){
Do_Clear_Screen(2,0,3,127); //add by ZWM
ptrTemp = (INT8U rom *)PB_SearchMatchItem(((MSG_HEAD *)pMsg)->pMem, ((MSG_HEAD *)pMsg)->LenOfAttach);
if( ptrTemp == NULL_PTR){
Display_Num(((MSG_HEAD *)pMsg)->pMem, ((MSG_HEAD *)pMsg)->LenOfAttach);
}
else{
app_printf((INT16U rom *)ptrTemp,10,2,0);
}
ptrTemp = ((MSG_HEAD *)pMsg)->pMem;
for(i=0; i<((MSG_HEAD *)pMsg)->LenOfAttach; i++){
if(i==MAX_NUMBER_LENGTH) break;
CallInNum[i] = *ptrTemp;
ptrTemp++;
}
ptrCallInNum = i;
}
Func_Clear_Msg(pMsg);
}
}
if(retval != 0) return(retval);
}
}
void Func_ExitCallInStt(void){
INT8U err;
Do_Clear_Screen(2,0,5,127);
OSQPost(peventWICCmd, (OS_EVENT *) MSG_VOICE_ONHOOK);
MainWndType = WND_IDLE;
Func_DisplaySysTime(0);
Func_SetVoiceCh(VOX_IDLE);
}
void Func_ProcessSuperCmd(void);
void Monitor_Super_Command(INT8U key){
INT8U err;
INT8U rom * pSml;
if(key == KEY_STAR || key == KEY_CROSS || (key <= '9' && key >= '0')){
if(IdleNumBufPTR == 0)
MainWndType = WND_CALL;
pSml=OSMemGet(pMemSml,&err);
if(err == OS_NO_ERR){
((MSG_HEAD *)pSml)->Msg_ID=MSG_TIMER_START;
((MSG_HEAD *)pSml)->Origin=peventDVS;
((MSG_HEAD *)pSml)->pmemME=pMemSml;
((MSG_HEAD *)pSml)->Attached=FALSE;
((MSG_HEAD *)pSml)->LenOfBody=4;
((TIMER_MESSAGE *)pSml)->TID=DVS_20_S_ID;
((TIMER_MESSAGE *)pSml)->Val=2000; //20s
OSQPost(peventTimer,pSml);
}
if (IdleNumBufPTR < 24){
IdleNumBuf[IdleNumBufPTR] = key;
IdleNumBufPTR++;
}
Do_Clear_Screen(2,0,5,127); //add by ZWM
if(IdleNumBufPTR < 16) Display_Num(IdleNumBuf, IdleNumBufPTR);
else Display_Num(&IdleNumBuf[IdleNumBufPTR - 16], 16);
if(key == KEY_CROSS) Func_ProcessSuperCmd();
}
else if(key == KEY_C){
if(IdleNumBufPTR != 0) IdleNumBufPTR--;
if(IdleNumBufPTR == 0){
Do_Clear_Screen(2,0,5,127);
MainWndType = WND_IDLE;
Func_DisplaySysTime(0);
}
else{
Do_Clear_Screen(2,0,5,127); //add by ZWM
if(IdleNumBufPTR < 16) Display_Num(IdleNumBuf, IdleNumBufPTR);
else Display_Num(&IdleNumBuf[IdleNumBufPTR - 20], 16);
}
}
}
void Func_ProcessSuperCmd(void){
INT8U i,j,found,err;
if(IdleNumBufPTR <3) return;
if((IdleNumBuf[0] != '*') || (IdleNumBuf[1] != '#')) return;
found = FALSE;
i = 0;
for(j=0;j<IdleNumBufPTR-2;){
if((IdleNumBuf[j+2] & SuperCmd[i][j]) == 0) {
found = TRUE;
break;
}
if(IdleNumBuf[j+2] != SuperCmd[i][j]){
i++;
j = 0;
if(SuperCmd[i][0] == 0xff) break;
}
else j++;
}
if(found == TRUE){ //"found" only means the input contains a command
switch(i){
case 0: //*##
break;
case 1: //*#06#
break;
case 2: //*#07*
break;
case 3: //*#08*
break;
case 4: //*#0001*
switch (IdleNumBuf[7]){
case '0'://normal
if(IdleNumBufPTR != 0){
IdleNumBufPTR = 0;
}
Func_ChangeCOMMode(S_NORMAL);
Do_Clear_Screen(2,0,5,127);
MainWndType = WND_IDLE;
Func_DisplaySysTime(0);
break;
case '1'://debug
if(IdleNumBufPTR != 0){
IdleNumBufPTR = 0;
}
Func_ChangeCOMMode(S_DEBUG);
//an OK response shall be send to WIC to end current command
MainWndType = WND_CALL;
Display_Menu_Picture(&PIC_DEBUG);
break;
case '2'://monitor
if(IdleNumBufPTR != 0){
IdleNumBufPTR = 0;
}
Func_ChangeCOMMode(S_MONITOR);
Do_Clear_Screen(2,0,5,127);
MainWndType = WND_IDLE;
Func_DisplaySysTime(0);
break;
case '3'://modem
if(IdleNumBufPTR != 0){
IdleNumBufPTR = 0;
}
Func_ChangeCOMMode(S_OFFLINE);
//an OK response shall be send to WIC to end current command
Display_Menu_Picture(&PIC_NETWORK);
MainWndType = WND_CALL;
break;
}
break;
case 5: //*#0002#
break;
case 6: //*#0003#
break;
case 7: //*#1113*
break;
}
IdleNumBufPTR = 0;
}
}
INT8U get_inputnum(void){
IdleNumBufPTR = 0;
Func_EnterOffHookStt();
if(Func_OffHookProc() == DVS_ONHOOK){
Func_ExitOffHookStt();
return(DVS_ONHOOK);
}
return(DVS_DIALOUT);
}
void call_process(INT8U mode){
INT8U err;
if(mode == CALL_IN){
err = Func_EnterCallInStt();
if (err != DVS_CONNECT){
Func_ExitCallInStt();
return;
}
}
else{
err = Func_DialingProc();
if(err == DVS_ONHOOK){
Func_ExitOffHookStt();
return;
}
else if(err == DVS_BUSY){ //remote reject or busy
Func_Busy();
Func_ExitOffHookStt();
return;
}
}
Func_Talking();
Func_CallFinish();
Func_ExitOffHookStt();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -