4G_module/custom/jt808/src/set_terminal_parameter.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 *) &para->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 *) &para->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 *) &para->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 *) &para->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 *) &para->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 *) &para->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 *) &para->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 *) &para->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 *) &para->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 *) &para->parse.terminal_parameters , sizeof(para->parse.terminal_parameters));
JT808_DEBUG("handle_CarPlateColor ==== 0x%02x \r\n", para->parse.terminal_parameters.CarPlateColor);
free(p);
return;
}