📄 gsm.c
字号:
//***************************************************************
// VoxsonCom.c
//
// By: SG Date: 2003/03/18
//***************************************************************
#include "805xALL.h" // 定义51系列常用定义
//----------------------------------------------------------------
// 引用的外部函数
//----------------------------------------------------------------
extern void StationRun(BYTE,BYTE);
extern BYTE SeekCharInString(BYTE,BYTE idata *); // Pxsb.c 在字符串中查找某个字符
extern void FillTempBuf(void); // Pxsb.c TempBuf中填入0xFF
extern BYTE CmpString(BYTE code *,BYTE idata *); // Pxsb.c 比较两个字符串是否相等
extern BYTE DecToHexByte(BYTE); // Pxsb.c 单字节dec变换成单字节hex
extern void Delay20ms(BYTE); // Pxsb.c 延时20*DelayCnt毫秒
extern void RefreshDispTime(void); // RealTime.c 重新全部刷新Idle下时钟
extern BOOL EepromWrite(BYTE Len,BYTE data *DATAAddr,WORD EepromAddr); //Eeprom.c 把内部RAM块写到EEPROM
extern BOOL EepromRead(BYTE Len,BYTE data *DATAAddr,WORD EepromAddr); //Eeprom.c 把EEPROM块读到内部RAM
extern WORD LoadEEpromAddr(BYTE); // EEprom.c 从EEprom地址表读取参数存放地址
extern BOOL EepromReadX(BYTE Len,BYTE pdata *XDATAAddr,WORD EepromAddr); //EepromB.c 把EEPROM块读到外部RAM
extern WORD LoadATCmdParaEEpAddr(BYTE ATcmdParaNo); // EEpTab.c 取AT命令的参数在EEp中的地址,占用EEp的cnRevAreaAddr1
extern BYTE LoadATCmdParaEEpNo(void); // EEpTab.c 查找AT命令参数在EEp中的空地址的序号,1~8有效,0无效
extern void ReleaseATCmdParaEEpNo(BYTE ATCmdParaNo); // EEpTab.c 释放AT命令参数存储区
extern void ResetATcmdRx(void); //清除收到的缓冲
//extern void RvCallID(BYTE idata *); // VoxsonCom.c 接收到来电号码的出来(显示,存储到EEprom中)
//----------------------------------------------------------------
// 引用的全局变量
//----------------------------------------------------------------
extern BYTE idata KeyBuffer[cnKeyBufferLen];// 临时数据缓冲区(如平时按键的键值保留区等)
extern BYTE data KeyBufWritePtr; // 数据缓冲区写指针
extern BYTE data KeyBufReadPtr; // 数据缓冲区读指针
extern BYTE idata TempBuf[];
extern struct RealTimeFormat
{
BYTE Year; //年
BYTE Month; //月
BYTE Day; //日
BYTE Hour; //小时
BYTE Minute; //分钟
BYTE Second; //秒
BYTE Week; //星期
}
idata RealTime;
BOOL bWaitOKAck; // 某些AT命令的应答分为两部分:参数和OK ==> 需要等到收到OK应答,才能弃除该AT命令
BOOL bATcmdNeedResend; // 必须重新发送AT命令
BOOL bATcmdAckType; // =1 模块主动输出的参数,如:RING,+CLIP:(振铃,来电号码);
//----------------------------------------------------------------
// 外部可引用的函数
//----------------------------------------------------------------
void VocSonReset(void); // VoxsonApp.c Voxson模块复位
void VoxsonInit(void); // VoxsonApp.c VoxsonInit初始化程序
void ModelInitNext(void); // VoxsonApp.c 继续模块初始化
void SBUFTx(BYTE); // VoxsonCom.c 从串口发送单字节数据
BYTE JudgeJinXing(BYTE); // VoxsonCom.c 转换待发送的十六进制数为ASCII字符
void HdlATAckTask(BYTE,BYTE); // VoxsonCom.c AT命令分析散装函数
void SendATcmd(BYTE,BYTE); // VoxsonCom.c 发送AT命令
void AnalyseATcmdTask(void); // VoxsonCom.c AT命令分析函数
void SendATcmdReset(void); // VoxsonCom.c AT命令发送任务的参数初始化
void SendATcmdTask(void); // VoxsonCom.c AT命令发送任务
void WaitATcmdAck1sTask(void); // VoxsonCom.c 等待AT命令应答任务
void PostATcmd(BYTE,BYTE); // VoxsonCom.c 建立AT命令发送任务
void DelCurAtcmd(void); // WaveCom.c 删除当前AT-Cmd
extern struct PhoneStateFormat
{
BYTE bCallOut:1; // =1 去电; =0 来电
BYTE bIsTalking:1; // =1 为通话状态; =0 为非通话状态
BYTE bHookState:1; // 手柄摘挂机标志 --> =1 手柄摘机; =0 手柄挂机
BYTE bHandFree:1; // 免提摘挂机标志 --> =1 免提摘机; =0 免提挂机
BYTE bPhoneState:1; // 话机摘挂机状态(包括免提和手柄) --> =1 摘机; =0 挂机
BYTE bIsDialing:1; // =1 正在拨号;
}
PhoneFlag;
extern BOOL bComTxD1On; //=1 串口正在发送数据
//---------------------------------------------------------------
// 定义变量
//---------------------------------------------------------------
/*
typedef struct
{
BYTE ATcmdNo;
BYTE ATcmdParaPtr;
}
ATcmdArrayDef;
*/
ATcmdArrayDef data ATcmdTxArray[cnATcmdTxArrayLen]; // AT命令发送队列
BYTE data ATcmdTxPara; // 发送AT命令参数 --> 高4 bit该命令发送的次数;低4 bit发送后没有得到应答的时间
BYTE idata ATcmdRxBuf0[cnATcmdRxBufLen]; // AT命令接收缓存0
BYTE idata ATcmdRxBuf1[cnATcmdRxBufLen]; // AT命令接收缓存1
BYTE pdata SMSBuf[cnSMSRecordLen]; // 短信接收缓存
//---------------------------------------------------------------
BYTE code CMGI[] =
{
"AT+CGMI\r"
}
; // 读取厂家ID
BYTE code ATA[] =
{
"ATA\r"
}
; // 接听电话
BYTE code ATH[] =
{
"ATH\r"
}
; // 挂断电话
BYTE code ATD[] =
{
"ATD"
}
; // 拨号命令
BYTE code VTS[] =
{
"AT+VTS="
}
; // 发DTMF命令
BYTE code IPR[] =
{
"AT+IPR=9600\r"
}
; // 设置波特率
BYTE code CSQ[] =
{
"AT+CSQ\r"
}
; // 查询信号强度
BYTE code CLIP[] =
{
"AT+CLIP=1\r"
}
; // 允许来电输出
BYTE code CCLK[] =
{
"AT+CCLK?\r"
}
; // 读取模块的时间
BYTE code SendCCLK[] =
{
"AT+CCLK=\"\n\"\r"
}
; // 调整模块的时间
BYTE code ATM[] =
{
"AT+SPEAKER=1\r"
}
; // 挂机时打开SPEAKER通道
BYTE code AUDIO[] =
{
"AT+VGT=0\r"
}
; // 选择主音频通道
BYTE code CCID[] =
{
"AT+CCID\r"
}
; // 读取SIM卡ID号
BYTE code TestAT[] =
{
"AT&amt;T0\r"
}
; // 测试模块软件
BYTE code SPSPKR0[] =
{
"AT+SPEAKER=1;+VGR=0;+VGT=0;+SIDET=0,0\r"
}
; // 手柄音量4
BYTE code SPSPKR1[] =
{
"AT+SPEAKER=1;+VGR=40;+VGT=0;+SIDET=0,0\r"
}
; // 手柄音量3
BYTE code SPSPKR2[] =
{
"AT+SPEAKER=1;+VGR=70;+VGT=0;+SIDET=0,0\r"
}
; // 手柄音量2
BYTE code SPSPKR3[] =
{
"AT+SPEAKER=1;+VGR=90;+VGT=0;+SIDET=0,0\r"
}
; // 手柄音量1
BYTE code HFSPKR0[] =
{
"AT+SPEAKER=1;+VGR=30;+VGT=0;+SIDET=0,0\r"
}
; // 免提音量4
BYTE code HFSPKR1[] =
{
"AT+SPEAKER=1;+VGR=90;+VGT=0;+SIDET=0,0\r"
}
; // 免提音量3
BYTE code HFSPKR2[] =
{
"AT+SPEAKER=1;+VGR=120;+VGT=0;+SIDET=0,0\r"
}
; // 免提音量2
BYTE code HFSPKR3[] =
{
"AT+SPEAKER=1;+VGR=150;+VGT=0;+SIDET=0,0\r"
}
; // 免提音量1
BYTE code MIC[] =
{
"AT+VGT=0\r"
}
; // MIC参数
BYTE code SID[] =
{
"AT+SID=0,0\r"
}
; // 侧音参数
BYTE code ECHO[] =
{
"AT+ECHO=1,3,30,8000,256\r"
}
; // 回响参数
BYTE code CMGF[] =
{
"AT+CMGF=0\r"
}
; // 选择PDU格式
BYTE code CSMS[] =
{
"AT+CSMS=1\r"
}
; // 符合Phase II标准
BYTE code CNMI[] =
{
"AT+CNMI=1,1;+CMGF=0\r"
}
; // 新短消息输出位置信息
BYTE code CREG[] =
{
"AT+CREG=1\r"
}
; // 输出网络注册信息
BYTE code CMGR[] =
{
"AT+CMGR=\n\r"
}
; // 读取短消息
BYTE code CMGD[] =
{
"AT+CMGD=\n\r"
}
; // 删除短消息
BYTE code CMGS[] =
{
"AT+CMGS=\n\r"
}
; // 发送短消息
BYTE code CSCA[] =
{
"AT+CSCA?\r"
}
; // 读取短信中心号码
BYTE code CMGL[] =
{
"AT+CMGL=4\r"
}
; // 罗列所有短消息
BYTE code ATE[] =
{
"ATE1\r"
}
; // 禁止AT命令数据回送
BYTE code NeedPIN[] =
{
"AT+CPIN?\r"
}
; // 查询SIM卡PIN码状态
BYTE code PINClck[] =
{
"AT+CLCK=\"SC\",1,1234\r"
}
; // 设置SIM卡锁PIN码
BYTE code InputPIN[] =
{
"AT+CPIN=\n\r"
}
; // 输入SIM卡PIN码
BYTE code ChangePIN[] =
{
"AT+CPWD=\"SC\",1234,\n\r"
}
; // 更改SIM卡PIN码
BYTE code PINUnClck[] =
{
"AT+CLCK=\"SC\",0,1234\r"
}
; // SIM卡PIN码解锁
BYTE code CHGBackPIN[] =
{
"AT+CPWD=\"SC\",\n,1234\r"
}
; // 该SIM卡PIN码为默认的‘1234’
BYTE code SaveCfg[] =
{
"AT&amt;W\r"
}
; // 存储用户设置参数
BYTE code PowerOff[] =
{
"AT+CPOF\r"
}
; // 关机
BYTE code CheckBatt[] =
{
"AT+WBCM=2\r"
}
; // 检查电池电压
BYTE code SetCallWaitting[] =
{
"AT+CCWA=1,1,1\r"
}
; // 呼叫等待设置
BYTE code CancelCallWaittng[] =
{
"AT+CCWA=1,0,7\r"
}
; // 取消呼叫等待设置
BYTE code Answer2ndCall[] =
{
"AT+CHLD=1\r"
}
; // 接听呼叫等待的第二个电话
BYTE code Cancel2ndCall[] =
{
"AT+CHLD=0\r"
}
; // 挂断呼叫等待的第二个电话
BYTE code SetCallForward0[] =
{
"AT+CCFC=0,3,\"\n\"\r"
}
; // 呼叫转移设置
BYTE code SetCallForward1[] =
{
"AT+CCFC=1,3,\"\n\"\r"
}
; // 呼叫转移设置
BYTE code SetCallForward2[] =
{
"AT+CCFC=2,3,\"\n\"\r"
}
; // 呼叫转移设置
BYTE code SetCallForward3[] =
{
"AT+CCFC=3,3,\"\n\"\r"
}
; // 呼叫转移设置
BYTE code CancelCallForward[] =
{
"AT+CCFC=4,4\r"
}
; // 取消呼叫转移设置
BYTE code CCEDMain[] =
{
"AT+CCED=0,1\r"
}
; // 查询主基站号
BYTE code CCEDSub[] =
{
"AT+CCED=0,2\r"
}
; // 查询从属基站号
WORD code ATCmd_TX_Tab[] =
{
&amt;CMGI,
&amt;ATA,
&amt;ATH,
&amt;ATD,
&amt;VTS,
&amt;IPR,
&amt;CSQ,
&amt;CLIP,
&amt;CCLK,
&amt;ATM,
&amt;AUDIO,
&amt;CCID,
&amt;TestAT,
&amt;SPSPKR0,
&amt;SPSPKR1,
&amt;SPSPKR2,
&amt;SPSPKR3,
&amt;HFSPKR0,
&amt;HFSPKR1,
&amt;HFSPKR2,
&amt;HFSPKR3,
&amt;MIC,
&amt;SID,
&amt;ECHO,
&amt;CMGF,
&amt;CSMS,
&amt;CNMI,
&amt;CREG,
&amt;CMGR,
&amt;CMGD,
&amt;CMGS,
&amt;CSCA,
&amt;CMGL,
&amt;ATE,
&amt;NeedPIN,
&amt;PINClck,
&amt;InputPIN,
&amt;ChangePIN,
&amt;PINUnClck,
&amt;CHGBackPIN,
&amt;SaveCfg,
&amt;PowerOff,
&amt;CheckBatt,
&amt;SetCallWaitting,
&amt;CancelCallWaittng,
&amt;Answer2ndCall,
&amt;Cancel2ndCall,
&amt;SetCallForward0,
&amt;SetCallForward1,
&amt;SetCallForward2,
&amt;SetCallForward3,
&amt;CancelCallForward,
&amt;SendCCLK,
&amt;CCEDMain,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -