Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
p x
earlywarning
Commits
ca37a52c
Commit
ca37a52c
authored
Jun 09, 2025
by
黄谋临
Browse files
添加 云端决策建议信息数据结构 、云端辅助功能信息数据结构 、下行自定义功能信息数据结构
parent
dcb9ce75
Pipeline
#3093
failed with stages
in 0 seconds
Changes
38
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
src/main/java/com/cusc/adas/v2x/clouddecision/vo/CloudDecisionMessageBody.java
0 → 100644
View file @
ca37a52c
package
com.cusc.adas.v2x.clouddecision.vo
;
import
java.util.List
;
import
com.cusc.adas.v2x.utils.FieldDef
;
import
com.cusc.adas.v2x.utils.OffsetDef
;
import
com.cusc.adas.v2x.utils.Order
;
/**
* 云端决策建议信息报文体
* @author huangml
*
*/
public
class
CloudDecisionMessageBody
<
T
>
{
//车辆编号
@Order
(
1
)
@FieldDef
(
type
=
"BYTE"
,
isArray
=
true
,
length
=
8
)
private
String
vehicleId
;
//消息标识
@Order
(
2
)
@FieldDef
(
type
=
"BYTE"
,
isArray
=
true
,
length
=
8
)
private
long
seq
;
//建议类型 若为多功能决策时,取值为 254
@Order
(
3
)
private
short
adviceType
;
//事件分类
@Order
(
4
)
private
short
eventType
;
//车速建议 单位:0.01m/s
@Order
(
5
)
@OffsetDef
(
value
=
36
,
type
=
2
)
private
int
spdExp
;
//加速度建议 单位:0.01 m/s2,数据偏移量 100,表示-100.00m/s2~100.00m/s2
@Order
(
6
)
@OffsetDef
(
value
=
36
,
type
=
2
)
private
int
accExp
;
//控车变道建 议转向状态 0:沿车道行驶;1:第一出口;2:第二出口;
//3:第三出口;4:第四出口;5:第五出口;6:第六出口;7:第七 出口;8:第八出口;9:左变道;10:右变道
@Order
(
7
)
private
short
instructDirection
;
//命令长度 0 表示命令失效,此时该条消息全部无效
@Order
(
8
)
private
int
dataLen
;
//命令数据 长度为 N 个字节,其中 N 为命令长度
@Order
(
9
)
private
List
<
T
>
adviceData
;
}
src/main/java/com/cusc/adas/v2x/clouddecision/vo/EmergencyVehicle.java
0 → 100644
View file @
ca37a52c
package
com.cusc.adas.v2x.clouddecision.vo
;
import
java.util.List
;
import
com.cusc.adas.v2x.utils.FieldDef
;
import
com.cusc.adas.v2x.utils.OffsetDef
;
import
com.cusc.adas.v2x.utils.Order
;
import
com.cusc.adas.v2x.utils.RefNumFlag
;
import
com.cusc.adas.v2x.vo.Position
;
/**
* 紧急车辆预警
* @author huangml
*
*/
public
class
EmergencyVehicle
{
//事件唯一标识
@Order
(
1
)
@FieldDef
(
type
=
"BYTE"
,
isArray
=
true
,
length
=
36
)
private
String
uuid
;
//事件生成时间 戳
@Order
(
2
)
@FieldDef
(
type
=
"TIMESTAMP"
,
isArray
=
false
,
length
=
8
)
private
long
timestamp
;
//告警类型
@Order
(
3
)
private
int
alertType
;
//告警半径
@Order
(
4
)
@OffsetDef
(
value
=
10
,
type
=
1
)
private
int
alertRadius
;
//路径点数量
@Order
(
5
)
private
short
pointNum
;
//告警路径
@Order
(
6
)
@RefNumFlag
(
value
=
"pointNum"
)
private
List
<
Position
>
alertPath
;
//车辆类型 0:失效;1:救护车;2:警车;3:消防车;4-10: 预留
@Order
(
7
)
private
short
type
;
//车速
@Order
(
8
)
@OffsetDef
(
value
=
36
,
type
=
2
)
private
int
velocity
;
//航向角
@Order
(
9
)
@OffsetDef
(
value
=
10000
)
private
long
heading
;
}
src/main/java/com/cusc/adas/v2x/clouddecision/vo/FawWarnning.java
0 → 100644
View file @
ca37a52c
package
com.cusc.adas.v2x.clouddecision.vo
;
import
java.util.List
;
import
com.cusc.adas.v2x.utils.FieldDef
;
import
com.cusc.adas.v2x.utils.OffsetDef
;
import
com.cusc.adas.v2x.utils.Order
;
import
com.cusc.adas.v2x.utils.RefNumFlag
;
import
com.cusc.adas.v2x.vo.Position
;
/**
* 前向碰撞预警
* @author huangml
*
*/
public
class
FawWarnning
{
//事件唯一标识
@Order
(
1
)
@FieldDef
(
type
=
"BYTE"
,
isArray
=
true
,
length
=
36
)
private
String
uuid
;
//事件生成时间 戳
@Order
(
2
)
@FieldDef
(
type
=
"TIMESTAMP"
,
isArray
=
false
,
length
=
8
)
private
long
timestamp
;
//告警类型 固定值为 6518
@Order
(
3
)
private
int
alertType
;
//告警半径 单位:dm
@Order
(
4
)
@OffsetDef
(
value
=
10
)
private
int
alertRadius
;
//路径点数量
@Order
(
5
)
private
short
pointNum
;
//告警路径
@Order
(
6
)
@RefNumFlag
(
value
=
"pointNum"
)
private
List
<
Position
>
alertPath
;
//碰撞预警目标 类型
@Order
(
7
)
private
short
objType
;
//碰撞告警类型
@Order
(
8
)
private
short
fcwLevel
;
//碰撞距离 单位:cm
@Order
(
9
)
@OffsetDef
(
value
=
100
)
private
int
fcwDistance
;
//碰撞预警目标 所在车道
@Order
(
10
)
private
short
fcwLaneId
;
}
src/main/java/com/cusc/adas/v2x/clouddecision/vo/LaneAdviceSpeed.java
0 → 100644
View file @
ca37a52c
package
com.cusc.adas.v2x.clouddecision.vo
;
import
com.cusc.adas.v2x.utils.OffsetDef
;
import
com.cusc.adas.v2x.utils.Order
;
/**
* 车道方向建议车速
* @author huangml
*
*/
public
class
LaneAdviceSpeed
{
//车速上限 单位:0.01 m/s
@Order
(
1
)
@OffsetDef
(
value
=
36
,
type
=
2
)
private
int
spdMax
;
//车速下限 单位:0.01 m/s
@Order
(
2
)
@OffsetDef
(
value
=
36
,
type
=
2
)
private
int
spdMin
;
//建议车速 单位:0.01 m/s
@Order
(
3
)
@OffsetDef
(
value
=
36
,
type
=
2
)
private
int
spdExp
;
//通行行为 单位:0.01 m/s
@Order
(
4
)
@OffsetDef
(
value
=
36
,
type
=
2
)
private
short
maneuver
;
//绿灯通过前方 路口数量 车辆绿灯通过前方路口数量,其中 0 表示无法绿灯通过前 方路口
@Order
(
5
)
private
short
numIntersection
;
}
src/main/java/com/cusc/adas/v2x/clouddecision/vo/RSISDetail.java
0 → 100644
View file @
ca37a52c
package
com.cusc.adas.v2x.clouddecision.vo
;
import
java.util.List
;
import
com.cusc.adas.v2x.utils.FieldDef
;
import
com.cusc.adas.v2x.utils.Order
;
import
com.cusc.adas.v2x.utils.RefNumFlag
;
import
com.cusc.adas.v2x.vo.Position
;
/**
* 通用 RSI 预警中交通事件和交通标志信息
* @author huangml
*
*/
public
class
RSISDetail
{
//事件唯一标识
@Order
(
1
)
@FieldDef
(
type
=
"BYTE"
,
isArray
=
true
,
length
=
36
)
private
String
uuid
;
//事件生成时间 戳
@Order
(
2
)
@FieldDef
(
type
=
"TIMESTAMP"
,
isArray
=
false
,
length
=
8
)
private
long
timestamp
;
//交通事件位置 点
@Order
(
3
)
private
Position
eventPosition
;
//道路交通事件 信息类型
@Order
(
4
)
private
int
eventType
;
//事件来源
@Order
(
5
)
private
short
eventSource
;
//事件(影响) 半径
@Order
(
6
)
private
int
eventRadius
;
//关联路段数量
@Order
(
7
)
private
int
referenceLinksNum
;
//关联路段数量
@Order
(
8
)
private
RelSetp
referenceLinks
;
//优先级
@Order
(
9
)
private
short
priority
;
//交通事件/标 志作用中心线 坐标点
@Order
(
10
)
private
Position
alertPath
;
//交通标志/事 件作用中心线 范围半径
@Order
(
11
)
private
int
pathRadius
;
//事件状态
@Order
(
12
)
private
short
status
;
//自定义内容长度
@Order
(
13
)
private
int
userdefinedDataLength
;
@Order
(
14
)
//自定义内容
@RefNumFlag
(
value
=
"userdefinedDataLength"
)
private
String
userdefinedData
;
}
src/main/java/com/cusc/adas/v2x/clouddecision/vo/RSIWarnning.java
0 → 100644
View file @
ca37a52c
package
com.cusc.adas.v2x.clouddecision.vo
;
import
com.cusc.adas.v2x.utils.Order
;
/**
* 通用 RSI 预警
* @author huangml
*
*/
public
class
RSIWarnning
{
//交通事件和交 通标志信息数 量
@Order
(
1
)
private
short
rsisNum
;
@Order
(
2
)
private
RSISDetail
rsis
;
}
src/main/java/com/cusc/adas/v2x/clouddecision/vo/RelSetp.java
0 → 100644
View file @
ca37a52c
package
com.cusc.adas.v2x.clouddecision.vo
;
import
com.cusc.adas.v2x.utils.Order
;
/**
* 关联路段
* @author huangml
*
*/
public
class
RelSetp
{
//上游节点编号
@Order
(
1
)
private
long
upstreamNodeId
;
//下游节点编号
@Order
(
2
)
private
long
downstreamNodeId
;
//受影响车道数量
@Order
(
3
)
private
short
referenceLanesNum
;
//受影响车道
@Order
(
4
)
private
short
referenceLanes
;
}
src/main/java/com/cusc/adas/v2x/clouddecision/vo/TrafficLight.java
0 → 100644
View file @
ca37a52c
package
com.cusc.adas.v2x.clouddecision.vo
;
import
com.cusc.adas.v2x.utils.FieldDef
;
import
com.cusc.adas.v2x.utils.Order
;
/**
* 信号灯路口车速引导
* @author huangml
*
*/
public
class
TrafficLight
{
//事件唯一标识
@Order
(
1
)
@FieldDef
(
type
=
"BYTE"
,
isArray
=
true
,
length
=
36
)
private
String
uuid
;
//事件生成时间 戳
@Order
(
2
)
@FieldDef
(
type
=
"TIMESTAMP"
,
isArray
=
false
,
length
=
8
)
private
long
timestamp
;
//告警类型 固定值为 6523
@Order
(
3
)
private
int
alertType
;
//有效标识 0:失效;1:有效
@Order
(
4
)
private
short
valid
;
//命令标识 0:失效;1:引导;2:停车指令;3:启动指令
@Order
(
5
)
private
short
type
;
//车辆所在位置 到停止线距离 单位:0.01m
@Order
(
6
)
private
int
d2StopLine
;
//车道方向建议 速度组数 0 表示无效,不发送车道方向建议车速数据
@Order
(
7
)
private
short
spdExpNum
;
//车道方向建议 速度
@Order
(
8
)
private
byte
[]
spdExps
;
//车速上限
@Order
(
9
)
private
int
spdMax
;
//车速下限
@Order
(
10
)
private
int
spdMin
;
//建议车速
@Order
(
11
)
private
int
spdExp
;
//通行行为
private
short
maneuver
;
//绿灯通过前方路口数量
private
short
numIntersection
;
}
src/main/java/com/cusc/adas/v2x/selfdefine/dto/SelfDefineDetailDto.java
0 → 100644
View file @
ca37a52c
package
com.cusc.adas.v2x.selfdefine.dto
;
import
com.cusc.adas.v2x.vo.Position2D
;
/**
*
* @author huangml
*
*/
public
class
SelfDefineDetailDto
{
//预警类型
private
short
type
;
//RV经纬度
private
Position2D
rvLocation
;
//RV方向
private
long
rvDirection
;
//预警级别
private
long
level
;
//预警距离
private
long
distance
;
}
src/main/java/com/cusc/adas/v2x/selfdefine/dto/SelfDefineMessageBodyDto.java
0 → 100644
View file @
ca37a52c
package
com.cusc.adas.v2x.selfdefine.dto
;
import
java.util.List
;
import
com.cusc.adas.v2x.utils.FieldDef
;
import
com.cusc.adas.v2x.utils.Order
;
public
class
SelfDefineMessageBodyDto
<
T
>
{
//车辆编号
@Order
(
1
)
@FieldDef
(
type
=
"BYTE"
,
isArray
=
true
,
length
=
8
)
private
String
vehicleId
;
//消息标识
@Order
(
2
)
@FieldDef
(
type
=
"BYTE"
,
isArray
=
true
,
length
=
8
)
private
long
seq
;
//数据长度
private
int
dataLen
;
//数据内容
private
List
<
T
>
data
;
}
src/main/java/com/cusc/adas/v2x/selfdefine/vo/SelfDefineDetail.java
0 → 100644
View file @
ca37a52c
package
com.cusc.adas.v2x.selfdefine.vo
;
import
com.cusc.adas.v2x.utils.Order
;
import
com.cusc.adas.v2x.vo.Position2D
;
/**
*
* @author huangml
*
*/
public
class
SelfDefineDetail
{
//预警类型
@Order
(
1
)
private
short
type
;
//RV经纬度
@Order
(
2
)
private
Position2D
rvLocation
;
//RV方向
@Order
(
3
)
private
long
rvDirection
;
//预警级别
@Order
(
4
)
private
long
level
;
//预警距离
@Order
(
5
)
private
long
distance
;
}
src/main/java/com/cusc/adas/v2x/selfdefine/vo/SelfDefineMessage.java
0 → 100644
View file @
ca37a52c
package
com.cusc.adas.v2x.selfdefine.vo
;
import
com.cusc.adas.v2x.utils.Order
;
import
com.cusc.adas.v2x.vo.MessageHeadInfo
;
/**
* 自定义功能信息
* @author huangml
*
*/
public
class
SelfDefineMessage
{
//报文头
@Order
(
1
)
private
MessageHeadInfo
messageHeadInfo
;
@Order
(
2
)
private
SelfDefineMessageBody
selfDefineMessageBody
;
}
src/main/java/com/cusc/adas/v2x/selfdefine/vo/SelfDefineMessageBody.java
0 → 100644
View file @
ca37a52c
package
com.cusc.adas.v2x.selfdefine.vo
;
import
java.util.List
;
import
com.cusc.adas.v2x.utils.FieldDef
;
import
com.cusc.adas.v2x.utils.Order
;
public
class
SelfDefineMessageBody
<
T
>
{
//车辆编号
@Order
(
1
)
@FieldDef
(
type
=
"BYTE"
,
isArray
=
true
,
length
=
8
)
private
String
vehicleId
;
//消息标识
@Order
(
2
)
@FieldDef
(
type
=
"BYTE"
,
isArray
=
true
,
length
=
8
)
private
long
seq
;
//数据长度
@Order
(
3
)
private
int
dataLen
;
//数据内容
@Order
(
4
)
private
List
<
T
>
data
;
}
src/main/java/com/cusc/adas/v2x/server/UdpServerHandler.java
View file @
ca37a52c
...
...
@@ -4,6 +4,7 @@ package com.cusc.adas.v2x.server;
import
com.cusc.adas.v2x.clouddecision.vo.CloudDecisionMessage
;
import
com.cusc.adas.v2x.dto.VehicleBodyDto
;
import
com.cusc.adas.v2x.utils.Parse
;
import
com.cusc.adas.v2x.vo.VehicleMessage
;
...
...
@@ -43,14 +44,20 @@ public class UdpServerHandler extends SimpleChannelInboundHandler<DatagramPacket
if
(
hexString
.
substring
(
10
,
12
).
equals
(
"15"
))
{
ByteBuf
byteBuf
=
Unpooled
.
wrappedBuffer
(
req
);
VehicleMessage
vehicleMessage
=
Parse
.
parse
(
byteBuf
,
new
VehicleMessage
());
System
.
out
.
println
(
"Received message: "
+
vehicleMessage
);
VehicleBodyDto
vehicleBodyDto
=
new
VehicleBodyDto
();
Parse
.
convoterBean
(
vehicleMessage
.
getVehicleMessageBody
(),
vehicleBodyDto
);
System
.
out
.
println
(
"Received message: "
+
vehicleBodyDto
);
}
else
if
(
hexString
.
substring
(
10
,
12
).
equals
(
"15"
))
{
ByteBuf
byteBuf
=
Unpooled
.
wrappedBuffer
(
req
);
CloudDecisionMessage
cloudDecisionMessage
=
Parse
.
parse
(
byteBuf
,
new
CloudDecisionMessage
());
System
.
out
.
println
(
"Received message: "
+
cloudDecisionMessage
);
// VehicleBodyDto vehicleBodyDto = new VehicleBodyDto();
// Parse.convoterBean(vehicleMessage.getVehicleMessageBody(), vehicleBodyDto);
// System.out.println("Received message: " + vehicleBodyDto);
}
...
...
src/main/java/com/cusc/adas/v2x/utils/SM4Utils.java
View file @
ca37a52c
...
...
@@ -20,9 +20,9 @@ public class SM4Utils {
}
/**
*
????
SM4
???
* @return
?????
Base64
?????????
* @throws Exception
??
*
生成
SM4
密钥
* @return
密钥的
Base64
编码字符串
* @throws Exception
异常
*/
public
static
String
generateKey
()
throws
Exception
{
KeyGenerator
kg
=
KeyGenerator
.
getInstance
(
ALGORITHM_NAME
,
"BC"
);
...
...
@@ -32,11 +32,11 @@ public class SM4Utils {
}
/**
* SM4
????
* @param plainText
????
* @param key
?????
Base64
?????????
* @return
?????
Base64
?????????
* @throws Exception
??
* SM4
加密
* @param plainText
明文
* @param key
密钥的
Base64
编码字符串
* @return
密文的
Base64
编码字符串
* @throws Exception
异常
*/
public
static
String
encrypt
(
String
plainText
,
String
key
)
throws
Exception
{
byte
[]
keyBytes
=
Base64
.
getDecoder
().
decode
(
key
);
...
...
@@ -48,11 +48,11 @@ public class SM4Utils {
}
/**
* SM4
????
* @param cipherText
?????
Base64
?????????
* @param key
?????
Base64
?????????
* @return
????
* @throws Exception
??
* SM4
解密
* @param cipherText
密文的
Base64
编码字符串
* @param key
密钥的
Base64
编码字符串
* @return
明文
* @throws Exception
异常
*/
public
static
String
decrypt
(
String
cipherText
,
String
key
)
throws
Exception
{
byte
[]
keyBytes
=
Base64
.
getDecoder
().
decode
(
key
);
...
...
src/main/java/com/cusc/adas/v2x/vehiclesubscribe/vo/VehicleSubscribeMessage.java
0 → 100644
View file @
ca37a52c
package
com.cusc.adas.v2x.vehiclesubscribe.vo
;
import
com.cusc.adas.v2x.utils.Order
;
import
com.cusc.adas.v2x.vo.MessageHeadInfo
;
/**
*
* @author huangml
*
*/
public
class
VehicleSubscribeMessage
{
//报文头
@Order
(
1
)
private
MessageHeadInfo
messageHeadInfo
;
@Order
(
2
)
private
VehicleSubscribeMessageBody
vehicleSubscribeMessageBody
;
}
src/main/java/com/cusc/adas/v2x/vehiclesubscribe/vo/VehicleSubscribeMessageBody.java
0 → 100644
View file @
ca37a52c
package
com.cusc.adas.v2x.vehiclesubscribe.vo
;
public
class
VehicleSubscribeMessageBody
{
private
String
vehicleId
;
private
byte
subsLen
;
private
Byte
[]
funcSubscribe
;
}
src/main/java/com/cusc/adas/v2x/vo/SpeedLimit.java
0 → 100644
View file @
ca37a52c
package
com.cusc.adas.v2x.vo
;
/**
* 限速 信息
* @author huangml
*
*/
public
class
SpeedLimit
{
//车道编 号
private
short
laneId
;
//限速值
private
short
speedLimit
;
}
Prev
1
2
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment