# 一键SMS
***Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.***
---
# 功能概述
一键SMS功能内部集成短信收发、事件监听、参数配置、存储管理等多个接口,大幅简化短信业务开发流程:发送短信仅需填写接收号码与内容,内部自动完成编码处理;接收短信支持注册对应回调,收到消息后自动完成数据解析;同时提供短信批量删除、全局参数配置等管理能力。
# 一键SMS API
## 头文件
*easy_sms.h*
## 函数概览
| **函数** | **说明** |
| --- | --- |
| *qosa_easy_sms_init_config()* | 初始化一键SMS功能 |
| *qosa_easy_sms_register_event_cb()* | 注册短信事件回调函数 |
| *qosa_easy_sms_receive_text_cb_register()* | 注册文本格式短信专属接收回调函数 |
| *qosa_easy_sms_receive_pdu_cb_register()* | 注册PDU格式短信专属接收回调函数 |
| *qosa_easy_sms_set_param()* | 配置一键SMS的参数 |
| *qosa_easy_sms_get_param()* | 获取一键SMS的配置参数 |
| *qosa_easy_sms_send_text_msg()* | 同步模式下发送文本格式短信 |
| *qosa_easy_sms_send_pdu_msg()* | 同步模式下发送PDU格式短信 |
| *qosa_easy_sms_delete_msg()* | 同步模式下清空短信存储区内全部短信 |
## 函数详解
### qosa_easy_sms_init_config
- **功能描述**
初始化一键SMS功能,自动注册 *QOSA_EVENT_MODEM_SMS_STATUS*(短信初始化状态事件)、*QOSA_EVENT_MODEM_SMS_NEW_MSG*(新短信事件)和 *QOSA_EVENT_MODEM_SMS_STORAGE_FULL*(短信存储空间满事件)。
- **函数原型**
```c
void qosa_easy_sms_init_config(void);
```
- **参数说明**
无
- **返回值说明**
无
### qosa_easy_sms_register_event_cb
- **功能描述**
注册短信事件回调函数。当发生短信初始化完成、新消息到达、存储空间满等事件时触发此回调函数,上报事件信息。
- **函数原型**
```c
qosa_easy_sms_errcode_e qosa_easy_sms_register_event_cb(qosa_easy_sms_event_cb_t cb);
```
- **参数说明**
| **参数** | **输入/输出** | **类型** | **说明** |
| --- | --- | --- | --- |
| *cb* | 输入 | *qosa_easy_sms_event_cb_t* | 短信事件回调函数指针;详见 [*qosa_easy_sms_event_cb_t*](#qosaeasysmseventcb_t) |
- **返回值说明**
*QOSA_EASY_SMS_SUCCESS*:函数执行成功
其他值:函数执行失败;详见 [*qosa_easy_sms_errcode_e*](#qosaeasysmserrcodee)
#### qosa_easy_sms_event_cb_t
- **函数原型**
```cpp
typedef void (*qosa_easy_sms_event_cb_t)(qosa_uint8_t sim, qosa_uint8_t event_id, void *ctx);
```
- **参数说明**
| **参数** | **输入/输出** | **类型** | **说明** |
| --- | --- | --- | --- |
| *sim* | 输入 | qosa_uint8_t | SIM ID |
| *event_id* | 输入 | qosa_uint8_t | 短信事件类型 ID;详见 [*qosa_easy_sms_event_e*](#qosaeasysmsevente) |
| *ctx* | 输入 | void | 用户自定义上下文指针 |
- **返回值说明**
无
### qosa_easy_sms_receive_text_cb_register
- **功能描述**
注册文本格式短信专属接收回调函数。
- **函数原型**
```c
qosa_easy_sms_errcode_e qosa_easy_sms_receive_text_cb_register(qosa_easy_sms_event_cb_t cb);
```
- **参数说明**
| **参数** | **输入/输出** | **类型** | **说明** |
| --- | --- | --- | --- |
| *cb* | 输入 | *qosa_easy_sms_event_cb_t* | 短信事件回调函数指针;详见 [*qosa_easy_sms_event_cb_t*](#qosaeasysmseventcb_t) |
- **返回值说明**
*QOSA_EASY_SMS_SUCCESS*:函数执行成功
其他值:函数执行失败;详见 [*qosa_easy_sms_errcode_e*](#qosaeasysmserrcodee)
### qosa_easy_sms_receive_pdu_cb_register
- **功能描述**
注册PDU格式短信专属接收回调函数。
- **函数原型**
```c
qosa_easy_sms_errcode_e qosa_easy_sms_receive_pdu_cb_register(qosa_easy_sms_event_cb_t cb);
```
- **参数说明**
| **参数** | **输入/输出** | **类型** | **说明** |
| --- | --- | --- | --- |
| *cb* | 输入 | *qosa_easy_sms_event_cb_t* | 短信事件回调函数指针;详见 [*qosa_easy_sms_event_cb_t*](#qosaeasysmseventcb_t) |
- **返回值说明**
*QOSA_EASY_SMS_SUCCESS*:函数执行成功
其他值:函数执行失败;详见 [*qosa_easy_sms_errcode_e*](#qosaeasysmserrcodee)
### qosa_easy_sms_set_param
- **功能描述**
配置一键SMS的参数。
- **函数原型**
```c
qosa_easy_sms_errcode_e qosa_easy_sms_set_param(const qosa_easy_sms_param_t *tab);
```
- **参数说明**
| **参数** | **输入/输出** | **类型** | **说明** |
| --- | --- | --- | --- |
| *tab* | 输入 | *const qosa_easy_sms_param_t ** | 一键SMS的配置参数;详见 [*qosa_easy_sms_param_t*](#qosaeasysmsparamt) |
- **返回值说明**
*QOSA_EASY_SMS_SUCCESS*:函数执行成功
其他值:函数执行失败;详见 [*qosa_easy_sms_errcode_e*](#qosaeasysmserrcodee)
### qosa_easy_sms_get_param
- **功能描述**
获取一键SMS的配置参数。
- **函数原型**
```c
qosa_easy_sms_errcode_e qosa_easy_sms_get_param(qosa_easy_sms_param_t *tab);
```
- **参数说明**
| **参数** | **输入/输出** | **类型** | **说明** |
| --- | --- | --- | --- |
| *tab* | 输出 | *qosa_easy_sms_param_t ** | 一键SMS的配置参数;详见 [*qosa_easy_sms_param_t*](#qosaeasysmsparamt) |
- **返回值说明**
*QOSA_EASY_SMS_SUCCESS*:函数执行成功
其他值:函数执行失败;详见 [*qosa_easy_sms_errcode_e*](#qosaeasysmserrcodee)
### qosa_easy_sms_send_text_msg
- **功能描述**
同步模式下发送文本格式短信。
- **函数原型**
```c
qosa_easy_sms_errcode_e qosa_easy_sms_send_text_msg(const char *phone_number, const char *message_text);
```
- **参数说明**
| **参数** | **输入/输出** | **类型** | **说明** |
| --- | --- | --- | --- |
| *phone_number* | 输入 | const char * | 接收方手机号 |
| *message_text* | 输入 | const char * | UCS2编码后的短信内容 |
- **返回值说明**
*QOSA_EASY_SMS_SUCCESS*:函数执行成功
其他值:函数执行失败;详见 [*qosa_easy_sms_errcode_e*](#qosaeasysmserrcodee)
```{note}
文本短信强制使用UCS2编码,*message_text* 必须为已完成UCS2编码的字符串;
例如: “4F60597D”代表“你好”。
```
### qosa_easy_sms_send_pdu_msg
- **功能描述**
同步模式下发送PDU格式短信。
- **函数原型**
```c
qosa_easy_sms_errcode_e qosa_easy_sms_send_pdu_msg(const char *message_pdu, qosa_uint16_t pdu_length);
```
- **参数说明**
| **参数** | **输入/输出** | **类型** | **说明** |
| --- | --- | --- | --- |
| *message_pdu* | 输入 | const char * | 完整的PDU格式短信数据 |
| *pdu_length* | 输入 | qosa_uint16_t | PDU格式短信中有效的数据长度 |
- **返回值说明**
*QOSA_EASY_SMS_SUCCESS*:函数执行成功
其他值:函数执行失败;详见 [*qosa_easy_sms_errcode_e*](#qosaeasysmserrcodee)
```{note}
*pdu_length* 为有效TP数据字节长度,短信中心前缀字节不计入该长度;
例如:
"00 **110005910180F60004FF0431323334**" //去除“00”,剩下一共15字节
"04910180F6 **110005910180F60004FF0431323334**" //去除“04910180F6”,剩下一共15字节
```
### qosa_easy_sms_delete_msg
- **功能描述**
同步模式下清空短信存储区内全部短信。
- **函数原型**
```c
qosa_easy_sms_errcode_e qosa_easy_sms_delete_msg(void);
```
- **参数说明**
无
- **返回值说明**
*QOSA_EASY_SMS_SUCCESS*:函数执行成功
其他值:函数执行失败;详见 [*qosa_easy_sms_errcode_e*](#qosaeasysmserrcodee)
```{note}
此函数会删除短信存储区内全部短信,不支持指定单条短信。
```
## 结构体定义
### qosa_easy_sms_param_t
一键SMS的配置参数结构体定义如下:
```c
typedef struct
{
qosa_uint8_t simid;
qosa_easy_sms_format_e format;
qosa_easy_sms_coding_e coding;
qosa_easy_sms_storage_t storage;
char *smsc;
qosa_bool_t delivery_report;
qosa_uint8_t vp;
qosa_uint8_t dcs;
qosa_uint8_t smc_retry_cnt;
qosa_uint8_t smr_retry_cnt;
qosa_bool_t ignore_cscs;
qosa_uint8_t reserved[4];
} qosa_easy_sms_param_t;
```
| **参数** | **类型** | **说明** |
| --- | --- | --- |
| *simid* | qosa_uint8_t | SIM ID;默认值:0 |
| *format* | *qosa_easy_sms_format_e* | 短信格式;详见 [*qosa_easy_sms_format_e*](#qosaeasysmsformate);默认值:QOSA_EASY_SMS_TEXT(文本格式) |
| *coding* | *qosa_easy_sms_coding_e* | 短信编码格式;详见 [*qosa_easy_sms_coding_e*](#qosaeasysmscodinge);默认值:*QOSA_EASY_SMS_CODING_UCS2*(UCS2) |
| *storage* | *qosa_easy_sms_storage_t* | 短信存储偏好;详见 [*qosa_easy_sms_storage_t*](#qosaeasysmsstoraget);
默认值:
*mem1* = *QOSA_SMS_STOR_ME*
*mem2* = *QOSA_SMS_STOR_ME*
*mem3* = *QOSA_SMS_STOR_ME* |
| *smsc* | char * | 短信中心地址;默认值:NULL |
| *delivery_report* | qosa_bool_t | 是否打开短信回执;默认值:QOSA_TRUE
*QOSA_TRUE*:打开
*QOSA_FALSE*:关闭 |
| *vp* | qosa_uint8_t | 短信有效期;取值范围:0~0xFF;默认值:0xFF;具体计算方式请参考
*3GPP TS 23.040 9.2.3.12.1 TP-VP (Relative format)* |
| *dcs* | qosa_uint8_t | 编码方案,由DCS的比特位2和3决定
*00*:7-bit
*01*:8-bit
*10*:UCS2 |
| *smc_retry_cnt* | qosa_uint8_t | SMC层重试次数;默认值:0 |
| *smr_retry_cnt* | qosa_uint8_t | SMR层重试次数;默认值:0 |
| *ignore_cscs* | qosa_bool_t | 是否忽略CSCS配置;默认值:QOSA_FALSE
*QOSA_TRUE*:忽略
*QOSA_FALSE*:不忽略 |
| reserved | qosa_uint8_t | 预留 |
### qosa_easy_sms_storage_t
短信存储偏好结构体定义如下:
```cpp
typedef struct
{
qosa_sms_stor_e mem1;
qosa_sms_stor_e mem2;
qosa_sms_stor_e mem3;
} qosa_easy_sms_storage_t;
```
| **参数** | **类型** | **说明** |
| --- | --- | --- |
| *mem1* | *qosa_sms_stor_e* | 存储器1:用于读取和删除短信;详见 [*qosa_sms_stor_e*](../../../%E7%BD%91%E7%BB%9C%E4%B8%8E%E9%80%9A%E4%BF%A1/SMS/SMS.md#qosasmsstor_e) |
| *mem2* | *qosa_sms_stor_e* | 存储器2:用于写入和发送短信;详见 [*qosa_sms_stor_e*](../../../%E7%BD%91%E7%BB%9C%E4%B8%8E%E9%80%9A%E4%BF%A1/SMS/SMS.md#qosasmsstor_e) |
| *mem3* | *qosa_sms_stor_e* | 存储器3:用于存储接收到的短信;详见 [*qosa_sms_stor_e*](../../../%E7%BD%91%E7%BB%9C%E4%B8%8E%E9%80%9A%E4%BF%A1/SMS/SMS.md#qosasmsstor_e) |
## 枚举定义
### qosa_easy_sms_errcode_e
一键SMS功能结果码枚举定义如下:
```c
typedef enum
{
QOSA_EASY_SMS_SUCCESS = 0,
QOSA_EASY_SMS_EXECUTE_ERROR,
QOSA_EASY_SMS_PARA_ERR,
QOSA_EASY_SMS_SEM_TIMEOUT_ERR,
QOSA_EASY_SMS_NO_MSG_ERR,
QOSA_EASY_SMS_ATTACH_FAIL,
} qosa_easy_sms_errcode_e;
```
| **成员** | **说明** |
| --- | --- |
| *QOSA_EASY_SMS_SUCCESS* | 函数执行成功 |
| *QOSA_EASY_SMS_EXECUTE_ERROR* | 函数执行失败 |
| *QOSA_EASY_SMS_PARA_ERR* | 参数错误 |
| *QOSA_EASY_SMS_SEM_TIMEOUT_ERR* | 获取信号量超时 |
| *QOSA_EASY_SMS_NO_MSG_ERR* | 存储区无短信 |
| *QOSA_EASY_SMS_ATTACH_FAIL* | 注册失败 |
### qosa_easy_sms_event_e
短信事件类型ID枚举定义如下:
```c
typedef enum
{
QOSA_EASY_SMS_INIT_OK = 0,
QOSA_EASY_SMS_NEW_MSG,
QOSA_EASY_SMS_MEM_FULL,
QOSA_EASY_SMS_REPORT,
QOSA_EASY_SMS_MAX
} qosa_easy_sms_event_e;
```
| **成员** | **说明** |
| --- | --- |
| *QOSA_EASY_SMS_INIT_OK* | 短信初始化完成 |
| *QOSA_EASY_SMS_NEW_MSG* | 新消息到达 |
| *QOSA_EASY_SMS_MEM_FULL* | 短信存储空间满 |
| *QOSA_EASY_SMS_REPORT* | 短信回执上报 |
| *QOSA_EASY_SMS_MAX* | 保留 |
### qosa_easy_sms_coding_e
短信编码格式枚举定义如下:
```c
typedef enum
{
QOSA_EASY_SMS_CODING_GSM7 = 0,
QOSA_EASY_SMS_CODING_UCS2,
} qosa_easy_sms_coding_e;
```
| **成员** | **说明** |
| --- | --- |
| *QOSA_EASY_SMS_CODING_GSM7* | GSM7 |
| *QOSA_EASY_SMS_CODING_UCS2* | UCS2 |
### qosa_easy_sms_format_e
短信格式枚举定义如下:
```c
typedef enum
{
QOSA_EASY_SMS_PDU = 0,
QOSA_EASY_SMS_TEXT = 1,
} qosa_easy_sms_format_e;
```
| **成员** | **说明** |
| --- | --- |
| *QOSA_EASY_SMS_PDU* | PDU格式 |
| *QOSA_EASY_SMS_TEXT* | 文本格式 |
# 应用逻辑流程图
```{image} images/board_Ay1LwEmHrhZ7MBbOHzjc5aMAn6g.jpg
:width: 820px
:height: 1030px
:align: center
```
# 示例代码
完整示例代码请查看https://github.com/UniRTOS/UniRTOS-Doc-Examples/blob/main/application/one_touch/sms/sms_easy_demo.c
# 开发约束与使用规范
1. 一键SMS的API不能与AT命令并发执行。
2. 调用一键SMS API时,禁止并行调用SMS API。