📄 gprs_handle.c
字号:
/****************************************Copyright (c)**************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name: GPRS_HANDLE.c
** Last modified Date: 2005-06-17
** Last Version: 1.0
** Descriptions: header file of GPRS
**
**------------------------------------------------------------------------------------------------------
** Created by: Yehaoben
** Created date: 2005-06-17
** Version: 1.0
** Descriptions: The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#define GPRS_GLOBALS
#include "config.H"
char AT_COMMAND[]=GPRS_AT_CMD;
OS_STK GPRS_task_stack[GPRS_TASK_STACK_SIZE];
extern void ZLG_GPRS_Send_String(char * strptr);
void ZLG_GPRS_HANDLE(void *pdata);
char * startchar(char * str,char endch );
uint16 StrTOUINT(char * str,uint8 DBits);
uint8 ZLG_GPRS_SND_CMD(char * cmdptr);
/*********************************************************************************************************
** Function name: ZLG_GPRS_Initial
**
** Descriptions: Initial GPRS
**
** input parameters: None
** Returned value: None
**
** Used global variables: None
** Calling modules: None
**
** Created by: Yehaoben
** Created Date: 2005/06/02
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 ZLG_GPRS_Initial(void)
{
GPRS_TCB.GPRSCmdOK = OSSemCreate(0);//creat the command ok signal;
GPRS_TCB.GPRSRing = OSSemCreate(0);
GPRS_TCB.GPRSMsgWR = OSSemCreate(0);
GPRS_TCB.Status = 1;//idle
GPRS_TCB.SNDCmdLen = 0;
GPRS_TCB.RCVCmdLen = 0;
GPRS_TCB.GPRS_RCV_WR_PTR = 0;
//GPRS_TCB.GPRS_SND_RD_PTR = 0;
UART_Ini(9600);//initial com port
if( ZLG_GPRS_SND_CMD("AT\r\n") )
{return 1;}
if( ZLG_GPRS_SND_CMD("AT$NOSLEEP=1\r\n") )
{return 1;}
if( ZLG_GPRS_SND_CMD("AT+CREG=1\r\n") )//reg
{return 1;}
/*OSTaskCreateExt(ZLG_GPRS_HANDLE,
(void *)0,
&GPRS_task_stack[GPRS_TASK_STACK_SIZE-1],
GPRS_TASK_PRIO,
GPRS_TASK_ID,
&GPRS_task_stack[0],
GPRS_TASK_STACK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); */
//creat the ZLG_GPRS_Handle task
return 0;
}
/*********************************************************************************************************
** Function name: ZLG_GPRS_Handle
**
** Descriptions: GPRS handle task
**
** input parameters: None
** Returned value: None
**
** Used global variables: None
** Calling modules: None
**
** Created by: Yehaoben
** Created Date: 2005/06/02
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void ZLG_GPRS_HANDLE(void *pdata)
{
GPRSAutoTakeTheCall();//RING
//GOT MESSAGE
}
const char GPRS_CALL_STR[]={"ATD%s;\r\n"};
void ZLG_GPRS_CALL(char * number)
{
char sendchar[30];
_sprintf(sendchar,GPRS_CALL_STR,number);
ZLG_GPRS_SND_CMD(sendchar);
}
void ZLG_GPRS_PICKUP()
{
ZLG_GPRS_SND_CMD("ATA\r\n");
}
const char GPRS_MSG_STR[]={"AT+CMGS=\"%s\"\r\n"};
uint8 ZLG_GPRS_SND_MSG(char * number,char * SNDMSG)
{
char sendchar[30];
char temp[2];
uint8 err;
OS_ENTER_CRITICAL();
GPRS_TCB.Status = GPRS_TCB.Status | 0X0020;//set send message
OS_EXIT_CRITICAL();
ZLG_GPRS_SND_CMD("AT+CMGF=1\r\n");
OS_ENTER_CRITICAL();
GPRS_TCB.Status = GPRS_TCB.Status & 0xfffe;//clear idle bit
GPRS_TCB.Status = GPRS_TCB.Status | 0x0004;//set have been sended and wait ok
OS_EXIT_CRITICAL();
_sprintf(sendchar,GPRS_MSG_STR,number);
ZLG_GPRS_Send_String(sendchar);//send msg,
do
{
OSSemPend(GPRS_TCB.GPRSMsgWR,2*OS_TICKS_PER_SEC,&err);//wait for >;
if(err == OS_TIMEOUT)
{
continue;
}
break;
}
while(1);
ZLG_GPRS_Send_String(SNDMSG);//send MSG,
temp[0] = 0x1a;
temp[1] = 0;
ZLG_GPRS_Send_String(temp);//send ctrl + z
OS_ENTER_CRITICAL();
GPRS_TCB.Status = GPRS_TCB.Status | 0x0001; //set idle bit
GPRS_TCB.Status = GPRS_TCB.Status & 0xffd9; //clear have been sended and wait ok bit //clera sending command bit
OS_EXIT_CRITICAL();
return 0;
}
const char GPRS_RCVMSG_STR[]={"AT+CMGR=%d\r\n"};
uint8 ZLG_GPRS_RCV_MSG(uint8 num,char * number,char * RCVMSG)
{
char sendchar[15];
//char temp[2];
ZLG_GPRS_SND_CMD("AT+CMGF=1\r\n");
_sprintf(sendchar,GPRS_RCVMSG_STR,num);
ZLG_GPRS_SND_CMD(sendchar);
GPRS_TCB.Status = GPRS_TCB.Status | 0x0010; //set GOT MSG bit
//read msg
return 0;
}
const char GPRS_SETMSGCRT_STR[]={"AT+CSCA=\"%s\"\r\n"};
uint8 GPRSSetMSGCenter(char * number)
{
char sendchar[30];
_sprintf(sendchar,GPRS_SETMSGCRT_STR,number);
ZLG_GPRS_SND_CMD(sendchar);
return 0;
}
/*********************************************************************************************************
** 函数名称: GPRSTakeTheCall
** 功能描述: 接电话
** 输 入: 无
**
** 输 出: 成功 0 失败1
**
** 全局变量:
** 调用模块:
**
** 作 者: Yehaoben
** 日 期: 2005年7月1日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 GPRSTakeTheCall()
{
ZLG_GPRS_SND_CMD("ATA\r\n");
return 0;
}
/*********************************************************************************************************
** 函数名称: GPRSHangUpTheCall
** 功能描述: 挂电话
** 输 入: 无
**
** 输 出: 成功 0 失败1
**
** 全局变量:
** 调用模块:
**
** 作 者: Yehaoben
** 日 期: 2005年7月1日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 GPRSHangUpTheCall()
{
ZLG_GPRS_SND_CMD("AT+CHUP\r\n");
return 0;
}
/*********************************************************************************************************
** 函数名称: GPRSDelMSG
** 功能描述: 删除短信
** 输 入: num 短信的存储号(1~20)
**
** 输 出: 成功 0 失败1
**
** 全局变量:
** 调用模块:
**
** 作 者: Yehaoben
** 日 期: 2005年7月1日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
const char GPRS_DELMSG_STR[]={"AT+CMGD=%d\r\n"};
uint8 GPRSDelMSG(uint8 num)
{
char sendchar[15];
_sprintf(sendchar,GPRS_DELMSG_STR,num);
ZLG_GPRS_SND_CMD(sendchar);
return 0;
}
/*********************************************************************************************************
** 函数名称: GPRSAutoTakeTheCall
** 功能描述: 接电话
** 输 入: 无
**
** 输 出: 成功 0 失败1
**
** 全局变量:
** 调用模块:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -