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

📄 set_a_calltransfer.c

📁 本程序是使用CDMA450模块开发的一个无线公话完整程序
💻 C
字号:
#ifdef  _MNT_
  #include <assert.h>
#else
  #define  assert(x)
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "datatype.h"
#include "mmalloc.h"
#include "at.h"
#include "METAWNDO1.H"
#include "paramanage.h"
#include "windows.h" 
#include "translate.h"

#include "debug_out.h"
#include "selectwnd.h"
#include "Message.h"
extern int Waiting(int a);


#define  COMPILE_OK  0
#define  COMPILING	 1

static char *SETDISPLAYCHAR[]={
"连接中...",//0

 "设置成功",// 1
 "设置失败",// 2

 "设置成功",// 3//取消成功
 "设置失败",// 4//取消失败

 "查询出错",// 5
 "已经取消",// 6
 "已经登记",// 7

};
//=================================

#if COMPILING
#define MAX_CFG_ITEM_001 3
const static char *cfgName_001[] = {
		"禁用",
		"启用",
		"查询状态",
};


//========================================
#define CALLTRANSFER 1
#if CALLTRANSFER 
//#define CALLTRANSFER_0 1
//#define CALLTRANSFER_1 1
//#define CALLTRANSFER_2 1
#define CALLTRANSFER_3 1
#define CALLTRANSFER_4 1

/*
*enshow =1 ;显示
*
*/
static int _delete_all_Transfer()
{
	int cond;
	int sum;
	sum=0;



	for(cond=2;cond>=0;cond--)
		{
		sum+=AT_DelCallforward(cond);
		}
	if(sum==0)
		return 0;
	else
		return -1;


}
static int  TransferCheck(int cond,CALLF_PARAM *CALLforward_St,int enshow)
{//发送查询命令
char prstr[30];

int status;
		status=AT_ChkCallforward(cond,CALLforward_St);
		if(0==status)
		{//
			if(strlen(CALLforward_St->number)>0&&CALLforward_St->status==1)
				{
				if(CALLforward_St->type==145)
					{
					strcpy(prstr, "+");
					strcat(prstr,CALLforward_St->number);

					strcpy(CALLforward_St->number,&prstr[3]);
					}
				else
					{
					strcpy(prstr,CALLforward_St->number);
					}
				if(enshow)XMessageBox(TranslateChar("转移到"),prstr,ID_OK);
				}
			else if(CALLforward_St->status==0)
				{
				if(enshow)XMessageBox(NULL,TranslateChar("没有转移"),ID_OK);
				}
		}
		return status;
}
static int en_Call_transfer(int cond,char *transferDialt)
{
rect area;
int state=0;
static int inttime=20;
CALLF_PARAM pParam;


//-----------输入号码
	//SetRect(&area, 10, 15, 100, LCD_HEIGHT-10);
	SetRect(&area, 10, 12, 102, LCD_HEIGHT-14);
	if (0 > InputLine(&area, TranslateChar("输入号码"),  (BYTE*)transferDialt, NUMBER_LEN-1, INPUT_DIGITAL | INPUT_FIXED))
		return -1;
	
//-----------开始登记
		XTipWndShow(TranslateChar(SETDISPLAYCHAR[0]),1);// "连接中...",//0
			//AT_DelCallforward(0);//只取消转移所有//_delete_all_Transfer();//先取消所有
		memset(&pParam,0,sizeof(CALLF_PARAM));
		pParam.status=0xFF;
		pParam.classx=0xFF;
		state=AT_RegCallforward(cond,transferDialt,inttime,&pParam);
		if(0 == state)
			{
			debug_print_str(DM_RUNINFO, (info_buffer, "pParam: %d,%d", pParam.status,pParam.classx));
			// 不成功+CCFC:0,0,
			if(pParam.classx==0)//该模块回恢复参数的第二个
				{
				XTipWndShow(TranslateChar(SETDISPLAYCHAR[2]),1);//"设置失败"
				return -1;
				}
			else
				{
				XTipWndShow(TranslateChar(SETDISPLAYCHAR[1]),1);//"设置成功"
				return 0;
				}

			}
		else
			{
			XTipWndShow(TranslateChar(SETDISPLAYCHAR[2]),1);//"设置失败"
			return -1;
			}
	

}

static int _Talk_Call_transfer(int cond)
{
char transferDial[NUMBER_LEN];
CALLF_PARAM CALLforward_St;
int		selMenu, id = 1;

//rect area;
int state=0;

 	memset(&CALLforward_St, 0, sizeof(CALLF_PARAM));
 	memset(transferDial, 0, NUMBER_LEN);

	selMenu = CALLforward_St.status;

	while (id) {//MAX_CFG_ITEM_001
		id = XSelectWindow((char**)cfgName_001, 2, selMenu);//,FALSE);
		if (id < 0)
			break;
		selMenu = id;

		//XTipWndShow(TranslateChar(SETDISPLAYCHAR[0]),1);//连接中
		switch (id) {
		case 0://取消
			if(0==AT_DelCallforward(cond))
				{
				XTipWndShow(TranslateChar(SETDISPLAYCHAR[1]),1);//"设置成功"
				id = 0;
				}
			else
				{
				XTipWndShow(TranslateChar(SETDISPLAYCHAR[2]),1);//"设置失败"
				id = 1;
				}
			break;
		case 1://设置
			if(0==en_Call_transfer(cond,transferDial))
				id = 0;//ok
			else
				id = 1;//error
			break;
		case 2://查询
			state=TransferCheck(cond,&CALLforward_St,1);//需要等待
			id = 1;
			break;
		default:
			id = 0;
			break;
		}
	}
	return 0;
}


//=====


//--------1
#define  MAX_CFG_ITEM     3// 4

const static char *cfgName[] = {
		"无条件转移",
		"忙时转移",
		"无应答转移",
		"关闭所有转移",
};



void Talk_Call_transfer(void)
{
CALLF_PARAM CALLforwardSt;
	int		selMenu, id = 1;
	memset(&CALLforwardSt, 0, sizeof(CALLF_PARAM));

	selMenu = 0;
	while (id) {
		//id = cfgMainWnd(selMenu);// yu 显示所有菜单
		id = XSelectWindow((char**)cfgName, MAX_CFG_ITEM, selMenu);//,FALSE);
		if (id < 0)
			break;
		selMenu = id;
		switch (id) {
		case 0:
			_Talk_Call_transfer(CALL_FORWARD_UNCONDITION);//_Talk_Call_ALLtransfer();
			id = 1;
			break;
		case 1:
			_Talk_Call_transfer(CALL_FORWARD_BUSY);//_Talk_Call_Busytransfer(&CALLforwardSt);
			id = 1;
			break;
		case 2:
			_Talk_Call_transfer(CALL_FORWARD_NOREPLY);//_Talk_Call_noResponsionTransfer(&CALLforwardSt);
			id = 1;
			break;
		case 3://关闭所有
			XTipWndShow(TranslateChar(SETDISPLAYCHAR[0]),1);//连接中
			if(0==_delete_all_Transfer())
				XTipWndShow(TranslateChar(SETDISPLAYCHAR[3]),1);//"取消成功"
			else
				XTipWndShow(TranslateChar(SETDISPLAYCHAR[4]),1);//"取消失败"
				
			id = 1;
			break;
		default:
			id = 0;
			break;
		}
	}
}
#endif
//=================================================
#if 1


//---
#define MAX_CFG_ITEM_002 2
const static char *cfgName_002[] = {
		"禁用",
		"启用",
};

static void Callastrict_in(void)
{	int		selMenu, id = 1;

	selMenu = gDevicePara.Callastrict.in;
	while (id) {
		id = XSelectWindow((char**)cfgName_002, MAX_CFG_ITEM_002, selMenu);//,FALSE);
		if (id < 0)
			break;
			selMenu = id;
			if((0==id)||(1==id))
				{
				gDevicePara.Callastrict.in=id;
				Para_Store(&gDevicePara);
				if(0==id)
				XTipWndShow(TranslateChar(SETDISPLAYCHAR[3]),1);
				else
				XTipWndShow(TranslateChar(SETDISPLAYCHAR[1]),1);
				id=0;
				}
		}
}
static void Callastrict_out(void)
{	int		selMenu, id = 1;

	selMenu = gDevicePara.Callastrict.out;
	while (id) {
		id = XSelectWindow((char**)cfgName_002, MAX_CFG_ITEM_002, selMenu);//,FALSE);
		if (id < 0)
			break;
		selMenu = id;
		if((0==id)||(1==id))
			{
				gDevicePara.Callastrict.out=id;
				Para_Store(&gDevicePara);
				if(0==id)
					XTipWndShow(TranslateChar(SETDISPLAYCHAR[3]),1);
				else
					XTipWndShow(TranslateChar(SETDISPLAYCHAR[1]),1);
				id=0;
			}
		}
}
#if 1
static int SetIDD_head(void)
{
rect area;
char IDDstr_temp[5];

	strcpy(IDDstr_temp,gDevicePara.Callastrict.IDD_head);

	SetRect(&area, 10, 12, 102, LCD_HEIGHT-14);
	if (0 > InputLine(&area, TranslateChar("输入号码"),  (BYTE*)IDDstr_temp, 5-1, INPUT_DIGITAL | INPUT_FIXED))
		return -1;
		strcpy(gDevicePara.Callastrict.IDD_head,IDDstr_temp);
		 gDevicePara.Callastrict.IDD_out=1;
		Para_Store(&gDevicePara);
		XTipWndShow(TranslateChar(SETDISPLAYCHAR[1]),1);
	return 0;

}
static void Callastrict_IDD_OFF_On(void)
{	int		selMenu, id = 1;

	selMenu = gDevicePara.Callastrict.IDD_out;
	while (id) {
		id = XSelectWindow((char**)cfgName_002, MAX_CFG_ITEM_002, selMenu);//,FALSE);
		if (id < 0)
			break;
		selMenu = id;
			switch(id)
			{	case 0:
					gDevicePara.Callastrict.IDD_out=0;
					Para_Store(&gDevicePara);
					XTipWndShow(TranslateChar(SETDISPLAYCHAR[3]),1);
					id=0;
					break;
				case 1:
					if(0>SetIDD_head())
						id=1;
					else
						id=0;
					break;
			}
			id=0;
		}
}
#endif


#define  MAX_CFG_ITEM_CallBarring    3
const static char *cfgName_CallBarring[] = {
		"限制所有呼出",
		"限拨国际长途",
		"限制所有呼入",
		//"取消所有限制",
};

//--------2
void Talk_Call_Barring(void)
{
	int		selMenu, id = 1;
	
	selMenu = 0;
	while (id) {
		id = XSelectWindow((char**)cfgName_CallBarring, MAX_CFG_ITEM_CallBarring, selMenu);//,FALSE);
		if (id < 0)
			break;
		selMenu = id;
		
		switch (id) {
		case 0:
			Callastrict_out();
			id = 1;
			break;
		case 1:
			Callastrict_IDD_OFF_On();
			//Callastrict_IDD();
			id = 1;
			break;
		case 2:
			Callastrict_in();
			id = 1;
			break;
		//case 3:
			//_Talk_Call_delAllBarring();
			//id = 1;
			//break;
		default:
			id = 0;
			break;
		}
	}
}
#endif



#if 1
int SetAudioMessageNum(void)
{
rect area;
char str_temp[16];

	strcpy(str_temp,gDevicePara.sysdata.AudioMessage);

	SetRect(&area, 10, 12, 102, LCD_HEIGHT-14);
	if (0 > InputLine(&area, TranslateChar("语音信箱"),  (BYTE*)str_temp, 16-1, INPUT_DIGITAL | INPUT_FIXED))
		return -1;
		strcpy(gDevicePara.sysdata.AudioMessage,str_temp);
		Para_Store(&gDevicePara);
		XTipWndShow(TranslateChar(SETDISPLAYCHAR[1]),1);
		return 0;

}
#endif



#endif

⌨️ 快捷键说明

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