305 lines
9.3 KiB
C
305 lines
9.3 KiB
C
#include "set_terminal_parameter.h"
|
|
#include "terminal_parameter.h"
|
|
#include "client_manager.h"
|
|
#include "jt808_debug.h"
|
|
|
|
unsigned short kParameterSettingCMD[PARA_SETTING_LIMIT] = {
|
|
kTerminalHeartBeatInterval, // DWORD, 终端心跳发送间隔(s).
|
|
kMainServerAddress, // STRING, 主服务器地址,IP 或域名
|
|
kServerPort, // DWORD, 服务器 TCP 端口
|
|
kDefaultTimeReportTimeInterval, // DWORD, 缺省时间汇报间隔
|
|
kCornerPointRetransmissionAngle, // DWORD, 拐点补传角度, < 180°.
|
|
kMaxSpeed, // DWORD, 最高速度, km/h.
|
|
kProvinceID, // WORD, 车辆所在的省域 ID
|
|
kCityID, // WORD, 车辆所在的市域 ID
|
|
kCarPlateNum, // STRING, 公安交通管理部门颁发的机动车号牌
|
|
kCarPlateColor, // 车牌颜色,按照 JT/T415-2006 的 5.4.12
|
|
};
|
|
|
|
void jt808ParameterSettingParse(unsigned int id, unsigned char *buf, unsigned char buf_len, struct ProtocolParameter *para)
|
|
{
|
|
switch (id)
|
|
{
|
|
case kTerminalHeartBeatInterval:
|
|
{
|
|
handle_HeartBeatInterval(buf, buf_len, para);
|
|
}
|
|
break;
|
|
|
|
case kMainServerAddress:
|
|
{
|
|
handle_MainServerAddress(buf, buf_len, para);
|
|
}
|
|
break;
|
|
|
|
case kServerPort:
|
|
{
|
|
handle_ServerPort(buf, buf_len, para);
|
|
}
|
|
break;
|
|
|
|
case kDefaultTimeReportTimeInterval:
|
|
{
|
|
handle_DefaultTimeReportTimeInterval(buf, buf_len, para);
|
|
}
|
|
break;
|
|
|
|
case kCornerPointRetransmissionAngle:
|
|
{
|
|
handle_CornerPointRetransmissionAngle(buf, buf_len, para);
|
|
}
|
|
break;
|
|
|
|
case kMaxSpeed:
|
|
{
|
|
handle_MaxSpeed(buf, buf_len, para);
|
|
}
|
|
break;
|
|
|
|
case kProvinceID:
|
|
{
|
|
handle_ProvinceID(buf, buf_len, para);
|
|
}
|
|
break;
|
|
|
|
case kCityID:
|
|
{
|
|
handle_CityID(buf, buf_len, para);
|
|
}
|
|
break;
|
|
|
|
case kCarPlateNum:
|
|
{
|
|
handle_CarPlateNum(buf, buf_len, para);
|
|
}
|
|
break;
|
|
|
|
case kCarPlateColor:
|
|
{
|
|
handle_CarPlateColor(buf, buf_len, para);
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void handle_HeartBeatInterval(unsigned char *buf, unsigned char buf_len, struct ProtocolParameter *para)
|
|
{
|
|
union U32ToU8Array u32converter; // 注意大小端转换
|
|
unsigned char *p = NULL;
|
|
unsigned int heartBeatInterval;
|
|
if ((buf == NULL) || (buf_len == 0))
|
|
return;
|
|
|
|
p = (unsigned char *)malloc(sizeof(unsigned char) * buf_len);
|
|
memcpy(p, buf, buf_len);
|
|
|
|
memcpy(u32converter.u8array, p, buf_len);
|
|
heartBeatInterval = EndianSwap32(u32converter.u32val);
|
|
|
|
para->parse.terminal_parameters.HeartBeatInterval = heartBeatInterval;
|
|
JT808_DEBUG("handle_HeartBeatInterval ==== %d \r\n", para->parse.terminal_parameters.HeartBeatInterval);
|
|
// FLASH_WriteByte(FLASH_ADDR , (uint8_t *) ¶->parse.terminal_parameters , sizeof(para->parse.terminal_parameters));
|
|
|
|
free(p);
|
|
|
|
return;
|
|
}
|
|
|
|
void handle_MainServerAddress(unsigned char *buf, unsigned char buf_len, struct ProtocolParameter *para)
|
|
{
|
|
unsigned char *p = NULL;
|
|
if ((buf == NULL) || (buf_len == 0))
|
|
return;
|
|
|
|
p = (unsigned char *)malloc(sizeof(unsigned char) * (buf_len + 1));
|
|
memcpy(p, buf, buf_len);
|
|
|
|
// 字符串注意GBK转码
|
|
memset(para->parse.terminal_parameters.MainServerAddress, 0, sizeof(para->parse.terminal_parameters.MainServerAddress));
|
|
memcpy(para->parse.terminal_parameters.MainServerAddress, p, buf_len);
|
|
// FLASH_WriteByte(FLASH_ADDR , (uint8_t *) ¶->parse.terminal_parameters , sizeof(para->parse.terminal_parameters));
|
|
JT808_DEBUG("handle_MainServerAddress ==== %s \r\n", para->parse.terminal_parameters.MainServerAddress);
|
|
free(p);
|
|
|
|
return;
|
|
}
|
|
|
|
void handle_ServerPort(unsigned char *buf, unsigned char buf_len, struct ProtocolParameter *para)
|
|
{
|
|
union U32ToU8Array u32converter; // 注意大小端转换
|
|
unsigned char *p = NULL;
|
|
unsigned int serverPort;
|
|
|
|
if ((buf == NULL) || (buf_len == 0))
|
|
return;
|
|
|
|
p = (unsigned char *)malloc(sizeof(unsigned char) * buf_len);
|
|
memcpy(p, buf, buf_len);
|
|
|
|
memcpy(u32converter.u8array, p, buf_len);
|
|
serverPort = EndianSwap32(u32converter.u32val);
|
|
|
|
para->parse.terminal_parameters.ServerPort = serverPort;
|
|
// FLASH_WriteByte(FLASH_ADDR , (uint8_t *) ¶->parse.terminal_parameters , sizeof(para->parse.terminal_parameters));
|
|
JT808_DEBUG("handle_ServerPort ==== %d \r\n", para->parse.terminal_parameters.ServerPort);
|
|
free(p);
|
|
|
|
return;
|
|
}
|
|
|
|
void handle_DefaultTimeReportTimeInterval(unsigned char *buf, unsigned char buf_len, struct ProtocolParameter *para)
|
|
{
|
|
union U32ToU8Array u32converter; // 注意大小端转换
|
|
unsigned char *p = NULL;
|
|
unsigned int DefaultTimeReportTimeInterval;
|
|
if ((buf == NULL) || (buf_len == 0))
|
|
return;
|
|
|
|
p = (unsigned char *)malloc(sizeof(unsigned char) * buf_len);
|
|
memcpy(p, buf, buf_len);
|
|
|
|
memcpy(u32converter.u8array, p, buf_len);
|
|
DefaultTimeReportTimeInterval = EndianSwap32(u32converter.u32val);
|
|
if (DefaultTimeReportTimeInterval >= 30)
|
|
{
|
|
DefaultTimeReportTimeInterval = 30;
|
|
}
|
|
if (DefaultTimeReportTimeInterval <= 2)
|
|
{
|
|
DefaultTimeReportTimeInterval = 2;
|
|
}
|
|
para->parse.terminal_parameters.DefaultTimeReportTimeInterval = DefaultTimeReportTimeInterval;
|
|
// FLASH_WriteByte(FLASH_ADDR , (uint8_t *) ¶->parse.terminal_parameters , sizeof(para->parse.terminal_parameters));
|
|
JT808_DEBUG("handle_DefaultTimeReportTimeInterval ==== %d \r\n", para->parse.terminal_parameters.DefaultTimeReportTimeInterval);
|
|
free(p);
|
|
|
|
return;
|
|
}
|
|
|
|
void handle_CornerPointRetransmissionAngle(unsigned char *buf, unsigned char buf_len, struct ProtocolParameter *para)
|
|
{
|
|
union U32ToU8Array u32converter; // 注意大小端转换
|
|
unsigned char *p = NULL;
|
|
unsigned int CornerPointRetransmissionAngle;
|
|
if ((buf == NULL) || (buf_len == 0))
|
|
return;
|
|
|
|
p = (unsigned char *)malloc(sizeof(unsigned char) * buf_len);
|
|
memcpy(p, buf, buf_len);
|
|
|
|
memcpy(u32converter.u8array, p, buf_len);
|
|
CornerPointRetransmissionAngle = EndianSwap32(u32converter.u32val);
|
|
|
|
para->parse.terminal_parameters.CornerPointRetransmissionAngle = CornerPointRetransmissionAngle;
|
|
// FLASH_WriteByte(FLASH_ADDR , (uint8_t *) ¶->parse.terminal_parameters , sizeof(para->parse.terminal_parameters));
|
|
JT808_DEBUG("handle_DefaultTimeReportTimeInterval ==== %d \r\n", para->parse.terminal_parameters.DefaultTimeReportTimeInterval);
|
|
free(p);
|
|
|
|
return;
|
|
}
|
|
|
|
void handle_MaxSpeed(unsigned char *buf, unsigned char buf_len, struct ProtocolParameter *para)
|
|
{
|
|
union U32ToU8Array u32converter; // 注意大小端转换
|
|
unsigned char *p = NULL;
|
|
unsigned int MaxSpeed;
|
|
if ((buf == NULL) || (buf_len == 0))
|
|
return;
|
|
|
|
p = (unsigned char *)malloc(sizeof(unsigned char) * buf_len);
|
|
memcpy(p, buf, buf_len);
|
|
|
|
memcpy(u32converter.u8array, p, buf_len);
|
|
MaxSpeed = EndianSwap32(u32converter.u32val);
|
|
|
|
para->parse.terminal_parameters.MaxSpeed = MaxSpeed;
|
|
// FLASH_WriteByte(FLASH_ADDR, (uint8_t *) ¶->parse.terminal_parameters , sizeof(para->parse.terminal_parameters));
|
|
JT808_DEBUG("handle_MaxSpeed ==== %d \r\n", para->parse.terminal_parameters.MaxSpeed);
|
|
free(p);
|
|
|
|
return;
|
|
}
|
|
|
|
void handle_ProvinceID(unsigned char *buf, unsigned char buf_len, struct ProtocolParameter *para)
|
|
{
|
|
union U16ToU8Array u16converter; // 注意大小端转换
|
|
unsigned char *p = NULL;
|
|
unsigned short ProvinceID;
|
|
if ((buf == NULL) || (buf_len == 0))
|
|
return;
|
|
|
|
p = (unsigned char *)malloc(sizeof(unsigned char) * buf_len);
|
|
memcpy(p, buf, buf_len);
|
|
|
|
memcpy(u16converter.u8array, p, buf_len);
|
|
ProvinceID = EndianSwap16(u16converter.u16val);
|
|
|
|
para->parse.terminal_parameters.ProvinceID = ProvinceID;
|
|
// FLASH_WriteByte(FLASH_ADDR , (uint8_t *) ¶->parse.terminal_parameters , sizeof(para->parse.terminal_parameters));
|
|
JT808_DEBUG("handle_ProvinceID ==== %d \r\n", para->parse.terminal_parameters.ProvinceID);
|
|
free(p);
|
|
|
|
return;
|
|
}
|
|
|
|
void handle_CityID(unsigned char *buf, unsigned char buf_len, struct ProtocolParameter *para)
|
|
{
|
|
union U16ToU8Array u16converter; // 注意大小端转换
|
|
unsigned char *p = NULL;
|
|
unsigned short CityID;
|
|
if ((buf == NULL) || (buf_len == 0))
|
|
return;
|
|
|
|
p = (unsigned char *)malloc(sizeof(unsigned char) * buf_len);
|
|
memcpy(p, buf, buf_len);
|
|
|
|
memcpy(u16converter.u8array, p, buf_len);
|
|
CityID = EndianSwap16(u16converter.u16val);
|
|
|
|
para->parse.terminal_parameters.CityID = CityID;
|
|
// FLASH_WriteByte(FLASH_ADDR, (uint8_t *) ¶->parse.terminal_parameters , sizeof(para->parse.terminal_parameters));
|
|
JT808_DEBUG("handle_CityID ==== %d \r\n", para->parse.terminal_parameters.CityID);
|
|
free(p);
|
|
|
|
return;
|
|
}
|
|
|
|
void handle_CarPlateNum(unsigned char *buf, unsigned char buf_len, struct ProtocolParameter *para)
|
|
{
|
|
// 字符串注意GBK转码
|
|
unsigned char *p = NULL;
|
|
if ((buf == NULL) || (buf_len == 0))
|
|
return;
|
|
|
|
p = (unsigned char *)malloc(sizeof(unsigned char) * buf_len + 1);
|
|
memcpy(p, buf, buf_len);
|
|
|
|
memset(para->parse.terminal_parameters.CarPlateNum, 0, sizeof(para->parse.terminal_parameters.CarPlateNum));
|
|
memcpy(para->parse.terminal_parameters.CarPlateNum, p, buf_len);
|
|
// FLASH_WriteByte(FLASH_ADDR , (uint8_t *) ¶->parse.terminal_parameters , sizeof(para->parse.terminal_parameters));
|
|
JT808_DEBUG("handle_CarPlateNum ==== %s \r\n", para->parse.terminal_parameters.CarPlateNum);
|
|
free(p);
|
|
|
|
return;
|
|
}
|
|
|
|
void handle_CarPlateColor(unsigned char *buf, unsigned char buf_len, struct ProtocolParameter *para)
|
|
{
|
|
unsigned char *p = NULL;
|
|
// unsigned char write_buf[FLASH_BUFFER_SIZE] = {0};
|
|
if ((buf == NULL) || (buf_len == 0))
|
|
return;
|
|
p = (unsigned char *)malloc(sizeof(unsigned char) * buf_len + 1);
|
|
memcpy(p, buf, buf_len);
|
|
|
|
para->parse.terminal_parameters.CarPlateColor = *p;
|
|
// FLASH_WriteByte(FLASH_ADDR , (uint8_t *) ¶->parse.terminal_parameters , sizeof(para->parse.terminal_parameters));
|
|
JT808_DEBUG("handle_CarPlateColor ==== 0x%02x \r\n", para->parse.terminal_parameters.CarPlateColor);
|
|
free(p);
|
|
|
|
return;
|
|
}
|