rt-thread操作系统EC200S-CN实现短信发送流程

一、短信相关AT指令集

二、短信发送流程

 三、实现代码

#include "shortmessage.h"
#include <at.h>
#include <stdio.h>
#include <string.h>
#include <at_device.h>
#include <finsh.h>
#include <at_log.h>


#include <rtthread.h>
#include <rtdevice.h>
#include <rthw.h>


/***************发送短信流程******************
*  ATE                    //ENABLE  ECHO mode
*  AT+CMGF=1              //set text mode
*  AT+CSMP=17,167,0,0     //set sms parameter for text mode
*  AT+CSCS="GSM"          //set character type
*  AT+CMGS="1233321111"   //the phone number
*  当发送完电话号码后,会返回一个>,在后面输入所要传输的短信信息,发送完之后发送0x1a即可发送短信
*********************************************/


#define ATE1                "ATE0"
#define ATCMGF              "AT+CMGF=1"                                 //0设置短消息为PDU模式, 1设置短消息为txet模式
#define ATCSMP              "AT+CSMP=17,167,0,0"
#define ATCSCS              "AT+CSCS=\"%s\""   
#define ATCPMS              "AT+CPMS="ME","ME","ME""                    //设置短信的存储位置
#define ATCMGS              "AT+CMGS=\"%s\""                            //发送手机号
#define ATCMGSDATA          "\%s"                                //发送的消息		
#define ATCMGR              "AT+CMGR=\"%s\""                            //读取消息  	     (AT+CMGR=index (读取命令从消息存储<mem1>向TE返回位置值为<index>的SMS消息)
#define ATCMGD              "AT+CMGD=\"%s\""                            //删除消息			 (AT+CMGD=index (删除index位置的短信))
#define ATCMGL              "AT+CMGL"                                   //获取短信列表		 (会回复收到的未读消息列表)



/*********************************************************
  * @function  sms_ec200_text_send
  * @role      向指定的手机发送text短信
  * @input     phone 手机号指针,pmsg 短消息指针, parameter AT client device name
  * @output    None
  * @return    成功返回:_ATOK,失败返回:_ATERROR,超时返回:_ATOTIME
  *
  ********************************************************/


int  sms_textsend(void* parameter, char*phone, char*pmsg)
{
	
	#define RESP_SIZE                      128
	
	int liv_temp = 500;
	char atphone[50] = "";
	int ret = RT_EOK;
    char atpmsg[140] = "";
	int pmsglen=0;
    at_response_t resp = RT_NULL;
	at_client_t client = RT_NULL;

	
	resp = at_create_resp(RESP_SIZE, 0, rt_tick_from_millisecond(300));
	if (resp == RT_NULL)
	{
			LOG_E("no memory for resp create.");
			ret = -RT_ERROR;
            goto __exit;
	}

	
  
	client = at_client_get(parameter);
	
	if(strlen(phone) != 11)
		return RT_ERROR;
	
	rt_thread_mdelay(liv_temp);
	if(RT_EOK != at_obj_exec_cmd(client, RT_NULL, ATE1))
	{
		 ret = -RT_ERROR;
         goto __exit;
	}
	
	rt_thread_mdelay(liv_temp);
	if(RT_EOK != at_obj_exec_cmd(client, RT_NULL, ATCMGF))
	{
		 ret = -RT_ERROR;
         goto __exit;
	}
	
	rt_thread_mdelay(liv_temp);
	if(RT_EOK != at_obj_exec_cmd(client, RT_NULL, ATCSMP))
	{
		 ret = -RT_ERROR;
         goto __exit;
	}
	
	rt_thread_mdelay(liv_temp);
	if(RT_EOK != at_obj_exec_cmd(client, RT_NULL, ATCSCS,"GSM"))
	{
		 ret = -RT_ERROR;
         goto __exit;
	}
	
	rt_thread_mdelay(liv_temp);
	sprintf(atphone,ATCMGS,phone);
	if(RT_EOK != at_obj_exec_cmd(client, RT_NULL, atphone))
	{
		 ret = -RT_ERROR;
         goto __exit;
	}
	
	rt_thread_mdelay(liv_temp);
	sprintf(atpmsg,ATCMGSDATA,pmsg);
	pmsglen = strlen(atpmsg);
	atpmsg[pmsglen]= 0x1a;
    if(RT_EOK != at_obj_exec_cmd(client, RT_NULL, atpmsg))
	{
		 ret = -RT_ERROR;
		 goto __exit;
	}
	
	
__exit:
    if (resp)
    {
        at_delete_resp(resp);
    }

    return ret;
	
}

四、实验结果

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值