Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

743 рядки
36 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<JT808LocationAttachImpl0x06>();
  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(0x06, new JT808LocationAttachImpl0x06
  188. {
  189. Age = 18,
  190. Gender = 1,
  191. UserName = "smallchi"
  192. });
  193. var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
  194. Assert.Equal("000000010000000200BA7F0E07E4F11C0028003C000018071510101001040000006402020037060D0000001201736D616C6C636869", hex);
  195. }
  196. [Fact]
  197. public void Test4()
  198. {
  199. // 1.添加自定义附加信息扩展 AddJT808LocationAttachMethod
  200. 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 06 0D 00 00 00 12 01 73 6D 61 6C 6C 63 68 69".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 jT808LocationAttachImpl0x06 = (JT808LocationAttachImpl0x06)jT808UploadLocationRequest.JT808CustomLocationAttachData[0x06];
  211. Assert.Equal(18, jT808LocationAttachImpl0x06.Age);
  212. Assert.Equal(1, jT808LocationAttachImpl0x06.Gender);
  213. Assert.Equal("smallchi", jT808LocationAttachImpl0x06.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 Test6()
  300. {
  301. JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200
  302. {
  303. AlarmFlag = 300000,
  304. Altitude = 40,
  305. GPSTime = DateTime.Parse("2018-07-15 10:10:10"),
  306. Lat = 12222222,
  307. Lng = 132444444,
  308. Speed = 60,
  309. Direction = 0,
  310. StatusFlag = 1002222,
  311. JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
  312. };
  313. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x01, new JT808_0x0200_0x01
  314. {
  315. Mileage = 100
  316. });
  317. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x02, new JT808_0x0200_0x02
  318. {
  319. Oil = 55
  320. });
  321. var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
  322. Assert.Equal("000493E0000F4AEE00BA7F0E07E4F11C0028003C000018071510101001040000006402020037", hex);
  323. }
  324. [Fact]
  325. public void Test6_1()
  326. {
  327. byte[] bodys = "000493E0000F4AEE00BA7F0E07E4F11C0028003C000018071510101001040000006402020037".ToHexBytes();
  328. string json = JT808Serializer.Analyze<JT808_0x0200>(bodys);
  329. }
  330. [Fact]
  331. public void Test7()
  332. {
  333. //"附加信息列表": [
  334. // {
  335. // "[01]附加信息Id": 1,
  336. // "[04]附加信息长度": 4,
  337. // "[000024C7]里程": 9415
  338. // },
  339. // {
  340. // "[2B]附加信息Id": 43,
  341. // "[04]附加信息长度": 4,
  342. // "[0B290B29]模拟量": 187239209
  343. // },
  344. // {
  345. // "[30]附加信息Id": 48,
  346. // "[01]附加信息长度": 1,
  347. // "[17]无线通信网络信号强度": 23
  348. // },
  349. // {
  350. // "[31]附加信息Id": 49,
  351. // "[01]附加信息长度": 1,
  352. // "[1B]GNSS定位卫星数": 27
  353. // },
  354. // {
  355. // "[00]未知附加信息Id": 0, 坑爹,相同的
  356. // "[04]未知附加信息长度": 4,
  357. // "未知附加信息": "000400CE0B29"
  358. // },
  359. // {
  360. // "[00]未知附加信息Id": 0, 坑爹,相同的
  361. // "[0C]未知附加信息长度": 12,
  362. // "未知附加信息": "000C00B289860620150013559848"
  363. // },
  364. // {
  365. // "[EB]未知附加信息Id": 235,
  366. // "[0E]未知附加信息长度": 14,
  367. // "未知附加信息": "EB0E000C00B289860620150013559848"
  368. // }
  369. //]
  370. byte[] bodys = "7E020000520111111111100002000000000000000301789B3406238AFA0000018B00F62104020046090104000024C72B040B290B2930011731011B000400CE0B29000C00B289860620150013559848EB0E000C00B2898606201500135598486C7E".ToHexBytes();
  371. var package = JT808Serializer1.Deserialize(bodys);
  372. JT808_0x0200 jT808UploadLocationRequest = (JT808_0x0200)package.Bodies;
  373. Assert.Single(jT808UploadLocationRequest.ExceptionLocationAttachOriginalData);
  374. }
  375. [Fact]
  376. public void Test_all_attcahids()
  377. {
  378. JT808Package jT808Package = new JT808Package();
  379. jT808Package.Header = new JT808Header
  380. {
  381. MsgId = Enums.JT808MsgId.位置信息汇报.ToUInt16Value(),
  382. ManualMsgNum = 8888,
  383. TerminalPhoneNo = "112233445566",
  384. };
  385. JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200();
  386. jT808UploadLocationRequest.AlarmFlag = 1;
  387. jT808UploadLocationRequest.Altitude = 40;
  388. jT808UploadLocationRequest.GPSTime = DateTime.Parse("2018-07-15 10:10:10");
  389. jT808UploadLocationRequest.Lat = 12222222;
  390. jT808UploadLocationRequest.Lng = 132444444;
  391. jT808UploadLocationRequest.Speed = 60;
  392. jT808UploadLocationRequest.Direction = 0;
  393. jT808UploadLocationRequest.StatusFlag = 2;
  394. jT808UploadLocationRequest.JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>();
  395. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x01, new JT808_0x0200_0x01
  396. {
  397. Mileage = 100
  398. });
  399. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x02, new JT808_0x0200_0x02
  400. {
  401. Oil = 55
  402. });
  403. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x03, new JT808_0x0200_0x03
  404. {
  405. Speed = 56
  406. });
  407. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x04, new JT808_0x0200_0x04
  408. {
  409. EventId = 1
  410. });
  411. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x11, new JT808_0x0200_0x11
  412. {
  413. AreaId = 1,
  414. JT808PositionType = Enums.JT808PositionType.圆形区域
  415. });
  416. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x12, new JT808_0x0200_0x12
  417. {
  418. AreaId = 1,
  419. JT808PositionType = Enums.JT808PositionType.圆形区域,
  420. Direction = Enums.JT808DirectionType.出
  421. });
  422. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x13, new JT808_0x0200_0x13
  423. {
  424. DrivenRoute = Enums.JT808DrivenRouteType.过长,
  425. DrivenRouteId = 2,
  426. Time = 34
  427. });
  428. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x25, new JT808_0x0200_0x25
  429. {
  430. CarSignalStatus = 23
  431. });
  432. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x2A, new JT808_0x0200_0x2A
  433. {
  434. IOStatus = 244
  435. });
  436. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x2B, new JT808_0x0200_0x2B
  437. {
  438. Analog = 242
  439. });
  440. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x30, new JT808_0x0200_0x30
  441. {
  442. WiFiSignalStrength = 0x02
  443. });
  444. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x31, new JT808_0x0200_0x31
  445. {
  446. GNSSCount = 0x05
  447. });
  448. jT808Package.Bodies = jT808UploadLocationRequest;
  449. var hex = JT808Serializer.Serialize(jT808Package).ToHexString();
  450. Assert.Equal("7E0200005C11223344556622B8000000010000000200BA7F0E07E4F11C0028003C00001807151010100104000000640202003703020038040200011105010000000112060100000001011307000000020022012504000000172A0200F42B04000000F2300102310105167E", hex);
  451. //7E0200005C11223344556622B8000000010000000200BA7F0E07E4F11C0028003C00001807151010100104000000640202003703020038040200011105010000000112060100000001011307000000020022012504000000172A0200F42B04000000F2300102310105167E
  452. //7E
  453. //02 00
  454. //00 5C
  455. //11 22 33 44 55 66
  456. //22 B8
  457. //00 00 00 01
  458. //00 00 00 02
  459. //00 BA 7F 0E
  460. //07 E4 F1 1C
  461. //00 28
  462. //00 3C
  463. //00 00
  464. //18 07 15 10 10 10
  465. //01
  466. // 04
  467. // 00 00 00 64
  468. //02
  469. // 02
  470. // 00 37
  471. //03
  472. // 02
  473. // 00 38
  474. //04
  475. // 02
  476. // 00 01
  477. //11
  478. // 05
  479. // 01 00 00 00 01
  480. //12
  481. // 06
  482. // 01 00 00 00 01 01
  483. //13
  484. // 07
  485. // 00 00 00 02 00 22 01
  486. //25
  487. // 04
  488. // 00 00 00 17
  489. //2A
  490. // 02
  491. // 00 F4
  492. //2B
  493. // 04
  494. // 00 00 00 F2
  495. //30
  496. // 01
  497. // 02
  498. //31
  499. // 01
  500. // 05
  501. //16
  502. //7E
  503. }
  504. [Fact]
  505. public void LatLngTest1_1()
  506. {
  507. JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200
  508. {
  509. AlarmFlag = 1,
  510. Altitude = 40,
  511. GPSTime = DateTime.Parse("2018-07-15 10:10:10"),
  512. Lat = -12222222,
  513. Lng = -132444444,
  514. Speed = 60,
  515. Direction = 0,
  516. JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
  517. };
  518. jT808UploadLocationRequest.StatusFlag = 0x18000000;
  519. var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
  520. Assert.Equal("0000000118000000FF4580F2F81B0EE40028003C0000180715101010", hex);
  521. }
  522. [Fact]
  523. public void LatLngTest1_2()
  524. {
  525. byte[] bodys = "0000000118000000FF4580F2F81B0EE40028003C0000180715101010".ToHexBytes();
  526. JT808_0x0200 jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x0200>(bodys);
  527. Assert.Equal(1u, jT808UploadLocationRequest.AlarmFlag);
  528. Assert.Equal(402653184u, jT808UploadLocationRequest.StatusFlag);
  529. Assert.Equal(DateTime.Parse("2018-07-15 10:10:10"), jT808UploadLocationRequest.GPSTime);
  530. Assert.Equal(-12222222, jT808UploadLocationRequest.Lat);
  531. Assert.Equal(-132444444, jT808UploadLocationRequest.Lng);
  532. Assert.Equal(60, jT808UploadLocationRequest.Speed); //‭402653184‬
  533. }
  534. [Fact]
  535. public void LatLngTest2_1()
  536. {
  537. JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200
  538. {
  539. AlarmFlag = 1,
  540. Altitude = 40,
  541. GPSTime = DateTime.Parse("2018-07-15 10:10:10"),
  542. Lat = -12222222,
  543. Lng = -132444444,
  544. Speed = 60,
  545. Direction = 0,
  546. JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
  547. };
  548. jT808UploadLocationRequest.StatusFlag = 0x18000000 | 0x302;
  549. var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
  550. Assert.Equal("0000000118000302FF4580F2F81B0EE40028003C0000180715101010", hex);
  551. }
  552. [Fact]
  553. public void LatLngTest2_2()
  554. {
  555. byte[] bodys = "0000000118000302FF4580F2F81B0EE40028003C0000180715101010".ToHexBytes();
  556. JT808_0x0200 jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x0200>(bodys);
  557. Assert.Equal(1u, jT808UploadLocationRequest.AlarmFlag);
  558. Assert.Equal((uint)(0x18000000 | 0x302), jT808UploadLocationRequest.StatusFlag);
  559. Assert.Equal(DateTime.Parse("2018-07-15 10:10:10"), jT808UploadLocationRequest.GPSTime);
  560. Assert.Equal(-12222222, jT808UploadLocationRequest.Lat);
  561. Assert.Equal(-132444444, jT808UploadLocationRequest.Lng);
  562. Assert.Equal(60, jT808UploadLocationRequest.Speed); //‭402653184‬
  563. }
  564. [Fact]
  565. public void LatTest1_1()
  566. {
  567. JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200
  568. {
  569. AlarmFlag = 1,
  570. Altitude = 40,
  571. GPSTime = DateTime.Parse("2018-07-15 10:10:10"),
  572. Lat = -12222222,
  573. Lng = 132444444,
  574. Speed = 60,
  575. Direction = 0,
  576. JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
  577. };
  578. jT808UploadLocationRequest.StatusFlag = 0x10000000;
  579. var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
  580. Assert.Equal("0000000110000000FF4580F207E4F11C0028003C0000180715101010", hex);
  581. }
  582. [Fact]
  583. public void LatTest1_2()
  584. {
  585. byte[] bodys = "0000000110000000FF4580F207E4F11C0028003C0000180715101010".ToHexBytes();
  586. JT808_0x0200 jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x0200>(bodys);
  587. Assert.Equal(1u, jT808UploadLocationRequest.AlarmFlag);
  588. Assert.Equal((uint)0x10000000, jT808UploadLocationRequest.StatusFlag);
  589. Assert.Equal(DateTime.Parse("2018-07-15 10:10:10"), jT808UploadLocationRequest.GPSTime);
  590. Assert.Equal(-12222222, jT808UploadLocationRequest.Lat);
  591. Assert.Equal(132444444, jT808UploadLocationRequest.Lng);
  592. Assert.Equal(60, jT808UploadLocationRequest.Speed); //‭402653184‬
  593. }
  594. [Fact]
  595. public void LatTest2()
  596. {
  597. JT808Exception exception= Assert.Throws<JT808Exception>(() => {
  598. JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200
  599. {
  600. AlarmFlag = 1,
  601. Altitude = 40,
  602. GPSTime = DateTime.Parse("2018-07-15 10:10:10"),
  603. Lat = -12222222,
  604. Lng = 132444444,
  605. Speed = 60,
  606. Direction = 0,
  607. JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
  608. };
  609. jT808UploadLocationRequest.StatusFlag = 1111;
  610. var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
  611. });
  612. Assert.Equal(JT808ErrorCode.LatOrLngError, exception.ErrorCode);
  613. }
  614. [Fact]
  615. public void LatTest3_1()
  616. {
  617. JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200
  618. {
  619. AlarmFlag = 1,
  620. Altitude = 40,
  621. GPSTime = DateTime.Parse("2018-07-15 10:10:10"),
  622. Lat = -12222222,
  623. Lng = 132444444,
  624. Speed = 60,
  625. Direction = 0,
  626. JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
  627. };
  628. jT808UploadLocationRequest.StatusFlag = 0x10000000 | 0x000300;
  629. var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
  630. Assert.Equal("0000000110000300FF4580F207E4F11C0028003C0000180715101010", hex);
  631. }
  632. [Fact]
  633. public void LatTest3_2()
  634. {
  635. byte[] bodys = "0000000110000300FF4580F207E4F11C0028003C0000180715101010".ToHexBytes();
  636. JT808_0x0200 jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x0200>(bodys);
  637. Assert.Equal(1u, jT808UploadLocationRequest.AlarmFlag);
  638. Assert.Equal((uint)(0x10000000 | 0x000300), jT808UploadLocationRequest.StatusFlag);
  639. Assert.Equal(DateTime.Parse("2018-07-15 10:10:10"), jT808UploadLocationRequest.GPSTime);
  640. Assert.Equal(-12222222, jT808UploadLocationRequest.Lat);
  641. Assert.Equal(132444444, jT808UploadLocationRequest.Lng);
  642. Assert.Equal(60, jT808UploadLocationRequest.Speed); //‭402653184‬
  643. }
  644. [Fact]
  645. public void LngTest1_1()
  646. {
  647. JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200
  648. {
  649. AlarmFlag = 1,
  650. Altitude = 40,
  651. GPSTime = DateTime.Parse("2018-07-15 10:10:10"),
  652. Lat = 12222222,
  653. Lng = -132444444,
  654. Speed = 60,
  655. Direction = 0,
  656. JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
  657. };
  658. jT808UploadLocationRequest.StatusFlag = 0x8000000;
  659. var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
  660. Assert.Equal("000000010800000000BA7F0EF81B0EE40028003C0000180715101010", hex);
  661. }
  662. [Fact]
  663. public void LngTest1_2()
  664. {
  665. byte[] bodys = "000000010800000000BA7F0EF81B0EE40028003C0000180715101010".ToHexBytes();
  666. JT808_0x0200 jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x0200>(bodys);
  667. Assert.Equal(1u, jT808UploadLocationRequest.AlarmFlag);
  668. Assert.Equal((uint)0x8000000, jT808UploadLocationRequest.StatusFlag);
  669. Assert.Equal(DateTime.Parse("2018-07-15 10:10:10"), jT808UploadLocationRequest.GPSTime);
  670. Assert.Equal(12222222, jT808UploadLocationRequest.Lat);
  671. Assert.Equal(-132444444, jT808UploadLocationRequest.Lng);
  672. Assert.Equal(60, jT808UploadLocationRequest.Speed); //‭402653184‬
  673. }
  674. [Fact]
  675. public void LngTest2()
  676. {
  677. JT808Exception exception = Assert.Throws<JT808Exception>(() => {
  678. JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200
  679. {
  680. AlarmFlag = 1,
  681. Altitude = 40,
  682. GPSTime = DateTime.Parse("2018-07-15 10:10:10"),
  683. Lat = 12222222,
  684. Lng = -132444444,
  685. Speed = 60,
  686. Direction = 0,
  687. JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
  688. };
  689. jT808UploadLocationRequest.StatusFlag = 1111;
  690. var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
  691. });
  692. Assert.Equal(JT808ErrorCode.LatOrLngError, exception.ErrorCode);
  693. }
  694. [Fact]
  695. public void LngTest3_1()
  696. {
  697. JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200
  698. {
  699. AlarmFlag = 1,
  700. Altitude = 40,
  701. GPSTime = DateTime.Parse("2018-07-15 10:10:10"),
  702. Lat = 12222222,
  703. Lng = -132444444,
  704. Speed = 60,
  705. Direction = 0,
  706. JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
  707. };
  708. jT808UploadLocationRequest.StatusFlag = 0x8000000|0x6601;
  709. var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
  710. Assert.Equal("000000010800660100BA7F0EF81B0EE40028003C0000180715101010", hex);
  711. }
  712. [Fact]
  713. public void LngTest3_2()
  714. {
  715. byte[] bodys = "000000010800660100BA7F0EF81B0EE40028003C0000180715101010".ToHexBytes();
  716. JT808_0x0200 jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x0200>(bodys);
  717. Assert.Equal(1u, jT808UploadLocationRequest.AlarmFlag);
  718. Assert.Equal((uint)(0x8000000 | 0x6601), jT808UploadLocationRequest.StatusFlag);
  719. Assert.Equal(DateTime.Parse("2018-07-15 10:10:10"), jT808UploadLocationRequest.GPSTime);
  720. Assert.Equal(12222222, jT808UploadLocationRequest.Lat);
  721. Assert.Equal(-132444444, jT808UploadLocationRequest.Lng);
  722. Assert.Equal(60, jT808UploadLocationRequest.Speed); //‭402653184‬
  723. }
  724. }
  725. }