package org.yzh.protocol.commons.transform.attribute; import io.github.yezhihao.protostar.annotation.Field; import lombok.Data; import lombok.ToString; import lombok.experimental.Accessors; import java.time.LocalDateTime; /** * 高级驾驶辅助系统报警 0x64 */ @ToString @Data @Accessors(chain = true) public class AlarmADAS extends Alarm { public static final Integer key = 100; @Field(length = 4, desc = "报警ID") private long id; @Field(length = 1, desc = "标志状态:0.不可用 1.开始标志 2.结束标志") private int state; @Field(length = 1, desc = "报警/事件类型:" + " 1.前向碰撞报警" + " 2.车道偏离报警" + " 3.车距过近报警" + " 4.行人碰撞报警" + " 5.频繁变道报警" + " 6.道路标识超限报警" + " 7.障碍物报警" + " 8~15.用户自定义" + " 16.道路标志识别事件" + " 17.主动抓拍事件" + " 18.实线变道报警(粤标)" + " 19.车厢过道行人检测报警(粤标)" + " 18~31.用户自定义") private int type; @Field(length = 1, desc = "报警级别") private int level; @Field(length = 1, desc = "前车车速(Km/h)范围0~250,仅报警类型为1和2时有效") private int frontSpeed; @Field(length = 1, desc = "前车/行人距离(100ms),范围0~100,仅报警类型为1、2和4时有效") private int frontDistance; @Field(length = 1, desc = "偏离类型:1.左侧偏离 2.右侧偏离(报警类型为2时有效)") private int deviateType; @Field(length = 1, desc = "道路标志识别类型:1.限速标志 2.限高标志 3.限重标志 4.禁行标志(粤标) 5.禁停标志(粤标)(报警类型为6和10时有效)") private int roadSign; @Field(length = 1, desc = "道路标志识别数据") private int roadSignValue; @Field(length = 1, desc = "车速") private int speed; @Field(length = 2, desc = "高程") private int altitude; @Field(length = 4, desc = "纬度") private int latitude; @Field(length = 4, desc = "经度") private int longitude; @Field(length = 6, charset = "BCD", desc = "日期时间") private LocalDateTime alarmTime; @Field(length = 2, desc = "车辆状态") private int statusBit; @Field(length = 7, desc = "终端ID", version = {-1, 0}) @Field(length = 30, desc = "终端ID(粤标)", version = 1) private String deviceId; @Field(length = 6, charset = "BCD", desc = "时间(YYMMDDHHMMSS)") private LocalDateTime dateTime; @Field(length = 1, desc = "序号(同一时间点报警的序号,从0循环累加)") private int sequenceNo; @Field(length = 1, desc = "附件数量") private int fileTotal; @Field(length = 1, desc = "预留", version = {-1, 0}) @Field(length = 2, desc = "预留(粤标)", version = 1) private int reserved; @Override public int getSource() { return 1; } @Override public int getCategory() { return key; } @Override public int getAlarmType() { return Alarm.buildType(key, type); } @Override public String getExtra() { final StringBuilder sb = new StringBuilder(64); if (type == 1 || type == 2) { sb.append("frontSpeed:").append(frontSpeed).append(','); } if (type == 1 || type == 2 || type == 4) { sb.append("frontDistance:").append(frontDistance).append(','); } if (type == 2) { sb.append("deviateType:").append(deviateType).append(','); } if (type == 6 || type == 10) { sb.append("roadSign:").append(roadSign).append(','); sb.append("roadSignValue:").append(roadSignValue).append(','); } int length = sb.length(); if (length > 0) return sb.substring(0, length - 1); return null; } }