📄 itm100.c
字号:
/*=========================================================*/
/* 程序说明 */
/* GPRS数据通信模块[SIMCOM-ITM100] */
/* 该程序模块主要是用GPRS数据通讯模块程序功能 */
/* 短信采用PDU短信格式/GPRS的TCP/UDP通讯功能 */
/*撰写人: 梁辉 撰写时间:2003-7-10 */
/*=========================================================*/
#include "string.h"
#include "UPSDHAD.h"
#include "absacc.h"
#include "PortDefine.h"
#include "upsd_i2c.h"
#include "string.h"
//=========================================================
extern unsigned char xdata dgpsTime[6];//时间 YYMMDDhhmmss
extern unsigned char xdata dgpsLat[4];//纬度
extern unsigned char xdata dgpsLon[4];//经度
extern unsigned char xdata dgpsSpd[2];//速度
extern unsigned char xdata dgpsDeg[2];//方向
extern unsigned char xdata dgpsHgh[4];//高度
extern unsigned char xdata Taxistatus;//控制器当前状态7F,7D,7B//车载机状态分二级;第一级为电台状态,第二级的显示器状态;
extern unsigned char xdata Taxistatusbc;//记忆电台状态
extern unsigned char xdata People_Count;
extern unsigned char xdata ICstatus;
extern unsigned char xdata statusValue;
extern unsigned char xdata Uart1RxBUFF[128];
extern unsigned char xdata Uart1TxBUFF[128];
extern unsigned char xdata gpsTimeD[6];
extern unsigned char xdata CurrentTxMode;
extern xdata unsigned char i2c_xmit_buf[256]; // message xmit buffer
extern xdata unsigned char i2c_rcv_buf[256];
//-------------------------------------
extern bit stachgbit;
extern bit GprsModbit;
extern bit ReadMessbit;
//--------------------------------------
//集群模式:
//车载机本地身份码:b23 b22 b21b20 b19--b16 b15--b8 b7-----b0
//通信方式 0 0 群码4bit 组码8bit 身份码8bit
unsigned char xdata Local_ID[3]={0x01,0x01,0x64};
unsigned char xdata CenterID=0x00;
//====================================================
//------------------------------------------2003-09-17
extern unsigned char xdata TaxiData[12];//车辆数据;
//------------------------------------------2003-12-3
extern unsigned char xdata GPRSOnLineTime; //上线定时
//------------------------------------------
extern bit setgprsIPbit;
extern bit startloginbit; //检查是否上线代码
extern bit GprsMessbit;
extern bit workmodebit;
bit GprsRegbit=0; //发送GPRS注册信号的标志位
extern bit GPRSChgModebit;
extern unsigned char xdata ScanGPRSTime;
unsigned char xdata ScanInnetCnt=2;//GPRS网络通信定时
unsigned char xdata ChkSocketTime=6;
/*=========================================================*/
/*功能说明:使SDR模块从GPRS透明模式切换到一般AT的MODEM模式 */
/*函数名: SetChgATMode() */
/*子程序编号: */
/*撰写人: 梁辉 撰写时间: 2003-9-1 */
/*=========================================================*/
code unsigned char *MessDisset="AT+CNMI=3,1,0,0,0";
code const unsigned char *connectIPstart ="AT+CIPSTART=\"TCP\",\"\",\"\""; //连接服务器
code const unsigned char *connectIPsend ="AT+CIPSEND"; //发送数据
code const unsigned char *connectIPclose ="AT+CIPCLOSE"; //关闭UDP/TCP
code const unsigned char *connectIPshut ="AT+CIPSHUT"; //关闭移动场景
//------------------------------------------------------------
unsigned char xdata RemoteIP[15]="061.144.145.230"; //设定的远端IP地址"198.220.250.030";
unsigned char xdata RemotePortID[4]="8960";
unsigned char xdata LocalPortID[4]="8960";
void TCPconnectStart() //设定GPRS上线工作
{
unsigned char TCPStartii;
for(TCPStartii=0;TCPStartii<19;TCPStartii++)
Uart1TxBUFF[TCPStartii]=connectIPstart[TCPStartii];
for(TCPStartii=0;TCPStartii<15;TCPStartii++)
Uart1TxBUFF[TCPStartii+19]=RemoteIP[TCPStartii];
Uart1TxBUFF[34]='"';
Uart1TxBUFF[35]=',';
Uart1TxBUFF[36]='"';
for(TCPStartii=0;TCPStartii<4;TCPStartii++)
Uart1TxBUFF[TCPStartii+37]=RemotePortID[TCPStartii];
Uart1TxBUFF[41]='"';
Uart1TxBUFF[42]=0x0d;
for(TCPStartii=0;TCPStartii<43;TCPStartii++)
U1Txbyte(Uart1TxBUFF[TCPStartii]);
}
//-------------------------------------------------------
void TCPDownLine()
{
unsigned char TCPDownii;
for(TCPDownii=0;TCPDownii<11;TCPDownii++)
Uart1TxBUFF[TCPDownii]=connectIPclose[TCPDownii];
Uart1TxBUFF[11]=0x0d;
for(TCPDownii=0;TCPDownii<12;TCPDownii++)
U1Txbyte(Uart1TxBUFF[TCPDownii]);
delaynop(2000);
for(TCPDownii=0;TCPDownii<10;TCPDownii++)
Uart1TxBUFF[TCPDownii]=connectIPshut[TCPDownii];
Uart1TxBUFF[10]=0x0d;
for(TCPDownii=0;TCPDownii<11;TCPDownii++)
U1Txbyte(Uart1TxBUFF[TCPDownii]);
DownGprsToMess();
}
/*=========================================================*/
/*功能说明:设定SMS短信中心号码 */
/*函数名: SetSMSCterID() */
/*子程序编号: */
/*撰写人: 梁辉 撰写时间: 2003-9-1 */
/*=========================================================*/
unsigned char xdata SMSCenterID[11]="13800200500"; //SMS 中心号码
code unsigned char *setsmscode="AT+CSCA=\"+86\""; //设定中心号码指令
code unsigned char *setbsmsMode="AT+CMGF=1&W"; //设定短信为文本格式
//code unsigned char *setBPS="AT+IPR=57600"; //设定波特率
void SetSMSCterID()
{
unsigned char Setii;
for(Setii=0;Setii<11;Setii++)
Uart1TxBUFF[Setii]=setbsmsMode[Setii];
Uart1TxBUFF[11]=0x0d;
for(Setii=0;Setii<12;Setii++)
U1Txbyte(Uart1TxBUFF[Setii]);
//------------------------- //设定来短信提示
delaynop(1000);
for(Setii=0;Setii<17;Setii++)
Uart1TxBUFF[Setii]=MessDisset[Setii];
Uart1TxBUFF[17]=0x0d;
for(Setii=0;Setii<18;Setii++)
U1Txbyte(Uart1TxBUFF[Setii]);
delaynop(1000);
//-------------------------设定短信中心号码
for(Setii=0;Setii<12;Setii++)
Uart1TxBUFF[Setii]=setsmscode[Setii];
for(Setii=0;Setii<11;Setii++)
Uart1TxBUFF[Setii+12]=SMSCenterID[Setii];
Uart1TxBUFF[23]='"';
Uart1TxBUFF[24]=0x0d;
for(Setii=0;Setii<25;Setii++)
U1Txbyte(Uart1TxBUFF[Setii]);
//-------------------------
}
/*=========================================================*/
/*功能说明:GPRS初始化模块 */
/*函数名: _GPRSLogon() */
/*子程序编号: */
/*撰写人: 梁辉 撰写时间: 2003-12-2 */
/*=========================================================*/
void _GPRSLogon()
{
unsigned char i=100;
SetSMSCterID(); //设定短信中心号
delaynop(1000);
GPRSChgModebit=1; //定时GPRS上线操作
ScanGPRSTime=5;
//---------------
}
//=========================================================
//GPRS的TCP通讯模块区:
//=========================================================
/*=========================================================*/
/*功能说明:GPRS通信打包模块 */
/*函数名: _GPRSPakData() */
/*子程序编号: */
/*撰写人: 梁辉 撰写时间:2003-7-25 */
/*=========================================================*/
//状态<1>+经度<4>+纬度<4>+速度<2>+方位角<2>+海拔高度[4]+日<1>
//+月<1>+年<1>+时<1>+分<1>+秒<1>+人数<1>+显示器状态2+样验和<1>+FF(H)(+0D(H)+0A(H))------26个字节
unsigned char GPRSPakBag[27];
extern unsigned char xdata Add_Key[10];
extern unsigned char xdata Int_Key;
void _GPRSPakMessData()
{
unsigned int gprspakii;
unsigned int gprsnum,gprsnum1,gprsnum2,gprsecode1,gprsecode2,gprsfceCode;
unsigned int gprskeymark; //2003-8-21-9:08
delaynop(2); //上线延时
gprsfceCode=Add_Key[Int_Key];
Int_Key++;
gprskeymark=Int_Key; //2003-8-21-9:08
if(gprskeymark>10) gprskeymark=0;
if(Int_Key>9) Int_Key=0;
gprsnum=gprsfceCode&0xf0; //取得基数高字节
gprsnum1=dgpsTime[4]&0xf0; //取得分钟高字节
gprsnum2=gprsnum1>>4;
gprsecode1=gprsnum|gprsnum2;
gprsnum=gprsfceCode&0x0f; //取得基数低字节
gprsnum1=dgpsTime[4]&0x0f; //取得分钟低字节
gprsnum2=gprsnum<<4;
gprsecode2=gprsnum2|gprsnum1;
GPRSPakBag[0]=Taxistatus^gprsfceCode;
for(gprspakii=0;gprspakii<4;gprspakii++)
{
GPRSPakBag[gprspakii+1]=dgpsLat[gprspakii]^gprsecode1;//经度
GPRSPakBag[gprspakii+5]=dgpsLon[gprspakii]^gprsecode2;//纬度
GPRSPakBag[gprspakii+13]=dgpsHgh[gprspakii]^gprsecode2;//高度
}
delaynop(2);
for(gprspakii=0;gprspakii<2;gprspakii++)
{
GPRSPakBag[gprspakii+9]=dgpsSpd[gprspakii]^gprsfceCode;
GPRSPakBag[gprspakii+11]=dgpsDeg[gprspakii]^gprsfceCode;
}
for(gprspakii=0;gprspakii<2;gprspakii++) GPRSPakBag[gprspakii+17]=dgpsTime[gprspakii]^0x47^gprsfceCode;//DD/MM/YY/HH/MM/SS
for(gprspakii=0;gprspakii<3;gprspakii++) GPRSPakBag[gprspakii+19]=dgpsTime[gprspakii+3]^0x47^gprsfceCode;
GPRSPakBag[22]=People_Count;//人数;
// GPRSPakBag[23]=gprskeymark^0x55^0x36; //加密基数标识加密;
GPRSPakBag[23]=gprsfceCode^0x55^0x36; //加密基数加密
GPRSPakBag[24]=gprsfceCode^ICstatus; //显示器值;
GPRSPakBag[25]=gprsfceCode^statusValue;//显示器状态值;
GPRSPakBag[26]=0x25^dgpsLat[0]^dgpsLat[1]^dgpsLat[2]^dgpsLat[3]^dgpsLon[0]^dgpsLon[1]^dgpsLon[2]^dgpsLon[3];
}
/*=========================================================*/
/*功能说明:GPRS的UDP/TCP模式发送数据 */
/*函数名: GPRSnetTxdata() */
/*子程序编号: */
/*撰写人: 梁辉 撰写时间: 2003-8-5 */
/*=========================================================*/
code unsigned char gprstxendbuf[3]={0xff,0x0d,0x0a};
//0x90+命令字[1]+身份码[3]+GPS数据帧+0xff+0x0d+0x0a;
void GPRSnetTxdata(unsigned char gprsccom,unsigned char datatype)
{
unsigned char gprsheadtemp[9];
unsigned char gprstxii;
//------------------------------------------发送数据启动[2003-12-01]
for(gprstxii=0;gprstxii<10;gprstxii++)
U1Txbyte(connectIPsend[gprstxii]);
U1Txbyte(0x0d);
delaynop(1000);
//-------------------------------------------
gprsheadtemp[0]=0x90;
gprsheadtemp[1]=gprsccom;
for(gprstxii=0;gprstxii<3;gprstxii++)
gprsheadtemp[2+gprstxii]=Local_ID[gprstxii]; //本机的车载身份码
if(datatype==1||datatype==2) _GPRSPakMessData();
for(gprstxii=0;gprstxii<5;gprstxii++)
U1Txbyte(gprsheadtemp[gprstxii]); //0x90+'命令字'[1]+'本机车载ID号'[5]
if(datatype==1)
{
for(gprstxii=0;gprstxii<27;gprstxii++)
U1Txbyte(GPRSPakBag[gprstxii]); //发送车辆GPS数据
}
//-------------------------------------------2003-9-17
else if(datatype==2)
{
for(gprstxii=0;gprstxii<27;gprstxii++)
U1Txbyte(GPRSPakBag[gprstxii]); //发送车辆GPS数据
for(gprstxii=0;gprstxii<12;gprstxii++)
U1Txbyte(TaxiData[gprstxii]); //发送车辆数据
}
//-------------------------------------------
for(gprstxii=0;gprstxii<3;gprstxii++)
U1Txbyte(gprstxendbuf[gprstxii]); //发送帧尾
//-------------------------------------------2003-12-01
U1Txbyte(0x1a);
//-------------------------------------------2003-12-01[CTL-Z]
ScanInnetCnt=2;
}
/*=========================================================*/
/*功能说明:GPRS的UDP/TCP模式接收数据 */
/*函数名: GPRSnetRxdata() */
/*子程序编号: */
/*撰写人: 梁辉 撰写时间:2003-8-5 */
/*=========================================================*/
unsigned char xdata gprsRxCom=0xff;
unsigned char xdata RxCallMark=0xff;
//---------------------------------
bit unloadbit=0;
void GPRSnetRxdata()
{
if(Uart1RxBUFF[0]==0x80) //GPRS网络接收
{
if(!GprsRegbit)
{
if(CurrentTxMode!=0xaa)
CurrentTxMode=0xbb;
GprsModbit=1;
GprsMessbit=0;
}
//---------------------------------------
ChkSocketTime=6; //重新初始化GPRS下行指令值
//---------------------------------------
gprsRxCom=0xff; //初始化命令字
gprsRxCom=Uart1RxBUFF[1];
switch(gprsRxCom)
{
case 'L': //定位
GPRS_RunPos();
break;
case 'T': //跟踪
GPRS_RunTrack();
break;
case 'S': //停止跟踪
GPRS_RunSTrack();
break;
case 'M': //短信
GPRS_RunMess();
break;
case 'H': //电子围栏
GPRS_RunInPlace();
break;
case 'K': //锁车
GPRS_RunLock();
break;
case 'U': //解锁
GPRS_RunUnlock();
break;
// case 'A': //监听
// GPRS_RunMonitor();
// break;
// case 'V': //区域调度
// GPRS_RunAtt();
// break;
// case 'B': //枪毙;
// GPRS_RunKill();
// break;
// case 'D': //复话
// GPRS_RunRelive();
// break;
// case 'O': //调度短信成功
// GPRS_RunAttMess();
// break;
case 'I':
GprsRegbit=0; //清除定时发送注册信息的标志位x
delaynop(1);
GPRS_RunInnet();
break;
case 'i':
GprsRegbit=1; //启动定时发送注册信息的标志位
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -