max9286 get signal status

max9286

frame sync

帧同步模式分内同步、外同步两类;内同步又有手动、半自动、自动三种,半自动、自动时FSYNC PERDIV设置帧同步周期,每检测到多少个VSYNC后发送帧同步,半自动模式检测master那一路,自动模式时检测VSYNC最慢达到的那一路。

Internal Frame Sync (FSYNCMODE = 0X)

External Frame Sync (FSYNCMODE = 1X)

mode

FSYNCMODE default
00 Internally generate frame sync, FSYNC/GPI is high impedance 00
01 Internally generate frame sync, FSYNC/GPI outputs frame sync
10 Receive external frame sync from another MAX9286. FSYNC/
GPI is external frame sync input
11 Receive external frame sync from ECU. FSYNC/GPI is a
general-purpose input

method 

FSYNCMETH when FSYNCMODE = 0X default
00 Internal frame sync uses manual mode
01 Internal frames sync uses semi-automatic mode
1x Internal frame sync uses automatic mode 10

log

grep "status change into" *.log
grep -E "CameraSourceProgress workingThread|CameraSourceProgress1Ch workingThread" *.log

 I2C

[    0.553150](2)[1:swapper/0][I2C]id: 0,freq:400000,div:5,ch_offset:0x0,offset_dma:0x0,offset_ccu:0x0
[    0.553776](2)[1:swapper/0][I2C]id: 1,freq:100000,div:5,ch_offset:0x0,offset_dma:0x0,offset_ccu:0x0
[    0.555925](2)[1:swapper/0][I2C]id: 2,freq:400000,div:5,ch_offset:0x100,offset_dma:0x0,offset_ccu:0x200
[    0.556971](2)[1:swapper/0][I2C]id: 3,freq:100000,div:5,ch_offset:0x100,offset_dma:0x0,offset_ccu:0x0
[    0.557453](2)[1:swapper/0][I2C]id: 4,freq:400000,div:5,ch_offset:0x100,offset_dma:0x0,offset_ccu:0x200
[    0.557740](2)[1:swapper/0][I2C]id: 5,freq:400000,div:5,ch_offset:0x0,offset_dma:0x0,offset_ccu:0x0
[    0.558477](2)[1:swapper/0][I2C]id: 6,freq:400000,div:5,ch_offset:0x100,offset_dma:0x0,offset_ccu:0x200

SIGNAL

kernel-4.9 ICameraStream
0 SIGNAL_IDLE SIGNAL_STATUS_NONE 0
1 SIGNAL_LOST MIPIVC_SIGNAL_LOST SIGNAL_STATUS_LOST 2
2 SIGNAL_READY MIPIVC_SIGNAL_READY SIGNAL_STATUS_READY 1

drivers/misc/mediatek/imgsensor/inc/kd_imgsensor_define.h

  85 typedef enum {
  86     SIGNAL_IDLE,
  87     SIGNAL_LOST,
  88     SIGNAL_READY,
  89     SIGNAL_STABLE,
  90     SIGNAL_MAX
  91 } SIGNAL_STATUS;

SIGNAL_STATUS

vendor/autochips/proprietary/hardware/videoin 

ICameraStream

interface/camerasource/include/ICameraSource.h

 70 class ICameraStream
 71 {
 72 public:
 73     typedef enum
 74     {
 75         SIGNAL_STATUS_NONE = 0,
 76         SIGNAL_STATUS_READY,
 77         SIGNAL_STATUS_LOST,
 78         SIGNAL_STATUS_MAX,
 79     } SIGNAL_STATUS_ENUM;

MIPIVC_SIGNAL

libs/camerasource/inc/CameraSourceBase.h 

 52 #define MIPIVC_SIGNAL_LOST (1)
 53 #define MIPIVC_SIGNAL_READY (2)

onEvent

215         if(isFirstGetStatus || _info.signalStatus != signalStatus) {
216             switch(_info.signalStatus) {
217             case MIPIVC_SIGNAL_LOST:
218                 mCurStatus = ICameraStream::SIGNAL_STATUS_LOST;
219                 break;
220
221             case MIPIVC_SIGNAL_READY:
222                 mCurStatus = ICameraStream::SIGNAL_STATUS_READY;
223                 break;
224
225             default:
226                 mCurStatus = ICameraStream::SIGNAL_STATUS_NONE;
227                 _LOGW("mipivcInst->getSensorInfo get invalid signalStatus : %d", _info.signalStatus);
228                 break;
229             }
230
231             if(mCallback) {
232                 mCallback->onEvent(IEventCallback::CAM_SIGNAL_CHANGED, camCh, mCurStatus);
233             }
234
235             signalStatus = _info.signalStatus;
236             isFirstGetStatus = false;
237             _LOGI("camera ch(%d) status change into %d", camCh, mCurStatus);
238         }

max9286_yuv_sensor.c

drivers/misc/mediatek/imgsensor/src/common/v1/max9286_yuv/max9286_yuv_sensor.c

i2c_speed

71 static int max9286_i2c_speed = 400;

max9671_read

120 static kal_uint16 max96701_read(int index, kal_uint32 addr)
121 {
1
log.info("[{}] 开始解析马牙7026透传上报的属性信息数据,topic:{}", taskid, topic); int code = IConst.CODE_SUCCESS; String content = ""; String description = ""; try { String[] topic_arr = topic.split("/"); // 设备ID String device_id = topic_arr[2].trim(); String error_code = ""; boolean is_error = false; Map<String, Object> mapinfo = new HashMap<String, Object>(); if (!message.getPayload().equals(null)) { Map<String, Object> batteryKindParam = new HashMap<String, Object>(); batteryKindParam.put("battery_id", device_id); List<Map<String, Object>> batteryKindResul = SqlUtils.queryInfo(taskid, Config.getConfigBean().getDatasourcesBean().getDatasourceBean().get(0).getAlias(), "getmy_battery_kind", batteryKindParam); Integer batteryKind = batteryKindResul == null ? 2 : batteryKindResul.size() > 0 ? (Integer) batteryKindResul.get(0).get("battery_kind") : 2; mapinfo.put("battery_kind", batteryKind);// 电池类型 // 数据解析 log.info("原始上报数据【{}】", message.getPayload()); ByteBuffer buffer = ByteBuffer.wrap(message.getPayload()); dataParse(buffer, mapinfo); trackerParse(buffer, mapinfo); } if (!ObjectUtils.isEmpty(mapinfo.get("latitude")) && !ObjectUtils.isEmpty(mapinfo.get("longitude"))) { // 1.经度 mapinfo.put("longitude_direction", "E"); // 默认是东经 // 2.纬度 mapinfo.put("latitude_direction", "N"); // 默认北纬 // 经纬度过滤逻辑 double currentLat = Double.parseDouble(mapinfo.get("latitude").toString()); double currentLon = Double.parseDouble(mapinfo.get("longitude").toString()); long currentTime = System.currentTimeMillis(); // === 判断当前坐标是否无效 === boolean isCurrentInvalid = (currentLat == 0.0 && currentLon == 0.0); boolean isCoordOutOfRange = currentLat < -90 || currentLat > 90 || currentLon < -180 || currentLon > 180; GpsCache gpsCache = GpsCache.getInstance(); GpsCoordinate lastValid = gpsCache.getLastValid(device_id); final double INVALID_THRESHOLD = 0.0001; // 容差范围 boolean isLastValidReal = lastValid != null && (Math.abs(lastValid.getLatitude()) > INVALID_THRESHOLD || Math.abs(lastValid.getLongitude()) > INVALID_THRESHOLD); if (isCurrentInvalid || isCoordOutOfRange) { // 当前坐标不合法,不能用于更新缓存,回退使用上一次 if (isLastValidReal) { currentLat = lastValid.getLatitude(); currentLon = lastValid.getLongitude(); } System.out.println("无效坐标 (0,0) 或越界,跳过缓存更新"); } else { if (isLastValidReal) { double distance = GpsUtils.calculateDistance(currentLat, currentLon, lastValid.getLatitude(), lastValid.getLongitude()); if (distance > 5.0) { // 计算与上次点之间的最大可接受距离 = 时间差 * 70km/h long timeDiffMillis = currentTime - gpsCache.getLastValidTime(device_id); double maxAllowedDistance = (timeDiffMillis / 3600000.0) * 70.0; if (distance <= maxAllowedDistance) { // 合理跳变,更新缓存 gpsCache.updateLastValid(device_id, currentLat, currentLon, currentTime); } else { // 过远跳变,回退使用上次位置 currentLat = lastValid.getLatitude(); currentLon = lastValid.getLongitude(); } } else { // 合理距离,直接更新 gpsCache.updateLastValid(device_id, currentLat, currentLon, currentTime); } } else { // 第一次数据,直接记录 gpsCache.updateLastValid(device_id, currentLat, currentLon, currentTime); } } // 最终用于入库 mapinfo.put("latitude", String.valueOf(currentLat)); mapinfo.put("longitude", String.valueOf(currentLon)); } if (mapinfo != null && mapinfo.size() > 0) { mapinfo.put("battery_id", device_id); mapinfo.put("create_time", DateUtils.getCurrentDateTime()); mapinfo.put("flag", 1); // 1:设备主动请求或上报 2:平台主动推送或下指令 3:平台指令反馈的结果 try { // 所属项目id Map<String, Object> param_pro = new HashMap<String, Object>(); param_pro.put("device_id", device_id); param_pro.put("client_id", device_id); param_pro.put("username", topic_arr[1].trim()); List<Map<String, Object>> traidInfos = SqlUtils.queryInfo(taskid, Config.getConfigBean().getDatasourcesBean().getDatasourceBean().get(0).getAlias(), "getTriadInfos", param_pro); if (traidInfos != null && traidInfos.size() > 0) { // 获取项目id int project_id = Integer.parseInt(String.valueOf(traidInfos.get(0).get("project_id")).trim()); mapinfo.put("project_id", project_id); } if (mapinfo.get("data_type").equals("1")) { mapinfo.put("payload", "静态数据:" + bytesToHex(message.getPayload())); } // 更新最新记录库 my_battery_info_lastest log.info("[{}] 电池编号:{} 更新最新记录库,解析设备主动透传上报消息入库表【my_battery_info_lastest】开始... ", taskid, device_id); List<Map<String, Object>> my_battery_info_lastest_result = SqlUtils.queryInfo(taskid, Config.getConfigBean().getDatasourcesBean().getDatasourceBean().get(0).getAlias(), "getmy_battery_info_lastest_secretkey", param_pro); String payload=null; if (my_battery_info_lastest_result != null && my_battery_info_lastest_result.size() > 0) {// 存在,更新数据 payload = String.valueOf(my_battery_info_lastest_result.get(0).get("payload")); String oldUploadTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(my_battery_info_lastest_result.get(0).get("upload_time")); if(oldUploadTime.equals(mapinfo.get("upload_time"))){ log.error("时间戳重复"); return true; } SqlUtils.updateTable( Config.getConfigBean().getDatasourcesBean().getDatasourceBean().get(0).getAlias(), "updatemy_battery_info_lastest", mapinfo); } else { // 不存在,直接插入数据 insertMqttDatas(mapinfo, "insertmy_battery_info_lastest", taskid); } if (mapinfo.get("data_type").equals("0")&&org.apache.commons.lang3.StringUtils.isNotBlank(bytesToHex(message.getPayload()))) { mapinfo.put("payload", payload + "动态数据 :" + bytesToHex(message.getPayload())); } log.info("[{}] 电池编号:{} 更新最新记录库,解析设备主动透传上报消息入库表【my_battery_info_lastest】完毕 ", taskid, device_id); log.info("[{}] 电池编号:{}。解析设备主动透传上报消息入库表【my_battery_info】开始 ", taskid, device_id); Map<String, Object> myBatteryInfoLastestParam = new HashMap<String, Object>(); myBatteryInfoLastestParam.put("battery_id", device_id); List<Map<String, Object>> myBatteryInfoLastestResult = SqlUtils.queryInfo(taskid, Config.getConfigBean().getDatasourcesBean().getDatasourceBean().get(0).getAlias(), "getmy_battery_info_lastest", myBatteryInfoLastestParam); if (myBatteryInfoLastestResult.size() > 0) { if(Objects.isNull(mapinfo.get("empty_count"))){ mapinfo.put("empty_count", myBatteryInfoLastestResult.get(0).get("empty_count"));} if(Objects.isNull(mapinfo.get("msg_delay_time"))){ mapinfo.put("msg_delay_time",myBatteryInfoLastestResult.get(0).get("msg_delay_time"));} if(Objects.isNull(mapinfo.get("battery_soft_version"))){ mapinfo.put("battery_soft_version",myBatteryInfoLastestResult.get(0).get("battery_soft_version"));} if(Objects.isNull(mapinfo.get("battery_hard_version"))){ mapinfo.put("battery_hard_version",myBatteryInfoLastestResult.get(0).get("battery_hard_version"));} if(Objects.isNull(mapinfo.get("sn"))){ mapinfo.put("sn", myBatteryInfoLastestResult.get(0).get("sn"));} if(Objects.isNull(mapinfo.get("charge_cycles_history"))){ mapinfo.put("charge_cycles_history",myBatteryInfoLastestResult.get(0).get("charge_cycles_history"));} if(Objects.isNull(mapinfo.get("battery_cycle_times"))){ mapinfo.put("battery_cycle_times",myBatteryInfoLastestResult.get(0).get("battery_cycle_times"));} if(Objects.isNull(mapinfo.get("soh"))){ mapinfo.put("soh", myBatteryInfoLastestResult.get(0).get("soh"));} if(Objects.isNull(mapinfo.get("actual_soh"))){ mapinfo.put("actual_soh", myBatteryInfoLastestResult.get(0).get("actual_soh"));} if(Objects.isNull(mapinfo.get("total_charge_energy"))){ mapinfo.put("total_charge_energy",myBatteryInfoLastestResult.get(0).get("total_charge_energy"));} if(Objects.isNull(mapinfo.get("fcc"))){ mapinfo.put("fcc", myBatteryInfoLastestResult.get(0).get("fcc"));} if(Objects.isNull(mapinfo.get("longitude"))){ mapinfo.put("longitude", myBatteryInfoLastestResult.get(0).get("longitude"));} if(Objects.isNull(mapinfo.get("latitude"))){ mapinfo.put("latitude", myBatteryInfoLastestResult.get(0).get("latitude"));} if(Objects.isNull(mapinfo.get("gps_speed"))){ mapinfo.put("gps_speed", myBatteryInfoLastestResult.get(0).get("gps_speed"));} if(Objects.isNull(mapinfo.get("gps_cog"))){ mapinfo.put("gps_cog", myBatteryInfoLastestResult.get(0).get("gps_cog"));} if(Objects.isNull(mapinfo.get("gps_signal"))){ mapinfo.put("gps_signal", myBatteryInfoLastestResult.get(0).get("gps_signal"));} if(Objects.isNull(mapinfo.get("gps_max_signal"))){ mapinfo.put("gps_max_signal", myBatteryInfoLastestResult.get(0).get("gps_max_signal"));} if(Objects.isNull(mapinfo.get("iccid"))){ mapinfo.put("iccid", myBatteryInfoLastestResult.get(0).get("iccid"));} if(Objects.isNull(mapinfo.get("imei"))){ mapinfo.put("imei", myBatteryInfoLastestResult.get(0).get("imei"));} if(Objects.isNull(mapinfo.get("tracker_software_version"))){ mapinfo.put("tracker_software_version",myBatteryInfoLastestResult.get(0).get("tracker_software_version"));} if(Objects.isNull(mapinfo.get("cell_info"))){ mapinfo.put("cell_info", myBatteryInfoLastestResult.get(0).get("cell_info"));} if(Objects.isNull(mapinfo.get("longitude_direction"))&&Objects.nonNull(mapinfo.get("longitude"))){ mapinfo.put("longitude_direction", "E");} if(Objects.isNull(mapinfo.get("latitude_direction"))&&Objects.nonNull(mapinfo.get("latitude"))){ mapinfo.put("latitude_direction", "N");} if(Objects.isNull(mapinfo.get("battery_soc"))){ mapinfo.put("battery_soc", myBatteryInfoLastestResult.get(0).get("battery_soc"));} if(Objects.isNull(mapinfo.get("low_battery_warn"))){ mapinfo.put("low_battery_warn", myBatteryInfoLastestResult.get(0).get("low_battery_warn"));} if(Objects.isNull(mapinfo.get("mos_temp"))){ mapinfo.put("mos_temp", myBatteryInfoLastestResult.get(0).get("mos_temp"));} if(Objects.isNull(mapinfo.get("battery_voltage"))){ mapinfo.put("battery_voltage", myBatteryInfoLastestResult.get(0).get("battery_voltage"));} if(Objects.isNull(mapinfo.get("battery_work_mode"))){ mapinfo.put("battery_work_mode", myBatteryInfoLastestResult.get(0).get("battery_work_mode"));} if(Objects.isNull(mapinfo.get("mos_status"))){ mapinfo.put("mos_status", myBatteryInfoLastestResult.get(0).get("mos_status"));} if(Objects.isNull(mapinfo.get("battery_current"))){ mapinfo.put("battery_current", myBatteryInfoLastestResult.get(0).get("battery_current"));} if(Objects.isNull(mapinfo.get("battery_error_code"))){ mapinfo.put("battery_error_code", myBatteryInfoLastestResult.get(0).get("battery_error_code"));} if(Objects.isNull(mapinfo.get("charge_mode"))){ mapinfo.put("charge_mode", myBatteryInfoLastestResult.get(0).get("charge_mode"));} if(Objects.isNull(mapinfo.get("charge_current_max"))){ mapinfo.put("charge_current_max", myBatteryInfoLastestResult.get(0).get("charge_current_max"));} if(Objects.isNull(mapinfo.get("discharge_current_max"))){ mapinfo.put("discharge_current_max", myBatteryInfoLastestResult.get(0).get("discharge_current_max"));} if(Objects.isNull(mapinfo.get("charge_current_avg"))){ mapinfo.put("charge_current_avg", myBatteryInfoLastestResult.get(0).get("charge_current_avg"));} if(Objects.isNull(mapinfo.get("discharge_current_avg"))){ mapinfo.put("discharge_current_avg", myBatteryInfoLastestResult.get(0).get("discharge_current_avg"));} if(Objects.isNull(mapinfo.get("cell_voltage"))){ mapinfo.put("cell_voltage", myBatteryInfoLastestResult.get(0).get("cell_voltage"));} if(Objects.isNull(mapinfo.get("battery_voltage_max"))){ mapinfo.put("battery_voltage_max", myBatteryInfoLastestResult.get(0).get("battery_voltage_max"));} if(Objects.isNull(mapinfo.get("battery_voltage_min"))){ mapinfo.put("battery_voltage_min", myBatteryInfoLastestResult.get(0).get("battery_voltage_min"));} if(Objects.isNull(mapinfo.get("charge_capacity_history"))){ mapinfo.put("charge_capacity_history", myBatteryInfoLastestResult.get(0).get("charge_capacity_history"));} if(Objects.isNull(mapinfo.get("discharge_capacity_history"))){ mapinfo.put("discharge_capacity_history", myBatteryInfoLastestResult.get(0).get("discharge_capacity_history"));} if(Objects.isNull(mapinfo.get("ntc1"))){ mapinfo.put("ntc1", myBatteryInfoLastestResult.get(0).get("ntc1"));} if(Objects.isNull(mapinfo.get("ntc2"))){ mapinfo.put("ntc2", myBatteryInfoLastestResult.get(0).get("ntc2"));} if(Objects.isNull(mapinfo.get("ntc3"))){ mapinfo.put("ntc3", myBatteryInfoLastestResult.get(0).get("ntc3"));} if(Objects.isNull(mapinfo.get("ntc4"))){ mapinfo.put("ntc4", myBatteryInfoLastestResult.get(0).get("ntc4"));} if(Objects.isNull(mapinfo.get("battery_temperature_max"))){ mapinfo.put("battery_temperature_max", myBatteryInfoLastestResult.get(0).get("battery_temperature_max"));} if(Objects.isNull(mapinfo.get("battery_temperature_min"))){ mapinfo.put("battery_temperature_min", myBatteryInfoLastestResult.get(0).get("battery_temperature_min"));} if(Objects.isNull(mapinfo.get("battery_temperature_avg"))){ mapinfo.put("battery_temperature_avg", myBatteryInfoLastestResult.get(0).get("battery_temperature_avg"));} if(Objects.isNull(mapinfo.get("tracker_communication_status"))){ mapinfo.put("tracker_communication_status", myBatteryInfoLastestResult.get(0).get("tracker_communication_status"));} if(Objects.isNull(mapinfo.get("dsoc"))){ mapinfo.put("dsoc", myBatteryInfoLastestResult.get(0).get("dsoc"));} if(Objects.isNull(mapinfo.get("correction_rate"))){ mapinfo.put("correction_rate", myBatteryInfoLastestResult.get(0).get("correction_rate"));} if(Objects.isNull(mapinfo.get("tsoc"))){ mapinfo.put("tsoc", myBatteryInfoLastestResult.get(0).get("tsoc"));} if(Objects.isNull(mapinfo.get("bsoc"))){ mapinfo.put("bsoc", myBatteryInfoLastestResult.get(0).get("bsoc"));} if(Objects.isNull(mapinfo.get("charge_sop"))){ mapinfo.put("charge_sop", myBatteryInfoLastestResult.get(0).get("charging_sop"));} if(Objects.isNull(mapinfo.get("discharge_sop"))){ mapinfo.put("discharge_sop", myBatteryInfoLastestResult.get(0).get("discharging_sop"));} } insertMqttDatas(mapinfo, "insertmy_battery_info", taskid); log.info("[{}] 电池编号:{}。解析设备主动透传上报消息入库表【my_battery_info】完毕 ", taskid, device_id); // 判断是否有故障,有则更新数据到故障表 // 记录告警信息 if ((StringUtils.isNotBlank(error_code) && is_error)) {// 有告警,则入库 log.info("[{}] 电池编号:{} 更新最新记录库,解析设备主动透传上报消息的告警入库表【my_battery_info_alarm】开始... ", taskid, device_id); insertMqttDatas(mapinfo, "insertmy_battery_info_alarm", taskid); log.info("[{}] 电池编号:{} 更新最新记录库,解析设备主动透传上报消息告警入库表【my_battery_info_alarm】完毕 ", taskid, device_id); } // --gps信息-- Map<String, Object> mapinfo_gps = new HashMap<String, Object>(); mapinfo_gps.put("battery_id", device_id); mapinfo_gps.put("longitude", mapinfo.get("longitude")); mapinfo_gps.put("longitude_direction", "E"); mapinfo_gps.put("latitude", mapinfo.get("latitude")); mapinfo_gps.put("latitude_direction", "N"); if (mapinfo.get("gps_speed") != null) { mapinfo_gps.put("gps_speed", mapinfo.get("gps_speed") != null ? mapinfo.get("gps_speed") : 0); } if (mapinfo.get("gps_cog") != null) { mapinfo_gps.put("gps_cog", mapinfo.get("gps_cog")); } mapinfo_gps.put("gps_signal", mapinfo.get("gps_signal")); mapinfo_gps.put("upload_time", mapinfo.get("upload_time")); mapinfo_gps.put("create_time", DateUtils.getCurrentDateTime()); // 此协议电池的gps经纬度为wgs84原始经纬度,要在百度地图上显示需要转换 if ((mapinfo.get("longitude") != null && Double.parseDouble(String.valueOf(mapinfo.get("longitude")).trim()) > 0) || (mapinfo.get("latitude") != null && Double.parseDouble(String.valueOf(mapinfo.get("latitude")).trim()) > 0)) { Map<String, Object> baidugps = new HashMap<>(); if (Config.getConfigBean().getWgs84Tobd09() == 0) { // 调用百度api baidugps = wgs84Format2Baidu( Double.parseDouble(mapinfo.get("longitude").toString().trim()) + "", String.valueOf(Double.parseDouble(String.valueOf(mapinfo.get("latitude")).trim()))); } else { // 本地接口 baidugps = CoordinateTransformUtil.wgs84Format2Baidu( Double.parseDouble(mapinfo.get("longitude").toString().trim()) + "", String.valueOf(Double.parseDouble(String.valueOf(mapinfo.get("latitude")).trim()))); } mapinfo_gps.put("baidu_longitude", String.valueOf(baidugps.get("x"))); mapinfo_gps.put("baidu_latitude", String.valueOf(baidugps.get("y"))); } // 这里处理每一张相关表都入库这个字段 mapinfo_gps.put("needAck", 0); mapinfo_gps.put("businessMode", ""); try { insert(mapinfo_gps, "insertmy_gpslocationinfo", taskid); log.info("[{}] 透传设备主动上报消息入库表【my_gpslocationinfo】完成。 ", taskid); } catch (Exception e) { e.printStackTrace(); log.error("[{}] 透传设备主动上报消息入库表【my_gpslocationinfo】异常。 err:{} ", taskid, e.getStackTrace()); description = "入库表【my_gpslocationinfo】异常"; throw e; } } catch (Exception e) { e.printStackTrace(); log.error( "[{}] 解析设备主动透传上报消息入库表【my_gpslocationinfo】【my_battery_info】【my_battery_info_lastest】【my_battery_info_alarm】异常。 err:{} ", taskid, e.getStackTrace()); description = "入库表【my_gpslocationinfo】【my_battery_info】【my_battery_info_lastest】【my_battery_info_alarm】异常"; throw e; } // 入库到美团S47,供搜索查询- Map<String, Object> mapinfo_tr = new HashMap<String, Object>(); mapinfo_tr.put("thing_id", device_id); // 新版把以下信息转移至电池信息中 mapinfo_tr.put("trackerHardwareVersion", "-"); mapinfo_tr.put("trackerSoftwareVersion", mapinfo.get("tracker_software_version")); mapinfo_tr.put("upload_time", mapinfo.get("upload_time")); mapinfo_tr.put("create_time", DateUtils.getCurrentDateTime()); // 这里处理每一张相关表都入库这个字段 mapinfo_tr.put("needAck", 0); mapinfo_tr.put("businessMode", ""); try { insert(mapinfo_tr, "insertmt_trackerinfo", taskid); log.info("[{}] 设备透传主动上报消息入库表【mt_trackerinfo】完成。 ", taskid); } catch (Exception e) { e.printStackTrace(); log.error("[{}] 设备透传主动上报消息入库表【mt_trackerinfo】异常。 err:{} ", taskid, e.getStackTrace()); description = "入库表【mt_trackerinfo】异常"; throw e; } // --电池基础信息-- Map<String, Object> mapinfo_bt = new HashMap<String, Object>(); mapinfo_bt.put("thing_id", device_id); mapinfo_bt.put("batteryId", device_id); mapinfo_bt.put("batteryVoltage", mapinfo.get("battery_voltage")); mapinfo_bt.put("batteryCurrent", mapinfo.get("battery_current")); mapinfo_bt.put("batterySoc", mapinfo.get("battery_soc")); mapinfo_bt.put("batteryHardVersion", "-"); mapinfo_bt.put("batterySoftVersion", mapinfo.get("battery_soft_version")); mapinfo_bt.put("batteryWorkMode", mapinfo.get("battery_work_mode")); mapinfo_bt.put("batteryTemperatureMax", mapinfo.get("battery_temperature_max")); mapinfo_bt.put("batteryVoltageMax", mapinfo.get("battery_voltage_max")); mapinfo_bt.put("batteryVoltageMin", mapinfo.get("battery_voltage_min")); mapinfo_bt.put("mosStatus", mapinfo.get("mos_status")); mapinfo_bt.put("chargeCycleTime", mapinfo.get("battery_cycle_times")); mapinfo_bt.put("upload_time", mapinfo.get("upload_time")); mapinfo_bt.put("create_time", DateUtils.getCurrentDateTime()); // 新版把以下信息转移至电池信息中 mapinfo_bt.put("imei", mapinfo.get("imei")); mapinfo_bt.put("mobile", mapinfo.get("iccid")); // 这里处理每一张相关表都入库这个字段 mapinfo_bt.put("needAck", 0); mapinfo_bt.put("businessMode", ""); try { insert(mapinfo_bt, "insertmt_batteryinfo", taskid); log.info("[{}] 透传设备主动上报消息入库表【mt_batteryinfo】完成。 ", taskid); } catch (Exception e) { e.printStackTrace(); log.error("[{}] 透传设备主动上报消息入库表【mt_batteryinfo】异常。 err:{} ", taskid, e.getStackTrace()); description = "入库表【mt_batteryinfo】异常"; throw e; } // --gps信息-- Map<String, Object> mapinfo_gps = new HashMap<String, Object>(); mapinfo_gps.put("thing_id", device_id); mapinfo_gps.put("reportReason", 1); mapinfo_gps.put("detStatus", 0); mapinfo_gps.put("networkType", 0); mapinfo_gps.put("locationMode", 1); mapinfo_gps.put("longitude", mapinfo.get("longitude")); mapinfo_gps.put("longitudeDirection", 1); mapinfo_gps.put("latitude", mapinfo.get("latitude")); mapinfo_gps.put("latitudeDirection", 1); mapinfo_gps.put("gpsSpeed", 0); mapinfo_gps.put("gpsSignal", mapinfo.get("gps_signal")); mapinfo_gps.put("upload_time", mapinfo.get("upload_time")); mapinfo_gps.put("create_time", DateUtils.getCurrentDateTime()); // 此协议电池的gps经纬度为wgs84原始经纬度,要在百度地图上显示需要转换 if ((mapinfo.get("longitude") != null && Double.parseDouble(String.valueOf(mapinfo.get("longitude")).trim()) > 0) || (mapinfo.get("latitude") != null && Double.parseDouble(String.valueOf(mapinfo.get("latitude")).trim()) > 0)) { Map<String, Object> baidugps = new HashMap<>(); if (Config.getConfigBean().getWgs84Tobd09() == 0) { // 调用百度api baidugps = wgs84Format2Baidu( Double.parseDouble(mapinfo.get("longitude").toString().trim()) + "", String.valueOf(Double.parseDouble(String.valueOf(mapinfo.get("latitude")).trim()))); } else { // 本地接口 baidugps = CoordinateTransformUtil.wgs84Format2Baidu( Double.parseDouble(mapinfo.get("longitude").toString().trim()) + "", String.valueOf(Double.parseDouble(String.valueOf(mapinfo.get("latitude")).trim()))); } mapinfo_gps.put("baidu_longitude", String.valueOf(baidugps.get("x"))); mapinfo_gps.put("baidu_latitude", String.valueOf(baidugps.get("y"))); } // 这里处理每一张相关表都入库这个字段 mapinfo_gps.put("needAck", 0); mapinfo_gps.put("businessMode", ""); try { insert(mapinfo_gps, "insertmt_gpslocationinfo", taskid); log.info("[{}] 透传设备主动上报消息入库表【mt_gpslocationinfo】完成。 ", taskid); } catch (Exception e) { e.printStackTrace(); log.error("[{}] 透传设备主动上报消息入库表【mt_gpslocationinfo】异常。 err:{} ", taskid, e.getStackTrace()); description = "入库表【mt_gpslocationinfo】异常"; throw e; } // mqtt解析后入库运行历史数据 log.info("[{}] 电池编号:{}。解析透传设备主动上报消息入库表【bms_run_history】开始... ", taskid, device_id); Map<String, Object> mapudpinfo = new HashMap<String, Object>(); // 当前时间 String currenttime = DateUtils.getCurrentDateTime(); mapudpinfo.put("project_id", mapinfo.get("project_id")); mapudpinfo.put("hwid", device_id); mapudpinfo.put("imei", mapinfo.get("imei")); mapudpinfo.put("iccid", mapinfo.get("iccid")); mapudpinfo.put("bms_version", mapinfo.get("battery_soft_version")); mapudpinfo.put("commun_board_version", mapinfo.get("tracker_software_version")); mapudpinfo.put("soc", mapinfo.get("battery_soc")); mapudpinfo.put("bms_circles", mapinfo.get("battery_cycle_times")); mapudpinfo.put("cell_high_temp", mapinfo.get("battery_temperature_max")); mapudpinfo.put("cell_low_temp", mapinfo.get("battery_temperature_min")); mapudpinfo.put("cell_temp_region", Long.parseLong(mapinfo.get("battery_temperature_max").toString().trim()) - Long.parseLong(mapinfo.get("battery_temperature_min").toString().trim())); mapudpinfo.put("mos_temp", mapinfo.get("mos_temp")); mapudpinfo.put("package_voltage", mapinfo.get("battery_voltage")); mapudpinfo.put("single_high_voltage", mapinfo.get("battery_voltage_max")); mapudpinfo.put("single_low_voltage", mapinfo.get("battery_voltage_min")); mapudpinfo.put("single_voltage_region", (Integer.parseInt(String.valueOf(mapinfo.get("battery_voltage_max")).trim()) - Integer.parseInt(String.valueOf(mapinfo.get("battery_voltage_min")).trim()))); // 1 充电,2 放电,3 搁置,4 空载 // 0x01(1):放电模式 0x10(16):充电模式 0x21(33):保护模式 0x30(48):待机无输出模式 // 0x31(49):待机预放电模式 0xFF(255):故障需返厂 int battery_status = 1; int work_mode = Integer.parseInt(String.valueOf(mapinfo.get("battery_work_mode")).trim()); if (work_mode == 1) { battery_status = 2; } else if (work_mode == 16) { battery_status = 1; } else if (work_mode == 33 || work_mode == 48 || work_mode == 49) { battery_status = 3; } mapudpinfo.put("battery_status", battery_status); mapudpinfo.put("discharge_mos_status", mapinfo.get("mos_status")); mapudpinfo.put("charge_mos_status", mapinfo.get("mos_status")); mapudpinfo.put("discharge_currnet", mapinfo.get("battery_current")); mapudpinfo.put("charge_currnet", mapinfo.get("battery_current")); mapudpinfo.put("create_time", currenttime); mapudpinfo.put("modify_time", currenttime); mapudpinfo.put("upload_time", mapinfo.get("upload_time")); // 入库mt_batteryinfo_lastest记录的数据 Map<String, Object> mapinfo_lastest = new HashMap<String, Object>(); mapinfo_lastest.put("project_id", mapinfo.get("project_id")); mapinfo_lastest.put("thing_id", device_id); mapinfo_lastest.put("batteryId", device_id); mapinfo_lastest.put("batteryVoltage", mapinfo.get("battery_voltage")); mapinfo_lastest.put("batteryCurrent", mapinfo.get("battery_current")); mapinfo_lastest.put("batterySoc", mapinfo.get("battery_soc")); mapinfo_lastest.put("batterySoftVersion", mapinfo.get("battery_soft_version")); mapinfo_lastest.put("batteryWorkMode", mapinfo.get("battery_work_mode")); mapinfo_lastest.put("batteryTemperatureMax", mapinfo.get("battery_temperature_max")); mapinfo_lastest.put("batteryVoltageMax", mapinfo.get("battery_voltage_max")); mapinfo_lastest.put("batteryVoltageMin", mapinfo.get("battery_voltage_min")); mapinfo_lastest.put("mosStatus", mapinfo.get("mos_status")); mapinfo_lastest.put("chargeCycleTime", mapinfo.get("battery_cycle_times")); mapinfo_lastest.put("upload_time", mapinfo.get("upload_time")); mapinfo_lastest.put("create_time", DateUtils.getCurrentDateTime()); // 新版把以下信息转移至电池信息中 mapinfo_lastest.put("imei", mapinfo.get("imei")); mapinfo_lastest.put("mobile", mapinfo.get("iccid")); mapinfo_lastest.put("businessMode", ""); mapinfo_lastest.put("trackerSoftwareVersion", mapinfo.get("tracker_software_version") != null ? mapinfo.get("tracker_software_version") : ""); log.info("[{}] 电池编号:{}。解析设备主动上报消息入库表【bms_run_history】,有GPS信息 ", taskid, device_id); Map<String, Object> baidugps = new HashMap<>(); if ((mapinfo.get("longitude") != null && Double.parseDouble(String.valueOf(mapinfo.get("longitude")).trim()) > 0) || (mapinfo.get("latitude") != null && Double.parseDouble(String.valueOf(mapinfo.get("latitude")).trim()) > 0)) { if (Config.getConfigBean().getWgs84Tobd09() == 0) { // 调用百度api baidugps = wgs84Format2Baidu( Double.parseDouble(mapinfo.get("longitude").toString().trim()) + "", String.valueOf(Double.parseDouble(String.valueOf(mapinfo.get("latitude")).trim()))); } else { // 本地接口 baidugps = CoordinateTransformUtil.wgs84Format2Baidu( Double.parseDouble(mapinfo.get("longitude").toString().trim()) + "", String.valueOf(Double.parseDouble(String.valueOf(mapinfo.get("latitude")).trim()))); } } mapudpinfo.put("longitude_mark", "E"); mapudpinfo.put("longitude", (baidugps != null && baidugps.size() > 0) ? String.valueOf(baidugps.get("x")) : "0.000000"); mapudpinfo.put("latitude_mark", "N"); mapudpinfo.put("latitude", (baidugps != null && baidugps.size() > 0) ? String.valueOf(baidugps.get("y")) : "0.000000"); mapudpinfo.put("speed", 0); mapudpinfo.put("signal", mapinfo.get("gps_signal")); mapinfo_lastest.put("networkType", 0); mapinfo_lastest.put("locationMode", 1); mapinfo_lastest.put("longitude", mapinfo.get("longitude")); mapinfo_lastest.put("longitudeDirection", 1); mapinfo_lastest.put("latitude", mapinfo.get("latitude")); mapinfo_lastest.put("latitudeDirection", 1); mapinfo_lastest.put("gpsSpeed", 0); mapinfo_lastest.put("gpsSignal", mapinfo.get("gps_signal")); // 解析入库操作,运行历史、故障历史等 MTDataAnalysis.anaylsismqttinfo2db(mapudpinfo, mapinfo_lastest, taskid); // 马牙:运行历史、故障历史等。之后为统一使用 mapinfo_lastest.put("batteryErrorCode", mapinfo.get("battery_error_code")); anaylsisInfo2HistoryDb(mapudpinfo, mapinfo_lastest, taskid); log.info("[{}] 电池编号:{}。解析设备主动上报消息入库表【bms_run_history】完毕。 ", taskid, device_id); // 将经纬度信息更新到udp_receiveinfo_lastestrecord log.info("[{}] 电池编号:{}。解析设备主动上报消息的经纬度信息入库表【udp_receiveinfo_lastestrecord】开始... ", taskid, device_id); mapudpinfo.put("package_voltage", (new BigDecimal(mapinfo.get("battery_voltage").toString())) .divide(new BigDecimal(1000), 3, BigDecimal.ROUND_CEILING)); insertMqttDatas(mapudpinfo, "mtudp_receiveinfo_lastestrecord", taskid); log.info("[{}] 电池编号:{}。解析设备主动上报消息的经纬度信息入库表【udp_receiveinfo_lastestrecord】完毕 ", taskid, device_id); // 更新最新记录库 updatemt_batteryinfo_lastest log.info("[{}] 电池编号:{} 更新最新记录库,解析设备主动上报消息入库表【mt_batteryinfo_lastest】开始... ", taskid, device_id); insertMqttDatas(mapinfo_lastest, "updatemt_batteryinfo_lastest", taskid); log.info("[{}] 电池编号:{} 更新最新记录库,解析设备主动上报消息入库表【mt_batteryinfo_lastest】完毕 ", taskid, device_id); // 记录告警信息 if (mapinfo_lastest.get("batteryErrorCode") != null && is_error) {// 有告警,则入库 log.info("[{}] 电池编号:{} 更新最新记录库,解析设备主动上报消息的告警入库表【mt_batteryinfo_alarm】开始... ", taskid, device_id); insertMqttDatas(mapinfo_lastest, "insertmt_batteryinfo_alarm", taskid); log.info("[{}] 电池编号:{} 更新最新记录库,解析设备主动上报消息告警入库表【mt_batteryinfo_alarm】完毕 ", taskid, device_id); } } } catch (Exception e) { code = IConst.CODE_INTERNAL_ERR; e.printStackTrace(); // 异常入库 错误类型:1:设备上报属性 2:设备主动请求配置 3:平台主动推送配置的响应 4:设备上报事件 5:设备服务调用应答 // 6:OTA升级响应 insertMqttErr(topic, message, content, e, description, 1, taskid); return false; } finally { log.info("[{}] 定时透传上报属性信息,无需平台回复消息,topic:{},code:{}", taskid, topic, code); // topic+"_reply" } log.info("当前批次马牙上报的属性信息数据解析并入库完成"); return true; 分析一下这样可以解决upload_time重复的问题了吗
最新发布
09-29
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值