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

📄 modemgtm900.h

📁 华为GSM modem GTM900B的驱动代码
💻 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 + -