You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

864 rivejä
42 KiB

  1. using JT808.Protocol.Enums;
  2. using JT808.Protocol.Exceptions;
  3. using JT808.Protocol.Extensions;
  4. using JT808.Protocol.Interfaces;
  5. using JT808.Protocol.Internal;
  6. using JT808.Protocol.MessageBody;
  7. using JT808.Protocol.Test.JT808LocationAttach;
  8. using System;
  9. using System.Collections.Concurrent;
  10. using System.Collections.Generic;
  11. using System.Linq;
  12. using System.Reflection;
  13. using System.Threading.Tasks;
  14. using Xunit;
  15. namespace JT808.Protocol.Test.MessageBody
  16. {
  17. public class JT808_0x0200Test
  18. {
  19. JT808Serializer JT808Serializer;
  20. JT808Serializer JT808Serializer1;
  21. public JT808_0x0200Test()
  22. {
  23. IJT808Config jT808Config = new DefaultGlobalConfig();
  24. IJT808Config jT808Config1 = new DefaultGlobalConfig();
  25. jT808Config1.SkipCRCCode = true;
  26. jT808Config.JT808_0X0200_Custom_Factory.SetMap<JT808LocationAttachImpl0x61>();
  27. JT808Serializer = new JT808Serializer(jT808Config);
  28. JT808Serializer1 = new JT808Serializer(jT808Config1);
  29. }
  30. [Fact]
  31. public void Test1()
  32. {
  33. JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200
  34. {
  35. AlarmFlag = 1,
  36. Altitude = 40,
  37. GPSTime = DateTime.Parse("2018-07-15 10:10:10"),
  38. Lat = 12222222,
  39. Lng = 132444444,
  40. Speed = 60,
  41. Direction = 0,
  42. StatusFlag = 2,
  43. JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
  44. };
  45. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x01, new JT808_0x0200_0x01
  46. {
  47. Mileage = 100
  48. });
  49. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x02, new JT808_0x0200_0x02
  50. {
  51. Oil = 55
  52. });
  53. var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
  54. Assert.Equal("000000010000000200BA7F0E07E4F11C0028003C000018071510101001040000006402020037", hex);
  55. }
  56. [Fact]
  57. public void Parallel_Test1_1()
  58. {
  59. ConcurrentBag<string> hexs = new ConcurrentBag<string>();
  60. Parallel.For(1, 20, new ParallelOptions
  61. {
  62. MaxDegreeOfParallelism=5
  63. }, (i) =>
  64. {
  65. JT808Package jT808Package = new JT808Package();
  66. jT808Package.Header = new JT808Header
  67. {
  68. MsgId = Enums.JT808MsgId.位置信息汇报.ToUInt16Value(),
  69. ManualMsgNum = (ushort)i,
  70. TerminalPhoneNo = "1122334455"+i.ToString(),
  71. };
  72. JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200
  73. {
  74. AlarmFlag = 1,
  75. Altitude = 40,
  76. GPSTime = DateTime.Parse("2018-07-15 10:10:10").AddSeconds(i),
  77. Lat = 12222222,
  78. Lng = 132444444,
  79. Speed = 60,
  80. Direction = 0,
  81. StatusFlag = 2,
  82. JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
  83. };
  84. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x01, new JT808_0x0200_0x01
  85. {
  86. Mileage = 100
  87. });
  88. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x02, new JT808_0x0200_0x02
  89. {
  90. Oil = 55
  91. });
  92. jT808Package.Bodies = jT808UploadLocationRequest;
  93. var hex = JT808Serializer.Serialize(jT808Package).ToHexString();
  94. hexs.Add(hex);
  95. });
  96. //7E02000026 112233445519 0013 000000010000000200BA7F0E07E4F11C0028003C0000 180715101029 01040000006402020037987E,
  97. //7E02000026 112233445518 0012 000000010000000200BA7F0E07E4F11C0028003C0000 180715101028 01040000006402020037997E,
  98. //7E02000026 112233445517 0011 000000010000000200BA7F0E07E4F11C0028003C0000 180715101027 010400000064020200379A7E,
  99. //7E02000026 112233445516 0010 000000010000000200BA7F0E07E4F11C0028003C0000 180715101026 010400000064020200379B7E,
  100. //7E02000026 112233445515 000F 000000010000000200BA7F0E07E4F11C0028003C0000 180715101025 01040000006402020037847E,
  101. //7E02000026 112233445514 000E 000000010000000200BA7F0E07E4F11C0028003C0000 180715101024 01040000006402020037857E,
  102. //7E02000026 112233445513 000D 000000010000000200BA7F0E07E4F11C0028003C0000 180715101023 01040000006402020037867E,
  103. //7E02000026 112233445512 000C 000000010000000200BA7F0E07E4F11C0028003C0000 180715101022 01040000006402020037877E,
  104. //7E02000026 112233445511 000B 000000010000000200BA7F0E07E4F11C0028003C0000 180715101021 01040000006402020037807E,
  105. //7E02000026 112233445510 000A 000000010000000200BA7F0E07E4F11C0028003C0000 180715101020 01040000006402020037817E,
  106. //7E02000026 011223344559 0009 000000010000000200BA7F0E07E4F11C0028003C0000 180715101019 01040000006402020037A27E,
  107. //7E02000026 011223344558 0008 000000010000000200BA7F0E07E4F11C0028003C0000 180715101018 01040000006402020037A37E,
  108. //7E02000026 011223344557 0007 000000010000000200BA7F0E07E4F11C0028003C0000 180715101017 01040000006402020037AC7E,
  109. //7E02000026 011223344556 0006 000000010000000200BA7F0E07E4F11C0028003C0000 180715101016 01040000006402020037AD7E,
  110. //7E02000026 011223344555 0005 000000010000000200BA7F0E07E4F11C0028003C0000 180715101015 01040000006402020037AE7E,
  111. //7E02000026 011223344554 0004 000000010000000200BA7F0E07E4F11C0028003C0000 180715101014 01040000006402020037AF7E,
  112. //7E02000026 011223344553 0003 000000010000000200BA7F0E07E4F11C0028003C0000 180715101013 01040000006402020037A87E,
  113. //7E02000026 011223344552 0002 000000010000000200BA7F0E07E4F11C0028003C0000 180715101012 01040000006402020037A97E,
  114. //7E02000026 011223344551 0001 000000010000000200BA7F0E07E4F11C0028003C0000 180715101011 01040000006402020037AA7E,
  115. //7E02000026 011223344550 0001 000000010000000200BA7F0E07E4F11C0028003C0000 180715101010 01040000006402020037AA7E
  116. //7E02000026 011223344550 0000 000000010000000200BA7F0E07E4F11C0028003C0000 180715101010 01040000006402020037AB7E,
  117. string result = "7E020000260112233445500000000000010000000200BA7F0E07E4F11C0028003C000018071510101001040000006402020037AB7E,7E020000260112233445570007000000010000000200BA7F0E07E4F11C0028003C000018071510101701040000006402020037AC7E,7E020000260112233445560006000000010000000200BA7F0E07E4F11C0028003C000018071510101601040000006402020037AD7E,7E020000260112233445550005000000010000000200BA7F0E07E4F11C0028003C000018071510101501040000006402020037AE7E,7E020000260112233445540004000000010000000200BA7F0E07E4F11C0028003C000018071510101401040000006402020037AF7E,7E020000261122334455190013000000010000000200BA7F0E07E4F11C0028003C000018071510102901040000006402020037987E,7E020000261122334455180012000000010000000200BA7F0E07E4F11C0028003C000018071510102801040000006402020037997E,7E020000261122334455170011000000010000000200BA7F0E07E4F11C0028003C0000180715101027010400000064020200379A7E,7E020000261122334455160010000000010000000200BA7F0E07E4F11C0028003C0000180715101026010400000064020200379B7E,7E02000026112233445515000F000000010000000200BA7F0E07E4F11C0028003C000018071510102501040000006402020037847E,7E02000026112233445514000E000000010000000200BA7F0E07E4F11C0028003C000018071510102401040000006402020037857E,7E02000026112233445513000D000000010000000200BA7F0E07E4F11C0028003C000018071510102301040000006402020037867E,7E02000026112233445512000C000000010000000200BA7F0E07E4F11C0028003C000018071510102201040000006402020037877E,7E020000260112233445530003000000010000000200BA7F0E07E4F11C0028003C000018071510101301040000006402020037A87E,7E020000260112233445520002000000010000000200BA7F0E07E4F11C0028003C000018071510101201040000006402020037A97E,7E020000260112233445510001000000010000000200BA7F0E07E4F11C0028003C000018071510101101040000006402020037AA7E,7E02000026112233445511000B000000010000000200BA7F0E07E4F11C0028003C000018071510102101040000006402020037807E,7E02000026112233445510000A000000010000000200BA7F0E07E4F11C0028003C000018071510102001040000006402020037817E,7E020000260112233445590009000000010000000200BA7F0E07E4F11C0028003C000018071510101901040000006402020037A27E,7E020000260112233445580008000000010000000200BA7F0E07E4F11C0028003C000018071510101801040000006402020037A37E";
  118. //7E020000260112233445500001000000010000000200BA7F0E07E4F11C0028003C000018071510101001040000006402020037AA7E
  119. List<string> resultHexs = result.Split(',').ToList();
  120. string hexStr = string.Join(',', hexs);
  121. foreach (var item in hexs)
  122. {
  123. Assert.Contains(item, resultHexs);
  124. }
  125. }
  126. [Fact]
  127. public void Test2()
  128. {
  129. byte[] bodys = "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".ToHexBytes();
  130. JT808_0x0200 jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x0200>(bodys);
  131. Assert.Equal((uint)1, jT808UploadLocationRequest.AlarmFlag);
  132. Assert.Equal(DateTime.Parse("2018-07-15 10:10:10"), jT808UploadLocationRequest.GPSTime);
  133. Assert.Equal(12222222, jT808UploadLocationRequest.Lat);
  134. Assert.Equal(132444444, jT808UploadLocationRequest.Lng);
  135. Assert.Equal(60, jT808UploadLocationRequest.Speed);
  136. Assert.Equal((uint)2, jT808UploadLocationRequest.StatusFlag);
  137. Assert.Equal(100, ((JT808_0x0200_0x01)jT808UploadLocationRequest.JT808LocationAttachData[JT808Constants.JT808_0x0200_0x01]).Mileage);
  138. Assert.Equal(55, ((JT808_0x0200_0x02)jT808UploadLocationRequest.JT808LocationAttachData[JT808Constants.JT808_0x0200_0x02]).Oil);
  139. }
  140. [Fact]
  141. public void Test2_1()
  142. {
  143. byte[] bodys = "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".ToHexBytes();
  144. string json = JT808Serializer.Analyze<JT808_0x0200>(bodys);
  145. }
  146. [Fact]
  147. public void Test3()
  148. {
  149. //00 00 00 01
  150. //00 00 00 02
  151. //00 BA 7F 0E
  152. //07 E4 F1 1C
  153. //00 28
  154. //00 3C
  155. //00 00
  156. //18 07 15 10 10 10
  157. //01
  158. // 04
  159. // 00 00 00 64
  160. //02
  161. // 02
  162. // 00 37
  163. //06
  164. // 0D
  165. // 00 00 00 12 01 73 6D 61 6C 6C 63 68 69"
  166. JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200
  167. {
  168. AlarmFlag = 1,
  169. Altitude = 40,
  170. GPSTime = DateTime.Parse("2018-07-15 10:10:10"),
  171. Lat = 12222222,
  172. Lng = 132444444,
  173. Speed = 60,
  174. Direction = 0,
  175. StatusFlag = 2,
  176. JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>(),
  177. JT808CustomLocationAttachData = new Dictionary<byte, JT808_0x0200_CustomBodyBase>()
  178. };
  179. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x01, new JT808_0x0200_0x01
  180. {
  181. Mileage = 100
  182. });
  183. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x02, new JT808_0x0200_0x02
  184. {
  185. Oil = 55
  186. });
  187. jT808UploadLocationRequest.JT808CustomLocationAttachData.Add(0x61, new JT808LocationAttachImpl0x61
  188. {
  189. Age = 18,
  190. Gender = 1,
  191. UserName = "smallchi"
  192. });
  193. var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
  194. Assert.Equal("000000010000000200BA7F0E07E4F11C0028003C000018071510101001040000006402020037610D0000001201736D616C6C636869", hex);
  195. }
  196. [Fact]
  197. public void Test4()
  198. {
  199. // 1.添加自定义附加信息扩展 AddJT808LocationAttachMethod
  200. byte[] bodys = "000000010000000200BA7F0E07E4F11C0028003C000018071510101001040000006402020037610D0000001201736D616C6C636869".ToHexBytes();
  201. JT808_0x0200 jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x0200>(bodys);
  202. Assert.Equal((uint)1, jT808UploadLocationRequest.AlarmFlag);
  203. Assert.Equal(DateTime.Parse("2018-07-15 10:10:10"), jT808UploadLocationRequest.GPSTime);
  204. Assert.Equal(12222222, jT808UploadLocationRequest.Lat);
  205. Assert.Equal(132444444, jT808UploadLocationRequest.Lng);
  206. Assert.Equal(60, jT808UploadLocationRequest.Speed);
  207. Assert.Equal((uint)2, jT808UploadLocationRequest.StatusFlag);
  208. Assert.Equal(100, ((JT808_0x0200_0x01)jT808UploadLocationRequest.JT808LocationAttachData[JT808Constants.JT808_0x0200_0x01]).Mileage);
  209. Assert.Equal(55, ((JT808_0x0200_0x02)jT808UploadLocationRequest.JT808LocationAttachData[JT808Constants.JT808_0x0200_0x02]).Oil);
  210. var jT808LocationAttachImpl0x61 = (JT808LocationAttachImpl0x61)jT808UploadLocationRequest.JT808CustomLocationAttachData[0x61];
  211. Assert.Equal(18, jT808LocationAttachImpl0x61.Age);
  212. Assert.Equal(1, jT808LocationAttachImpl0x61.Gender);
  213. Assert.Equal("smallchi", jT808LocationAttachImpl0x61.UserName);
  214. }
  215. [Fact]
  216. public void Test5_1()
  217. {
  218. JT808Package jT808Package = new JT808Package();
  219. jT808Package.Header = new JT808Header
  220. {
  221. MsgId = Enums.JT808MsgId.位置信息汇报.ToUInt16Value(),
  222. MsgNum = 8888,
  223. TerminalPhoneNo = "112233445566",
  224. //MessageBodyProperty=new JT808MessageBodyProperty(38),
  225. };
  226. JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200
  227. {
  228. AlarmFlag = 1,
  229. Altitude = 40,
  230. GPSTime = DateTime.Parse("2018-07-15 10:10:10"),
  231. Lat = 12222222,
  232. Lng = 132444444,
  233. Speed = 60,
  234. Direction = 0,
  235. StatusFlag = 2,
  236. JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
  237. };
  238. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x01, new JT808_0x0200_0x01
  239. {
  240. Mileage = 100
  241. });
  242. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x02, new JT808_0x0200_0x02
  243. {
  244. Oil = 55
  245. });
  246. jT808Package.Bodies = jT808UploadLocationRequest;
  247. var hex = JT808Serializer.Serialize(jT808Package).ToHexString();
  248. }
  249. [Fact]
  250. public void Test5_2()
  251. {
  252. 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();
  253. string json = JT808Serializer.Analyze(bytes);
  254. }
  255. [Fact]
  256. public void Test5()
  257. {
  258. //7E
  259. //02 00
  260. //00 33
  261. //11 22 33 44 55 66
  262. //22 B8
  263. //00 00 00 01
  264. //00 00 00 02
  265. //00 BA 7F 0E
  266. //07 E4 F1 1C
  267. //00 28
  268. //00 3C
  269. //00 00
  270. //18 07 15 10 10 10
  271. //01
  272. // 04
  273. // 00 00 00 64
  274. //02
  275. // 02
  276. // 00 37
  277. //42 7E
  278. 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();
  279. var jT808Package = JT808Serializer.Deserialize<JT808Package>(bytes);
  280. Assert.Equal(Enums.JT808MsgId.位置信息汇报.ToValue(), jT808Package.Header.MsgId);
  281. Assert.Equal(38, jT808Package.Header.MessageBodyProperty.DataLength);
  282. Assert.Equal(8888, jT808Package.Header.MsgNum);
  283. Assert.Equal("112233445566", jT808Package.Header.TerminalPhoneNo);
  284. Assert.False(jT808Package.Header.MessageBodyProperty.IsPackage);
  285. Assert.Equal(0, jT808Package.Header.PackageIndex);
  286. Assert.Equal(0, jT808Package.Header.PackgeCount);
  287. Assert.Equal(JT808EncryptMethod.None, jT808Package.Header.MessageBodyProperty.Encrypt);
  288. JT808_0x0200 jT808UploadLocationRequest = (JT808_0x0200)jT808Package.Bodies;
  289. Assert.Equal((uint)1, jT808UploadLocationRequest.AlarmFlag);
  290. Assert.Equal(DateTime.Parse("2018-07-15 10:10:10"), jT808UploadLocationRequest.GPSTime);
  291. Assert.Equal(12222222, jT808UploadLocationRequest.Lat);
  292. Assert.Equal(132444444, jT808UploadLocationRequest.Lng);
  293. Assert.Equal(60, jT808UploadLocationRequest.Speed);
  294. Assert.Equal((uint)2, jT808UploadLocationRequest.StatusFlag);
  295. Assert.Equal(100, ((JT808_0x0200_0x01)jT808UploadLocationRequest.JT808LocationAttachData[JT808Constants.JT808_0x0200_0x01]).Mileage);
  296. Assert.Equal(55, ((JT808_0x0200_0x02)jT808UploadLocationRequest.JT808LocationAttachData[JT808Constants.JT808_0x0200_0x02]).Oil);
  297. }
  298. [Fact]
  299. public void Test5_3()
  300. {
  301. byte[] bytes = "7E0102400C01003000068109024A3130303330303030363831857E".ToHexBytes();
  302. var jT808Package = JT808Serializer.Deserialize<JT808Package>(bytes,JT808Version.JTT2013Force);
  303. jT808Package.Header.MessageBodyProperty.VersionFlag = false;//修改成 2013协议标识
  304. var newBytes = JT808Serializer.Serialize(jT808Package);//重新序列化
  305. var jt808PackageNew = JT808Serializer.Deserialize(newBytes);//验证是否修改标识符成功
  306. }
  307. [Fact]
  308. public void Test5_4()
  309. {
  310. byte[] bytes = "7e0200406c010030000681090e00000000000c0003026c936f074c794c0004036300d7210625155739010400000000052801cc00210625155739054145bbc91e4145a2fa1141450000004145bbc8194145a1370a4145000000240200002a0200002b04000000003001153101125f0a89860418231870850620757e".ToHexBytes();
  311. var json = JT808Serializer.Analyze(bytes, JT808Version.JTT2013Force);
  312. }
  313. [Fact]
  314. public void Test6()
  315. {
  316. JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200
  317. {
  318. AlarmFlag = 300000,
  319. Altitude = 40,
  320. GPSTime = DateTime.Parse("2018-07-15 10:10:10"),
  321. Lat = 12222222,
  322. Lng = 132444444,
  323. Speed = 60,
  324. Direction = 0,
  325. StatusFlag = 1002222,
  326. JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
  327. };
  328. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x01, new JT808_0x0200_0x01
  329. {
  330. Mileage = 100
  331. });
  332. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x02, new JT808_0x0200_0x02
  333. {
  334. Oil = 55
  335. });
  336. var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
  337. Assert.Equal("000493E0000F4AEE00BA7F0E07E4F11C0028003C000018071510101001040000006402020037", hex);
  338. }
  339. [Fact]
  340. public void Test6_1()
  341. {
  342. byte[] bodys = "000493E0000F4AEE00BA7F0E07E4F11C0028003C000018071510101001040000006402020037".ToHexBytes();
  343. string json = JT808Serializer.Analyze<JT808_0x0200>(bodys);
  344. }
  345. [Fact]
  346. public void Test7()
  347. {
  348. //"附加信息列表": [
  349. // {
  350. // "[01]附加信息Id": 1,
  351. // "[04]附加信息长度": 4,
  352. // "[000024C7]里程": 9415
  353. // },
  354. // {
  355. // "[2B]附加信息Id": 43,
  356. // "[04]附加信息长度": 4,
  357. // "[0B290B29]模拟量": 187239209
  358. // },
  359. // {
  360. // "[30]附加信息Id": 48,
  361. // "[01]附加信息长度": 1,
  362. // "[17]无线通信网络信号强度": 23
  363. // },
  364. // {
  365. // "[31]附加信息Id": 49,
  366. // "[01]附加信息长度": 1,
  367. // "[1B]GNSS定位卫星数": 27
  368. // },
  369. // {
  370. // "[00]未知附加信息Id": 0, 坑爹,相同的
  371. // "[04]未知附加信息长度": 4,
  372. // "未知附加信息": "000400CE0B29"
  373. // },
  374. // {
  375. // "[00]未知附加信息Id": 0, 坑爹,相同的
  376. // "[0C]未知附加信息长度": 12,
  377. // "未知附加信息": "000C00B289860620150013559848"
  378. // },
  379. // {
  380. // "[EB]未知附加信息Id": 235,
  381. // "[0E]未知附加信息长度": 14,
  382. // "未知附加信息": "EB0E000C00B289860620150013559848"
  383. // }
  384. //]
  385. byte[] bodys = "7E020000520111111111100002000000000000000301789B3406238AFA0000018B00F62104020046090104000024C72B040B290B2930011731011B000400CE0B29000C00B289860620150013559848EB0E000C00B2898606201500135598486C7E".ToHexBytes();
  386. var package = JT808Serializer1.Deserialize(bodys);
  387. JT808_0x0200 jT808UploadLocationRequest = (JT808_0x0200)package.Bodies;
  388. Assert.Single(jT808UploadLocationRequest.ExceptionLocationAttachOriginalData);
  389. }
  390. [Fact]
  391. public void Test_all_attcahids()
  392. {
  393. JT808Package jT808Package = new JT808Package();
  394. jT808Package.Header = new JT808Header
  395. {
  396. MsgId = Enums.JT808MsgId.位置信息汇报.ToUInt16Value(),
  397. ManualMsgNum = 8888,
  398. TerminalPhoneNo = "112233445566",
  399. };
  400. JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200();
  401. jT808UploadLocationRequest.AlarmFlag = 1;
  402. jT808UploadLocationRequest.Altitude = 40;
  403. jT808UploadLocationRequest.GPSTime = DateTime.Parse("2018-07-15 10:10:10");
  404. jT808UploadLocationRequest.Lat = 12222222;
  405. jT808UploadLocationRequest.Lng = 132444444;
  406. jT808UploadLocationRequest.Speed = 60;
  407. jT808UploadLocationRequest.Direction = 0;
  408. jT808UploadLocationRequest.StatusFlag = 2;
  409. jT808UploadLocationRequest.JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>();
  410. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x01, new JT808_0x0200_0x01
  411. {
  412. Mileage = 100
  413. });
  414. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x02, new JT808_0x0200_0x02
  415. {
  416. Oil = 55
  417. });
  418. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x03, new JT808_0x0200_0x03
  419. {
  420. Speed = 56
  421. });
  422. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x04, new JT808_0x0200_0x04
  423. {
  424. EventId = 1
  425. });
  426. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x11, new JT808_0x0200_0x11
  427. {
  428. AreaId = 1,
  429. JT808PositionType = Enums.JT808PositionType.圆形区域
  430. });
  431. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x12, new JT808_0x0200_0x12
  432. {
  433. AreaId = 1,
  434. JT808PositionType = Enums.JT808PositionType.圆形区域,
  435. Direction = Enums.JT808DirectionType.出
  436. });
  437. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x13, new JT808_0x0200_0x13
  438. {
  439. DrivenRoute = Enums.JT808DrivenRouteType.过长,
  440. DrivenRouteId = 2,
  441. Time = 34
  442. });
  443. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x25, new JT808_0x0200_0x25
  444. {
  445. CarSignalStatus = 23
  446. });
  447. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x2A, new JT808_0x0200_0x2A
  448. {
  449. IOStatus = 244
  450. });
  451. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x2B, new JT808_0x0200_0x2B
  452. {
  453. Analog = 242
  454. });
  455. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x30, new JT808_0x0200_0x30
  456. {
  457. WiFiSignalStrength = 0x02
  458. });
  459. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x31, new JT808_0x0200_0x31
  460. {
  461. GNSSCount = 0x05
  462. });
  463. jT808Package.Bodies = jT808UploadLocationRequest;
  464. var hex = JT808Serializer.Serialize(jT808Package).ToHexString();
  465. Assert.Equal("7E0200005C11223344556622B8000000010000000200BA7F0E07E4F11C0028003C00001807151010100104000000640202003703020038040200011105010000000112060100000001011307000000020022012504000000172A0200F42B04000000F2300102310105167E", hex);
  466. //7E0200005C11223344556622B8000000010000000200BA7F0E07E4F11C0028003C00001807151010100104000000640202003703020038040200011105010000000112060100000001011307000000020022012504000000172A0200F42B04000000F2300102310105167E
  467. //7E
  468. //02 00
  469. //00 5C
  470. //11 22 33 44 55 66
  471. //22 B8
  472. //00 00 00 01
  473. //00 00 00 02
  474. //00 BA 7F 0E
  475. //07 E4 F1 1C
  476. //00 28
  477. //00 3C
  478. //00 00
  479. //18 07 15 10 10 10
  480. //01
  481. // 04
  482. // 00 00 00 64
  483. //02
  484. // 02
  485. // 00 37
  486. //03
  487. // 02
  488. // 00 38
  489. //04
  490. // 02
  491. // 00 01
  492. //11
  493. // 05
  494. // 01 00 00 00 01
  495. //12
  496. // 06
  497. // 01 00 00 00 01 01
  498. //13
  499. // 07
  500. // 00 00 00 02 00 22 01
  501. //25
  502. // 04
  503. // 00 00 00 17
  504. //2A
  505. // 02
  506. // 00 F4
  507. //2B
  508. // 04
  509. // 00 00 00 F2
  510. //30
  511. // 01
  512. // 02
  513. //31
  514. // 01
  515. // 05
  516. //16
  517. //7E
  518. }
  519. [Fact]
  520. public void Test_JT808_0x0200_0x07_1()
  521. {
  522. JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200();
  523. jT808UploadLocationRequest.AlarmFlag = 1;
  524. jT808UploadLocationRequest.Altitude = 40;
  525. jT808UploadLocationRequest.GPSTime = DateTime.Parse("2021-05-28 18:10:10");
  526. jT808UploadLocationRequest.Lat = 12222222;
  527. jT808UploadLocationRequest.Lng = 132444444;
  528. jT808UploadLocationRequest.Speed = 60;
  529. jT808UploadLocationRequest.Direction = 0;
  530. jT808UploadLocationRequest.StatusFlag = 2;
  531. jT808UploadLocationRequest.JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>();
  532. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x07, new JT808_0x0200_0x07
  533. {
  534. BeiDou=new List<JT808_0x0200_0x07.SatelliteStatusInformation>()
  535. {
  536. new JT808_0x0200_0x07.SatelliteStatusInformation()
  537. {
  538. No=1,
  539. Elevation=3,
  540. AzimuthAngle=2
  541. },
  542. new JT808_0x0200_0x07.SatelliteStatusInformation()
  543. {
  544. No=2,
  545. Elevation=4,
  546. AzimuthAngle=5
  547. },
  548. new JT808_0x0200_0x07.SatelliteStatusInformation()
  549. {
  550. No=3,
  551. Elevation=5,
  552. AzimuthAngle=6
  553. },
  554. new JT808_0x0200_0x07.SatelliteStatusInformation()
  555. {
  556. No=4,
  557. Elevation=5,
  558. AzimuthAngle=6
  559. }
  560. },
  561. GPS=new List<JT808_0x0200_0x07.SatelliteStatusInformation>()
  562. {
  563. new JT808_0x0200_0x07.SatelliteStatusInformation()
  564. {
  565. No=2,
  566. Elevation=4,
  567. AzimuthAngle=5
  568. },
  569. new JT808_0x0200_0x07.SatelliteStatusInformation()
  570. {
  571. No=3,
  572. Elevation=5,
  573. AzimuthAngle=6
  574. },
  575. new JT808_0x0200_0x07.SatelliteStatusInformation()
  576. {
  577. No=4,
  578. Elevation=5,
  579. AzimuthAngle=6
  580. }
  581. },
  582. GLONASS = new List<JT808_0x0200_0x07.SatelliteStatusInformation>
  583. {
  584. new JT808_0x0200_0x07.SatelliteStatusInformation()
  585. {
  586. No=3,
  587. Elevation=5,
  588. AzimuthAngle=6
  589. },
  590. new JT808_0x0200_0x07.SatelliteStatusInformation()
  591. {
  592. No=4,
  593. Elevation=5,
  594. AzimuthAngle=6
  595. }
  596. },
  597. Galileo =new List<JT808_0x0200_0x07.SatelliteStatusInformation>
  598. {
  599. new JT808_0x0200_0x07.SatelliteStatusInformation()
  600. {
  601. No=4,
  602. Elevation=5,
  603. AzimuthAngle=6
  604. }
  605. }
  606. });
  607. var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
  608. Assert.Equal("000000010000000200BA7F0E07E4F11C0028003C0000210528181010072C0401030002020400050305000604050006030204000503050006040500060203050006040500060104050006", hex);
  609. }
  610. [Fact]
  611. public void Test_JT808_0x0200_0x07_2()
  612. {
  613. byte[] bytes = "000000010000000200BA7F0E07E4F11C0028003C0000210528181010072C0401030002020400050305000604050006030204000503050006040500060203050006040500060104050006".ToHexBytes();
  614. var jT808_0X0200 = JT808Serializer.Deserialize<JT808_0x0200>(bytes);
  615. var jT808_0x0200_0x07=(JT808_0x0200_0x07)jT808_0X0200.JT808LocationAttachData[JT808Constants.JT808_0x0200_0x07];
  616. Assert.Equal((byte)(4 + (4 * 4 + 4 * 3 + 4 * 2 + 4)), jT808_0x0200_0x07.AttachInfoLength);
  617. Assert.Equal(4, jT808_0x0200_0x07.BeiDou.Count);
  618. Assert.Equal(3, jT808_0x0200_0x07.GPS.Count);
  619. Assert.Equal(2, jT808_0x0200_0x07.GLONASS.Count);
  620. Assert.Single(jT808_0x0200_0x07.Galileo);
  621. }
  622. [Fact]
  623. public void LatLngTest1_1()
  624. {
  625. JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200
  626. {
  627. AlarmFlag = 1,
  628. Altitude = 40,
  629. GPSTime = DateTime.Parse("2018-07-15 10:10:10"),
  630. Lat = -12222222,
  631. Lng = -132444444,
  632. Speed = 60,
  633. Direction = 0,
  634. JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
  635. };
  636. jT808UploadLocationRequest.StatusFlag = 0x18000000;
  637. var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
  638. Assert.Equal("0000000118000000FF4580F2F81B0EE40028003C0000180715101010", hex);
  639. }
  640. [Fact]
  641. public void LatLngTest1_2()
  642. {
  643. byte[] bodys = "0000000118000000FF4580F2F81B0EE40028003C0000180715101010".ToHexBytes();
  644. JT808_0x0200 jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x0200>(bodys);
  645. Assert.Equal(1u, jT808UploadLocationRequest.AlarmFlag);
  646. Assert.Equal(402653184u, jT808UploadLocationRequest.StatusFlag);
  647. Assert.Equal(DateTime.Parse("2018-07-15 10:10:10"), jT808UploadLocationRequest.GPSTime);
  648. Assert.Equal(-12222222, jT808UploadLocationRequest.Lat);
  649. Assert.Equal(-132444444, jT808UploadLocationRequest.Lng);
  650. Assert.Equal(60, jT808UploadLocationRequest.Speed); //‭402653184‬
  651. }
  652. [Fact]
  653. public void LatLngTest2_1()
  654. {
  655. JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200
  656. {
  657. AlarmFlag = 1,
  658. Altitude = 40,
  659. GPSTime = DateTime.Parse("2018-07-15 10:10:10"),
  660. Lat = -12222222,
  661. Lng = -132444444,
  662. Speed = 60,
  663. Direction = 0,
  664. JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
  665. };
  666. jT808UploadLocationRequest.StatusFlag = 0x18000000 | 0x302;
  667. var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
  668. Assert.Equal("0000000118000302FF4580F2F81B0EE40028003C0000180715101010", hex);
  669. }
  670. [Fact]
  671. public void LatLngTest2_2()
  672. {
  673. byte[] bodys = "0000000118000302FF4580F2F81B0EE40028003C0000180715101010".ToHexBytes();
  674. JT808_0x0200 jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x0200>(bodys);
  675. Assert.Equal(1u, jT808UploadLocationRequest.AlarmFlag);
  676. Assert.Equal((uint)(0x18000000 | 0x302), jT808UploadLocationRequest.StatusFlag);
  677. Assert.Equal(DateTime.Parse("2018-07-15 10:10:10"), jT808UploadLocationRequest.GPSTime);
  678. Assert.Equal(-12222222, jT808UploadLocationRequest.Lat);
  679. Assert.Equal(-132444444, jT808UploadLocationRequest.Lng);
  680. Assert.Equal(60, jT808UploadLocationRequest.Speed); //‭402653184‬
  681. }
  682. [Fact]
  683. public void LatTest1_1()
  684. {
  685. JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200
  686. {
  687. AlarmFlag = 1,
  688. Altitude = 40,
  689. GPSTime = DateTime.Parse("2018-07-15 10:10:10"),
  690. Lat = -12222222,
  691. Lng = 132444444,
  692. Speed = 60,
  693. Direction = 0,
  694. JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
  695. };
  696. jT808UploadLocationRequest.StatusFlag = 0x10000000;
  697. var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
  698. Assert.Equal("0000000110000000FF4580F207E4F11C0028003C0000180715101010", hex);
  699. }
  700. [Fact]
  701. public void LatTest1_2()
  702. {
  703. byte[] bodys = "0000000110000000FF4580F207E4F11C0028003C0000180715101010".ToHexBytes();
  704. JT808_0x0200 jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x0200>(bodys);
  705. Assert.Equal(1u, jT808UploadLocationRequest.AlarmFlag);
  706. Assert.Equal((uint)0x10000000, jT808UploadLocationRequest.StatusFlag);
  707. Assert.Equal(DateTime.Parse("2018-07-15 10:10:10"), jT808UploadLocationRequest.GPSTime);
  708. Assert.Equal(-12222222, jT808UploadLocationRequest.Lat);
  709. Assert.Equal(132444444, jT808UploadLocationRequest.Lng);
  710. Assert.Equal(60, jT808UploadLocationRequest.Speed); //‭402653184‬
  711. }
  712. [Fact]
  713. public void LatTest2()
  714. {
  715. JT808Exception exception= Assert.Throws<JT808Exception>(() => {
  716. JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200
  717. {
  718. AlarmFlag = 1,
  719. Altitude = 40,
  720. GPSTime = DateTime.Parse("2018-07-15 10:10:10"),
  721. Lat = -12222222,
  722. Lng = 132444444,
  723. Speed = 60,
  724. Direction = 0,
  725. JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
  726. };
  727. jT808UploadLocationRequest.StatusFlag = 1111;
  728. var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
  729. });
  730. Assert.Equal(JT808ErrorCode.LatOrLngError, exception.ErrorCode);
  731. }
  732. [Fact]
  733. public void LatTest3_1()
  734. {
  735. JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200
  736. {
  737. AlarmFlag = 1,
  738. Altitude = 40,
  739. GPSTime = DateTime.Parse("2018-07-15 10:10:10"),
  740. Lat = -12222222,
  741. Lng = 132444444,
  742. Speed = 60,
  743. Direction = 0,
  744. JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
  745. };
  746. jT808UploadLocationRequest.StatusFlag = 0x10000000 | 0x000300;
  747. var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
  748. Assert.Equal("0000000110000300FF4580F207E4F11C0028003C0000180715101010", hex);
  749. }
  750. [Fact]
  751. public void LatTest3_2()
  752. {
  753. byte[] bodys = "0000000110000300FF4580F207E4F11C0028003C0000180715101010".ToHexBytes();
  754. JT808_0x0200 jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x0200>(bodys);
  755. Assert.Equal(1u, jT808UploadLocationRequest.AlarmFlag);
  756. Assert.Equal((uint)(0x10000000 | 0x000300), jT808UploadLocationRequest.StatusFlag);
  757. Assert.Equal(DateTime.Parse("2018-07-15 10:10:10"), jT808UploadLocationRequest.GPSTime);
  758. Assert.Equal(-12222222, jT808UploadLocationRequest.Lat);
  759. Assert.Equal(132444444, jT808UploadLocationRequest.Lng);
  760. Assert.Equal(60, jT808UploadLocationRequest.Speed); //‭402653184‬
  761. }
  762. [Fact]
  763. public void LngTest1_1()
  764. {
  765. JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200
  766. {
  767. AlarmFlag = 1,
  768. Altitude = 40,
  769. GPSTime = DateTime.Parse("2018-07-15 10:10:10"),
  770. Lat = 12222222,
  771. Lng = -132444444,
  772. Speed = 60,
  773. Direction = 0,
  774. JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
  775. };
  776. jT808UploadLocationRequest.StatusFlag = 0x8000000;
  777. var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
  778. Assert.Equal("000000010800000000BA7F0EF81B0EE40028003C0000180715101010", hex);
  779. }
  780. [Fact]
  781. public void LngTest1_2()
  782. {
  783. byte[] bodys = "000000010800000000BA7F0EF81B0EE40028003C0000180715101010".ToHexBytes();
  784. JT808_0x0200 jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x0200>(bodys);
  785. Assert.Equal(1u, jT808UploadLocationRequest.AlarmFlag);
  786. Assert.Equal((uint)0x8000000, jT808UploadLocationRequest.StatusFlag);
  787. Assert.Equal(DateTime.Parse("2018-07-15 10:10:10"), jT808UploadLocationRequest.GPSTime);
  788. Assert.Equal(12222222, jT808UploadLocationRequest.Lat);
  789. Assert.Equal(-132444444, jT808UploadLocationRequest.Lng);
  790. Assert.Equal(60, jT808UploadLocationRequest.Speed); //‭402653184‬
  791. }
  792. [Fact]
  793. public void LngTest2()
  794. {
  795. JT808Exception exception = Assert.Throws<JT808Exception>(() => {
  796. JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200
  797. {
  798. AlarmFlag = 1,
  799. Altitude = 40,
  800. GPSTime = DateTime.Parse("2018-07-15 10:10:10"),
  801. Lat = 12222222,
  802. Lng = -132444444,
  803. Speed = 60,
  804. Direction = 0,
  805. JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
  806. };
  807. jT808UploadLocationRequest.StatusFlag = 1111;
  808. var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
  809. });
  810. Assert.Equal(JT808ErrorCode.LatOrLngError, exception.ErrorCode);
  811. }
  812. [Fact]
  813. public void LngTest3_1()
  814. {
  815. JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200
  816. {
  817. AlarmFlag = 1,
  818. Altitude = 40,
  819. GPSTime = DateTime.Parse("2018-07-15 10:10:10"),
  820. Lat = 12222222,
  821. Lng = -132444444,
  822. Speed = 60,
  823. Direction = 0,
  824. JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
  825. };
  826. jT808UploadLocationRequest.StatusFlag = 0x8000000|0x6601;
  827. var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
  828. Assert.Equal("000000010800660100BA7F0EF81B0EE40028003C0000180715101010", hex);
  829. }
  830. [Fact]
  831. public void LngTest3_2()
  832. {
  833. byte[] bodys = "000000010800660100BA7F0EF81B0EE40028003C0000180715101010".ToHexBytes();
  834. JT808_0x0200 jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x0200>(bodys);
  835. Assert.Equal(1u, jT808UploadLocationRequest.AlarmFlag);
  836. Assert.Equal((uint)(0x8000000 | 0x6601), jT808UploadLocationRequest.StatusFlag);
  837. Assert.Equal(DateTime.Parse("2018-07-15 10:10:10"), jT808UploadLocationRequest.GPSTime);
  838. Assert.Equal(12222222, jT808UploadLocationRequest.Lat);
  839. Assert.Equal(-132444444, jT808UploadLocationRequest.Lng);
  840. Assert.Equal(60, jT808UploadLocationRequest.Speed); //‭402653184‬
  841. }
  842. }
  843. }