📄 answercall.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "asixwin.h"
#include "bitmap.h"
#include "alarm_q.h"
#include "select.h"
#include "sys\at.h"
STATUS CallErrorNoCarry(void);
STATUS CallErrorBusy(void);
STATUS CallErrorWrongNum(void);
STATUS AnswerCall(void)
{
U8 quit;
U16 lcd_w,lcd_h;
U32 boxid,st1,st2,bt1,bt2;
AT_RPS at_rps;
U32 response;
U8 i;
U32 pGC;
static char phone_num[40];
static MSG Msg;
pGC = GetGC();
memset( (void *)&Msg, 0x0, sizeof(Msg) );
lcd_w = ASIX_LCD_W;
lcd_h = ASIX_LCD_H;
boxid = CreateWindow(WNDCLASS_WIN, NULL, WS_BORDER | WS_SAVESCREEN,
2, 40, 116, 80, 0, 0, NULL);
if (boxid==0) return ASIX_ERROR;
st1 = CreateWindow(WNDCLASS_STATIC, "电话呼叫,来自:", WS_CHILD|SS_TEXT, 4,42,100,18,boxid,0,NULL);
bt1 = CreateWindow(WNDCLASS_BUTTON, "接听", WS_CHILD| BS_REGULAR,
10, 100, 40, 18, boxid, 0, NULL);
bt2 = CreateWindow(WNDCLASS_BUTTON, "拒接", WS_CHILD| BS_REGULAR,
60, 100, 40, 18, boxid, 0, NULL);
/* get phone number */
while(Receive_AT_RPS(&at_rps, 500))
{
response = Trans_AT_RPS(&at_rps);
if(response == AT_RPS_CLIP)
{
i=0;
while(at_rps.para[i]!=',')
{
phone_num[i] = at_rps.para[i];
i++;
}
phone_num[i]=0;
/* show phone number */
st2 = CreateWindow(WNDCLASS_STATIC, phone_num, WS_CHILD|SS_TEXT, 2,62,110,40,boxid,0,NULL);
break;
}
}
quit = FALSE;
while(!quit)
{
ASIXGetMessage(&Msg,NULL,0,0);
switch (Msg.message )
{
case WM_COMMAND:
if (Msg.lparam == bt1)
{
Send_AT_CMD("ATA");
while(Receive_AT_RPS(&at_rps, 1000))
{
response = Trans_AT_RPS(&at_rps);
switch(response)
{
case AT_RPS_OK:
break;
case AT_RPS_NO_CARRIER:
//CallErrorBusy();
TextOut(pGC, "对方已挂断",5, 80, 0, GPC_BLACK, GPC_REPLACE_STYLE);
quit = TRUE;
break;
default:
break;
}
}
Clear_AT_RPS(1);
}
if (Msg.lparam ==bt2)
{
quit = TRUE;
}
break;
case WM_QUIT:
// quit = TRUE;
break;
}
DefWindowProc(Msg.message, Msg.lparam, Msg.data, Msg.wparam);
}
DestroyWindow(boxid);
return ASIX_OK;
}
STATUS CallErrorBusy(void)
{
U8 quit;
U16 lcd_w,lcd_h;
U32 boxid,st1,st2,answer_call,denial_call;
static char phone_num[]="请呆会再拨";
static MSG Msg;
memset( (void *)&Msg, 0x0, sizeof(Msg) );
lcd_w = ASIX_LCD_W;
lcd_h = ASIX_LCD_H;
boxid = CreateWindow(WNDCLASS_WIN, NULL, WS_BORDER | WS_SAVESCREEN,
2, 40, 116, 80, 0, 0, NULL);
if (boxid==0) return ASIX_ERROR;
st1 = CreateWindow(WNDCLASS_STATIC, "线路忙!", WS_CHILD|SS_TEXT, 4,42,100,18,boxid,0,NULL);
st2 = CreateWindow(WNDCLASS_STATIC, phone_num, WS_CHILD|SS_TEXT, 2,62,110,18,boxid,0,NULL);
answer_call = CreateWindow(WNDCLASS_BUTTON, "重拨", WS_CHILD| BS_REGULAR,
10, 100, 40, 18, boxid, 0, NULL);
denial_call = CreateWindow(WNDCLASS_BUTTON, "取消", WS_CHILD| BS_REGULAR,
60, 100, 40, 18, boxid, 0, NULL);
quit = FALSE;
while(!quit)
{
ASIXGetMessage(&Msg,NULL,0,0);
switch (Msg.message )
{
case WM_COMMAND:
if (Msg.lparam == answer_call)
{
CallErrorNoCarry();
//quit = TRUE;
}
if (Msg.lparam ==denial_call)
{
quit = TRUE;
}
case WM_QUIT:
//quit = TRUE;
break;
}
DefWindowProc(Msg.message, Msg.lparam, Msg.data, Msg.wparam);
}
DestroyWindow(boxid);
return ASIX_OK;
}
STATUS CallErrorNoCarry(void)
{
U8 quit;
U16 lcd_w,lcd_h;
U32 boxid,st1,st2,answer_call,denial_call;
static char phone_num[]="请呆会再拨";
static MSG Msg;
memset( (void *)&Msg, 0x0, sizeof(Msg) );
lcd_w = ASIX_LCD_W;
lcd_h = ASIX_LCD_H;
boxid = CreateWindow(WNDCLASS_WIN, NULL, WS_BORDER | WS_SAVESCREEN,
2, 40, 116, 80, 0, 0, NULL);
if (boxid==0) return ASIX_ERROR;
st1 = CreateWindow(WNDCLASS_STATIC, "没有信号!", WS_CHILD|SS_TEXT, 4,42,100,18,boxid,0,NULL);
st2 = CreateWindow(WNDCLASS_STATIC, phone_num, WS_CHILD|SS_TEXT, 2,62,110,18,boxid,0,NULL);
answer_call = CreateWindow(WNDCLASS_BUTTON, "重拨", WS_CHILD| BS_REGULAR,
10, 100, 40, 18, boxid, 0, NULL);
denial_call = CreateWindow(WNDCLASS_BUTTON, "取消", WS_CHILD| BS_REGULAR,
60, 100, 40, 18, boxid, 0, NULL);
quit = FALSE;
while(!quit)
{
ASIXGetMessage(&Msg,NULL,0,0);
switch (Msg.message )
{
case WM_COMMAND:
if (Msg.lparam == answer_call)
{
CallErrorWrongNum();
//quit = TRUE;
}
if (Msg.lparam ==denial_call)
{
quit = TRUE;
}
case WM_QUIT:
//quit = TRUE;
break;
}
DefWindowProc(Msg.message, Msg.lparam, Msg.data, Msg.wparam);
}
DestroyWindow(boxid);
return ASIX_OK;
}
STATUS CallErrorWrongNum(void)
{
U8 quit;
U16 lcd_w,lcd_h;
U32 boxid,st1,st2,answer_call,denial_call;
static char phone_num[]="请重新确认";
static MSG Msg;
memset( (void *)&Msg, 0x0, sizeof(Msg) );
lcd_w = ASIX_LCD_W;
lcd_h = ASIX_LCD_H;
boxid = CreateWindow(WNDCLASS_WIN, NULL, WS_BORDER | WS_SAVESCREEN,
2, 40, 116, 80, 0, 0, NULL);
if (boxid==0) return ASIX_ERROR;
st1 = CreateWindow(WNDCLASS_STATIC, "错误的号码!!", WS_CHILD|SS_TEXT, 4,42,100,18,boxid,0,NULL);
st2 = CreateWindow(WNDCLASS_STATIC, phone_num, WS_CHILD|SS_TEXT, 2,62,110,18,boxid,0,NULL);
answer_call = CreateWindow(WNDCLASS_BUTTON, "重拨", WS_CHILD| BS_REGULAR,
10, 100, 40, 18, boxid, 0, NULL);
denial_call = CreateWindow(WNDCLASS_BUTTON, "取消", WS_CHILD| BS_REGULAR,
60, 100, 40, 18, boxid, 0, NULL);
quit = FALSE;
while(!quit)
{
ASIXGetMessage(&Msg,NULL,0,0);
switch (Msg.message )
{
case WM_COMMAND:
if (Msg.lparam == answer_call)
{
CallErrorBusy();
//quit = TRUE;
}
if (Msg.lparam ==denial_call)
{
quit = TRUE;
}
case WM_QUIT:
//quit = TRUE;
break;
}
DefWindowProc(Msg.message, Msg.lparam, Msg.data, Msg.wparam);
}
DestroyWindow(boxid);
return ASIX_OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -