📄 modemgtm900.h
字号:
/****************************************Copyright(c)**************************
**
**
**--------------文件信息-------------------------------------------------------
**文 件 名: .c
**创 建 人: 杨林军
**最 新 版 本:
**最后修改日期:
**描 述:
**
**--------------历史版本信息---------------------------------------------------
** 创建人: 杨林军
** 版 本: 1.0
** 日 期:
** 描 述: 原始版本
**
**--------------当前版本修订---------------------------------------------------
** 修改人:
** 日 期:
** 描 述:
**
**-----------------------------------------------------------------------------
******************************************************************************/
#ifndef MODEM_GTM900_H
#define MODEM_GTM900_H
#ifndef MODEM_GLOBAL
#define MODEM_EXT extern
#else
#define MODEM_EXT
#endif
/*
MODEM_EXT enum state
{
invalid, initializing, sms, smsBusy, dataConnected
, gprs
,closeM
}modemState, modemStatePrv;
*/
#define MODEM_INVALID 0x00
#define MODEM_INITIALIZING 0x01
#define MODEM_SMS 0x02
#define MODEM_SMSBUSY 0x04
#define MODEM_DATA 0x08
#define MODEM_GPRS 0x10
#define MODEM_CLOSE 0x20
typedef enum {Unknown = 0, International = 1, National = 2,
NetworkSpecific = 3, Subscriber = 4,
Alphanumeric = 5, Abbreviated = 6, Reserved = 7} Type ;
//定义相关AT命令
#ifdef MODEM_GLOBAL
//通用TA控制命令
INT8U const ST_M_ATAT[] = "AT\r"; //test command
INT8U const ST_M_IPR[] = "AT+IPR=9600\r"; //波特率设定后,掉电不改变
INT8U const ST_M_CLIP[] = "AT+CLIP=1\r"; //设置显示主叫识别
INT8U const ST_M_V0[] = "ATV0\r"; //数字型结果码,
INT8U const ST_M_E0[] = "ATE0\r"; //设置回显方式不回显
INT8U const ST_M_S0[] = "ATS0=2\r"; //自动应答前振铃两次
INT8U const ST_M_V0S0[] = "ATE0V0S0=2\r"; //该命令是上面3条命令的集合
INT8U const ST_M_ATH[] = "ATH\r"; //挂机控制,可终止当前的所有通话
INT8U const ST_M_COPS[] = "AT+COPS\r"; //选择运营商
//通用配置命令
INT8U const ST_SMS_CSMS[] = "AT+CSMS=1\r"; //选择短消息服务
INT8U const ST_SMS_CPMS[] = "AT+CPMS=\"SM\",\"SM\",\"SM\"\r"; //优选消息存储器为SIM卡
INT8U const ST_SMS_CMGF[] = "AT+CMGF=1\r"; //设置短信格式 为文本格式
//消息接收和读出命令
INT8U const ST_SMS_CNMI[] = "AT+CNMI=2,2,2\r"; //设置收到短信提醒,并直接发给TE,华为资料中第一个参数取值没有 3
INT8U const ST_SMS_CMGL[] = "AT+CMGL= \"REC UNREAD\"\r"; //读接收到但还没读的短信
INT8U const ST_SMS_CMGR[] = "AT+CMGR="; //AT+CMGR= index 读指定索引号index的短信
//消息发送和写入命令
INT8U const ST_SMS_CMGS[] = "AT+CMGS="; //发送短信
INT8U const ST_SMS_CMSS[] = "AT+CMSS="; //从SIM卡等存储器发送消息
INT8U const ST_SMS_CMGW[] = "AT+CMGW="; //将消息写入存储器
INT8U const ST_SMS_CMGD[] = "AT+CMGD="; //删除短信
//工程命令
INT8U const ST_EN_EM1[] = "AT%EM=2,1\r"; //读取Serving cell信息
INT8U const ST_EN_EM2[] = "AT%EM=2,3\r"; //读取Neighbouring cell信息
INT8U const ST_EN_BAND[] = "AT%BAND=1,9\r"; //手动锁频锁到GSM900
//TCP IP命令
INT8U const ST_AT_ETCPIP[] = "AT%ETCPIP\r"; //该命令实现PDP激活和TCPIP的初始化
INT8U const ST_AT_IPOPEN[] = "AT%IPOPEN=\"TCP\","; //\"60.12.5.163\",8002\r"; //打开一条TCP 或者UDP 链接命令
INT8U const ST_AT_IOMODE[] = "AT%IOMODE=1,1,1\r"; //模块对输入输出数据进行转换,使用单链接AT 命令,不使用接收缓存
INT8U const ST_AT_IPSEND[] = "AT%IPSEND="; //单链接模式下发送数据命令
INT8U const ST_AT_IPCLOSE[] = "AT%IPCLOSE=1\r"; //关闭连接号为1的链接 5是退出GPRS功能
INT8U const ST_AT_TXSTATE[] = "AT%TXSTATE=1\r"; //用于查询或清除当前链接的数据包统计数据(仅对TCP连接有效
INT8U const ST_AT_IPDQ[] = "AT%IPDQ\r"; //查询接收缓存中的数据包数量
INT8U const ST_AT_IPDR[] = "AT%IPDR="; //数据读取命令
INT8U const ST_AT_IPDD[] = "AT%IPDD=1,0\r"; //数据删除命令
INT8U const ST_AT_IPDDMODE[] = "AT%IPDDMODE=0\r"; //数据删除模式为自动删除
//标准GPRS命令
INT8U const ST_AT_CGDCONT[] = "AT+CGDCONT=1,\"IP\",\"CMNET\"\r"; //定义PDP 上下文
INT8U const ST_AT_CGQREQ[] = "AT+CGQREQ="; //请求的服务质量简报
INT8U const ST_AT_CGQMIN[] = "AT+CGQMIN="; //可接收的最小服务质量简报
INT8U const ST_AT_CGATT[] = "AT+CGATT=1\r"; //GPRS 附着和分离
INT8U const ST_AT_CGACT[] = "AT+CGACT=1\r"; //PDP 上下文激活和去激活
INT8U const ST_AT_CGDATA[] = "AT+CGDATA=\"PPP\"\r"; //进入数据模式
INT8U const ST_AT_CGPADDR[] = "AT+CGPADDR=cid\r"; //显示PDP 地址
INT8U const ST_AT_CGAUTO[] = "AT+CGAUTO=1\r"; //自动应答网络侧PDP 上下文激活请求
INT8U const ST_AT_CGANS[] = "AT+CGANS=1\r"; //手动应答网络侧PDP 上下文激活请求
INT8U const ST_AT_CGCLASS[] = "AT+CGCLASS=\"B\"\r"; //GPRS 移动台类别
INT8U const ST_AT_CGEREP[] = "AT+CGEREP=1\r"; //GPRS 事件上报
INT8U const ST_AT_CGREG[] = "AT+CGREG=1\r"; //GPRS 网络注册状态
INT8U const ST_AT_CGSMS[] = "AT+CGSMS=0\r"; //为MO SMS 选择业务
INT8U const ST_AT_ATD[] = "ATD*99"; //请求GPRS 服务器
INT8U const ST_AT_ATH[] = "ATH"; //手动拒绝网络侧PDP 上下文激活请
INT8U const ST_AT_ATA[] = "ATA"; //手动接受网络侧PDP 上下文激活请求
#else
extern INT8U const ST_EN_EM1[];
extern INT8U const ST_SMS_CNMI[];
extern INT8U const ST_SMS_CNMI1[];
extern INT8U const ST_SMS_CMGS[];
extern INT8U const ST_M_ATAT[];
extern INT8U const ST_SMS_CMGL[];
extern INT8U const ST_SMS_CMGD[];
#endif
MODEM_EXT OS_EVENT *ResetSem; //modem reset signal
MODEM_EXT INT8U SmsSendSpan;
MODEM_EXT int SMSSendDelay;
MODEM_EXT INT8U ModemInfo[10]; //信源信息
MODEM_EXT INT8U FlagModemSmsRcv;
MODEM_EXT INT8U DataFlag;
MODEM_EXT INT32U ConnectTimeOut; //连接超时
MODEM_EXT BOOLEAN SMSDelCnt;
MODEM_EXT INT8U smsIndex[50][5];
MODEM_EXT INT8U ModemCnt;
void ModemInit(void);
/********************************************************************************
* 设置Modem状态
*
* Description: 设置Modem状态
*
* Arguments : enum state
*
* Returns : 无
*********************************************************************************/
MODEM_EXT void setModemStat(INT8U mState);
/********************************************************************************
** 函数名称: resetModem
** 功能描述: Modem复位函数,完成对modem的复位和一些默认配置方式配置
** 输 入: *pdata
** 输 出: 无
**
** 全局变量:
** 调用模块:
*********************************************************************************/
MODEM_EXT void resetModem(void);
MODEM_EXT BOOLEAN ModemReadEquipInfo( OUT INT8U *dest);
BOOLEAN ModemDataConnct(X_PACKET *ptr);
void ModemDataDisconnct(void);
INT8U GetModemStat(void);
/********************************************************
**从MODEM取得下行输入功率电平
********************************************************/
INT8U GetDnInPw(void); //下行输入功率电平
/*******************************************************************************
* 连接GPRS
*
* Description: 连接成功获得本地IP地址
*
* Arguments : pCntIpAddr: 指向服务器IP地址的指针
* CntIpPort: 服务器的IP端口
* Returns : 成功:1;失败:0
*******************************************************************************/
INT8U OpenGprs(INT8U* pCntIpAddr, INT16U pCntIpPort); //打开GPRS连接
/*******************************************************************************
* Description: GPRS数据发送函数
*
* Arguments : ptr, 指向发送数据首地址;
* : len,需发送数据的长度
* Returns : 1,发送成功
* 2,发送失败
* Note : 发送一包的数据长度不能超过512字节
我认为更好的做法应该是由openGprs返回一个句柄,handle, 然后向
GPRS发送数据时写成 WriteGprs(handle, ptr, len),这样很明了的看出handle指向的空间
属于驱动,而ptr指向的空间属于app,app和驱动之间的接口就像内存拷贝那样简单。
*******************************************************************************/
INT8U WriteGprs(INT8U *ptr, INT16U len); //GPRS数据发送函数
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -