天嵌二次封装库使用手册  V1.0
tq_gsm.h 文件参考
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include "tq_network.h"
#include "tq_uart.h"
#include "tq_common.h"
tq_gsm.h 的引用(Include)关系图:

浏览源代码.

宏定义

#define with_r   0
 

类型定义

typedef void(* Callback) (int intput_type, char *pin, char *puk)
 回调函数类型,其中intput_type为0时仅需输入PIN码进行解锁,若连续3次输入错误PIN码,这时intput_type为1,需要输入PUK码进行解锁,同时输入新的PIN码。
 

枚举

enum  Model { N720, SLM750 }
 
enum  PDP_type { IP, PPP, IPv6, IPV4V6 }
 
enum  APN {
  CMNET, CMMTM, CMIOT, _3GNET,
  CTNET, CTLTE
}
 
enum  AUTH { NONE, PAP, CHAP, PAP_OR_CHAP }
 
enum  DIALING_TYPE { PPPD, RMNET, RNDIS, ECM }
 

函数

int send_at (int fd, const char *cmd, char *buff, int buff_size)
 用于发送AT指令 更多...
 
int cmd_AT (int fd)
 发送指令“AT”,检查模块是否在线。 更多...
 
int cmd_signal (int fd, char *buff, int buff_size)
 发送指令“AT+CSQ”,获取信号强度 更多...
 
void set_Callback (Callback)
 设置用于输入PUK与PIN码的回调函数。
 
int init (int fd, enum Model model, char *reply, int reply_size)
 对GSM模块进行初始化 更多...
 
int dial (int fd, char *dialing_type, enum PDP_type pdp_type, char *apn, enum AUTH auth, char *name, char *pwd)
 使用RMNET、RMDIS、ECM方式通过AT指令进行拨号。 更多...
 
int dial_pppd (char *modem, enum PDP_type pdp_type, char *apn, char *auth, char *name, char *pwd)
 使用PPPD方式通过脚本进行拨号 更多...
 
int disconnect_dial (int fd, char *dialing_type)
 对于RMNET、RMDIS、ECM方式通过AT指令断开拨号。 更多...
 
void disconnect_pppd ()
 对于PPPD方式,使用本函数断开拨号。
 

详细描述

作者
owen (ouzij.nosp@m.ian@.nosp@m.embed.nosp@m.sky..nosp@m.net)
版本
1.0
日期
2021-09-03
修改日志:
Date Version Author Description
2021-09-03 1.0 owen 第一次发布,对串口操作函数进一步封装用于发送AT指令,目前考虑到不同厂家AT指令可能不同,通用性不强,故只写了AT和CSQ两条指令。
2021-12-07 1.1 owen 添加了初始化,拨号,断开拨号等函数接口。

函数说明

int cmd_AT ( int  fd)

发送指令“AT”,检查模块是否在线。

参数
fdAT调试串口文件描述符
返回
int 返回值1,设备在线; 0,发送AT指令失败,设备未上电或打开的不是MODEM接口或AT接口。
int cmd_signal ( int  fd,
char *  buff,
int  buff_size 
)

发送指令“AT+CSQ”,获取信号强度

参数
fdAT调试串口文件描述符
buff数据接收缓存区
buff_size数据接收缓存区大小
返回
int 大于0,成功读取指令返回值; -1,些入指令失败; -2,接收指令返回超时; -5,错误的文件描述符。
int dial ( int  fd,
char *  dialing_type,
enum PDP_type  pdp_type,
char *  apn,
enum AUTH  auth,
char *  name,
char *  pwd 
)

使用RMNET、RMDIS、ECM方式通过AT指令进行拨号。

参数
fdMODEM串口或AT串口文件描述符
dialing_type拨号方式,参数有"RMNET"、"RNDIS"、"ECM"
pdp_typePDP类型,详情可见上方PDP_type枚举类型
apnAPN类型,详情可见上方APN枚举类型,若为专网则需通过运营方得到APN节点名称
auth鉴权类型,详情可见上方AUTH枚举类型
name登陆用户名。移动卡默认的用户名是 GSM ,电信卡和联通卡默认的是 CARD。如果有指定的,则需要设置成客户提供的用户名
pwd登陆密码。移动卡默认的密码是1234,电信卡和联通卡默认的是CARD。如果有指定的,则需要设置成客户提供的密码
返回
int 返回值1,拨号成功; 0,设置PDP格式或PDP认证失败,即发送CGDCONT指令或XGAUTH指令失败; -1,拨号失败; -5,错误的文件描述符。
int dial_pppd ( char *  modem,
enum PDP_type  pdp_type,
char *  apn,
char *  auth,
char *  name,
char *  pwd 
)

使用PPPD方式通过脚本进行拨号

参数
modem模块的MODEM端口
pdp_typePDP类型,详情可见上方PDP_type枚举类型
apnAPN类型,详情可见上方APN枚举类型,若为专网则需通过运营方得到APN节点名称
auth鉴权类型,如"-pap","-chap"等,如无可传入NULL
name登陆用户名。移动卡默认的用户名是 GSM ,电信卡和联通卡默认的是 CARD。如果有指定的,则需要设置成客户提供的用户名
pwd登陆密码。移动卡默认的密码是1234,电信卡和联通卡默认的是CARD。如果有指定的,则需要设置成客户提供的密码
返回
int 返回值1,拨号成功; 0,拨号失败
int disconnect_dial ( int  fd,
char *  dialing_type 
)

对于RMNET、RMDIS、ECM方式通过AT指令断开拨号。

参数
fdAT调试串口文件描述符
dialing_type拨号方式,参数有"RMNET"、"RNDIS"、"ECM"
返回
int 返回值1,断开拨号成功; -1,断开拨号失败。
int init ( int  fd,
enum Model  model,
char *  reply,
int  reply_size 
)

对GSM模块进行初始化

参数
fdAT调试串口文件描述符
model模块选择,详情可见上方Model枚举类型
reply数据接收缓存区,里面有多条指令的返回结果。
reply_size数据接收缓存区大小
返回
int 返回值1,模块初始化成功; 0,发送AT指令失败; -1,CCID指令或CPIN?指令返回ERROR,读取不到SIM卡; -2,PIN或PUK码错误,无法解锁SIM卡; -3,CSQ指令返回99,99,表示无信号,请检查天线; -4,CREG?指令未返回0,1或0,5,模块未注册上网络; -5,错误的文件描述符; -6,CGATT指令未返回1,网络附着失败。
int send_at ( int  fd,
const char *  cmd,
char *  buff,
int  buff_size 
)

用于发送AT指令

参数
fdAT调试串口文件描述符
cmdAT指令,如“AT”,通常是ASCII文本。指令也可以不以''结尾。
buff数据接收缓存区
buff_size数据接收缓存区大小
返回
int 返回值 大于0,成功读取指令返回值; -1,些入指令失败; -2,接收指令返回超时; -5,错误的文件描述符。

实际上该函数是封装了一些串口操作。 检查设备节点,并发送指令,等待一秒后开始接收数据返回,超时为2秒,若超时则再等待2秒再去读取指令返回,超时为0。