#include "jt808_set_TermParam.h" #include "gps_config.h" #include "jt808_msg_pkg.h" #include "jt808_msg_parse.h" #include "jt808_pkg_transmit.h" #include "cm_sys.h" #include "cm_sim.h" #include "control_out.h" Term_Param_item_t jt808_term_param_item; // 终端参数项 // 控制车辆状态 void jt808_Set_CarStatus(uint8_t status){ // (void)status; // TODO: 车辆控制状态 sys_sta.O_door_lock = (status & 0x01)? 1 : 0; // 设置电门锁状态 sys_sta.PLT_MODE = (status & 0x02)? 1 : 0; // 平台设置的模式 //1:游客模式,0:管理模式 sys_sta.P_Radar_EN = (status & 0x04)? 1 : 0; // 1:雷达使能,0:雷达禁止 } // 获取车辆状态 uint8_t jt808_Get_CarStatus(void){ uint8_t status = 0; // TODO: 车辆控制状态 status |= (sys_sta.O_door_lock? 0x01 : 0); // 门锁状态 status |= (sys_sta.PLT_MODE? 0x02 : 0); // 平台设置模式 //1:游客模式,0:管理模式 status |= (sys_sta.P_Radar_EN? 0x04 : 0); // 1:雷达使能,0:雷达禁止 return status; } // 串口数据下传 int8_t jt808_data_down_SeriaNet(uint8_t type, uint8_t *data, uint16_t len){ // TODO: 串口数据下传 if(type == 0x41){ // 串口1下传 JT808_DEBUG("Serial1 data: "); for(uint16_t i = 0; i < len; i++){ app_printf("%02X ", data[i]); } app_printf("\r\n"); }else if(type == 0x42){ // 串口2下传 JT808_DEBUG("Serial2 data: "); for(uint16_t i = 0; i < len; i++){ app_printf("%02X ", data[i]); } app_printf("\r\n"); }else{ JT808_DEBUG("[%s,%s] type error \r\n", __FUNCTION__,__LINE__); return -1; } return 0; } // 串口数据上传 // 超时2S即发送失败,直接放弃发送 int8_t jt808_data_up_SeriaNet(uint8_t type, uint8_t *data, uint16_t len){ uint8_t ret = 0; // TODO: 串口数据上传 if(NULL != jt808_term_param_item.big_data_up_SeriaNet.Msg_Data){ jt808_free(jt808_term_param_item.big_data_up_SeriaNet.Msg_Data); jt808_term_param_item.big_data_up_SeriaNet.Msg_Data = NULL; } uint8_t *up_SeriaNet_buf = (uint8_t *)jt808_malloc(len); if(up_SeriaNet_buf == NULL){ JT808_DEBUG("[%s,%s] malloc failed \r\n", __FUNCTION__,__LINE__); return -1; } jt808_term_param_item.big_data_up_SeriaNet.Msg_type = type; // 0x41:串口1上传,0x42:串口2上传 jt808_term_param_item.big_data_up_SeriaNet.Msg_Data_Len = len; memcpy(up_SeriaNet_buf, data, len); // 复制数据内容 jt808_term_param_item.big_data_up_SeriaNet.Msg_Data = up_SeriaNet_buf; ret =jt808_pkg_send(ID_Data_Up,1000/5); // 发送位置信息上报包 return ret; } // 设置终端参数 int jt808_setTermParam(set_TermParamID_t param_id, void *param, uint8_t param_len){ switch(param_id){ case HeartBeatInterval:{ jt808_term_param_item.set_term_param.HeartBeatInterval =Swap32(*(uint32_t*)param); break; } case MainServerAddr:{ memcpy(jt808_term_param_item.set_term_param.MainServerAddr,param,50= 8; i--) { if(cm_iccid[i] >= '0' && cm_iccid[i] <= '9') { get_iccid_ok++; }else{ break; } } JT808_DEBUG("get_iccid_ok:%d\n",get_iccid_ok); if(get_iccid_ok == 12){ // IC CID 获取成功 JT808_DEBUG("iccid:%d,:%s\n",strlen(cm_iccid), cm_iccid); rawStrToBcd(jt808_term_param_item.phone_BCDnum, cm_iccid+8, 12); // 终端手机号码 break; }else{ error_count++; JT808_DEBUG("get iccid failed count:%d\n",error_count); } osDelay(1000 / 5); // 根据需求设置延时 } jt808_term_param_item.msg_flow_num =0; JT808_DEBUG("phone_BCDnum:"); for(int i=0;i<6;i++){ app_printf("%02X ",jt808_term_param_item.phone_BCDnum[i]); } app_printf("\n"); }while(0); do{// 注册信息初始化 char read_buf[35] = {0}; jt808_term_param_item.big_reg_info.province_id = Swap16(0); // 省域ID jt808_term_param_item.big_reg_info.city_id = Swap16(0); // 市域ID memcpy(jt808_term_param_item.big_reg_info.manufacturer_id, "LAT01", 5); // 制造商ID while(0 != cm_sys_get_sn(read_buf)){ JT808_DEBUG("get sn failed\n"); osDelay(1000/5); } JT808_DEBUG("SN:%s\n", read_buf); memcpy(jt808_term_param_item.big_reg_info.term_model, read_buf, 20); // 终端型号 while(0 != cm_sys_get_imei(read_buf)){ JT808_DEBUG("get imei failed\n"); osDelay(1000/5); } JT808_DEBUG("IMEI:%s\n", read_buf); memcpy(jt808_term_param_item.big_reg_info.term_id, read_buf, 7); // 终端ID jt808_term_param_item.big_reg_info.car_plate_color = blue_plate; // 车牌颜色 char CarPlateNum[] ="京A12345"; // 车牌号码 memcpy(jt808_term_param_item.big_reg_info.car_plate_num, CarPlateNum, strlen(CarPlateNum)); // 车牌号码 }while(0); do{// 授权信息初始化 char str_auth[]="auth code error..."; // 授权码 jt808_term_param_item.big_auth_info.str_auth_code = jt808_malloc(strlen(str_auth)+1); // 授权码 if(jt808_term_param_item.big_auth_info.str_auth_code == NULL){ JT808_DEBUG("malloc auth_code failed\r\n"); } memcpy(jt808_term_param_item.big_auth_info.str_auth_code, str_auth, strlen(str_auth)+1); // 授权码 JT808_DEBUG("auth_code:%d,%s\r\n",strlen(jt808_term_param_item.big_auth_info.str_auth_code), jt808_term_param_item.big_auth_info.str_auth_code); // jt808_free(jt808_term_param_item.big_auth_info.str_auth_code); // jt808_term_param_item.big_auth_info.str_auth_code = NULL; }while(0); do{// 终端参数初始化 jt808_term_param_item.set_term_param.HeartBeatInterval = 30; // 心跳包间隔(秒) char ServerAddr[] ="47.99.118.34"; // 车牌号码 uint32_t ServerPort = 5000; // 服务器端口 // char ServerAddr[] ="36.137.226.30"; // 车牌号码 // uint32_t ServerPort = 36204; // 服务器端口 // memset(jt808_term_param_item.set_term_param.MainServerAddr, 0, 50); memcpy(jt808_term_param_item.set_term_param.MainServerAddr, ServerAddr, strlen(ServerAddr)+1); // 主服务器地址 jt808_term_param_item.set_term_param.ServerPort = ServerPort; // 服务器端口 jt808_term_param_item.set_term_param.DefaultTimeReportInterval = 60; // 默认时间上报间隔(秒) jt808_term_param_item.set_term_param.InflexionAngle = 0; // 俯仰角(度) jt808_term_param_item.set_term_param.MaxSpeed = 0; // 最大速度(km/h) jt808_term_param_item.set_term_param.ProvinceID = 0; // 省域ID jt808_term_param_item.set_term_param.CityID = 0; // 市域ID jt808_term_param_item.set_term_param.CarPlateNum[0] = 0; // 车牌号码 jt808_term_param_item.set_term_param.CarPlateColor = 0; // 车牌颜色 }while(0); do{// 位置信息上报初始化 memset(&jt808_term_param_item.big_loc_report.basic_info,0,sizeof(Loc_basic_info_t)); jt808_term_param_item.big_loc_report.basic_info.status.val32 = 0; // 状态信息 jt808_term_param_item.big_loc_report.basic_info.alarm_flag.val32 = 0; // 报警标志 }while(0); PrsResult.term_param_item =&jt808_term_param_item;// 全局变量指针指向终端参数项 // JT808_DEBUG("auth_code:%s\r\n",PrsResult.term_param_item->big_auth_info.str_auth_code); } // 释放终端参数 void jt808_set_term_param_free(void){ if(jt808_term_param_item.big_auth_info.str_auth_code != NULL){ // 释放授权码 jt808_free(jt808_term_param_item.big_auth_info.str_auth_code); jt808_term_param_item.big_auth_info.str_auth_code = NULL; } if(jt808_term_param_item.big_specific_params.param_id_list != NULL){ // 释放特定参数列表 jt808_free(jt808_term_param_item.big_specific_params.param_id_list); jt808_term_param_item.big_specific_params.param_id_list = NULL; } if(jt808_term_param_item.big_ctrl_info.str_cmd_params != NULL){ // 释放控制命令参数 jt808_free(jt808_term_param_item.big_ctrl_info.str_cmd_params); jt808_term_param_item.big_ctrl_info.str_cmd_params = NULL; } if(jt808_term_param_item.big_upgrade_info.str_upgrade_pkg != NULL){ // 释放残留升级包内存 jt808_free(jt808_term_param_item.big_upgrade_info.str_upgrade_pkg); jt808_term_param_item.big_upgrade_info.str_upgrade_pkg = NULL; } if(jt808_term_param_item.big_upgrade_info.str_ver != NULL){ // 释放升级版本号 jt808_free(jt808_term_param_item.big_upgrade_info.str_ver); jt808_term_param_item.big_upgrade_info.str_ver = NULL; } Loc_addi_info_t *p_addi_info; // 附加信息 Loc_addi_info_t *p_addi_info_next; // 附加信息下一个节点 p_addi_info = jt808_term_param_item.big_loc_report.addi_info; p_addi_info_next = p_addi_info->next; while(p_addi_info != NULL){ // 释放附加信息列表 jt808_free(p_addi_info); p_addi_info = p_addi_info_next; if(p_addi_info != NULL){ p_addi_info_next = p_addi_info->next; } } PrsResult.term_param_item = NULL; }