📄 main.lss
字号:
SysState.fSendCarStateMsg.flag = 1;
14e: 81 e0 ldi r24, 0x01 ; 1
150: 80 93 60 09 sts 0x0960, r24
154: 08 95 ret
00000156 <centGetWorkPara>:
}
//**************************************************************************
//函数:centGetWorkPara
//功能: 中心读取工作参数
//输入:Data=Data部分,Datalen=Data长度
//返回:无
//**************************************************************************
void centGetWorkPara( unsigned char *Data, int Datalen)
{
//发送一次工作参数
SysState.fSendSetPataMsg = 1;
156: 81 e0 ldi r24, 0x01 ; 1
158: 80 93 70 09 sts 0x0970, r24
15c: 08 95 ret
0000015e <centGetWorkState>:
}
//**************************************************************************
//函数:centSetWorkPara
//功能: 中心设定工作状态
//输入:Data=DATA部分,Datalen=Data长度
//返回:无
//**************************************************************************
void centSetWorkPara( unsigned char *Data, int Datalen)
{
int kk, jj;
char type;
for(kk=0; kk<Datalen; )
{
type = *Data;
switch (type)
{
case WP_PT_COMTYPE:
Data++;
BasicPara.ComuMode = Data[0];//通信模式
Data++ ;
kk += 2;
//Myprintf("commode=%d\n",BasicPara.ComuMode );
//Myprintf("kk=%d", kk);
break;
case WP_PT_CENTNUM://中心gsm号码
Data++;
myCopy( Data , BasicPara.CenterGsmNum ,0 ,CENTERNUMLEN);
Data += CENTERNUMLEN;
kk += CENTERNUMLEN+1;
//Myprintf("CenterGsmNum=%s\n",BasicPara.CenterGsmNum );
//Myprintf("kk=%d", kk);
break;
case WP_PT_CENTIP://中心IP和端口
Data++;
myCopy( Data , BasicPara.CenterIP[0] ,0 ,4);
Data += 4;
//Myprintf("IP:%d.%d.%d.%d\n",BasicPara.CenterIP[0][0],BasicPara.CenterIP[0][1],BasicPara.CenterIP[0][2],BasicPara.CenterIP[0][3] );
BasicPara.CenterPort[0] = Data[0]*256+Data[1];
//Myprintf("PORT:%d\n",BasicPara.CenterPort[0]);
Data += 2;
kk += 7;
//Myprintf("kk=%d", kk);
break;
case WP_PT_MSGPERIOD://终端消息发送间隔时间
Data++;
WorkPara.sLoginMsgPeriod = Data[0]*256 + Data[1];
WorkPara.sCarStateMsgPeriod = WorkPara.sLoginMsgPeriod;
//Myprintf("sCarStateMsgPeriod:%d\n",WorkPara.sCarStateMsgPeriod);
Data += 2;
kk +=3;
//Myprintf("kk=%d", kk);
case WP_PT_WARNPERIOD://终端报警消息发送间隔时间
Data++;
WorkPara.sWarnMsgPeriod = Data[0]*256 + Data[1];
//Myprintf("sWarnMsgPeriod:%d\n",WorkPara.sWarnMsgPeriod);
Data += 2;
kk +=3;
//Myprintf("kk=%d", kk);
break;
case WP_PT_SENSORSBOUND://16路传感器报警门限
Data++;
for(jj=0; jj < 16; jj++)
{
WorkPara.SensorsBound[jj] = Data[0]*256 + Data[1];
//Myprintf("SensorsBound[%d]=%d\n",jj, WorkPara.SensorsBound[jj]);
Data += 2;
//Myprintf("kk=%d", kk);
}
kk +=16*2+1;
break;
case WP_PT_SENSORWARNEN://报警使能
Data++;
WorkPara.SensorsWarnEnabled[0] = Data[0];
WorkPara.SensorsWarnEnabled[1] = Data[1];
//Myprintf("SensorsWarnEnabled[%d][%d]\n", WorkPara.SensorsWarnEnabled[0], WorkPara.SensorsWarnEnabled[1]);
Data +=2;
kk +=3;
//Myprintf("kk=%d", kk);
break;
case WP_PT_WAITCHSTATE:
//开关量正常状态值
Data++;
WorkPara.SwitchNomalState[0] = Data[0];
WorkPara.SwitchNomalState[1] = Data[1];
//Myprintf("SwitchNomalState[%d][%d]\n", WorkPara.SwitchNomalState[0], WorkPara.SwitchNomalState[1]);
Data +=2;
kk +=3;
//Myprintf("kk=%d", kk);
break;
case WP_PT_WAITCHWARNEN:
//开关量报警使能
Data++;
WorkPara.SwitchWarnEnable[0] = Data[0];
WorkPara.SwitchWarnEnable[1] = Data[1];
//Myprintf("SwitchWarnEnable[%d][%d]\n", WorkPara.SwitchWarnEnable[0], WorkPara.SwitchWarnEnable[1]);
//Myprintf("kk=%d", kk);
Data +=2;
kk +=3;
//Myprintf("kk=%d", kk);
break;
case WP_PT_RUNFIELD:
//活动范围
//左上角纬度
jj = FindeCharInStr(Data, (Datalen - kk) , 1, ',');
if (jj == -1) return;
myCopy(Data, (char*)WorkPara.gpsPositionBound_LEFT.latitude, 0, jj);
Data += jj+1;
kk += jj+1;
WorkPara.gpsPositionBound_LEFT.LatiIndit = Data[0];
Data += 2;
kk += 2;
//左上角经度
jj = FindeCharInStr(Data, (Datalen - kk) , 1, ',');
if (jj == -1) return;
myCopy(Data, WorkPara.gpsPositionBound_LEFT.Longitude, 0, jj);
Data += jj+1;
kk += jj+1;
WorkPara.gpsPositionBound_LEFT.LongiIndit = Data[0];
Data += 2;
kk += 2;
//右下角纬度
jj = FindeCharInStr(Data, (Datalen - kk) , 1, ',');
if (jj == -1) return;
myCopy(Data, WorkPara.gpsPositionBound_RIGHT.latitude, 0, jj);
Data += jj+1;
kk += jj+1;
WorkPara.gpsPositionBound_RIGHT.LatiIndit = Data[0];
Data += 2;
kk += 2;
//右下角经度
//jj = FindeCharInStr(Data, (Datalen - kk) , 1, ',');
if (jj == -1) return;
myCopy(Data, WorkPara.gpsPositionBound_RIGHT.Longitude, 0, jj);
Data += jj+1;
kk += jj+1;
WorkPara.gpsPositionBound_RIGHT.LongiIndit = Data[0];
Data += 2;
kk += 2;
break;
default : return;
}
}
//终端回应,发送参数设定消息
SysState.fSendSetPataMsg = 1;
}
//**************************************************************************
//函数:centGetWorkState
//功能: 中心查询工作状态
//输入:Data=DATA部分,Datalen=Data长度
//返回:无
//**************************************************************************
void centGetWorkState( unsigned char *Data, int Datalen)
{
//返回工作状态
SysState.fSendWorkState = 1;
15e: 81 e0 ldi r24, 0x01 ; 1
160: 80 93 71 09 sts 0x0971, r24
164: 08 95 ret
00000166 <centSetWorkState>:
}
//**************************************************************************
//函数:centSetWorkState
//功能: 中心设定工作状态
//输入:Data=DATA部分,Datalen=Data长度
//返回:无
//**************************************************************************
void centSetWorkState( unsigned char *Data, int Datalen)
{
166: fc 01 movw r30, r24
//设置当前工作状态
SysState.CarWorkState = Data[0];
168: 80 81 ld r24, Z
16a: 80 93 06 0a sts 0x0A06, r24
switch (SysState.CarWorkState)
16e: 99 27 eor r25, r25
170: 81 30 cpi r24, 0x01 ; 1
172: 91 05 cpc r25, r1
174: 19 f0 breq .+6 ; 0x17c <centSetWorkState+0x16>
176: 02 97 sbiw r24, 0x02 ; 2
178: 79 f0 breq .+30 ; 0x198 <centSetWorkState+0x32>
17a: 11 c0 rjmp .+34 ; 0x19e <centSetWorkState+0x38>
{
case WS_PT_CLASS_1_LOCK:
SysState.fClass1Loack.RemainTime = WorkPara.sClass1LockDelay_m;
17c: 80 91 1a 07 lds r24, 0x071A
180: 90 91 1b 07 lds r25, 0x071B
184: 90 93 6a 09 sts 0x096A, r25
188: 80 93 69 09 sts 0x0969, r24
SysState.fClass1Loack.flag = 0;
18c: 10 92 68 09 sts 0x0968, r1
SysState.fClass1Loack.TimeEnabled = 1;
190: 81 e0 ldi r24, 0x01 ; 1
192: 80 93 6b 09 sts 0x096B, r24
break;
196: 03 c0 rjmp .+6 ; 0x19e <centSetWorkState+0x38>
case WS_PT_CLASS_2_LOCK:
SysState.fClass2Loack.flag = 1;
198: 81 e0 ldi r24, 0x01 ; 1
19a: 80 93 6c 09 sts 0x096C, r24
break;
}
//返回车辆状态消息
SysState.fSendWorkState = 1;
19e: 81 e0 ldi r24, 0x01 ; 1
1a0: 80 93 71 09 sts 0x0971, r24
1a4: 08 95 ret
000001a6 <centLoginConfirm>:
1a6: fc 01 movw r30, r24
1a8: e0 81 ld r30, Z
1aa: ee 23 and r30, r30
1ac: 39 f4 brne .+14 ; 0x1bc <centLoginConfirm+0x16>
1ae: 81 e0 ldi r24, 0x01 ; 1
1b0: 80 93 72 09 sts 0x0972, r24
1b4: e0 93 5f 09 sts 0x095F, r30
1b8: e0 93 5c 09 sts 0x095C, r30
1bc: 08 95 ret
000001be <FindeCharInStr>:
}
//**************************************************************************
//函数:tmLoginMsg
//功能: 生成终端注册消息
//输出:Msg=消息,Msgtype=消息类型
//返回:0=消息无效,>0=消息长度
//**************************************************************************
int tmLoginMsg( unsigned char *Msg)
{
unsigned char *pMsg = Msg;
sprintf(pMsg , BasicPara.TM_Time);//生产日期
pMsg +=TM_TIMELENGTH;
sprintf(pMsg , BasicPara.TM_type);//型号
pMsg +=TM_TYPELENGTH;
sprintf(pMsg , BasicPara.TM_id);//编号
pMsg +=TM_IDLENGTH;
return (abs(Msg - pMsg));
}
//**************************************************************************
//函数:tmCarStateMsg
//功能: 生成车辆状态消息
//输出:Msg=消息
//返回:0=消息无效,>0=消息长度
//**************************************************************************
int tmCarStateMsg( unsigned char *Msg)
{
int len;
unsigned char *pMsg = Msg;
*pMsg++ = CS_PT_SENSOR;
for(len=0; len < SENSORSNUM; len++)
{
*pMsg++ = SysState.SensorsValue[len] / 256;
*pMsg++ = SysState.SensorsValue[len] % 256;
}
*pMsg++ = CS_PT_CARSTATE;
*pMsg++ = SysState.SwitchState[0];
*pMsg++ = SysState.SwitchState[1];
*pMsg++ = CS_PT_GPS;
sprintf((char*)pMsg, SysState.gpsInfo);//gps信息
pMsg +=strlen(SysState.gpsInfo);
return (abs(Msg - pMsg));
}
//**************************************************************************
//函数:tmCarStateMsg
//功能: 生成工作参数查询/设置响应消息
//输出:Msg=消息,Msgtype=消息类型
//返回:0=消息无效,>0=消息长度
//**************************************************************************
int tmGetWorkParaMsg( unsigned char *Msg)
{
int kk;
unsigned char *pMsg = Msg;
*pMsg++ = WP_PT_COMTYPE;
*pMsg++ = BasicPara.ComuMode;//通信模式
//中心gsm号码
*pMsg++ = WP_PT_CENTNUM;
sprintf( pMsg, BasicPara.CenterGsmNum );
pMsg += CENTERNUMLEN;
//中心IP和port
*pMsg++ = WP_PT_CENTIP;
*pMsg++ = BasicPara.CenterIP[0][0];
*pMsg++ = BasicPara.CenterIP[0][1];
*pMsg++ = BasicPara.CenterIP[0][2];
*pMsg++ = BasicPara.CenterIP[0][3];
*pMsg++ = BasicPara.CenterPort[0]/ 256;
*pMsg++ = BasicPara.CenterPort[0]% 256;
//终端注册消息发送间隔时间
*pMsg++ = WP_PT_MSGPERIOD;
*pMsg++ = WorkPara.sLoginMsgPeriod / 256;
*pMsg++ = WorkPara.sLoginMsgPeriod % 256;
//终端报警消息发送间隔时间
*pMsg++ = WP_PT_WARNPERIOD;
*pMsg++ = WorkPara.sWarnMsgPeriod / 256;
*pMsg++ = WorkPara.sWarnMsgPeriod % 256;
//16路传感器报警门限
*pMsg++ = WP_PT_SENSORSBOUND;
for(kk=0; kk < SENSORSNUM; kk++)
{
*pMsg++ = WorkPara.SensorsBound[kk] / 256;
*pMsg++ = WorkPara.SensorsBound[kk] % 256;
}
//传感器报警使能
*pMsg++ = WP_PT_SENSORWARNEN;
*pMsg++ = WorkPara.SensorsWarnEnabled[0];
*pMsg++ = WorkPara.SensorsWarnEnabled[1];
//开关量正常状态
*pMsg++ = WP_PT_WAITCHSTATE;
*pMsg++ = WorkPara.SwitchNomalState[0];
*pMsg++ = WorkPara.SwitchNomalState[1];
//开关量报警使能
*pMsg++ = WP_PT_WAITCHWARNEN;
*pMsg++ = WorkPara.SwitchWarnEnable[0];
*pMsg++ = WorkPara.SwitchWarnEnable[1];
//活动范围
//......
return (abs(Msg - pMsg));
}
//**************************************************************************
//函数:tmCarStateMsg
//功能: 生成工作状态查询/设置响应消息
//输出:Msg=消息,Msgtype=消息类型
//返回:0=消息无效,>0=消息长度
//**************************************************************************
int tmGetWorkStateMsg( unsigned char *Msg)
{
*Msg = SysState.CarWorkState;
return 1;
}
//**************************************************************************
//函数:tmCreateMsg
//功能: 生成消息/指示
//输入:主功能码和子功能码
//输出:消息
//返回:0=消息无效,>0=消息长度
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -