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

📄 atcmd.cpp

📁 tc35i(GSM模块)的控制程序VC源码
💻 CPP
字号:
// ATCmd.cpp: implementation of the CATCmd class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "GSM_Ctrl_Prj.h"
#include "ATCmd.h"

#include "afxmt.h"

#include "Sms.h"
#include "SerialThread.h"
extern SerialThread* g_pSerialProcess;

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
TBYTE CATCmd::m_pdu[512];
CATCmd::CATCmd()
{

}

CATCmd::~CATCmd()
{

}
bool CATCmd::AT_Test(){
	BYTE pByte[4];
	pByte[0] = 'A';
	pByte[1] = 'T';
	pByte[2] = '\r';
	pByte[3] = '\n';
	g_pSerialProcess->WriteCmd(pByte,4);
	//g_pSerialProcess->ResumeThread();
	
	return true;
}
bool CATCmd::AT_Set_PDU(){
    BYTE pByte[20] ;
	memcpy(pByte , "AT+CMGF=0\r\n" , 11);
    g_pSerialProcess->WriteCmd(pByte,11);
	//g_pSerialProcess->ResumeThread();
    return true;
}
bool CATCmd::AT_Set_Snfs(){
	BYTE pByte[20] ;
	memcpy(pByte , "AT^SNFS=2\r\n" , 11);
    g_pSerialProcess->WriteCmd(pByte,11);
	//g_pSerialProcess->ResumeThread();
    return true;
}
bool CATCmd::AT_Set_Saic(){
	BYTE pByte[20] ;
    memcpy(pByte , "AT^SAIC=2,2,2\r\n" , 15);
    g_pSerialProcess->WriteCmd(pByte,15);
	//g_pSerialProcess->ResumeThread();
    return true;
}

bool CATCmd::AT_Call(PTBYTE desTelNo,UINT len){
   BYTE pByte[30] ;
   if(len > 20) return false;
   
   memcpy(pByte , "ATD" , 3);
   memcpy(pByte + 3 , desTelNo , len);
   pByte[len + 3] = ';';
   pByte[len + 4] = '\r';
   pByte[len + 5] = '\n';
   g_pSerialProcess->WriteCmd(pByte,len + 6);
   //g_pSerialProcess->ResumeThread();
   return true;
}
bool CATCmd::AT_Accept()//接听
{
	BYTE pByte[10] ;
	memcpy(pByte , "ATA\r\n" , 4);
    g_pSerialProcess->WriteCmd(pByte, 4);
	//g_pSerialProcess->ResumeThread();
	return true;
}
bool CATCmd::AT_Hangup()//挂机
{
    BYTE pByte[10] ;
	memcpy(pByte , "ATH\r\n" , 5);
    g_pSerialProcess->WriteCmd(pByte, 5);
	//g_pSerialProcess->ResumeThread();
	return true;
}
//发短消息
bool CATCmd::AT_SendMsgStep1(PTBYTE msgCenterNo ,UINT msgCenterNo_len,
					    PTBYTE desTelNo ,UINT desTel_len,
						PTBYTE msg, UINT msg_len){
    BYTE pByte[10] ;
//	AT_Set_MsgCenter(msgCenterNo,msgCenterNo_len);
//	memcpy(pByte , "AT+CMGF=0\n" , 10);
//    g_pSerialProcess->WriteCmd(pByte, 10);
	int nPduLength;		// PDU串长度
	unsigned char nSmscLength;	// SMSC串长度
	TBYTE cmd[16];		// 命令串
	//TBYTE pdu[512];		// PDU串


	// 检查短消息内容是否空,或者超长
	CString strUnicode;
	WCHAR wchar[1024];
	//memset(m_pdu,0,512);
	int nCount = ::MultiByteToWideChar(CP_ACP, 0, (LPCSTR)msg, -1, wchar, 1024);
	if(nCount <= 1)
	{
		AfxMessageBox("请输入消息内容!");
		return false;
	}
	else if(nCount > 70)		// 我们决定全部用UCS2编码,最大70个字符(半角/全角)
	{
		AfxMessageBox("消息内容太长,无法发送!");
		return false;
	}
	SM_PARAM SmParam;

	memset(&SmParam, 0, sizeof(SM_PARAM));

	// 去掉号码前的"+"
	CString strSmsc((LPCTSTR)msgCenterNo);
	CString strNumber((LPCTSTR)desTelNo);
    CString strContent((LPCTSTR)msg);
		if(strSmsc[0] == '+')  strSmsc = strSmsc.Mid(1);
		if(strNumber[0] == '+')  strNumber = strNumber.Mid(1);

		// 在号码前加"86"
		if(strSmsc.Left(2) != "86")  strSmsc = "86" + strSmsc;
		if(strNumber.Left(2) != "86")  strNumber = "86" + strNumber;

		// 填充短消息结构
		strcpy(SmParam.SCA, strSmsc);
		strcpy(SmParam.TPA, strNumber);
		strcpy(SmParam.TP_UD, strContent);
		SmParam.TP_PID = 0;
		SmParam.TP_DCS = GSM_UCS2;

		// 发送短消息
		
			
	nPduLength = gsmEncodePdu(&SmParam, (char*)m_pdu);	// 根据PDU参数,编码PDU串
	strcat((char*)m_pdu, "\x01a");		// 以Ctrl-Z结束

	gsmString2Bytes((char*)m_pdu, &nSmscLength, 2);	// 取PDU串中的SMSC信息长度
	nSmscLength++;		// 加上长度字节本身

	// 命令中的长度,不包括SMSC信息长度,以数据字节计
	sprintf((char*)cmd, "AT+CMGS=%d\r\n", nPduLength / 2 - nSmscLength);	// 生成命令


	g_pSerialProcess->WriteCmd(cmd, strlen((char*)cmd));	// 先输出命令串
    
    //g_pSerialProcess->ResumeThread();
	// 根据能否找到"\r\n> "决定成功与否
	
	return true;
}
bool CATCmd::AT_SendMsgStep2(){
    g_pSerialProcess->WriteCmd(m_pdu, strlen((char*)m_pdu));
	//g_pSerialProcess->ResumeThread();
	return true;
}
//读短消息
bool CATCmd::AT_ReadMsg(UINT index){
    CHAR pByte[15];	
	sprintf(pByte,"AT+CMGR=%d\r\n",index);
	g_pSerialProcess->WriteCmd((PBYTE)pByte,strlen(pByte));
	return true;
}
bool CATCmd::AT_MsgDecode(const char* pSrc, SM_PARAM* pDst){
    gsmDecodePdu(pSrc,pDst);
	return true;
}
bool CATCmd::AT_DelMsg(UINT index){
    CHAR pByte[15];	
	sprintf(pByte,"AT+CMGD=%d\r\n",index);
	int i=strlen(pByte);
	g_pSerialProcess->WriteCmd((PBYTE)pByte,i);
	return true;
}
//设置来电显示
bool CATCmd::AT_Set_ShowTelClue(){
	BYTE pByte[15] ;
	memcpy(pByte , "AT+CLIP=1\r\n" , 11);
    g_pSerialProcess->WriteCmd(pByte, 11);
	//g_pSerialProcess->ResumeThread();
	return true;
}
//设置短消息到达提示命令
bool CATCmd::AT_Set_ShowMsgClue(){
	BYTE pByte[20] ;
	memcpy(pByte , "AT+CNMI=1,1,0,0,1\r\n" , 19);
    g_pSerialProcess->WriteCmd(pByte, 19);
	//g_pSerialProcess->ResumeThread();
	return true;
}

bool CATCmd::AT_Read_Signal(){
return true;
}

bool CATCmd::AT_Read_MsgCenter(){
return true;
}
bool CATCmd::AT_Set_MsgCenter(PTBYTE msgCenterNo ,UINT msgCenterNo_len){
	BYTE pByte[40] ;
	if (msgCenterNo_len > 20)
	{
		return false;
	}
	memcpy(pByte , "AT+CSCA=\"" , 9);
	memcpy(pByte + 9, msgCenterNo,msgCenterNo_len);
	memcpy(pByte + 9 + msgCenterNo_len , "\"\r\n" , 3);
    g_pSerialProcess->WriteCmd(pByte, 9 + msgCenterNo_len + 3);
	
	//g_pSerialProcess->ResumeThread();
	return true;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -