@@ -0,0 +1,593 @@ | |||
# JT/T808 Protocol | |||
[](https://github.com/SmallChi/JT808/blob/master/LICENSE) | |||
<p> | |||
<span>English</span> | | |||
<a href="README.md">中文</a> | |||
</p> | |||
## Precondition | |||
1. Master base conversion: binary to hexadecimal; | |||
2. Master BCD and Hex coding; | |||
3. Master all kinds of displacement, xor; | |||
4. Master common reflexes; | |||
5. Master the use of JObject; | |||
6. Command fast CTRL + C, CTRL + V; | |||
7. Master the basic usage of Span\<T\>; | |||
8. Master the above skills, you can begin to move bricks. | |||
## JT808 Data structure parsing | |||
### Packet[JT808Package] | |||
| Head logo | Header | Data volume/Subcontracted data volume | Checksum | tail logo | | |||
| :----: | :---------: | :---------: | :----------: | :----: | | |||
| Begin | JT808Header | JT808Bodies/JT808SubDataBodies |CheckCode | End | | |||
| 7E | - | - | - | 7E | | |||
### Header[JT808Header] | |||
| Message Id | Message body properties| Protocol Version (2019 version)|Terminal Phone Number| Message sequence number | Total number of message packages (dependent on subcontracting) | Package Number (depends on subcontracting or not) | | |||
| :----: | :----------------------------: | :-------------: |:-------------: | :--------: |:---------: | :-------:| | |||
| MsgId | JT808HeaderMessageBodyProperty | ProtocolVersion|TerminalPhoneNo | MsgNum |PackgeCount | PackageIndex | | |||
#### Header Message Body Property[JT808HeaderMessageBodyProperty] | |||
|Protocol Version (2019 version)| Whether the subcontract | Encryption identification | Body length | | |||
|:------:| :------: | :------: | :--------: | | |||
|VersionFlag| IsPackge | Encrypt | DataLength | | |||
#### Message body properties[JT808Bodies] | |||
> According to the corresponding message ID:MsgId | |||
***notic:Data content (excluding header and tail identifiers) is escaped*** | |||
The escape rules are as follows: | |||
1. If the data contains character 0x7e, replace it with character 0x7d followed by character 0x02; | |||
2. If character 0x7d exists in the data content, replace it with character 0x7d followed by character 0x01. | |||
The cause of the anti-escape:Verify the TCP message boundary for the JT808 protocol. | |||
### For example 1 | |||
#### 1.Create Package: | |||
> MsgId 0x0200:Location information reporting | |||
``` csharp | |||
JT808Package jT808Package = new JT808Package(); | |||
jT808Package.Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId._0x0200, | |||
ManualMsgNum = 126, | |||
TerminalPhoneNo = "123456789012" | |||
}; | |||
JT808_0x0200 jT808_0x0200 = new JT808_0x0200(); | |||
jT808_0x0200.AlarmFlag = 1; | |||
jT808_0x0200.Altitude = 40; | |||
jT808_0x0200.GPSTime = DateTime.Parse("2018-10-15 10:10:10"); | |||
jT808_0x0200.Lat = 12222222; | |||
jT808_0x0200.Lng = 132444444; | |||
jT808_0x0200.Speed = 60; | |||
jT808_0x0200.Direction = 0; | |||
jT808_0x0200.StatusFlag = 2; | |||
jT808_0x0200.BasicLocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>(); | |||
jT808_0x0200.BasicLocationAttachData.Add(JT808Constants.JT808_0x0200_0x01, new JT808_0x0200_0x01 | |||
{ | |||
Mileage = 100 | |||
}); | |||
jT808_0x0200.BasicLocationAttachData.Add(JT808Constants.JT808_0x0200_0x02, new JT808_0x0200_0x02 | |||
{ | |||
Oil = 125 | |||
}); | |||
jT808Package.Bodies = jT808_0x0200; | |||
byte[] data = JT808Serializer.Serialize(jT808Package); | |||
var hex = data.ToHexString(); | |||
// output result Hex: | |||
// 7E 02 00 00 26 12 34 56 78 90 12 00 7D 02 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 7D 01 13 7E | |||
``` | |||
#### 2.Manual unpack: | |||
``` text | |||
1.original package: | |||
7E 02 00 00 26 12 34 56 78 90 12 00 (7D 02) 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 (7D 01) 13 7E | |||
2.Reverse escape | |||
7D 02 ->7E | |||
7D 01 ->7D | |||
After the escape | |||
7E 02 00 00 26 12 34 56 78 90 12 00 7E 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 7D 13 7E | |||
3.disassembly | |||
7E --头标识 | |||
02 00 --数据头->消息ID | |||
00 26 --数据头->消息体属性 | |||
12 34 56 78 90 12 --数据头->终端手机号 | |||
00 7E --数据头->消息流水号 | |||
00 00 00 01 --消息体->报警标志 | |||
00 00 00 02 --消息体->状态位标志 | |||
00 BA 7F 0E --消息体->纬度 | |||
07 E4 F1 1C --消息体->经度 | |||
00 28 --消息体->海拔高度 | |||
00 3C --消息体->速度 | |||
00 00 --消息体->方向 | |||
18 10 15 10 10 10 --消息体->GPS时间 | |||
01 --消息体->附加信息->里程 | |||
04 --消息体->附加信息->长度 | |||
00 00 00 64 --消息体->附加信息->数据 | |||
02 --消息体->附加信息->油量 | |||
02 --消息体->附加信息->长度 | |||
00 7D --消息体->附加信息->数据 | |||
13 --检验码 | |||
7E --尾标识 | |||
``` | |||
#### 3.Program to unpack: | |||
``` csharp | |||
//1.Convert to a byte array | |||
byte[] bytes = "7E 02 00 00 26 12 34 56 78 90 12 00 7D 02 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 7D 01 13 7E".ToHexBytes(); | |||
//2.Deserialize the array | |||
var jT808Package = JT808Serializer.Deserialize(bytes); | |||
//3.packet header | |||
Assert.Equal(Enums.JT808MsgId.Location, jT808Package.Header.MsgId); | |||
Assert.Equal(38, jT808Package.Header.MessageBodyProperty.DataLength); | |||
Assert.Equal(126, jT808Package.Header.MsgNum); | |||
Assert.Equal("123456789012", jT808Package.Header.TerminalPhoneNo); | |||
Assert.False(jT808Package.Header.MessageBodyProperty.IsPackge); | |||
Assert.Equal(0, jT808Package.Header.PackageIndex); | |||
Assert.Equal(0, jT808Package.Header.PackgeCount); | |||
Assert.Equal(JT808EncryptMethod.None, jT808Package.Header.MessageBodyProperty.Encrypt); | |||
//4.The packet body | |||
JT808_0x0200 jT808_0x0200 = (JT808_0x0200)jT808Package.Bodies; | |||
Assert.Equal((uint)1, jT808_0x0200.AlarmFlag); | |||
Assert.Equal((uint)40, jT808_0x0200.Altitude); | |||
Assert.Equal(DateTime.Parse("2018-10-15 10:10:10"), jT808_0x0200.GPSTime); | |||
Assert.Equal(12222222, jT808_0x0200.Lat); | |||
Assert.Equal(132444444, jT808_0x0200.Lng); | |||
Assert.Equal(60, jT808_0x0200.Speed); | |||
Assert.Equal(0, jT808_0x0200.Direction); | |||
Assert.Equal((uint)2, jT808_0x0200.StatusFlag); | |||
//4.1.Additional information 1 | |||
Assert.Equal(100, ((JT808_0x0200_0x01)jT808_0x0200.BasicLocationAttachData[JT808Constants.JT808_0x0200_0x01]).Mileage); | |||
//4.2.Additional information 2 | |||
Assert.Equal(125, ((JT808_0x0200_0x02)jT808_0x0200.BasicLocationAttachData[JT808Constants.JT808_0x0200_0x02]).Oil); | |||
``` | |||
### 举个栗子2 | |||
``` csharp | |||
// 使用消息Id的扩展方法创建JT808Package包 | |||
JT808Package jT808Package = Enums.JT808MsgId.位置信息汇报.Create("123456789012", | |||
new JT808_0x0200 { | |||
AlarmFlag = 1, | |||
Altitude = 40, | |||
GPSTime = DateTime.Parse("2018-10-15 10:10:10"), | |||
Lat = 12222222, | |||
Lng = 132444444, | |||
Speed = 60, | |||
Direction = 0, | |||
StatusFlag = 2, | |||
BasicLocationAttachData = new Dictionary<byte, JT808LocationAttachBase> | |||
{ | |||
{ JT808Constants.JT808_0x0200_0x01,new JT808_0x0200_0x01{Mileage = 100}}, | |||
{ JT808Constants.JT808_0x0200_0x02,new JT808_0x0200_0x02{Oil = 125}} | |||
} | |||
}); | |||
byte[] data = JT808Serializer.Serialize(jT808Package); | |||
var hex = data.ToHexString(); | |||
//输出结果Hex: | |||
//7E 02 00 00 26 12 34 56 78 90 12 00 01 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 7D 01 6C 7E | |||
``` | |||
### 举个栗子3 | |||
``` csharp | |||
// 初始化配置 | |||
IJT808Config DT1JT808Config = new DT1Config(); | |||
IJT808Config DT2JT808Config = new DT2Config(); | |||
// 注册自定义消息外部程序集 | |||
DT1JT808Config.Register(Assembly.GetExecutingAssembly()); | |||
// 跳过校验和验证 | |||
DT1JT808Config.SkipCRCCode = true; | |||
// 根据不同的设备终端号,添加自定义消息Id | |||
DT1JT808Config.MsgIdFactory.SetMap<DT1Demo6>(); | |||
DT2JT808Config.MsgIdFactory.SetMap<DT2Demo6>(); | |||
// 初始化序列化实例 | |||
JT808Serializer DT1JT808Serializer = new JT808Serializer(DT1JT808Config); | |||
JT808Serializer DT2JT808Serializer = new JT808Serializer(DT2JT808Config); | |||
``` | |||
[可以参考Simples的Demo6](https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo6.cs) | |||
### 举个栗子4 | |||
#### 遇到的问题-多设备多协议的自定义位置附加信息 | |||
场景: | |||
一个设备厂商对应多个设备类型,不同设备类型可能存在相同的自定义位置附加信息Id,导致自定义附加信息Id冲突,无法解析。 | |||
***解决方式:*** | |||
1.可以根据设备类型做个工厂,解耦对公共序列化器的依赖。 | |||
2.可以根据设备类型去实现(GlobalConfigBase)对应的配置,根据不同的GlobalConfigBase实例去绑定对应协议解析器。 | |||
[可以参考Simples的Demo4](https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo4.cs) | |||
[可以参考Simples的Demo6](https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo6.cs) | |||
> 要是哪位大佬还有其他的解决方式,请您告知我下,谢谢您了。 | |||
### 举个栗子5 | |||
#### 遇到的问题-多媒体数据上传进行分包处理 | |||
场景: | |||
设备在上传多媒体数据的时候,由于数据比较多,一次上传不了,所以采用分包方式处理。 | |||
***解决方式:*** | |||
1. 第一包数据上来采用平常的方式去解析数据; | |||
2. 当第二包上来跟第一包的分包数据体(SubDataBodies)进行合并 | |||
3. 当N包数据上来,延续步骤2的方式。 | |||
> 普及知识点1:由于消息体长度最大为10bit也就是1023的字节,所以这边就有个硬性条件不能超过最大长度 | |||
> 普及知识点2:一般行业分包是按256的整数倍,太多不行,太少也不行,必须刚刚好。 | |||
[可以参考Simples的Demo5](https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo5.cs) | |||
### 举个栗子6 | |||
#### 遇到的问题-多设备多协议的消息ID冲突 | |||
场景: | |||
由于每个设备厂商不同,导致设备的私有协议可能使用相同的消息ID作为指令,导致平台解析不了。 | |||
***解决方式:*** | |||
可以根据设备类型去实现(GlobalConfigBase)对应的配置,根据不同的GlobalConfigBase实例去绑定对应 | |||
协议解析器。 | |||
[可以参考Simples的Demo6](https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo6.cs) | |||
### 举个栗子7 | |||
如何兼容2019版本 | |||
> 最新协议文档已经写好了如何做兼容,就是在消息体属性中第14位为版本标识。 | |||
1. 当第14位为0时,标识协议为2011年的版本; | |||
2. 当第14位为1时,标识协议为2019年的版本。 | |||
[可以参考Simples的Demo7](https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo7.cs) | |||
### 举个栗子8 | |||
协议分析器在数据出现异常和纠错的时候也是挺有用的,总不能凭借24K氪金眼去观察数据,那么可以在开发协议的同时就把协议分析器给写好,这样方便技术或者技术支持排查问题,提高效率。 | |||
[可以参考Simples的Demo8](https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo8.cs) | |||
### 举个栗子9 | |||
增加行车记录仪序列化器,既可以单独的存在,也可以组装在808的数据包当中。 | |||
[可以参考Simples的Demo9](https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo9.cs) | |||
### 举个栗子10 | |||
场景1: | |||
有些设备,不会按照国标的附加信息Id来搞,把附加信息Id搞为两个字节,这样在上报上来的数据就会存在重复的附加Id,导致平台解析出错。 | |||
场景2: | |||
由于粤标的设备厂家自定义的附加信息长度可以为四4个字节的,所以需要兼容。 | |||
场景3: | |||
有些设备上报会出现两个相同的附加信息Id,那么只能解析一个,另一个只能丢在异常附加信息里面去处理。 | |||
|附加信息类说明| 附加ID字节数 | 附加长度字节数 | 备注 | | |||
| :--- | :---: | :---: | :---:| | |||
| JT808_0x0200_CustomBodyBase | 1 BYTE | 1 BYTE | 标准| | |||
| JT808_0x0200_CustomBodyBase2 | 2 BYTE | 1 BYTE | 自定义| | |||
| JT808_0x0200_CustomBodyBase3 | 2 BYTE | 2 BYTE | 自定义| | |||
| JT808_0x0200_CustomBodyBase4 | 1 BYTE | 4 BYTE | 自定义| | |||
[可以参考Simples的Demo10](https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo10.cs) | |||
>注意:默认都是以**标准**的去解析,要是出现未知的附加,不一定解析就是正确,最好还是需要依照协议文档去开发然后自行注册解析器去解析。 | |||
### 举个栗子11 | |||
场景: | |||
有些设备,补报的定位数据有异常数据包内容长度跟原始的内容长度不一致导致整包的数据的解析出错,再设备不升级,改不了的情况下,尽量能解析多少补报的数据量,就解析多少。 | |||
[可以参考Simples的Demo11](https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo11.cs) | |||
### 举个栗子12 | |||
场景: | |||
由于粤标的设备把2019版本的0x8105终端控制消息命令参数做了扩展,所以需要兼容。 | |||
[可以参考Simples的Demo12](https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo12.cs) | |||
### 举个栗子13 | |||
场景: | |||
由于协议库本身可能存在消息解析出错的情况,要么就提PR上来,但是不一定会及时发布,这时候就需要自己把原有的消息解析复制出来,改造好,然后重新注册。 | |||
[可以参考Simples的Demo13](https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo13.cs) | |||
### 举个栗子14 | |||
场景: | |||
由于某些厂商不按要求去做,明明使用的2013的协议但是在消息头部的版本标识位置为1,导致程序认为是2019协议。从而解析报错。此时可以强制解析成2013后,然后修正版本标识,重新序列化消息,以供下游服务使用 | |||
[可以参考Simples的Demo14](https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo14.cs) | |||
### 举个栗子15 | |||
场景: | |||
兼容2011协议的注册消息 | |||
[可以参考Simples的Demo15](https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo15.cs) | |||
### 举个栗子16 | |||
场景: | |||
平台下发分包数据到设备 | |||
可以参考【栗子5】中,设备上来的分包数据结构,然后举一反三的去实现。 | |||
[可以参考Simples的Demo16](https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo16.cs) | |||
## NuGet安装 | |||
| Package Name| Version| Preview Version |Downloads|Remark| | |||
| --- | --- | --- | ---| --- | | |||
| Install-Package JT808 |  | | |JT808| | |||
| Install-Package JT808.Protocol.Extensions.JT1078 |  | | |JT1078扩展JT808| | |||
| Install-Package JT808.Protocol.Extensions.SuBiao|  | | |主动安全(苏标)扩展JT808| | |||
| Install-Package JT808.Protocol.Extensions.YueBiao|  | | |主动安全(粤标)扩展JT808| | |||
## 使用BenchmarkDotNet性能测试报告(只是玩玩,不能当真) | |||
``` ini | |||
BenchmarkDotNet=v0.13.1, OS=Windows 10.0.22000 | |||
Intel Core i7-8700K CPU 3.70GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores | |||
.NET SDK=6.0.100 | |||
[Host] : .NET 6.0.0 (6.0.21.52210), X64 RyuJIT | |||
Job-EIZRXW : .NET 6.0.0 (6.0.21.52210), X64 RyuJIT | |||
Platform=AnyCpu Server=False Toolchain=.NET 6.0 | |||
``` | |||
| Method | Categories | N | Mean | Error | StdDev | Gen 0 | Allocated | | |||
|-------------------------------- |----------------- |------- |--------------:|-------------:|-------------:|-----------:|-----------:| | |||
| **0x0200_All_AttachId_Serialize** | **0x0200Serializer** | **100** | **169.92 μs** | **2.059 μs** | **1.926 μs** | **29.5410** | **182 KB** | | |||
| 0x0200_All_AttachId_Deserialize | 0x0200Serializer | 100 | 642.45 μs | 2.016 μs | 1.683 μs | 82.0313 | 508 KB | | |||
| **0x0200_All_AttachId_Serialize** | **0x0200Serializer** | **10000** | **17,391.50 μs** | **346.644 μs** | **462.759 μs** | **2968.7500** | **18,203 KB** | | |||
| 0x0200_All_AttachId_Deserialize | 0x0200Serializer | 10000 | 67,872.38 μs | 825.715 μs | 772.375 μs | 8250.0000 | 50,781 KB | | |||
| **0x0200_All_AttachId_Serialize** | **0x0200Serializer** | **100000** | **174,867.56 μs** | **2,620.513 μs** | **2,451.229 μs** | **29000.0000** | **182,032 KB** | | |||
| 0x0200_All_AttachId_Deserialize | 0x0200Serializer | 100000 | 676,860.84 μs | 8,716.108 μs | 7,726.603 μs | 82000.0000 | 507,813 KB | | |||
| | | | | | | | | | |||
| **0x0100Serialize** | **0x0100Serializer** | **100** | **72.60 μs** | **1.241 μs** | **1.161 μs** | **10.8643** | **67 KB** | | |||
| 0x0100Deserialize | 0x0100Serializer | 100 | 64.80 μs | 0.767 μs | 0.641 μs | 15.8691 | 98 KB | | |||
| **0x0100Serialize** | **0x0100Serializer** | **10000** | **7,602.54 μs** | **55.726 μs** | **52.126 μs** | **1093.7500** | **6,719 KB** | | |||
| 0x0100Deserialize | 0x0100Serializer | 10000 | 6,567.71 μs | 53.112 μs | 44.351 μs | 1593.7500 | 9,766 KB | | |||
| **0x0100Serialize** | **0x0100Serializer** | **100000** | **75,323.96 μs** | **494.762 μs** | **462.800 μs** | **10857.1429** | **67,189 KB** | | |||
| 0x0100Deserialize | 0x0100Serializer | 100000 | 65,503.11 μs | 765.326 μs | 715.886 μs | 15875.0000 | 97,656 KB | | |||
## JT808终端通讯协议消息对照表 | |||
| 序号 | 消息ID | 完成情况 | 测试情况 | 消息体名称 |2019版本 | 2011版本 | |||
| :---: | :-----------: | :------: | :------: | :---------------------------- |:----------------------------:|:----------------------------:| | |||
| 1 | 0x0001 | √ | √ | 终端通用应答 | | |||
| 2 | 0x8001 | √ | √ | 平台通用应答 | | |||
| 3 | 0x0002 | √ | √ | 终端心跳 | | |||
| 4 | 0x8003 | √ | √ | 补传分包请求 | |被新增| | |||
| 5 | 0x0100 | √ | √ | 终端注册 |修改 |被修改 | |||
| 6 | 0x8100 | √ | √ | 终端注册应答 | | |||
| 7 | 0x0003 | √ | √ | 终端注销 | | |||
| 8 | 0x0102 | √ | √ | 终端鉴权 |修改| | |||
| 9 | 0x8103 | √ | √ | 设置终端参数 |修改且增加 |被修改 | |||
| 10 | 0x8104 | √ | √ | 查询终端参数 | | |||
| 11 | 0x0104 | √ | √ | 查询终端参数应答 | | |||
| 12 | 0x8105 | √ | √ | 终端控制 | | |||
| 13 | 0x8106 | √ | √ | 查询指定终端参数 | |被新增 | |||
| 14 | 0x8107 | √ | 消息体为空| 查询终端属性 | |被新增 | |||
| 15 | 0x0107 | √ | √ | 查询终端属性应答 | |被新增 | |||
| 16 | 0x8108 | √ | √ | 下发终端升级包 | |被新增 | |||
| 17 | 0x0108 | √ | √ | 终端升级结果通知 | |被新增 | |||
| 18 | 0x0200 | √ | √ | 位置信息汇报 |增加附加信息 |被修改 | |||
| 19 | 0x8201 | √ | √ | 位置信息查询 | | |||
| 20 | 0x0201 | √ | √ | 位置信息查询应答 | | |||
| 21 | 0x8202 | √ | √ | 临时位置跟踪控制 | | |||
| 22 | 0x8203 | √ | √ | 人工确认报警消息 | |被新增 | |||
| 23 | 0x8300 | √ | √ | 文本信息下发 |修改 |被修改 | |||
| 24 | 0x8301 | √ | √ | 事件设置 |删除| | |||
| 25 | 0x0301 | √ | √ | 事件报告 |删除| | |||
| 26 | 0x8302 | √ | √ | 提问下发 |删除| | |||
| 27 | 0x0302 | √ | √ | 提问应答 |删除| | |||
| 28 | 0x8303 | √ | √ | 信息点播菜单设置 |删除| | |||
| 29 | 0x0303 | √ | √ | 信息点播/取消 |删除| | |||
| 30 | 0x8304 | √ | √ | 信息服务 |删除| | |||
| 31 | 0x8400 | √ | √ | 电话回拨 | | |||
| 32 | 0x8401 | √ | √ | 设置电话本 | | |||
| 33 | 0x8500 | √ | √ | 车辆控制 |修改| | |||
| 34 | 0x0500 | √ | √ | 车辆控制应答 | | |||
| 35 | 0x8600 | √ | √ | 设置圆形区域 |修改 |被修改 | |||
| 36 | 0x8601 | √ | √ | 删除圆形区域 | | |||
| 37 | 0x8602 | √ | √ | 设置矩形区域 |修改| | |||
| 38 | 0x8603 | √ | √ | 删除矩形区域 | | |||
| 39 | 0x8604 | √ | √ | 设置多边形区域 |修改| | |||
| 40 | 0x8605 | √ | √ | 删除多边形区域 | | |||
| 41 | 0x8606 | √ | √ | 设置路线 |修改| | |||
| 42 | 0x8607 | √ | √ | 删除路线 | | |||
| 43 | 0x8700 | √ | √ | 行驶记录仪数据采集命令 | |被修改 | |||
| 44 | 0x0700 | √ | √ | 行驶记录仪数据上传 | | |||
| 45 | 0x8701 | √ | √ | 行驶记录仪参数下传命令 | |被修改 | |||
| 46 | 0x0701 | √ | √ | 电子运单上报 | | |||
| 47 | 0x0702 | √ | √ | 驾驶员身份信息采集上报 |修改 |被修改 | |||
| 48 | 0x8702 | √ | 消息体为空| 上报驾驶员身份信息请求 | |被新增 | |||
| 49 | 0x0704 | √ | √ | 定位数据批量上传 |修改| |被新增 | |||
| 50 | 0x0705 | √ | √ | CAN 总线数据上传 |修改| |被新增 | |||
| 51 | 0x0800 | √ | √ | 多媒体事件信息上传 | |被修改 | |||
| 52 | 0x0801 | √ | √ | 多媒体数据上传 |修改 |被修改 | |||
| 53 | 0x8800 | √ | √ | 多媒体数据上传应答 | |被修改 | |||
| 54 | 0x8801 | √ | √ | 摄像头立即拍摄命令 |修改| | |||
| 55 | 0x0805 | √ | √ | 摄像头立即拍摄命令应答 |修改| |被新增 | |||
| 56 | 0x8802 | √ | √ | 存储多媒体数据检索 | | |||
| 57 | 0x0802 | √ | √ | 存储多媒体数据检索应答 | |被修改 | |||
| 58 | 0x8803 | √ | √ | 存储多媒体数据上传 | | |||
| 59 | 0x8804 | √ | √ | 录音开始命令 | | |||
| 60 | 0x8805 | √ | √ | 单条存储多媒体数据检索上传命令 |修改| |被新增 | |||
| 61 | 0x8900 | √ | √ | 数据下行透传 |修改 |被修改 | |||
| 62 | 0x0900 | √ | √ | 数据上行透传 |修改 |被修改 | |||
| 63 | 0x0901 | √ | √ | 数据压缩上报 | | |||
| 64 | 0x8A00 | √ | √ | 平台 RSA 公钥 | | |||
| 65 | 0x0A00 | √ | √ | 终端 RSA 公钥 | | |||
| 66 | 0x8F00~0x8FFF | 保留 | 保留 | 平台下行消息保留 | | |||
| 67 | 0x0F00~0x0FFF | 保留 | 保留 | 终端上行消息保留 | | |||
| 68 | 0x0004 | √ | √ | 查询服务器时间请求 |新增| | |||
| 69 | 0x8004 | √ | √ | 查询服务器时间应答 |新增| | |||
| 70 | 0x0005 | √ | √ | 终端补传分包请求 |新增| | |||
| 71 | 0x8204 | √ | √ | 链路检测 |新增| | |||
| 72 | 0x8608 | √ | √ | 查询区域或线路数据 |新增| | |||
| 73 | 0x0608 | √ | √ | 查询区域或线路数据应答 |新增| | |||
| 74 | 0xE000~0xEFFF | 保留 | 保留 | 厂商自定义上行消息 |新增| | |||
| 75 | 0xF000~0xFFFF | 保留 | 保留 | 厂商自定义下行消息 |新增| | |||
## JT1078扩展JT808议消息对照表 | |||
| 序号 | 消息ID | 完成情况 | 测试情况 | 消息体名称 | | |||
| :---: | :-----------: | :------: | :------: | :---------------------------- | | |||
| 1 | 0x0200_0x14 | √ | √ | 视频相关报警 | | |||
| 2 | 0x0200_0x15 | √ | √ | 视频信号丢失报警状态 | | |||
| 3 | 0x0200_0x16 | √ | √ | 视频信号遮挡报警状态 | | |||
| 4 | 0x0200_0x17 | √ | √ | 存储器故障报警状态 | | |||
| 5 | 0x0200_0x18 | √ | √ | 异常驾驶行为报警详细描述 | | |||
| 6 | 0x8103_0x0075 | √ | √ | 音视频参数设置 | | |||
| 7 | 0x8103_0x0076 | √ | √ | 音视频通道列表设置 | | |||
| 8 | 0x8103_0x0077 | √ | √ | 单独视频通道参数设置 | | |||
| 9 | 0x8103_0x0079 | √ | √ | 特殊报警录像参数设置 | | |||
| 10 | 0x8103_0x007A | √ | √ | 视频相关报警屏蔽字 | | |||
| 11 | 0x8103_0x007B | √ | √ | 图像分析报警参数设置 | | |||
| 12 | 0x8103_0x007C | √ | √ | 终端休眠模式唤醒设置 | | |||
| 13 | 0x1003 | √ | √ | 终端上传音视频属性 | | |||
| 14 | 0x1005 | √ | √ | 终端上传乘客流量 | | |||
| 15 | 0x1205 | √ | √ | 终端上传音视频资源列表 | | |||
| 16 | 0x1206 | √ | √ | 文件上传完成通知 | | |||
| 17 | 0x9003 | √ | √ | 查询终端音视频属性 | | |||
| 18 | 0x9101 | √ | √ | 实时音视频传输请求 | | |||
| 19 | 0x9102 | √ | √ | 音视频实时传输控制 | | |||
| 20 | 0x9105 | √ | √ | 实时音视频传输状态通知 | | |||
| 21 | 0x9201 | √ | √ | 平台下发远程录像回放请求 | | |||
| 22 | 0x9202 | √ | √ | 平台下发远程录像回放控制 | | |||
| 23 | 0x9205 | √ | √ | 查询资源列表 | | |||
| 24 | 0x9206 | √ | √ | 文件上传指令 | | |||
| 25 | 0x9207 | √ | √ | 文件上传控制 | | |||
| 26 | 0x9301 | √ | √ | 云台旋转 | | |||
| 27 | 0x9302 | √ | √ | 云台调整焦距控制 | | |||
| 28 | 0x9303 | √ | √ | 云台调整光圈控制 | | |||
| 29 | 0x9304 | √ | √ | 云台雨刷控制 | | |||
| 30 | 0x9305 | √ | √ | 红外补光控制 | | |||
| 31 | 0x9306 | √ | √ | 云台变倍控制 | | |||
## 使用方法 | |||
```csharp | |||
IServiceCollection serviceDescriptors1 = new ServiceCollection(); | |||
serviceDescriptors1.AddJT808Configure() | |||
.AddJT1078Configure(); | |||
``` | |||
## 主动安全(苏标)扩展JT808协议消息对照表 | |||
| 序号 | 消息ID | 完成情况 | 测试情况 | 消息体名称 | | |||
| :---: | :---: | :---: | :---: | :---| | |||
| 1 | 0x1210 | √ | √ | 报警附件信息消息 | | |||
| 2 | 0x1211 | √ | √ | 文件信息上传 | | |||
| 3 | 0x1212 | √ | √ | 文件上传完成消息 | | |||
| 4 | 0x9208 | √ | √ | 报警附件上传指令 | | |||
| 5 | 0x9212 | √ | √ | 文件上传完成消息应答 | | |||
| 6 | 0x0200_0x64 | √ | √ | 高级驾驶辅助系统报警信息 | | |||
| 7 | 0x0200_0x65 | √ | √ | 驾驶员状态监测系统报警信息 | | |||
| 8 | 0x0200_0x66 | √ | √ | 胎压监测系统报警信息 | | |||
| 9 | 0x0200_0x67 | √ | √ | 盲区监测系统报警信息 | | |||
| 10 | 0x8103_0xF364 | √ | √ | 高级驾驶辅助系统参数 | | |||
| 11 | 0x8103_0xF365 | √ | √ | 驾驶员状态监测系统参数 | | |||
| 12 | 0x8103_0xF366 | √ | √ | 胎压监测系统参数 | | |||
| 13 | 0x8103_0xF367 | √ | √ | 盲区监测系统参数 | | |||
| 14 | 0x0900 | √ | √ | 上传基本信息 | | |||
| 15 | 0x0900_0xF7 | √ | √ | 外设工作状态 | | |||
| 16 | 0x0900_0xF8 | √ | √ | 外设系统信息 | | |||
| 17 | 0x8900 | √ | √ | 查询基本信息 | | |||
| 18 | 0x8900_0xF7 | √ | √ | 外设工作状态 | | |||
| 19 | 0x8900_0xF8 | √ | √ | 外设系统信息 | | |||
## 使用方法 | |||
```csharp | |||
IServiceCollection serviceDescriptors1 = new ServiceCollection(); | |||
serviceDescriptors1.AddJT808Configure() | |||
.AddSuBiaoConfigure(); | |||
``` | |||
## 主动安全(粤标)扩展JT808协议消息对照表 | |||
> 注意:基于JT/T808 2019版本 | |||
| 序号 | 消息ID | 完成情况 | 测试情况 | 消息体名称 | | |||
| :---: | :---: | :---: | :---: | :---| | |||
| 1 | 0x1210 | √ | √ | 报警附件信息消息 | | |||
| 2 | 0x1211 | √ | √ | 文件信息上传 | | |||
| 3 | 0x1212 | √ | √ | 文件上传完成消息 | | |||
| 4 | 0x9208 | √ | √ | 报警附件上传指令 | | |||
| 5 | 0x9212 | √ | √ | 文件上传完成消息应答 | | |||
| 6 | 0x1FC4 | √ | √ | 终端升级进度上报 | | |||
| 7 | 0x0200_0x64 | √ | √ | 高级驾驶辅助系统报警信息 | | |||
| 8 | 0x0200_0x65 | √ | √ | 驾驶员状态监测系统报警信息 | | |||
| 9 | 0x0200_0x66 | √ | √ | 胎压监测系统报警信息 | | |||
| 10 | 0x0200_0x67 | √ | √ | 盲区监测系统报警信息 | | |||
| 11 | 0x8103_0xF364 | √ | √ | 高级驾驶辅助系统参数 | | |||
| 12 | 0x8103_0xF365 | √ | √ | 驾驶员状态监测系统参数 | | |||
| 13 | 0x8103_0xF366 | √ | √ | 胎压监测系统参数 | | |||
| 14 | 0x8103_0xF367 | √ | √ | 盲区监测系统参数 | | |||
| 15 | 0x8103_0xF370 | √ | √ | 智能视频协议版本信息 | | |||
| 16 | 0x0900 | √ | √ | 上传基本信息 | | |||
| 17 | 0x0900_0xF7 | √ | √ | 外设工作状态 | | |||
| 18 | 0x0900_0xF8 | √ | √ | 外设系统信息 | | |||
| 19 | 0x8900 | √ | √ | 查询基本信息 | | |||
| 20 | 0x8900_0xF7 | √ | √ | 外设工作状态 | | |||
| 21 | 0x8900_0xF8 | √ | √ | 外设系统信息 | | |||
## 使用方法 | |||
```csharp | |||
IServiceCollection serviceDescriptors1 = new ServiceCollection(); | |||
serviceDescriptors1.AddJT808Configure() | |||
.AddYueBiaoConfigure(); | |||
``` |
@@ -1,8 +1,12 @@ | |||
# JT808协议 | |||
[](https://github.com/SmallChi/JT808/blob/master/LICENSE) | |||
<p> | |||
<span>中文</span> | | |||
<a href="README.en.md">English</a> | |||
</p> | |||
## 前提条件 | |||
1. 掌握进制转换:二进制转十六进制; | |||
@@ -60,7 +64,7 @@ JT808Package jT808Package = new JT808Package(); | |||
jT808Package.Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.位置信息汇报, | |||
MsgId = Enums.JT808MsgId._0x0200, | |||
ManualMsgNum = 126, | |||
TerminalPhoneNo = "123456789012" | |||
}; | |||
@@ -31,8 +31,8 @@ namespace JT808.Protocol.Benchmark | |||
{ | |||
JT808Serializer = new JT808Serializer(); | |||
bytes0x0200 = "7E0200005C11223344556622B8000000010000000200BA7F0E07E4F11C0028003C00001807151010100104000000640202003703020038040200011105010000000112060100000001011307000000020022012504000000172A0200F42B04000000F2300102310105167E".ToHexBytes(); | |||
MsgId0x0200 = Enums.JT808MsgId.位置信息汇报.ToUInt16Value(); | |||
MsgId0x0100 = Enums.JT808MsgId.终端注册.ToUInt16Value(); | |||
MsgId0x0200 = Enums.JT808MsgId._0x0200.ToUInt16Value(); | |||
MsgId0x0100 = Enums.JT808MsgId._0x0100.ToUInt16Value(); | |||
bytes0x0100 = "7E 01 00 00 2D 00 01 23 45 67 89 00 0A 00 28 00 32 31 32 33 34 30 73 6D 61 6C 6C 63 68 69 31 32 33 30 30 30 30 30 30 30 30 30 43 48 49 31 32 33 30 01 D4 C1 41 31 32 33 34 35 BA 7E".ToHexBytes(); | |||
} | |||
@@ -31,7 +31,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = JT808MsgId.设置终端参数.ToUInt16Value(), | |||
MsgId = JT808MsgId._0x8103.ToUInt16Value(), | |||
ManualMsgNum = 10, | |||
TerminalPhoneNo = "123456789", | |||
}, | |||
@@ -164,7 +164,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test | |||
{ | |||
byte[] bytes = "7E8103009C000123456789000A070000007515030500040700000006080A00090C0000000B000201000000761B02010303020001070604050B0A08090F0E0C0D1312101117161415000000772B0201030500040700000006080A00090C0000000B000201030500040700000006080A00090C0000000B000200000079030302010000007A04000000010000007B0201020000007C140103020A00230012004500340067005600890078587E".ToHexBytes(); | |||
JT808Package jT808_0X8103 = JT808Serializer.Deserialize(bytes); | |||
Assert.Equal(JT808MsgId.设置终端参数.ToUInt16Value(), jT808_0X8103.Header.MsgId); | |||
Assert.Equal(JT808MsgId._0x8103.ToUInt16Value(), jT808_0X8103.Header.MsgId); | |||
Assert.Equal(10, jT808_0X8103.Header.MsgNum); | |||
Assert.Equal("123456789", jT808_0X8103.Header.TerminalPhoneNo); | |||
@@ -15,7 +15,7 @@ namespace JT808.Protocol.Test.Extensions | |||
[Fact] | |||
public void CreatePackage() | |||
{ | |||
var package= JT808MsgId.终端心跳.Create_终端心跳("123456789", new Protocol.MessageBody.JT808_0x0002 { | |||
var package= JT808MsgId._0x0002.Create_终端心跳("123456789", new Protocol.MessageBody.JT808_0x0002 { | |||
}); | |||
} | |||
@@ -32,7 +32,7 @@ namespace JT808.Protocol.Test | |||
}; | |||
jT808HeaderProperty.MessageBodyProperty=new JT808HeaderMessageBodyProperty(5); | |||
jT808HeaderProperty.MsgNum = 135; | |||
jT808HeaderProperty.MsgId = JT808MsgId.终端鉴权.ToUInt16Value(); | |||
jT808HeaderProperty.MsgId = JT808MsgId._0x0102.ToUInt16Value(); | |||
var hex = JT808Serializer.Serialize(jT808HeaderProperty).ToHexString(); | |||
Assert.Equal("01 02 00 05 01 38 12 34 56 78 00 87".Replace(" ", ""), hex); | |||
@@ -47,7 +47,7 @@ namespace JT808.Protocol.Test | |||
Assert.Equal(135, jT808Header.MsgNum); | |||
Assert.Equal("13812345678", jT808Header.TerminalPhoneNo); | |||
Assert.False(jT808Header.MessageBodyProperty.IsPackage); | |||
Assert.Equal(JT808MsgId.终端鉴权.ToValue(), jT808Header.MsgId); | |||
Assert.Equal(JT808MsgId._0x0102.ToValue(), jT808Header.MsgId); | |||
Assert.Equal(5, jT808Header.MessageBodyProperty.DataLength); | |||
} | |||
@@ -58,7 +58,7 @@ namespace JT808.Protocol.Test | |||
jT808HeaderProperty.TerminalPhoneNo = "13812345678"; | |||
jT808HeaderProperty.MessageBodyProperty=new JT808HeaderMessageBodyProperty(5); | |||
jT808HeaderProperty.MsgNum = 135; | |||
jT808HeaderProperty.MsgId = JT808MsgId.终端鉴权.ToUInt16Value(); | |||
jT808HeaderProperty.MsgId = JT808MsgId._0x0102.ToUInt16Value(); | |||
//"01 02 00 05 01 38 12 34 56 78 00 87" | |||
var hex = JT808Serializer.Serialize(jT808HeaderProperty).ToHexString(); | |||
Assert.Equal("010200050138123456780087", hex); | |||
@@ -73,7 +73,7 @@ namespace JT808.Protocol.Test | |||
Assert.Equal(135, jT808Header.MsgNum); | |||
Assert.Equal("13812345678", jT808Header.TerminalPhoneNo); | |||
Assert.False(jT808Header.MessageBodyProperty.IsPackage); | |||
Assert.Equal(JT808MsgId.终端鉴权.ToValue(), jT808Header.MsgId); | |||
Assert.Equal(JT808MsgId._0x0102.ToValue(), jT808Header.MsgId); | |||
Assert.Equal(5, jT808Header.MessageBodyProperty.DataLength); | |||
} | |||
@@ -91,7 +91,7 @@ namespace JT808.Protocol.Test | |||
jT808HeaderMessageBodyProperty.VersionFlag = true; | |||
jT808HeaderProperty.MessageBodyProperty = jT808HeaderMessageBodyProperty; | |||
jT808HeaderProperty.MsgNum = 135; | |||
jT808HeaderProperty.MsgId = JT808MsgId.终端鉴权.ToUInt16Value(); | |||
jT808HeaderProperty.MsgId = JT808MsgId._0x0102.ToUInt16Value(); | |||
jT808HeaderProperty.ProtocolVersion = 2; | |||
var hex = JT808Serializer.Serialize(jT808HeaderProperty).ToHexString(); | |||
Assert.Equal("010264FF0200000000013812345678008700000000", hex); | |||
@@ -107,7 +107,7 @@ namespace JT808.Protocol.Test | |||
Assert.Equal("13812345678", jT808Header.TerminalPhoneNo); | |||
Assert.True(jT808Header.MessageBodyProperty.IsPackage); | |||
Assert.True(jT808Header.MessageBodyProperty.VersionFlag); | |||
Assert.Equal(JT808MsgId.终端鉴权.ToValue(), jT808Header.MsgId); | |||
Assert.Equal(JT808MsgId._0x0102.ToValue(), jT808Header.MsgId); | |||
Assert.Equal(255, jT808Header.MessageBodyProperty.DataLength); | |||
} | |||
} | |||
@@ -38,14 +38,14 @@ namespace JT808.Protocol.Test | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.终端通用应答.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x0001.ToUInt16Value(), | |||
MsgNum = 1203, | |||
TerminalPhoneNo = "012345678900", | |||
MessageBodyProperty=new JT808HeaderMessageBodyProperty() | |||
}, | |||
Bodies = new JT808_0x0001 | |||
{ | |||
ReplyMsgId = Enums.JT808MsgId.终端心跳.ToUInt16Value(), | |||
ReplyMsgId = Enums.JT808MsgId._0x0002.ToUInt16Value(), | |||
ReplyMsgNum = 1000, | |||
TerminalResult = Enums.JT808TerminalResult.Success | |||
} | |||
@@ -15,13 +15,13 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.终端通用应答.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x0001.ToUInt16Value(), | |||
ManualMsgNum = 1203, | |||
TerminalPhoneNo = "012345678900", | |||
}, | |||
Bodies = new JT808_0x0001 | |||
{ | |||
ReplyMsgId = Enums.JT808MsgId.终端心跳.ToUInt16Value(), | |||
ReplyMsgId = Enums.JT808MsgId._0x0002.ToUInt16Value(), | |||
ReplyMsgNum = 1000, | |||
TerminalResult = Enums.JT808TerminalResult.Success | |||
} | |||
@@ -36,11 +36,11 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
var bytes = "7E 00 01 00 05 01 23 45 67 89 00 04 B3 03 E8 00 02 00 D3 7E".ToHexBytes(); | |||
JT808Package jT808Package = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(Enums.JT808MsgId.终端通用应答.ToValue(), jT808Package.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x0001.ToValue(), jT808Package.Header.MsgId); | |||
Assert.Equal(1203, jT808Package.Header.MsgNum); | |||
JT808_0x0001 JT808Bodies = (JT808_0x0001)jT808Package.Bodies; | |||
Assert.Equal(Enums.JT808MsgId.终端心跳.ToUInt16Value(), JT808Bodies.ReplyMsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x0002.ToUInt16Value(), JT808Bodies.ReplyMsgId); | |||
Assert.Equal(1000, JT808Bodies.ReplyMsgNum); | |||
Assert.Equal(Enums.JT808TerminalResult.Success, JT808Bodies.TerminalResult); | |||
} | |||
@@ -17,7 +17,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.终端心跳.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x0002.ToUInt16Value(), | |||
ManualMsgNum = 10, | |||
TerminalPhoneNo = "12345678900", | |||
} | |||
@@ -32,7 +32,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
var bytes = "7E 00 02 00 00 01 23 45 67 89 00 00 0A 81 7E".ToHexBytes(); | |||
JT808Package jT808Package = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(Enums.JT808MsgId.终端心跳.ToValue(), jT808Package.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x0002.ToValue(), jT808Package.Header.MsgId); | |||
Assert.Equal(10, jT808Package.Header.MsgNum); | |||
Assert.Equal("12345678900", jT808Package.Header.TerminalPhoneNo); | |||
Assert.Null(jT808Package.Bodies); | |||
@@ -43,7 +43,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
var bytes = "7E 00 02 00 00 04 00 21 67 92 87 00 2B 7D 02 7E".ToHexBytes(); | |||
JT808Package jT808Package = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(Enums.JT808MsgId.终端心跳.ToValue(), jT808Package.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x0002.ToValue(), jT808Package.Header.MsgId); | |||
Assert.Equal(43, jT808Package.Header.MsgNum); | |||
Assert.Equal("40021679287", jT808Package.Header.TerminalPhoneNo); | |||
Assert.Null(jT808Package.Bodies); | |||
@@ -56,7 +56,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.终端心跳.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x0002.ToUInt16Value(), | |||
ManualMsgNum = 10, | |||
TerminalPhoneNo = "12345678900", | |||
}, | |||
@@ -13,7 +13,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.终端注销.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x0003.ToUInt16Value(), | |||
ManualMsgNum = 1, | |||
TerminalPhoneNo = "12345678900", | |||
} | |||
@@ -28,7 +28,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
var bytes = "7E 00 03 00 00 01 23 45 67 89 00 00 01 8B 7E".ToHexBytes(); | |||
JT808Package jT808Package = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(Enums.JT808MsgId.终端注销.ToUInt16Value(), jT808Package.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x0003.ToUInt16Value(), jT808Package.Header.MsgId); | |||
Assert.Equal(1, jT808Package.Header.MsgNum); | |||
Assert.Equal("12345678900", jT808Package.Header.TerminalPhoneNo); | |||
Assert.Null(jT808Package.Bodies); | |||
@@ -16,7 +16,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.终端注册.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x0100.ToUInt16Value(), | |||
ManualMsgNum = 10, | |||
TerminalPhoneNo = "123456789", | |||
}, | |||
@@ -40,7 +40,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
byte[] bytes = "7E0100002D000123456789000A002800323132333400736D616C6C6368693132330000000000000000004348493132330001D4C14131323334358A7E".ToHexBytes(); | |||
JT808Package jT808_0X0100 = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(Enums.JT808MsgId.终端注册.ToUInt16Value(), jT808_0X0100.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x0100.ToUInt16Value(), jT808_0X0100.Header.MsgId); | |||
Assert.Equal(10, jT808_0X0100.Header.MsgNum); | |||
Assert.Equal("123456789", jT808_0X0100.Header.TerminalPhoneNo); | |||
@@ -61,7 +61,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.终端注册.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x0100.ToUInt16Value(), | |||
ManualMsgNum = 10, | |||
TerminalPhoneNo = "123456789", | |||
ProtocolVersion=1, | |||
@@ -88,7 +88,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
byte[] bytes = "7E010040540100000000000123456789000A002800323132333400000000000000736D616C6C6368693132330000000000000000000000000000000000000043484931323300000000000000000000000000000000000000000000000001D4C1413132333435B27E".ToHexBytes(); | |||
JT808Package jT808_0X0100 = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(JT808MsgId.终端注册.ToUInt16Value(), jT808_0X0100.Header.MsgId); | |||
Assert.Equal(JT808MsgId._0x0100.ToUInt16Value(), jT808_0X0100.Header.MsgId); | |||
Assert.Equal(1, jT808_0X0100.Header.ProtocolVersion); | |||
Assert.Equal(JT808Version.JTT2019, jT808_0X0100.Version); | |||
Assert.True(jT808_0X0100.Header.MessageBodyProperty.VersionFlag); | |||
@@ -114,7 +114,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
[Fact] | |||
public void Test2019_4_1() | |||
{ | |||
var package = JT808MsgId.终端注册.Create2019("22222222222", new JT808_0x0100() | |||
var package = JT808MsgId._0x0100.Create2019("22222222222", new JT808_0x0100() | |||
{ | |||
PlateNo = "粤A12346", | |||
PlateColor = 2, | |||
@@ -161,7 +161,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.终端注册.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x0100.ToUInt16Value(), | |||
ManualMsgNum = 10, | |||
TerminalPhoneNo = "123456789", | |||
}, | |||
@@ -185,7 +185,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
byte[] bytes = "7E01000021000123456789000A002800323132333400746B3132333435004348493132330001D4C1413132333435857E".ToHexBytes(); | |||
JT808Package jT808_0X0100 = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(JT808MsgId.终端注册.ToUInt16Value(), jT808_0X0100.Header.MsgId); | |||
Assert.Equal(JT808MsgId._0x0100.ToUInt16Value(), jT808_0X0100.Header.MsgId); | |||
Assert.Equal(1, jT808_0X0100.Header.ProtocolVersion); | |||
Assert.Equal(10, jT808_0X0100.Header.MsgNum); | |||
Assert.Equal("123456789", jT808_0X0100.Header.TerminalPhoneNo); | |||
@@ -72,7 +72,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.终端鉴权.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x0102.ToUInt16Value(), | |||
ManualMsgNum = 12345, | |||
TerminalPhoneNo = "12345678900", | |||
}, | |||
@@ -90,7 +90,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
byte[] bodys = "7E 01 02 00 09 01 23 45 67 89 00 30 39 34 35 36 31 32 31 31 31 31 BE 7E".ToHexBytes(); | |||
JT808Package jT808LoginRequest = JT808Serializer.Deserialize<JT808Package>(bodys); | |||
Assert.Equal(Enums.JT808MsgId.终端鉴权.ToUInt16Value(), jT808LoginRequest.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x0102.ToUInt16Value(), jT808LoginRequest.Header.MsgId); | |||
Assert.Equal(12345, jT808LoginRequest.Header.MsgNum); | |||
Assert.Equal("12345678900", jT808LoginRequest.Header.TerminalPhoneNo); | |||
@@ -15,7 +15,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.查询终端参数应答.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x0104.ToUInt16Value(), | |||
ManualMsgNum = 10, | |||
TerminalPhoneNo = "123456789", | |||
}, | |||
@@ -41,7 +41,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
byte[] bytes = "7E0104000C000123456789000A00140100000001040000000A907E".ToHexBytes(); | |||
JT808Package jT808_0X8104 = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(Enums.JT808MsgId.查询终端参数应答.ToUInt16Value(), jT808_0X8104.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x0104.ToUInt16Value(), jT808_0X8104.Header.MsgId); | |||
Assert.Equal(10, jT808_0X8104.Header.MsgNum); | |||
Assert.Equal("123456789", jT808_0X8104.Header.TerminalPhoneNo); | |||
@@ -64,7 +64,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.查询终端参数应答.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x0104.ToUInt16Value(), | |||
ManualMsgNum = 10, | |||
TerminalPhoneNo = "123456789", | |||
}, | |||
@@ -118,7 +118,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
byte[] bytes = "7E0104001E000123456789000A00140200000001040000000A000000130D7777772E62616964752E636F6DF27E".ToHexBytes(); | |||
JT808Package jT808_0X8104 = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(Enums.JT808MsgId.查询终端参数应答.ToUInt16Value(), jT808_0X8104.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x0104.ToUInt16Value(), jT808_0X8104.Header.MsgId); | |||
Assert.Equal(10, jT808_0X8104.Header.MsgNum); | |||
Assert.Equal("123456789", jT808_0X8104.Header.TerminalPhoneNo); | |||
@@ -148,7 +148,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
byte[] bytes = "7E010400C604052458039503D800020100000077BE09010101002D1400000064000500141400000320001F020101002D0F00000064000500191900000840001F030101002D0F00000064000500191900000840001F040101002D0F00000064000500191900000840001F050101002D0F00000064010500191900000840001F060101002D0F00000064000500191900000840001F070101002D0F000000640103001919000004CE001F080101002D0F00000064000500191900000840001F090101000F0F000000C8010500191900000400001F127E".ToHexBytes(); | |||
JT808Package jT808_0X8104 = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(Enums.JT808MsgId.查询终端参数应答.ToUInt16Value(), jT808_0X8104.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x0104.ToUInt16Value(), jT808_0X8104.Header.MsgId); | |||
Assert.Equal(0x03d8, jT808_0X8104.Header.MsgNum); | |||
Assert.Equal("40524580395", jT808_0X8104.Header.TerminalPhoneNo); | |||
@@ -14,7 +14,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.查询终端属性应答.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x0107.ToUInt16Value(), | |||
ManualMsgNum = 8888, | |||
TerminalPhoneNo = "112233445566", | |||
} | |||
@@ -47,7 +47,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
JT808_0x0107 jT808_0X0107 = (JT808_0x0107)jT808Package.Bodies; | |||
Assert.Equal(8888, jT808Package.Header.MsgNum); | |||
Assert.Equal("112233445566", jT808Package.Header.TerminalPhoneNo); | |||
Assert.Equal(Enums.JT808MsgId.查询终端属性应答.ToUInt16Value(), jT808Package.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x0107.ToUInt16Value(), jT808Package.Header.MsgId); | |||
Assert.Equal(5, jT808_0X0107.TerminalType); | |||
Assert.Equal("10601", jT808_0X0107.MakerId); | |||
Assert.Equal("10455545955103", jT808_0X0107.TerminalModel); | |||
@@ -69,7 +69,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
JT808Package jT808Package = new JT808Package(); | |||
jT808Package.Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.位置信息汇报.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x0200.ToUInt16Value(), | |||
ManualMsgNum = (ushort)i, | |||
TerminalPhoneNo = "1122334455"+i.ToString(), | |||
}; | |||
@@ -228,7 +228,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
JT808Package jT808Package = new JT808Package(); | |||
jT808Package.Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.位置信息汇报.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x0200.ToUInt16Value(), | |||
MsgNum = 8888, | |||
TerminalPhoneNo = "112233445566", | |||
//MessageBodyProperty=new JT808MessageBodyProperty(38), | |||
@@ -289,7 +289,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
byte[] bytes = "7E 02 00 00 26 11 22 33 44 55 66 22 B8 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 07 15 10 10 10 01 04 00 00 00 64 02 02 00 37 57 7E".ToHexBytes(); | |||
var jT808Package = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(Enums.JT808MsgId.位置信息汇报.ToValue(), jT808Package.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x0200.ToValue(), jT808Package.Header.MsgId); | |||
Assert.Equal(38, jT808Package.Header.MessageBodyProperty.DataLength); | |||
Assert.Equal(8888, jT808Package.Header.MsgNum); | |||
@@ -499,7 +499,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
JT808Package jT808Package = new JT808Package(); | |||
jT808Package.Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.位置信息汇报.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x0200.ToUInt16Value(), | |||
ManualMsgNum = 8888, | |||
TerminalPhoneNo = "112233445566", | |||
}; | |||
@@ -16,7 +16,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.位置信息查询应答.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x0201.ToUInt16Value(), | |||
ManualMsgNum = 8888, | |||
TerminalPhoneNo = "112233445566", | |||
} | |||
@@ -16,7 +16,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.车辆控制应答.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x0500.ToUInt16Value(), | |||
ManualMsgNum = 8888, | |||
TerminalPhoneNo = "112233445566", | |||
} | |||
@@ -55,7 +55,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
byte[] bytes = "7E0500002811223344556622B803E8000000010000000200BA7F0E07E4F11C0028003C000018071510101001040000006402020037B57E".ToHexBytes(); | |||
JT808Package jT808Package = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(Enums.JT808MsgId.车辆控制应答.ToUInt16Value(), jT808Package.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x0500.ToUInt16Value(), jT808Package.Header.MsgId); | |||
Assert.Equal(8888, jT808Package.Header.MsgNum); | |||
Assert.Equal("112233445566", jT808Package.Header.TerminalPhoneNo); | |||
JT808_0x0500 JT808Bodies = (JT808_0x0500)jT808Package.Bodies; | |||
@@ -21,7 +21,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.定位数据批量上传.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x0704.ToUInt16Value(), | |||
ManualMsgNum = 8888, | |||
TerminalPhoneNo = "112233445566", | |||
} | |||
@@ -128,7 +128,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
byte[] bytes = "7E 07 04 00 53 11 22 33 44 55 66 22 B8 00 02 00 00 26 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 07 15 10 10 10 01 04 00 00 00 64 02 02 00 37 00 26 00 00 00 02 00 00 00 01 00 CB 73 55 07 E6 A3 23 00 29 00 36 00 78 18 07 15 10 10 30 01 04 00 00 00 60 02 02 00 42 D4 7E".ToHexBytes(); | |||
JT808Package jT808Package = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(Enums.JT808MsgId.定位数据批量上传.ToUInt16Value(), jT808Package.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x0704.ToUInt16Value(), jT808Package.Header.MsgId); | |||
Assert.Equal(8888, jT808Package.Header.MsgNum); | |||
Assert.Equal("112233445566", jT808Package.Header.TerminalPhoneNo); | |||
@@ -26,7 +26,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.数据上行透传.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x0900.ToUInt16Value(), | |||
ManualMsgNum = 10, | |||
TerminalPhoneNo = "123456789", | |||
}, | |||
@@ -45,7 +45,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
byte[] bytes = "7E 09 00 00 09 00 01 23 45 67 89 00 0A 83 73 6D 61 6C 6C 63 68 69 1D 7E".ToHexBytes(); | |||
JT808Package jT808_0X0900 = JT808Serializer.Deserialize(bytes); | |||
Assert.Equal(Enums.JT808MsgId.数据上行透传.ToUInt16Value(), jT808_0X0900.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x0900.ToUInt16Value(), jT808_0X0900.Header.MsgId); | |||
Assert.Equal(10, jT808_0X0900.Header.MsgNum); | |||
Assert.Equal("123456789", jT808_0X0900.Header.TerminalPhoneNo); | |||
JT808_0x0900 JT808Bodies = (JT808_0x0900)jT808_0X0900.Bodies; | |||
@@ -14,13 +14,13 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.平台通用应答.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x8001.ToUInt16Value(), | |||
ManualMsgNum = 10, | |||
TerminalPhoneNo = "12345678900", | |||
}, | |||
Bodies = new JT808_0x8001 | |||
{ | |||
AckMsgId = Enums.JT808MsgId.位置信息汇报.ToUInt16Value(), | |||
AckMsgId = Enums.JT808MsgId._0x0200.ToUInt16Value(), | |||
JT808PlatformResult = Enums.JT808PlatformResult.succeed, | |||
MsgNum = 100 | |||
} | |||
@@ -44,12 +44,12 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
var bytes = "7E 80 01 00 05 01 23 45 67 89 00 00 0A 00 64 02 00 00 61 7E".ToHexBytes(); | |||
JT808Package jT808Package = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(Enums.JT808MsgId.平台通用应答.ToUInt16Value(), jT808Package.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x8001.ToUInt16Value(), jT808Package.Header.MsgId); | |||
Assert.Equal(10, jT808Package.Header.MsgNum); | |||
Assert.Equal("12345678900", jT808Package.Header.TerminalPhoneNo); | |||
JT808_0x8001 JT808Bodies = (JT808_0x8001)jT808Package.Bodies; | |||
Assert.Equal(Enums.JT808MsgId.位置信息汇报.ToUInt16Value(), JT808Bodies.AckMsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x0200.ToUInt16Value(), JT808Bodies.AckMsgId); | |||
Assert.Equal(100, JT808Bodies.MsgNum); | |||
Assert.Equal(Enums.JT808PlatformResult.succeed, JT808Bodies.JT808PlatformResult); | |||
} | |||
@@ -14,7 +14,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.终端注册应答.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x8100.ToUInt16Value(), | |||
ManualMsgNum = 10, | |||
TerminalPhoneNo = "012345678900", | |||
}, | |||
@@ -44,7 +44,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
var bytes = "7E 81 00 00 09 01 23 45 67 89 00 00 0A 00 64 00 31 32 33 34 35 36 68 7E".ToHexBytes(); | |||
JT808Package jT808Package = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(Enums.JT808MsgId.终端注册应答.ToUInt16Value(), jT808Package.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x8100.ToUInt16Value(), jT808Package.Header.MsgId); | |||
Assert.Equal(10, jT808Package.Header.MsgNum); | |||
Assert.Equal("12345678900", jT808Package.Header.TerminalPhoneNo); | |||
@@ -61,7 +61,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.终端注册应答.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x8100.ToUInt16Value(), | |||
ManualMsgNum = 10, | |||
TerminalPhoneNo = "12345678900", | |||
}, | |||
@@ -90,7 +90,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
var bytes = "7E 81 00 00 03 01 23 45 67 89 00 00 0A 00 64 04 61 7E".ToHexBytes(); | |||
JT808Package jT808Package = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(Enums.JT808MsgId.终端注册应答.ToUInt16Value(), jT808Package.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x8100.ToUInt16Value(), jT808Package.Header.MsgId); | |||
Assert.Equal(10, jT808Package.Header.MsgNum); | |||
Assert.Equal("12345678900", jT808Package.Header.TerminalPhoneNo); | |||
@@ -108,7 +108,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.终端注册应答.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x8100.ToUInt16Value(), | |||
ManualMsgNum = 10, | |||
TerminalPhoneNo = "12345678900", | |||
}, | |||
@@ -129,7 +129,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
var bytes = "7E 81 00 00 13 01 23 45 67 89 00 00 0A 00 64 00 7A 73 73 64 61 66 32 33 31 32 34 73 66 64 73 63 3B 7E".ToHexBytes(); | |||
JT808Package jT808Package = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(Enums.JT808MsgId.终端注册应答.ToUInt16Value(), jT808Package.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x8100.ToUInt16Value(), jT808Package.Header.MsgId); | |||
Assert.Equal(10, jT808Package.Header.MsgNum); | |||
Assert.Equal("12345678900", jT808Package.Header.TerminalPhoneNo); | |||
@@ -26,7 +26,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.设置终端参数.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x8103.ToUInt16Value(), | |||
ManualMsgNum = 10, | |||
TerminalPhoneNo = "123456789", | |||
}, | |||
@@ -62,7 +62,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
byte[] bytes = "7E8103000A000123456789000A0100000001040000000A057E".ToHexBytes(); | |||
JT808Package jT808_0X8103 = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(Enums.JT808MsgId.设置终端参数.ToUInt16Value(), jT808_0X8103.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x8103.ToUInt16Value(), jT808_0X8103.Header.MsgId); | |||
Assert.Equal(10, jT808_0X8103.Header.MsgNum); | |||
Assert.Equal("123456789", jT808_0X8103.Header.TerminalPhoneNo); | |||
@@ -13,7 +13,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.查询终端参数.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x8104.ToUInt16Value(), | |||
ManualMsgNum = 1, | |||
TerminalPhoneNo = "12345678900", | |||
} | |||
@@ -27,7 +27,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
var bytes = "7E8104000001234567890000010D7E".ToHexBytes(); | |||
JT808Package jT808Package = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(Enums.JT808MsgId.查询终端参数.ToUInt16Value(), jT808Package.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x8104.ToUInt16Value(), jT808Package.Header.MsgId); | |||
Assert.Equal(1, jT808Package.Header.MsgNum); | |||
Assert.Equal("12345678900", jT808Package.Header.TerminalPhoneNo); | |||
Assert.Null(jT808Package.Bodies); | |||
@@ -43,7 +43,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
//demo示例 | |||
var data2013 = JT808.Protocol.Enums.JT808MsgId.查询终端参数.Create("12345678900"); | |||
var data2013 = JT808.Protocol.Enums.JT808MsgId._0x8104.Create("12345678900"); | |||
var hex = JT808Serializer.Serialize(data2013, Enums.JT808Version.JTT2019); | |||
var jT808HeaderPackage1= JT808Serializer.HeaderDeserialize(hex, Enums.JT808Version.JTT2019); | |||
@@ -17,7 +17,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.终端控制.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x8105.ToUInt16Value(), | |||
ManualMsgNum = 1, | |||
TerminalPhoneNo = "12345678900", | |||
}, | |||
@@ -51,7 +51,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
var bytes = "7E81050048012345678900000101013B544B4E616D653B544B3B544B3132333B7777772E62616964752E636F6D3B22663B0CEA3B31323334353B636F64653B322E303B312E303B7777772E544B2E636F6D3B003C3BB27E".ToHexBytes(); | |||
JT808Package jT808Package = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(Enums.JT808MsgId.终端控制.ToUInt16Value(), jT808Package.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x8105.ToUInt16Value(), jT808Package.Header.MsgId); | |||
Assert.Equal(1, jT808Package.Header.MsgNum); | |||
Assert.Equal("12345678900", jT808Package.Header.TerminalPhoneNo); | |||
var JT808_0x8105 = (JT808_0x8105)jT808Package.Bodies; | |||
@@ -83,7 +83,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
var bytes = "7E81050048012345678900000101013B544B4E616D653B544B3B544B3132333B7777772E62616964752E636F6D3B22663B0CEA3B31323334353B636F64653B322E303B312E303B7777772E544B2E636F6D3B003C3BB27E".ToHexBytes(); | |||
JT808Package jT808Package = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(Enums.JT808MsgId.终端控制.ToUInt16Value(), jT808Package.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x8105.ToUInt16Value(), jT808Package.Header.MsgId); | |||
Assert.Equal(1, jT808Package.Header.MsgNum); | |||
Assert.Equal("12345678900", jT808Package.Header.TerminalPhoneNo); | |||
var JT808_0x8105 = (JT808_0x8105)jT808Package.Bodies; | |||
@@ -97,7 +97,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
JT808Package jT808Package = new JT808Package(); | |||
jT808Package.Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.终端控制.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x8105.ToUInt16Value(), | |||
ManualMsgNum = 1, | |||
TerminalPhoneNo = "12345678900", | |||
}; | |||
@@ -114,7 +114,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
var bytes = "7E81050001012345678900000105087E".ToHexBytes(); | |||
JT808Package jT808Package = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(Enums.JT808MsgId.终端控制.ToUInt16Value(), jT808Package.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x8105.ToUInt16Value(), jT808Package.Header.MsgId); | |||
Assert.Equal(1, jT808Package.Header.MsgNum); | |||
Assert.Equal("12345678900", jT808Package.Header.TerminalPhoneNo); | |||
@@ -15,7 +15,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.文本信息下发.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x8300.ToUInt16Value(), | |||
ManualMsgNum = 1, | |||
TerminalPhoneNo = "012345678900", | |||
} | |||
@@ -50,7 +50,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
Header = new JT808Header | |||
{ | |||
MessageBodyProperty = jT808HeaderMessageBodyProperty, | |||
MsgId = Enums.JT808MsgId.文本信息下发.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x8300.ToUInt16Value(), | |||
ManualMsgNum = 1, | |||
TerminalPhoneNo = "012345678900", | |||
} | |||
@@ -15,7 +15,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId= (ushort)JT808MsgId.多媒体数据上传应答, | |||
MsgId= (ushort)JT808MsgId._0x8800, | |||
TerminalPhoneNo="123456789", | |||
}, | |||
Bodies = new JT808_0x8800 | |||
@@ -53,7 +53,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = (ushort)JT808MsgId.多媒体数据上传应答, | |||
MsgId = (ushort)JT808MsgId._0x8800, | |||
TerminalPhoneNo = "123456789", | |||
}, | |||
Bodies = new JT808_0x8800 | |||
@@ -92,7 +92,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = (ushort)JT808MsgId.多媒体数据上传应答, | |||
MsgId = (ushort)JT808MsgId._0x8800, | |||
TerminalPhoneNo = "123456789", | |||
}, | |||
Bodies = new JT808_0x8800 | |||
@@ -26,7 +26,7 @@ namespace JT808.Protocol.Test.Simples | |||
jT808Package.Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.位置信息汇报.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x0200.ToUInt16Value(), | |||
ManualMsgNum = 126, | |||
TerminalPhoneNo = "123456789012" | |||
}; | |||
@@ -49,7 +49,7 @@ namespace JT808.Protocol.Test.Simples | |||
JT808Package jT808Package = new JT808Package(); | |||
jT808Package.Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.位置信息汇报.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x0200.ToUInt16Value(), | |||
ManualMsgNum = 1, | |||
TerminalPhoneNo = "1122334455", | |||
}; | |||
@@ -88,7 +88,7 @@ namespace JT808.Protocol.Test.Simples | |||
{ | |||
byte[] bytes = "7E0200006A0011223344550001000000010000000200BA7F0E07E4F11C0028003C000021083018171001040000006402020037DF42000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000677E".ToHexBytes(); | |||
var jT808Package = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(Enums.JT808MsgId.位置信息汇报.ToValue(), jT808Package.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x0200.ToValue(), jT808Package.Header.MsgId); | |||
Assert.Equal(1u, jT808Package.Header.MsgNum); | |||
Assert.Equal("1122334455", jT808Package.Header.TerminalPhoneNo); | |||
JT808_0x0200 jT808UploadLocationRequest = (JT808_0x0200)jT808Package.Bodies; | |||
@@ -113,7 +113,7 @@ namespace JT808.Protocol.Test.Simples | |||
JT808Package jT808Package = new JT808Package(); | |||
jT808Package.Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.位置信息汇报.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x0200.ToUInt16Value(), | |||
ManualMsgNum = 1, | |||
TerminalPhoneNo = "1122334455", | |||
}; | |||
@@ -152,7 +152,7 @@ namespace JT808.Protocol.Test.Simples | |||
{ | |||
byte[] bytes = "7E0200006C0011223344550001000000010000000200BA7F0E07E4F11C0028003C00002108301817100104000000640202003700DD0042000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000637E".ToHexBytes(); | |||
var jT808Package = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(Enums.JT808MsgId.位置信息汇报.ToValue(), jT808Package.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x0200.ToValue(), jT808Package.Header.MsgId); | |||
Assert.Equal(1u, jT808Package.Header.MsgNum); | |||
Assert.Equal("1122334455", jT808Package.Header.TerminalPhoneNo); | |||
JT808_0x0200 jT808UploadLocationRequest = (JT808_0x0200)jT808Package.Bodies; | |||
@@ -177,7 +177,7 @@ namespace JT808.Protocol.Test.Simples | |||
JT808Package jT808Package = new JT808Package(); | |||
jT808Package.Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.位置信息汇报.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x0200.ToUInt16Value(), | |||
ManualMsgNum = 1, | |||
TerminalPhoneNo = "1122334455", | |||
}; | |||
@@ -216,7 +216,7 @@ namespace JT808.Protocol.Test.Simples | |||
{ | |||
byte[] bytes = "7E0200006B0011223344550001000000010000000200BA7F0E07E4F11C0028003C00002108301817100104000000640202003700DE42000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000677E".ToHexBytes(); | |||
var jT808Package = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(Enums.JT808MsgId.位置信息汇报.ToValue(), jT808Package.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x0200.ToValue(), jT808Package.Header.MsgId); | |||
Assert.Equal(1u, jT808Package.Header.MsgNum); | |||
Assert.Equal("1122334455", jT808Package.Header.TerminalPhoneNo); | |||
JT808_0x0200 jT808UploadLocationRequest = (JT808_0x0200)jT808Package.Bodies; | |||
@@ -241,7 +241,7 @@ namespace JT808.Protocol.Test.Simples | |||
JT808Package jT808Package = new JT808Package(); | |||
jT808Package.Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.位置信息汇报.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x0200.ToUInt16Value(), | |||
ManualMsgNum = 1, | |||
TerminalPhoneNo = "1122334455", | |||
}; | |||
@@ -280,7 +280,7 @@ namespace JT808.Protocol.Test.Simples | |||
{ | |||
byte[] bytes = "7E0200012B0011223344550001000000010000000200BA7F0E07E4F11C0028003C000021053118171001040000006402020037620000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D57E".ToHexBytes(); | |||
var jT808Package = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(Enums.JT808MsgId.位置信息汇报.ToValue(), jT808Package.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x0200.ToValue(), jT808Package.Header.MsgId); | |||
Assert.Equal(1u, jT808Package.Header.MsgNum); | |||
Assert.Equal("1122334455", jT808Package.Header.TerminalPhoneNo); | |||
JT808_0x0200 jT808UploadLocationRequest = (JT808_0x0200)jT808Package.Bodies; | |||
@@ -305,7 +305,7 @@ namespace JT808.Protocol.Test.Simples | |||
JT808Package jT808Package = new JT808Package(); | |||
jT808Package.Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.位置信息汇报.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x0200.ToUInt16Value(), | |||
ManualMsgNum = 1, | |||
TerminalPhoneNo = "1122334455", | |||
}; | |||
@@ -365,7 +365,7 @@ namespace JT808.Protocol.Test.Simples | |||
{ | |||
byte[] bytes = "7E020002050011223344550001000000010000000200BA7F0E07E4F11C0028003C000021083018171001040000006402020037DF4200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DE4200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DD0042000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000620000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CA01FFCB02FFFECD02FFFE587E".ToHexBytes(); | |||
var jT808Package = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(Enums.JT808MsgId.位置信息汇报.ToValue(), jT808Package.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x0200.ToValue(), jT808Package.Header.MsgId); | |||
Assert.Equal(1u, jT808Package.Header.MsgNum); | |||
Assert.Equal("1122334455", jT808Package.Header.TerminalPhoneNo); | |||
JT808_0x0200 jT808UploadLocationRequest = (JT808_0x0200)jT808Package.Bodies; | |||
@@ -414,7 +414,7 @@ namespace JT808.Protocol.Test.Simples | |||
JT808Package jT808Package = new JT808Package(); | |||
jT808Package.Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.位置信息汇报.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x0200.ToUInt16Value(), | |||
ManualMsgNum = 1, | |||
TerminalPhoneNo = "1122334455", | |||
}; | |||
@@ -460,7 +460,7 @@ namespace JT808.Protocol.Test.Simples | |||
{ | |||
byte[] bytes = "7E020000710011223344550001000000010000000200BA7F0E07E4F11C0028003C000021083018171001040000006402020037DF42000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DF01FFCB02FFFE957E".ToHexBytes(); | |||
var jT808Package = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(Enums.JT808MsgId.位置信息汇报.ToValue(), jT808Package.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x0200.ToValue(), jT808Package.Header.MsgId); | |||
Assert.Equal(1u, jT808Package.Header.MsgNum); | |||
Assert.Equal("1122334455", jT808Package.Header.TerminalPhoneNo); | |||
JT808_0x0200 jT808UploadLocationRequest = (JT808_0x0200)jT808Package.Bodies; | |||
@@ -40,7 +40,7 @@ namespace JT808.Protocol.Test.Simples | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.终端控制.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x8105.ToUInt16Value(), | |||
ManualMsgNum = 1, | |||
TerminalPhoneNo = "12345678900", | |||
}, | |||
@@ -77,7 +77,7 @@ namespace JT808.Protocol.Test.Simples | |||
{ | |||
byte[] bytes = "7E8105002A0123456789000001013B3B3B3B3B3B3B3B3B3B3B3B3B000000173B536D616C6C43686900003BFF486170707900000000003B827E".ToHexBytes(); | |||
var jT808Package = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(Enums.JT808MsgId.终端控制.ToUInt16Value(), jT808Package.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x8105.ToUInt16Value(), jT808Package.Header.MsgId); | |||
Assert.Equal(1, jT808Package.Header.MsgNum); | |||
Assert.Equal("12345678900", jT808Package.Header.TerminalPhoneNo); | |||
var JT808_0x8105 = (JT808_0x8105)jT808Package.Bodies; | |||
@@ -48,13 +48,13 @@ namespace JT808.Protocol.Test.Simples | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.终端通用应答.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x0001.ToUInt16Value(), | |||
ManualMsgNum = 1203, | |||
TerminalPhoneNo = "012345678900", | |||
}, | |||
Bodies = new JT808_0x0001_Replace | |||
{ | |||
ReplyMsgId = Enums.JT808MsgId.终端心跳.ToUInt16Value(), | |||
ReplyMsgId = Enums.JT808MsgId._0x0002.ToUInt16Value(), | |||
ReplyMsgNum = 1000, | |||
TerminalResult = Enums.JT808TerminalResult.Success, | |||
Test=168 | |||
@@ -69,10 +69,10 @@ namespace JT808.Protocol.Test.Simples | |||
{ | |||
var bytes = "7E0001000701234567890004B303E800020000A8797E".ToHexBytes(); | |||
JT808Package jT808Package = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
Assert.Equal(Enums.JT808MsgId.终端通用应答.ToValue(), jT808Package.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x0001.ToValue(), jT808Package.Header.MsgId); | |||
Assert.Equal(1203, jT808Package.Header.MsgNum); | |||
JT808_0x0001_Replace JT808Bodies = (JT808_0x0001_Replace)jT808Package.Bodies; | |||
Assert.Equal(Enums.JT808MsgId.终端心跳.ToUInt16Value(), JT808Bodies.ReplyMsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x0002.ToUInt16Value(), JT808Bodies.ReplyMsgId); | |||
Assert.Equal(1000, JT808Bodies.ReplyMsgNum); | |||
Assert.Equal(Enums.JT808TerminalResult.Success, JT808Bodies.TerminalResult); | |||
Assert.Equal(168u, JT808Bodies.Test); | |||
@@ -40,7 +40,7 @@ namespace JT808.Protocol.Test.Simples | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.终端注册.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x0100.ToUInt16Value(), | |||
ManualMsgNum = 10, | |||
TerminalPhoneNo = "123456789", | |||
}, | |||
@@ -65,7 +65,7 @@ namespace JT808.Protocol.Test.Simples | |||
var bytes = "7E01000021000123456789000A002800323132333400746B3132333435004348493132330001D4C1413132333435857E".ToHexBytes(); | |||
JT808Package jT808_0X0100 = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
// 采用2011协议 的终端注册消息解析 | |||
Assert.Equal(JT808MsgId.终端注册.ToUInt16Value(), jT808_0X0100.Header.MsgId); | |||
Assert.Equal(JT808MsgId._0x0100.ToUInt16Value(), jT808_0X0100.Header.MsgId); | |||
Assert.Equal(1, jT808_0X0100.Header.ProtocolVersion); | |||
Assert.Equal(10, jT808_0X0100.Header.MsgNum); | |||
Assert.Equal("123456789", jT808_0X0100.Header.TerminalPhoneNo); | |||
@@ -59,7 +59,7 @@ namespace JT808.Protocol.Test.Simples | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.下发终端升级包.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x8108.ToUInt16Value(), | |||
ManualMsgNum = 10, | |||
TerminalPhoneNo = "123456789", | |||
MessageBodyProperty = new JT808HeaderMessageBodyProperty() | |||
@@ -80,7 +80,7 @@ namespace JT808.Protocol.Test.Simples | |||
{ | |||
Header = new JT808Header | |||
{ | |||
MsgId = Enums.JT808MsgId.下发终端升级包.ToUInt16Value(), | |||
MsgId = Enums.JT808MsgId._0x8108.ToUInt16Value(), | |||
ManualMsgNum = 10, | |||
TerminalPhoneNo = "123456789", | |||
MessageBodyProperty = new JT808HeaderMessageBodyProperty() | |||
@@ -30,7 +30,7 @@ namespace JT808.Protocol.Test.Simples | |||
var jT808Package = JT808Serializer.Deserialize<JT808Package>(bytes); | |||
//3.数据包头 | |||
Assert.Equal(Enums.JT808MsgId.位置信息汇报.ToValue(), jT808Package.Header.MsgId); | |||
Assert.Equal(Enums.JT808MsgId._0x0200.ToValue(), jT808Package.Header.MsgId); | |||
Assert.Equal(38, jT808Package.Header.MessageBodyProperty.DataLength); | |||
Assert.Equal(126, jT808Package.Header.MsgNum); | |||
Assert.Equal("123456789012", jT808Package.Header.TerminalPhoneNo); | |||
@@ -23,7 +23,7 @@ namespace JT808.Protocol.Test.Simples | |||
[Fact] | |||
public void Test1() | |||
{ | |||
JT808Package jT808Package = JT808MsgId.位置信息汇报.Create("123456789012", | |||
JT808Package jT808Package = JT808MsgId._0x0200.Create("123456789012", | |||
new JT808_0x0200 | |||
{ | |||
AlarmFlag = 1, | |||
@@ -37,7 +37,7 @@ namespace JT808.Protocol.Test.Simples | |||
jT808Config.JT808_0X0200_Custom_Factory.SetMap<JT808_0x0200_DT1_0x81>(); | |||
JT808Serializer demo5JT808Serializer = new JT808Serializer(jT808Config); | |||
JT808Package jT808Package = JT808MsgId.位置信息汇报.Create("123456789012", | |||
JT808Package jT808Package = JT808MsgId._0x0200.Create("123456789012", | |||
new JT808_0x0200 | |||
{ | |||
AlarmFlag = 1, | |||
@@ -23,7 +23,7 @@ namespace JT808.Protocol.Test.Simples | |||
[Fact] | |||
public void Test1() | |||
{ | |||
JT808Package jT808Package = JT808MsgId.查询服务器时间应答.Create_查询服务器时间应答_2019("123456789012", | |||
JT808Package jT808Package = JT808MsgId._0x8004.Create_查询服务器时间应答_2019("123456789012", | |||
new JT808_0x8004 | |||
{ | |||
Time = DateTime.Parse("2019-12-02 10:10:10"), | |||
@@ -39,7 +39,7 @@ namespace JT808.Protocol.Test.Simples | |||
{ | |||
var data = "7E8004400601000000001234567890120001191202101010517E".ToHexBytes(); | |||
JT808Package jT808Package = JT808Serializer.Deserialize(data); | |||
Assert.Equal(JT808MsgId.查询服务器时间应答.ToUInt16Value(), jT808Package.Header.MsgId); | |||
Assert.Equal(JT808MsgId._0x8004.ToUInt16Value(), jT808Package.Header.MsgId); | |||
Assert.Equal(JT808Version.JTT2019, jT808Package.Version); | |||
Assert.True(jT808Package.Header.MessageBodyProperty.VersionFlag); | |||
Assert.Equal(DateTime.Parse("2019-12-02 10:10:10"), ((JT808_0x8004)jT808Package.Bodies).Time); | |||
@@ -1,7 +1,7 @@ | |||
| |||
Microsoft Visual Studio Solution File, Format Version 12.00 | |||
# Visual Studio Version 16 | |||
VisualStudioVersion = 16.0.28803.352 | |||
# Visual Studio Version 17 | |||
VisualStudioVersion = 17.1.32414.318 | |||
MinimumVisualStudioVersion = 10.0.40219.1 | |||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Protocol", "JT808.Protocol\JT808.Protocol.csproj", "{6259F511-97FF-4E8D-99EB-C5BB6F2B1069}" | |||
EndProject | |||
@@ -12,6 +12,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution | |||
.editorconfig = .editorconfig | |||
..\.github\workflows\dotnetcore.yml = ..\.github\workflows\dotnetcore.yml | |||
Info.props = Info.props | |||
..\README.en.md = ..\README.en.md | |||
..\README.md = ..\README.md | |||
EndProjectSection | |||
EndProject | |||
@@ -4,363 +4,435 @@ namespace JT808.Protocol.Enums | |||
{ | |||
/// <summary> | |||
/// JT808消息 | |||
/// JT808 MsgId | |||
/// </summary> | |||
public enum JT808MsgId : ushort | |||
{ | |||
/// <summary> | |||
/// 终端通用应答 | |||
/// 0x0001 | |||
/// Terminal universal reply | |||
/// </summary> | |||
终端通用应答 = 0x0001, | |||
_0x0001 = 0x0001, | |||
/// <summary> | |||
/// 平台通用应答 | |||
/// 0x8001 | |||
/// Platform Universal response | |||
/// </summary> | |||
平台通用应答 = 0x8001, | |||
_0x8001 = 0x8001, | |||
/// <summary> | |||
/// 终端心跳 | |||
/// 0x0002 | |||
/// Terminal heart | |||
/// </summary> | |||
终端心跳 = 0x0002, | |||
_0x0002 = 0x0002, | |||
/// <summary> | |||
/// 补传分包请求 | |||
/// 0x8003 | |||
/// Forwarding subcontract request | |||
/// </summary> | |||
补传分包请求 = 0x8003, | |||
_0x8003 = 0x8003, | |||
/// <summary> | |||
/// 终端注册 | |||
/// 0x0100 | |||
/// Terminal registration | |||
/// </summary> | |||
终端注册 = 0x0100, | |||
_0x0100 = 0x0100, | |||
/// <summary> | |||
/// 终端注册应答 | |||
/// 0x8100 | |||
/// Terminal registration reply | |||
/// </summary> | |||
终端注册应答 = 0x8100, | |||
_0x8100 = 0x8100, | |||
/// <summary> | |||
/// 终端注销 | |||
/// 0x0003 | |||
/// Terminal logout | |||
/// </summary> | |||
终端注销 = 0x0003, | |||
_0x0003 = 0x0003, | |||
/// <summary> | |||
/// 终端鉴权 | |||
/// 0x0102 | |||
/// Terminal authentication | |||
/// </summary> | |||
终端鉴权 = 0x0102, | |||
_0x0102 = 0x0102, | |||
/// <summary> | |||
/// 设置终端参数 | |||
/// 0x8103 | |||
/// Setting Terminal Parameters | |||
/// </summary> | |||
设置终端参数 = 0x8103, | |||
_0x8103 = 0x8103, | |||
/// <summary> | |||
/// 查询终端参数 | |||
/// 0x8104 | |||
/// </summary> | |||
查询终端参数 = 0x8104, | |||
_0x8104 = 0x8104, | |||
/// <summary> | |||
/// 查询终端参数应答 | |||
/// 0x0104 | |||
/// Querying Terminal Parameters | |||
/// </summary> | |||
查询终端参数应答 = 0x0104, | |||
_0x0104 = 0x0104, | |||
/// <summary> | |||
/// 终端控制 | |||
/// 0x8105 | |||
/// terminal control | |||
/// </summary> | |||
终端控制 = 0x8105, | |||
_0x8105 = 0x8105, | |||
/// <summary> | |||
/// 查询指定终端参数 | |||
/// 0x8106 | |||
/// Example Query specified terminal parameters | |||
/// </summary> | |||
查询指定终端参数 = 0x8106, | |||
_0x8106 = 0x8106, | |||
/// <summary> | |||
/// 查询终端属性 | |||
/// 0x8107 | |||
/// Querying Terminal Properties | |||
/// </summary> | |||
查询终端属性 = 0x8107, | |||
_0x8107 = 0x8107, | |||
/// <summary> | |||
/// 查询终端属性应答 | |||
/// 0x0107 | |||
/// Query the response of the terminal properties | |||
/// </summary> | |||
查询终端属性应答 = 0x0107, | |||
_0x0107 = 0x0107, | |||
/// <summary> | |||
/// 下发终端升级包 | |||
/// 0x8108 | |||
/// Query terminal properties reply Deliver the terminal upgrade package | |||
/// </summary> | |||
下发终端升级包 = 0x8108, | |||
_0x8108 = 0x8108, | |||
/// <summary> | |||
/// 终端升级结果通知 | |||
/// 0x0108 | |||
/// Terminal upgrade result notification | |||
/// </summary> | |||
终端升级结果通知 = 0x0108, | |||
_0x0108 = 0x0108, | |||
/// <summary> | |||
/// 位置信息汇报 | |||
/// 0x0200 | |||
/// Location information reporting | |||
/// </summary> | |||
位置信息汇报 = 0x0200, | |||
_0x0200 = 0x0200, | |||
/// <summary> | |||
/// 位置信息查询 | |||
/// 0x8201 | |||
/// Location information query | |||
/// </summary> | |||
位置信息查询 = 0x8201, | |||
_0x8201 = 0x8201, | |||
/// <summary> | |||
/// 位置信息查询应答 | |||
/// 0x0201 | |||
/// Location information query response | |||
/// </summary> | |||
位置信息查询应答 = 0x0201, | |||
_0x0201 = 0x0201, | |||
/// <summary> | |||
/// 临时位置跟踪控制 | |||
/// 0x8202 | |||
/// Temporary position tracking control | |||
/// </summary> | |||
临时位置跟踪控制 = 0x8202, | |||
_0x8202 = 0x8202, | |||
/// <summary> | |||
/// 人工确认报警消息 | |||
/// 0x8203 | |||
/// Manually confirm the alarm message | |||
/// </summary> | |||
人工确认报警消息 = 0x8203, | |||
_0x8203 = 0x8203, | |||
/// <summary> | |||
/// 文本信息下发 | |||
/// 0x8300 | |||
/// Text message delivery | |||
/// </summary> | |||
文本信息下发 = 0x8300, | |||
_0x8300 = 0x8300, | |||
/// <summary> | |||
/// 事件设置 | |||
/// 0x8301 | |||
/// Event set | |||
/// </summary> | |||
事件设置 = 0x8301, | |||
_0x8301 = 0x8301, | |||
/// <summary> | |||
/// 事件报告 | |||
/// 0x0301 | |||
/// event report | |||
/// </summary> | |||
事件报告 = 0x0301, | |||
_0x0301 = 0x0301, | |||
/// <summary> | |||
/// 提问下发 | |||
/// 0x8302 | |||
/// Questions issued | |||
/// </summary> | |||
提问下发 = 0x8302, | |||
_0x8302 = 0x8302, | |||
/// <summary> | |||
/// 提问应答 | |||
/// 0x0302 | |||
/// Question answering | |||
/// </summary> | |||
提问应答 = 0x0302, | |||
_0x0302 = 0x0302, | |||
/// <summary> | |||
/// 信息点播菜单设置 | |||
/// 0x8303 | |||
/// Information on demand menu Settings | |||
/// </summary> | |||
信息点播菜单设置 = 0x8303, | |||
_0x8303 = 0x8303, | |||
/// <summary> | |||
/// 信息点播/取消 | |||
/// 0x0303 | |||
/// Information on demand | |||
/// Information cancel | |||
/// </summary> | |||
信息点播_取消 = 0x0303, | |||
_0x0303 = 0x0303, | |||
/// <summary> | |||
/// 信息服务 | |||
/// 0x8304 | |||
/// information service | |||
/// </summary> | |||
信息服务 = 0x8304, | |||
_0x8304 = 0x8304, | |||
/// <summary> | |||
/// 电话回拨 | |||
/// 0x8400 | |||
/// Back to the dial | |||
/// </summary> | |||
电话回拨 = 0x8400, | |||
_0x8400 = 0x8400, | |||
/// <summary> | |||
/// 设置电话本 | |||
/// 0x8401 | |||
/// Set up a phone book | |||
/// </summary> | |||
设置电话本 = 0x8401, | |||
_0x8401 = 0x8401, | |||
/// <summary> | |||
/// 车辆控制 | |||
/// 0x8500 | |||
/// vehicle control | |||
/// </summary> | |||
车辆控制 = 0x8500, | |||
_0x8500 = 0x8500, | |||
/// <summary> | |||
/// 车辆控制应答 | |||
/// 0x0500 | |||
/// Vehicle control response | |||
/// </summary> | |||
车辆控制应答 = 0x0500, | |||
_0x0500 = 0x0500, | |||
/// <summary> | |||
/// 设置圆形区域 | |||
/// 0x8600 | |||
/// Set the circular area | |||
/// </summary> | |||
设置圆形区域 = 0x8600, | |||
_0x8600 = 0x8600, | |||
/// <summary> | |||
/// 删除圆形区域 | |||
/// 0x8601 | |||
/// Delete circular area | |||
/// </summary> | |||
删除圆形区域 = 0x8601, | |||
_0x8601 = 0x8601, | |||
/// <summary> | |||
/// 设置矩形区域 | |||
/// 0x8602 | |||
/// Set rectangle area | |||
/// </summary> | |||
设置矩形区域 = 0x8602, | |||
_0x8602 = 0x8602, | |||
/// <summary> | |||
/// 删除矩形区域 | |||
/// 0x8603 | |||
/// Delete rectangular area | |||
/// </summary> | |||
删除矩形区域 = 0x8603, | |||
_0x8603 = 0x8603, | |||
/// <summary> | |||
/// 设置多边形区域 | |||
/// 0x8604 | |||
/// Set polygon region | |||
/// </summary> | |||
设置多边形区域 = 0x8604, | |||
_0x8604 = 0x8604, | |||
/// <summary> | |||
/// 删除多边形区域 | |||
/// 0x8605 | |||
/// Delete polygon area | |||
/// </summary> | |||
删除多边形区域 = 0x8605, | |||
_0x8605 = 0x8605, | |||
/// <summary> | |||
/// 设置路线 | |||
/// 0x8606 | |||
/// Set the route | |||
/// </summary> | |||
设置路线 = 0x8606, | |||
_0x8606 = 0x8606, | |||
/// <summary> | |||
/// 删除路线 | |||
/// 0x8607 | |||
/// Delete the route | |||
/// </summary> | |||
删除路线 = 0x8607, | |||
_0x8607 = 0x8607, | |||
/// <summary> | |||
/// 行驶记录仪数据采集命令 | |||
/// 0x8700 | |||
/// Drive recorder data acquisition command | |||
/// </summary> | |||
行驶记录仪数据采集命令 = 0x8700, | |||
_0x8700 = 0x8700, | |||
/// <summary> | |||
/// 行驶记录仪数据上传 | |||
/// 0x0700 | |||
/// Data upload from driving recorder | |||
/// </summary> | |||
行驶记录仪数据上传 = 0x0700, | |||
_0x0700 = 0x0700, | |||
/// <summary> | |||
/// 行驶记录仪参数下传命令 | |||
/// 0x8701 | |||
/// Driving recorder parameters down command | |||
/// </summary> | |||
行驶记录仪参数下传命令 = 0x8701, | |||
_0x8701 = 0x8701, | |||
/// <summary> | |||
/// 电子运单上报 | |||
/// 0x0701 | |||
/// Electronic waybill reporting | |||
/// </summary> | |||
电子运单上报 = 0x0701, | |||
_0x0701 = 0x0701, | |||
/// <summary> | |||
/// 驾驶员身份信息采集上报 | |||
/// 0x0702 | |||
/// Collect and report driver identity information | |||
/// </summary> | |||
驾驶员身份信息采集上报 = 0x0702, | |||
_0x0702 = 0x0702, | |||
/// <summary> | |||
/// 上报驾驶员身份信息请求 | |||
/// 0x8702 | |||
/// Report driver identification request | |||
/// </summary> | |||
上报驾驶员身份信息请求 = 0x8702, | |||
_0x8702 = 0x8702, | |||
/// <summary> | |||
/// 定位数据批量上传 | |||
/// 0x0704 | |||
/// Upload location data in batches | |||
/// </summary> | |||
定位数据批量上传 = 0x0704, | |||
_0x0704 = 0x0704, | |||
/// <summary> | |||
/// CAN总线数据上传 | |||
/// 0x0705 | |||
/// CAN bus data upload | |||
/// </summary> | |||
CAN总线数据上传 = 0x0705, | |||
_0x0705 = 0x0705, | |||
/// <summary> | |||
/// 多媒体事件信息上传 | |||
/// 0x0800 | |||
/// Upload multimedia event information | |||
/// </summary> | |||
多媒体事件信息上传 = 0x0800, | |||
_0x0800 = 0x0800, | |||
/// <summary> | |||
/// 多媒体数据上传 | |||
/// 0x0801 | |||
/// Multimedia Data upload | |||
/// </summary> | |||
多媒体数据上传 = 0x0801, | |||
_0x0801 = 0x0801, | |||
/// <summary> | |||
/// 多媒体数据上传应答 | |||
/// 0x8800 | |||
/// Reply to multimedia data upload | |||
/// </summary> | |||
多媒体数据上传应答 = 0x8800, | |||
_0x8800 = 0x8800, | |||
/// <summary> | |||
/// 摄像头立即拍摄命令 | |||
/// 0x8801 | |||
/// The camera immediately shoots the command | |||
/// </summary> | |||
摄像头立即拍摄命令 = 0x8801, | |||
_0x8801 = 0x8801, | |||
/// <summary> | |||
/// 摄像头立即拍摄命令应答 | |||
/// 0x0805 | |||
/// The camera immediately shoots the command reply | |||
/// </summary> | |||
摄像头立即拍摄命令应答 = 0x0805, | |||
_0x0805 = 0x0805, | |||
/// <summary> | |||
/// 存储多媒体数据检索 | |||
/// 0x8802 | |||
/// Store multimedia data retrieval | |||
/// </summary> | |||
存储多媒体数据检索 = 0x8802, | |||
_0x8802 = 0x8802, | |||
/// <summary> | |||
/// 存储多媒体数据上传 | |||
/// 0x8803 | |||
/// Store multimedia data upload | |||
/// </summary> | |||
存储多媒体数据上传 = 0x8803, | |||
_0x8803 = 0x8803, | |||
/// <summary> | |||
/// 录音开始命令 | |||
/// 0x8804 | |||
/// Recording Start Command | |||
/// </summary> | |||
录音开始命令 = 0x8804, | |||
_0x8804 = 0x8804, | |||
/// <summary> | |||
/// 单条存储多媒体数据检索上传命令 | |||
/// 0x8805 | |||
/// Single storage multimedia data retrieval upload command | |||
/// </summary> | |||
单条存储多媒体数据检索上传命令 = 0x8805, | |||
_0x8805 = 0x8805, | |||
/// <summary> | |||
/// 数据下行透传 | |||
/// 0x8900 | |||
/// Data is transmitted through downlink | |||
/// </summary> | |||
数据下行透传 = 0x8900, | |||
_0x8900 = 0x8900, | |||
/// <summary> | |||
/// 数据上行透传 | |||
/// 0x0900 | |||
/// Data is transparently transmitted upstream | |||
/// </summary> | |||
数据上行透传 = 0x0900, | |||
_0x0900 = 0x0900, | |||
/// <summary> | |||
/// 数据压缩上报 | |||
/// 0x0901 | |||
/// Data compression reporting | |||
/// </summary> | |||
数据压缩上报 = 0x0901, | |||
_0x0901 = 0x0901, | |||
/// <summary> | |||
/// 平台RSA公钥 | |||
/// 0x8A00 | |||
/// Platform RSA Public Key | |||
/// </summary> | |||
平台RSA公钥 = 0x8A00, | |||
_0x8A00 = 0x8A00, | |||
/// <summary> | |||
/// 终端RSA公钥 | |||
/// 0x0A00 | |||
/// Terminal RSA Public Key | |||
/// </summary> | |||
终端RSA公钥 = 0x0A00, | |||
_0x0A00 = 0x0A00, | |||
/// <summary> | |||
/// 查询服务器时间请求 | |||
/// 0x0004 | |||
/// Queries server time requests | |||
/// </summary> | |||
查询服务器时间请求 = 0x0004, | |||
_0x0004 = 0x0004, | |||
/// <summary> | |||
/// 查询服务器时间应答 | |||
/// 0x8004 | |||
/// Query the server time response | |||
/// </summary> | |||
查询服务器时间应答 = 0x8004, | |||
_0x8004 = 0x8004, | |||
/// <summary> | |||
/// 终端补传分包请求 | |||
/// 0x0005 | |||
/// The terminal sends the subcontract request | |||
/// </summary> | |||
终端补传分包请求 = 0x0005, | |||
_0x0005 = 0x0005, | |||
/// <summary> | |||
/// 链路检测 | |||
/// 0x8204 | |||
/// Link detection | |||
/// </summary> | |||
链路检测 = 0x8204, | |||
_0x8204 = 0x8204, | |||
/// <summary> | |||
/// 查询区域或线路数据 | |||
/// 0x8608 | |||
/// Example Query area or line data | |||
/// </summary> | |||
查询区域或线路数据 = 0x8608, | |||
_0x8608 = 0x8608, | |||
/// <summary> | |||
/// 查询区域或线路数据应答 | |||
/// 0x0608 | |||
/// Query area or line data reply | |||
/// </summary> | |||
查询区域或线路数据应答 = 0x0608, | |||
_0x0608 = 0x0608, | |||
/// <summary> | |||
/// 存储多媒体数据检索应答 | |||
/// 0x0802 | |||
/// Store multimedia data retrieval replies | |||
/// </summary> | |||
存储多媒体数据检索应答 = 0x0802, | |||
_0x0802 = 0x0802, | |||
} | |||
} |
@@ -4,13 +4,13 @@ | |||
<PackageId>JT808</PackageId> | |||
<Product>JT808</Product> | |||
<Description> | |||
JT808 protocol, GB808 protocol, Road Transport Vehicle Satellite positioning system - Beidou Compatible Vehicle Terminal communication protocol (support 2011, 2013, 2019 version) | |||
JT808协议、GB808协议、道路运输车辆卫星定位系统-北斗兼容车载终端通讯协议(支持2011、2013、2019版本) | |||
</Description> | |||
JT/T808 protocol,JT808 protocol, GB808 protocol, Road Transport Vehicle Satellite positioning system - Beidou Compatible Vehicle Terminal communication protocol (support 2011, 2013, 2019 version) | |||
JT/T808协议、JT808协议、GB808协议、道路运输车辆卫星定位系统-北斗兼容车载终端通讯协议(支持2011、2013、2019版本) | |||
</Description> | |||
<PackageReleaseNotes> | |||
JT808 protocol, GB808 protocol, Road Transport Vehicle Satellite positioning system - Beidou Compatible Vehicle Terminal communication protocol (support 2011, 2013, 2019 version) | |||
JT808协议、GB808协议、道路运输车辆卫星定位系统-北斗兼容车载终端通讯协议(支持2011、2013、2019版本) | |||
</PackageReleaseNotes> | |||
JT/T808 protocol,JT808 protocol, GB808 protocol, Road Transport Vehicle Satellite positioning system - Beidou Compatible Vehicle Terminal communication protocol (support 2011, 2013, 2019 version) | |||
JT808协议、GB808协议、道路运输车辆卫星定位系统-北斗兼容车载终端通讯协议(支持2011、2013、2019版本) | |||
</PackageReleaseNotes> | |||
<DocumentationFile>JT808.Protocol.xml</DocumentationFile> | |||
<PackageReadmeFile>README.md</PackageReadmeFile> | |||
</PropertyGroup> | |||
@@ -93,4 +93,8 @@ | |||
<DependentUpon>JT808PackageExtensionsTemplate.tt</DependentUpon> | |||
</Compile> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" /> | |||
</ItemGroup> | |||
</Project> |
@@ -859,432 +859,504 @@ | |||
<member name="T:JT808.Protocol.Enums.JT808MsgId"> | |||
<summary> | |||
JT808消息 | |||
JT808 MsgId | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.终端通用应答"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x0001"> | |||
<summary> | |||
终端通用应答 | |||
0x0001 | |||
Terminal universal reply | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.平台通用应答"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8001"> | |||
<summary> | |||
平台通用应答 | |||
0x8001 | |||
Platform Universal response | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.终端心跳"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x0002"> | |||
<summary> | |||
终端心跳 | |||
0x0002 | |||
Terminal heart | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.补传分包请求"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8003"> | |||
<summary> | |||
补传分包请求 | |||
0x8003 | |||
Forwarding subcontract request | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.终端注册"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x0100"> | |||
<summary> | |||
终端注册 | |||
0x0100 | |||
Terminal registration | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.终端注册应答"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8100"> | |||
<summary> | |||
终端注册应答 | |||
0x8100 | |||
Terminal registration reply | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.终端注销"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x0003"> | |||
<summary> | |||
终端注销 | |||
0x0003 | |||
Terminal logout | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.终端鉴权"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x0102"> | |||
<summary> | |||
终端鉴权 | |||
0x0102 | |||
Terminal authentication | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.设置终端参数"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8103"> | |||
<summary> | |||
设置终端参数 | |||
0x8103 | |||
Setting Terminal Parameters | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.查询终端参数"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8104"> | |||
<summary> | |||
查询终端参数 | |||
0x8104 | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.查询终端参数应答"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x0104"> | |||
<summary> | |||
查询终端参数应答 | |||
0x0104 | |||
Querying Terminal Parameters | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.终端控制"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8105"> | |||
<summary> | |||
终端控制 | |||
0x8105 | |||
terminal control | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.查询指定终端参数"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8106"> | |||
<summary> | |||
查询指定终端参数 | |||
0x8106 | |||
Example Query specified terminal parameters | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.查询终端属性"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8107"> | |||
<summary> | |||
查询终端属性 | |||
0x8107 | |||
Querying Terminal Properties | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.查询终端属性应答"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x0107"> | |||
<summary> | |||
查询终端属性应答 | |||
0x0107 | |||
Query the response of the terminal properties | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.下发终端升级包"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8108"> | |||
<summary> | |||
下发终端升级包 | |||
0x8108 | |||
Query terminal properties reply Deliver the terminal upgrade package | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.终端升级结果通知"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x0108"> | |||
<summary> | |||
终端升级结果通知 | |||
0x0108 | |||
Terminal upgrade result notification | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.位置信息汇报"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x0200"> | |||
<summary> | |||
位置信息汇报 | |||
0x0200 | |||
Location information reporting | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.位置信息查询"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8201"> | |||
<summary> | |||
位置信息查询 | |||
0x8201 | |||
Location information query | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.位置信息查询应答"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x0201"> | |||
<summary> | |||
位置信息查询应答 | |||
0x0201 | |||
Location information query response | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.临时位置跟踪控制"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8202"> | |||
<summary> | |||
临时位置跟踪控制 | |||
0x8202 | |||
Temporary position tracking control | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.人工确认报警消息"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8203"> | |||
<summary> | |||
人工确认报警消息 | |||
0x8203 | |||
Manually confirm the alarm message | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.文本信息下发"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8300"> | |||
<summary> | |||
文本信息下发 | |||
0x8300 | |||
Text message delivery | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.事件设置"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8301"> | |||
<summary> | |||
事件设置 | |||
0x8301 | |||
Event set | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.事件报告"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x0301"> | |||
<summary> | |||
事件报告 | |||
0x0301 | |||
event report | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.提问下发"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8302"> | |||
<summary> | |||
提问下发 | |||
0x8302 | |||
Questions issued | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.提问应答"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x0302"> | |||
<summary> | |||
提问应答 | |||
0x0302 | |||
Question answering | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.信息点播菜单设置"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8303"> | |||
<summary> | |||
信息点播菜单设置 | |||
0x8303 | |||
Information on demand menu Settings | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.信息点播_取消"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x0303"> | |||
<summary> | |||
信息点播/取消 | |||
0x0303 | |||
Information on demand | |||
Information cancel | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.信息服务"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8304"> | |||
<summary> | |||
信息服务 | |||
0x8304 | |||
information service | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.电话回拨"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8400"> | |||
<summary> | |||
电话回拨 | |||
0x8400 | |||
Back to the dial | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.设置电话本"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8401"> | |||
<summary> | |||
设置电话本 | |||
0x8401 | |||
Set up a phone book | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.车辆控制"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8500"> | |||
<summary> | |||
车辆控制 | |||
0x8500 | |||
vehicle control | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.车辆控制应答"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x0500"> | |||
<summary> | |||
车辆控制应答 | |||
0x0500 | |||
Vehicle control response | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.设置圆形区域"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8600"> | |||
<summary> | |||
设置圆形区域 | |||
0x8600 | |||
Set the circular area | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.删除圆形区域"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8601"> | |||
<summary> | |||
删除圆形区域 | |||
0x8601 | |||
Delete circular area | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.设置矩形区域"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8602"> | |||
<summary> | |||
设置矩形区域 | |||
0x8602 | |||
Set rectangle area | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.删除矩形区域"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8603"> | |||
<summary> | |||
删除矩形区域 | |||
0x8603 | |||
Delete rectangular area | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.设置多边形区域"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8604"> | |||
<summary> | |||
设置多边形区域 | |||
0x8604 | |||
Set polygon region | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.删除多边形区域"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8605"> | |||
<summary> | |||
删除多边形区域 | |||
0x8605 | |||
Delete polygon area | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.设置路线"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8606"> | |||
<summary> | |||
设置路线 | |||
0x8606 | |||
Set the route | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.删除路线"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8607"> | |||
<summary> | |||
删除路线 | |||
0x8607 | |||
Delete the route | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.行驶记录仪数据采集命令"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8700"> | |||
<summary> | |||
行驶记录仪数据采集命令 | |||
0x8700 | |||
Drive recorder data acquisition command | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.行驶记录仪数据上传"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x0700"> | |||
<summary> | |||
行驶记录仪数据上传 | |||
0x0700 | |||
Data upload from driving recorder | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.行驶记录仪参数下传命令"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8701"> | |||
<summary> | |||
行驶记录仪参数下传命令 | |||
0x8701 | |||
Driving recorder parameters down command | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.电子运单上报"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x0701"> | |||
<summary> | |||
电子运单上报 | |||
0x0701 | |||
Electronic waybill reporting | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.驾驶员身份信息采集上报"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x0702"> | |||
<summary> | |||
驾驶员身份信息采集上报 | |||
0x0702 | |||
Collect and report driver identity information | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.上报驾驶员身份信息请求"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8702"> | |||
<summary> | |||
上报驾驶员身份信息请求 | |||
0x8702 | |||
Report driver identification request | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.定位数据批量上传"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x0704"> | |||
<summary> | |||
定位数据批量上传 | |||
0x0704 | |||
Upload location data in batches | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.CAN总线数据上传"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x0705"> | |||
<summary> | |||
CAN总线数据上传 | |||
0x0705 | |||
CAN bus data upload | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.多媒体事件信息上传"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x0800"> | |||
<summary> | |||
多媒体事件信息上传 | |||
0x0800 | |||
Upload multimedia event information | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.多媒体数据上传"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x0801"> | |||
<summary> | |||
多媒体数据上传 | |||
0x0801 | |||
Multimedia Data upload | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.多媒体数据上传应答"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8800"> | |||
<summary> | |||
多媒体数据上传应答 | |||
0x8800 | |||
Reply to multimedia data upload | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.摄像头立即拍摄命令"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8801"> | |||
<summary> | |||
摄像头立即拍摄命令 | |||
0x8801 | |||
The camera immediately shoots the command | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.摄像头立即拍摄命令应答"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x0805"> | |||
<summary> | |||
摄像头立即拍摄命令应答 | |||
0x0805 | |||
The camera immediately shoots the command reply | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.存储多媒体数据检索"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8802"> | |||
<summary> | |||
存储多媒体数据检索 | |||
0x8802 | |||
Store multimedia data retrieval | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.存储多媒体数据上传"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8803"> | |||
<summary> | |||
存储多媒体数据上传 | |||
0x8803 | |||
Store multimedia data upload | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.录音开始命令"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8804"> | |||
<summary> | |||
录音开始命令 | |||
0x8804 | |||
Recording Start Command | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.单条存储多媒体数据检索上传命令"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8805"> | |||
<summary> | |||
单条存储多媒体数据检索上传命令 | |||
0x8805 | |||
Single storage multimedia data retrieval upload command | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.数据下行透传"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8900"> | |||
<summary> | |||
数据下行透传 | |||
0x8900 | |||
Data is transmitted through downlink | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.数据上行透传"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x0900"> | |||
<summary> | |||
数据上行透传 | |||
0x0900 | |||
Data is transparently transmitted upstream | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.数据压缩上报"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x0901"> | |||
<summary> | |||
数据压缩上报 | |||
0x0901 | |||
Data compression reporting | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.平台RSA公钥"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8A00"> | |||
<summary> | |||
平台RSA公钥 | |||
0x8A00 | |||
Platform RSA Public Key | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.终端RSA公钥"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x0A00"> | |||
<summary> | |||
终端RSA公钥 | |||
0x0A00 | |||
Terminal RSA Public Key | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.查询服务器时间请求"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x0004"> | |||
<summary> | |||
查询服务器时间请求 | |||
0x0004 | |||
Queries server time requests | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.查询服务器时间应答"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8004"> | |||
<summary> | |||
查询服务器时间应答 | |||
0x8004 | |||
Query the server time response | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.终端补传分包请求"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x0005"> | |||
<summary> | |||
终端补传分包请求 | |||
0x0005 | |||
The terminal sends the subcontract request | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.链路检测"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8204"> | |||
<summary> | |||
链路检测 | |||
0x8204 | |||
Link detection | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.查询区域或线路数据"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x8608"> | |||
<summary> | |||
查询区域或线路数据 | |||
0x8608 | |||
Example Query area or line data | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.查询区域或线路数据应答"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x0608"> | |||
<summary> | |||
查询区域或线路数据应答 | |||
0x0608 | |||
Query area or line data reply | |||
</summary> | |||
</member> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId.存储多媒体数据检索应答"> | |||
<member name="F:JT808.Protocol.Enums.JT808MsgId._0x0802"> | |||
<summary> | |||
存储多媒体数据检索应答 | |||
0x0802 | |||
Store multimedia data retrieval replies | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.Enums.JT808MultimediaCodingFormat"> | |||