예제 #1
0
        public void Test1_1()
        {
            //7E
            //81 03
            //00 0A
            //00
            //01 23 45 67 89 00
            //0A 01
            //00 00 00 01
            //04
            // 00 00 00 0A
            //05
            //7E

            byte[]       bytes        = "7E8103000A000123456789000A0100000001040000000A057E".ToHexBytes();
            JT808Package jT808_0X8103 = JT808Serializer.Deserialize <JT808Package>(bytes);

            Assert.Equal(Enums.JT808MsgId.设置终端参数.ToUInt16Value(), jT808_0X8103.Header.MsgId);
            Assert.Equal(10, jT808_0X8103.Header.MsgNum);
            Assert.Equal("123456789", jT808_0X8103.Header.TerminalPhoneNo);

            JT808_0x8103 JT808Bodies = (JT808_0x8103)jT808_0X8103.Bodies;

            foreach (var item in JT808Bodies.ParamList)
            {
                Assert.Equal(0x0001u, ((JT808_0x8103_0x0001)item).ParamId);
                Assert.Equal(4, ((JT808_0x8103_0x0001)item).ParamLength);
                Assert.Equal(10u, ((JT808_0x8103_0x0001)item).ParamValue);
            }
        }
예제 #2
0
        public void Test3()
        {
            var JT808_0x8103 = new JT808_0x8103
            {
                ParamList       = new List <JT808_0x8103_BodyBase>(),
                CustomParamList = new List <JT808_0x8103_CustomBodyBase> {
                    new JT808_0x8103_0x0075()
                    {
                        AudioOutputEnabled = 1,
                        OSD                         = 2,
                        RTS_EncodeMode              = 3,
                        RTS_KF_Interval             = 4,
                        RTS_Resolution              = 5,
                        RTS_Target_CodeRate         = 6,
                        RTS_Target_FPS              = 7,
                        StreamStore_EncodeMode      = 8,
                        StreamStore_KF_Interval     = 9,
                        StreamStore_Resolution      = 10,
                        StreamStore_Target_CodeRate = 11,
                        StreamStore_Target_FPS      = 12
                    }
                }
            };
            var customParams = Newtonsoft.Json.JsonConvert.SerializeObject(JT808_0x8103.CustomParamList);
            //"[{\"ParamId\":117,\"ParamLength\":21,\"RTS_EncodeMode\":3,\"RTS_Resolution\":5,\"RTS_KF_Interval\":4,\"RTS_Target_FPS\":7,\"RTS_Target_CodeRate\":6,\"StreamStore_EncodeMode\":8,\"StreamStore_Resolution\":10,\"StreamStore_KF_Interval\":9,\"StreamStore_Target_FPS\":12,\"StreamStore_Target_CodeRate\":11,\"OSD\":2,\"AudioOutputEnabled\":1}]"
            var hex = JT808Serializer.Serialize(JT808_0x8103).ToHexString();

            //"010000007515030500040700000006080A00090C0000000B000201"
            Assert.Equal("010000007515030500040700000006080A00090C0000000B000201", hex);
        }
예제 #3
0
        public void Test2_1()
        {
            byte[]       bytes        = "0200000001040000000A000000130D7777772E62616964752E636F6D".ToHexBytes();
            JT808_0x8103 jT808_0X8103 = JT808Serializer.Deserialize <JT808_0x8103>(bytes);

            foreach (var item in jT808_0X8103.ParamList)
            {
                switch (item.ParamId)
                {
                case 0x0001:
                    Assert.Equal(0x0001u, ((JT808_0x8103_0x0001)item).ParamId);
                    Assert.Equal(4, ((JT808_0x8103_0x0001)item).ParamLength);
                    Assert.Equal(10u, ((JT808_0x8103_0x0001)item).ParamValue);
                    break;

                case 0x0013:
                    Assert.Equal(0x0013u, ((JT808_0x8103_0x0013)item).ParamId);
                    Assert.Equal("www.baidu.com", ((JT808_0x8103_0x0013)item).ParamValue);
                    break;

                default:
                    break;
                }
            }
        }
예제 #4
0
        public void Serializer()
        {
            JT808_0x8103 jT808UploadLocationRequest = new JT808_0x8103
            {
                ParamList = new List <JT808_0x8103_BodyBase> {
                    new JT808_0x8103_0xF364 {
                        ActiveDistancePhotographyDistanceInterval = 1,
                        ActivelyTimePhotoInterval = 2,
                        ActivePhotographyStrategy = 3,
                        AlarmEnable = 4,
                        AlarmJudgeSpeedThreshold               = 5,
                        AlarmPhotoVehicleCloseDistance         = 6,
                        AlarmPhotoVehicleCloseDistanceInterval = 7,
                        BarrierAlarmPhotographs        = 8,
                        DistanceThresholdObstacleAlarm = 9,
                        EventEnable = 10,
                        ForwardCollisionAlarmInterval                        = 11,
                        ForwardCollisionAlarmPhotographs                     = 12,
                        ForwardCollisionWarningTimeThreshold                 = 13,
                        FrequentAlarmJudgmentNumberChannelChange             = 14,
                        FrequentChannelChangeAlarmJudgmentTimePeriod         = 15,
                        FrequentChannelChangeAlarmPhotos                     = 16,
                        FrequentLaneChangeAlarmInterval                      = 17,
                        GradedSpeedThresholdLaneDeviationAlarm               = 18,
                        HierarchicalSpeedThresholdForwardCollisionWarning    = 19,
                        HierarchicalSpeedThresholdFrequentChannelChangeAlarm = 20,
                        HierarchicalSpeedThresholdObstacleAlarm              = 21,
                        LaneDepartureAlarmPhoto         = 22,
                        LaneDepartureAlarmPhotoInterval = 23,
                        ObstacleAlarmInterval           = 24,
                        PedestrianCollisionAlarmEnablingSpeedThreshold = 25,
                        PedestrianCollisionAlarmInterval      = 26,
                        PedestrianCollisionAlarmPhotos        = 27,
                        PedestrianCollisionAlarmTimeThreshold = 28,
                        PhotoResolution = 29,
                        Placeholder1    = 30,
                        Placeholder2    = new byte[] { 1, 2, 3, 4 },
                        RoadSignRecognitionPhotographs         = 32,
                        RoadSignRecognitionPhotographsInterval = 33,
                        SingleInitiativePhotos         = 34,
                        SingleInitiativePhotosInterval = 35,
                        VehicleDistanceMonitoringAlarmDistanceThreshold = 36,
                        VehicleDistanceMonitoringAndAlarmClassificationSpeedThreshold = 37,
                        VideoRecordingResolution = 38,
                        VideoRecordingTimeBeforeAndAfterAlarmVehicleProximity    = 39,
                        VideoRecordingTimeBeforeAndAfterForwardCollisionAlarm    = 40,
                        VideoRecordingTimeBeforeAndAfterFrequentLaneChangeAlarm  = 41,
                        VideoRecordingTimeBeforeAndAfterLaneDepartureAlarm       = 42,
                        VideoRecordingTimeBeforeAndAfterObstacleAlarm            = 43,
                        VideoRecordingTimeBeforeAndAfterPedestrianCollisionAlarm = 44,
                        WarningVolume = 45
                    }
                }
            };
            var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();

            Assert.Equal("010000F36438052D030002000122231D26000000040000000A1E09152B08180F0E14291011122A16170D13280C0B1C192C1B1A2425270607202101020304", hex);
        }
예제 #5
0
        public void Test3_1()
        {
            var customParams = "[{\"ParamId\":117,\"ParamLength\":21,\"RTS_EncodeMode\":3,\"RTS_Resolution\":5,\"RTS_KF_Interval\":4,\"RTS_Target_FPS\":7,\"RTS_Target_CodeRate\":6,\"StreamStore_EncodeMode\":8,\"StreamStore_Resolution\":10,\"StreamStore_KF_Interval\":9,\"StreamStore_Target_FPS\":12,\"StreamStore_Target_CodeRate\":11,\"OSD\":2,\"AudioOutputEnabled\":1}]";

            byte[]       bytes        = "010000007515030500040700000006080A00090C0000000B000201".ToHexBytes();
            JT808_0x8103 jT808_0X8103 = JT808Serializer.Deserialize <JT808_0x8103>(bytes);

            Assert.Equal(customParams, Newtonsoft.Json.JsonConvert.SerializeObject(jT808_0X8103.CustomParamList));
        }
예제 #6
0
        public void Serializer()
        {
            JT808_0x8103 jT808UploadLocationRequest = new JT808_0x8103
            {
                ParamList = new List <JT808_0x8103_BodyBase> {
                    new JT808_0x8103_0xF367 {
                        LateralRearApproachAlarmTimeThreshold = 1,
                        RearApproachAlarmTimeThreshold        = 2
                    }
                }
            };
            var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();

            Assert.Equal("010000F367020201", hex);
        }
        public void Serializer()
        {
            JT808_0x8103 jT808UploadLocationRequest = new JT808_0x8103
            {
                ParamList = new List <JT808_0x8103_BodyBase> {
                    new JT808_0x8103_0xF365 {
                        ActiveDistancePhotographyDistanceInterval = 1,
                        ActivelyTimePhotoInterval = 2,
                        ActivePhotographyStrategy = 3,
                        AlarmEnable = 4,
                        AlarmJudgeSpeedThreshold = 5,
                        EventEnable                                       = 10,
                        PhotoResolution                                   = 29,
                        SingleInitiativePhotos                            = 34,
                        SingleInitiativePhotosInterval                    = 35,
                        VideoRecordingResolution                          = 38,
                        WarningVolume                                     = 45,
                        CallAlarmDetermineTimeInterval                    = 46,
                        CallAlarmTakePicturesDriverFacialFeatures         = 47,
                        CallAlarmTakePicturesDriverFacialFeaturesInterval = 48,
                        ClassifiedSpeedThresholdCallAlarm                 = 49,
                        ClassifiedSpeedThresholdDistractedDrivingAlarm    = 50,
                        ClassifiedSpeedThresholdSmokingAlarm              = 51,
                        DistractedDrivingAlarmPhotography                 = 52,
                        DistractedDrivingAlarmPhotographyInterval         = 53,
                        DriverIdentificationTrigger                       = 54,
                        FatigueDrivingAlarmPhotograph                     = 55,
                        FatigueDrivingAlarmPhotographInterval             = 56,
                        GradedSpeedThresholdFatigueDrivingAlarm           = 57,
                        PhotographsAbnormalDrivingBehavior                = 58,
                        PictureIntervalAbnormalDrivingBehavior            = 59,
                        Reserve = new byte[] { 1, 2, 3 },
                        Retain  = new byte[] { 5, 6 },
                        SmokingAlarmPhotographsDriverFaceCharacteristics         = 60,
                        SmokingAlarmPhotographsDriverFaceCharacteristicsInterval = 61,
                        TimeIntervalSmokingAlarmJudgment                    = 62,
                        VideoRecordingTimeAbnormalDrivingBehavior           = 63,
                        VideoRecordingTimeBeforeAndAfterCallAlarm           = 64,
                        VideoRecordingTimeBeforeAndAfterFatigueDrivingAlarm = 65,
                        VideoRecordingTimeBeforeAndAfterSmokingAlarm        = 66
                    }
                }
            };
            var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();

            Assert.Equal("010000F3652F052D030002000122231D26000000040000000A003E002E0102033941373831402F3033423C3D3234353F3A3B360506", hex);
        }
예제 #8
0
        public void Test4()
        {
            var JT808_0x8103 = new JT808_0x8103
            {
                ParamList = new List <JT808_0x8103_BodyBase>()
                {
                    new JT808_0x8103_0x0110()
                    {
                        CollectTimeInterval = 1000,
                        ChannelNo           = 1,
                        FrameType           = 1,
                        CollectWay          = 0,
                        BusId = 56789
                    }
                },
            };
            var hex = JT808Serializer.Serialize(JT808_0x8103).ToHexString();

            Assert.Equal("010000011008000003E8C000DDD5", hex);
        }
예제 #9
0
        public void Test2()
        {
            var JT808_0x8103 = new JT808_0x8103
            {
                ParamList = new List <JT808_0x8103_BodyBase> {
                    new JT808_0x8103_0x0001()
                    {
                        ParamId     = 0x0001,
                        ParamLength = 4,
                        ParamValue  = 10
                    },
                    new JT808_0x8103_0x0013()
                    {
                        ParamId    = 0x0013,
                        ParamValue = "www.baidu.com"
                    }
                }
            };
            var hex = JT808Serializer.Serialize(JT808_0x8103).ToHexString();

            Assert.Equal("0200000001040000000A000000130D7777772E62616964752E636F6D00", hex);
        }
예제 #10
0
        public void Serializer()
        {
            JT808_0x8103 jT808UploadLocationRequest = new JT808_0x8103
            {
                ParamList = new List <JT808_0x8103_BodyBase> {
                    new JT808_0x8103_0xF366 {
                        HighTemperatureThreshold = 1,
                        HighVoltageThreshold     = 2,
                        LowVoltageThreshold      = 3,
                        NormalFetalPressure      = 4,
                        Retain = new byte[] { 1, 2, 3, 4, 5, 6 },
                        SlowLeakageThreshold            = 5,
                        ThresholdUnbalancedTirePressure = 6,
                        TimedReportingInterval          = 7,
                        TyrePressureUnit      = 8,
                        TyreSpecificationType = "999999999999",
                        VoltageThreshold      = 10
                    }
                }
            };
            var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();

            Assert.Equal("010000F366243939393939393939393939390008000400060005000300020001000A0007010203040506", hex);
        }
예제 #11
0
        public void Test2()
        {
            byte[]       bytes        = "7E8103009C000123456789000A070000007515030500040700000006080A00090C0000000B000201000000761B02010303020001070604050B0A08090F0E0C0D1312101117161415000000772B0201030500040700000006080A00090C0000000B000201030500040700000006080A00090C0000000B000200000079030302010000007A04000000010000007B0201020000007C140103020A00230012004500340067005600890078587E".ToHexBytes();
            JT808Package jT808_0X8103 = JT808Serializer.Deserialize(bytes);

            Assert.Equal(JT808MsgId.设置终端参数.ToUInt16Value(), jT808_0X8103.Header.MsgId);
            Assert.Equal(10, jT808_0X8103.Header.MsgNum);
            Assert.Equal("123456789", jT808_0X8103.Header.TerminalPhoneNo);

            JT808_0x8103 jT808_0x8103 = (JT808_0x8103)jT808_0X8103.Bodies;

            foreach (var item in jT808_0x8103.ParamList)
            {
                switch (item)
                {
                case JT808_0x8103_0x0075 jT808_0x8103_0x0075:
                    Assert.Equal(1, jT808_0x8103_0x0075.AudioOutputEnabled);
                    Assert.Equal(2, jT808_0x8103_0x0075.OSD);
                    Assert.Equal(3, jT808_0x8103_0x0075.RTS_EncodeMode);
                    Assert.Equal(4, jT808_0x8103_0x0075.RTS_KF_Interval);
                    Assert.Equal(5, jT808_0x8103_0x0075.RTS_Resolution);
                    Assert.Equal(6u, jT808_0x8103_0x0075.RTS_Target_CodeRate);
                    Assert.Equal(7, jT808_0x8103_0x0075.RTS_Target_FPS);
                    Assert.Equal(8, jT808_0x8103_0x0075.StreamStore_EncodeMode);
                    Assert.Equal(9, jT808_0x8103_0x0075.StreamStore_KF_Interval);
                    Assert.Equal(10, jT808_0x8103_0x0075.StreamStore_Resolution);
                    Assert.Equal(11u, jT808_0x8103_0x0075.StreamStore_Target_CodeRate);
                    Assert.Equal(12u, jT808_0x8103_0x0075.StreamStore_Target_FPS);
                    break;

                case JT808_0x8103_0x0076 jT808_0x8103_0x0076:
                    Assert.Equal(1, jT808_0x8103_0x0076.AudioChannelTotal);
                    Assert.Equal(2, jT808_0x8103_0x0076.AVChannelTotal);
                    Assert.Equal(3, jT808_0x8103_0x0076.VudioChannelTotal);
                    Assert.Equal(27, jT808_0x8103_0x0076.ParamLength);

                    Assert.Equal(0, jT808_0x8103_0x0076.AVChannelRefTables[0].ChannelType);
                    Assert.Equal(1, jT808_0x8103_0x0076.AVChannelRefTables[0].IsConnectCloudPlat);
                    Assert.Equal(2, jT808_0x8103_0x0076.AVChannelRefTables[0].LogicChannelNo);
                    Assert.Equal(3, jT808_0x8103_0x0076.AVChannelRefTables[0].PhysicalChannelNo);

                    Assert.Equal(4, jT808_0x8103_0x0076.AVChannelRefTables[1].ChannelType);
                    Assert.Equal(5, jT808_0x8103_0x0076.AVChannelRefTables[1].IsConnectCloudPlat);
                    Assert.Equal(6, jT808_0x8103_0x0076.AVChannelRefTables[1].LogicChannelNo);
                    Assert.Equal(7, jT808_0x8103_0x0076.AVChannelRefTables[1].PhysicalChannelNo);

                    Assert.Equal(8, jT808_0x8103_0x0076.AVChannelRefTables[2].ChannelType);
                    Assert.Equal(9, jT808_0x8103_0x0076.AVChannelRefTables[2].IsConnectCloudPlat);
                    Assert.Equal(10, jT808_0x8103_0x0076.AVChannelRefTables[2].LogicChannelNo);
                    Assert.Equal(11, jT808_0x8103_0x0076.AVChannelRefTables[2].PhysicalChannelNo);

                    Assert.Equal(12, jT808_0x8103_0x0076.AVChannelRefTables[3].ChannelType);
                    Assert.Equal(13, jT808_0x8103_0x0076.AVChannelRefTables[3].IsConnectCloudPlat);
                    Assert.Equal(14, jT808_0x8103_0x0076.AVChannelRefTables[3].LogicChannelNo);
                    Assert.Equal(15, jT808_0x8103_0x0076.AVChannelRefTables[3].PhysicalChannelNo);

                    Assert.Equal(16, jT808_0x8103_0x0076.AVChannelRefTables[4].ChannelType);
                    Assert.Equal(17, jT808_0x8103_0x0076.AVChannelRefTables[4].IsConnectCloudPlat);
                    Assert.Equal(18, jT808_0x8103_0x0076.AVChannelRefTables[4].LogicChannelNo);
                    Assert.Equal(19, jT808_0x8103_0x0076.AVChannelRefTables[4].PhysicalChannelNo);

                    Assert.Equal(20, jT808_0x8103_0x0076.AVChannelRefTables[5].ChannelType);
                    Assert.Equal(21, jT808_0x8103_0x0076.AVChannelRefTables[5].IsConnectCloudPlat);
                    Assert.Equal(22, jT808_0x8103_0x0076.AVChannelRefTables[5].LogicChannelNo);
                    Assert.Equal(23, jT808_0x8103_0x0076.AVChannelRefTables[5].PhysicalChannelNo);
                    break;

                case JT808_0x8103_0x0077 jT808_0x8103_0x0077:
                    Assert.Equal(2, jT808_0x8103_0x0077.NeedSetChannelTotal);
                    Assert.Equal(43, jT808_0x8103_0x0077.ParamLength);

                    Assert.Equal(1, jT808_0x8103_0x0077.SignalChannels[0].LogicChannelNo);
                    Assert.Equal(2, jT808_0x8103_0x0077.SignalChannels[0].OSD);
                    Assert.Equal(3, jT808_0x8103_0x0077.SignalChannels[0].RTS_EncodeMode);
                    Assert.Equal(4, jT808_0x8103_0x0077.SignalChannels[0].RTS_KF_Interval);
                    Assert.Equal(5, jT808_0x8103_0x0077.SignalChannels[0].RTS_Resolution);
                    Assert.Equal(6u, jT808_0x8103_0x0077.SignalChannels[0].RTS_Target_CodeRate);
                    Assert.Equal(7, jT808_0x8103_0x0077.SignalChannels[0].RTS_Target_FPS);
                    Assert.Equal(8, jT808_0x8103_0x0077.SignalChannels[0].StreamStore_EncodeMode);
                    Assert.Equal(9, jT808_0x8103_0x0077.SignalChannels[0].StreamStore_KF_Interval);
                    Assert.Equal(10, jT808_0x8103_0x0077.SignalChannels[0].StreamStore_Resolution);
                    Assert.Equal(11u, jT808_0x8103_0x0077.SignalChannels[0].StreamStore_Target_CodeRate);
                    Assert.Equal(12, jT808_0x8103_0x0077.SignalChannels[0].StreamStore_Target_FPS);

                    Assert.Equal(1, jT808_0x8103_0x0077.SignalChannels[1].LogicChannelNo);
                    Assert.Equal(2, jT808_0x8103_0x0077.SignalChannels[1].OSD);
                    Assert.Equal(3, jT808_0x8103_0x0077.SignalChannels[1].RTS_EncodeMode);
                    Assert.Equal(4, jT808_0x8103_0x0077.SignalChannels[1].RTS_KF_Interval);
                    Assert.Equal(5, jT808_0x8103_0x0077.SignalChannels[1].RTS_Resolution);
                    Assert.Equal(6u, jT808_0x8103_0x0077.SignalChannels[1].RTS_Target_CodeRate);
                    Assert.Equal(7, jT808_0x8103_0x0077.SignalChannels[1].RTS_Target_FPS);
                    Assert.Equal(8, jT808_0x8103_0x0077.SignalChannels[1].StreamStore_EncodeMode);
                    Assert.Equal(9, jT808_0x8103_0x0077.SignalChannels[1].StreamStore_KF_Interval);
                    Assert.Equal(10, jT808_0x8103_0x0077.SignalChannels[1].StreamStore_Resolution);
                    Assert.Equal(11u, jT808_0x8103_0x0077.SignalChannels[1].StreamStore_Target_CodeRate);
                    Assert.Equal(12, jT808_0x8103_0x0077.SignalChannels[1].StreamStore_Target_FPS);

                    break;

                case JT808_0x8103_0x0079 jT808_0x8103_0x0079:
                    Assert.Equal(1, jT808_0x8103_0x0079.BeginMinute);
                    Assert.Equal(2, jT808_0x8103_0x0079.Duration);
                    Assert.Equal(3, jT808_0x8103_0x0079.StorageThresholds);
                    break;

                case JT808_0x8103_0x007A jT808_0x8103_0x007A:
                    Assert.Equal(1u, jT808_0x8103_0x007A.AlarmShielding);
                    break;

                case JT808_0x8103_0x007B jT808_0x8103_0x007B:
                    Assert.Equal(1, jT808_0x8103_0x007B.NuclearLoadNumber);
                    Assert.Equal(2, jT808_0x8103_0x007B.FatigueThreshold);
                    break;

                case JT808_0x8103_0x007C jT808_0x8103_0x007C:
                    Assert.Equal(1, jT808_0x8103_0x007C.SleepWakeMode);
                    Assert.Equal(2, jT808_0x8103_0x007C.TimerWakeDaySet);
                    Assert.Equal(3, jT808_0x8103_0x007C.WakeConditionType);
                    Assert.Equal("12", jT808_0x8103_0x007C.TimerWakeDayParamter.TimePeriod1CloseTime);
                    Assert.Equal("23", jT808_0x8103_0x007C.TimerWakeDayParamter.TimePeriod1WakeTime);
                    Assert.Equal("34", jT808_0x8103_0x007C.TimerWakeDayParamter.TimePeriod2CloseTime);
                    Assert.Equal("45", jT808_0x8103_0x007C.TimerWakeDayParamter.TimePeriod2WakeTime);
                    Assert.Equal("56", jT808_0x8103_0x007C.TimerWakeDayParamter.TimePeriod3CloseTime);
                    Assert.Equal("67", jT808_0x8103_0x007C.TimerWakeDayParamter.TimePeriod3WakeTime);
                    Assert.Equal("78", jT808_0x8103_0x007C.TimerWakeDayParamter.TimePeriod4CloseTime);
                    Assert.Equal("89", jT808_0x8103_0x007C.TimerWakeDayParamter.TimePeriod4WakeTime);
                    Assert.Equal(10, jT808_0x8103_0x007C.TimerWakeDayParamter.TimerWakeEnableFlag);
                    break;

                default:
                    break;
                }
            }
        }
예제 #12
0
        public void Serializer()
        {
            JT808_0x8103 jT808UploadLocationRequest = new JT808_0x8103
            {
                ParamList = new List <JT808_0x8103_BodyBase> {
                    new JT808_0x8103_0xF365 {
                        ActiveDistancePhotographyDistanceInterval = 1,
                        ActivelyTimePhotoInterval = 2,
                        ActivePhotographyStrategy = 3,
                        AlarmEnable = 4,
                        AlarmJudgeSpeedThreshold = 5,
                        EventEnable                                       = 10,
                        PhotoResolution                                   = 29,
                        SingleInitiativePhotos                            = 34,
                        SingleInitiativePhotosInterval                    = 35,
                        VideoRecordingResolution                          = 38,
                        WarningVolume                                     = 45,
                        CallAlarmDetermineTimeInterval                    = 46,
                        CallAlarmTakePicturesDriverFacialFeatures         = 47,
                        CallAlarmTakePicturesDriverFacialFeaturesInterval = 48,
                        ClassifiedSpeedThresholdCallAlarm                 = 49,
                        ClassifiedSpeedThresholdDistractedDrivingAlarm    = 50,
                        ClassifiedSpeedThresholdSmokingAlarm              = 51,
                        DistractedDrivingAlarmPhotography                 = 52,
                        DistractedDrivingAlarmPhotographyInterval         = 53,
                        DriverIdentificationTrigger                       = 54,
                        FatigueDrivingAlarmPhotograph                     = 55,
                        FatigueDrivingAlarmPhotographInterval             = 56,
                        GradedSpeedThresholdFatigueDrivingAlarm           = 57,

                        PhotographsAbnormalDrivingBehavior     = 58,
                        PictureIntervalAbnormalDrivingBehavior = 59,
                        Reserve = new byte[] { 1, 2, 3 },
                        Retain  = new byte[] { 5, 6 },
                        SmokingAlarmPhotographsDriverFaceCharacteristics         = 60,
                        SmokingAlarmPhotographsDriverFaceCharacteristicsInterval = 61,
                        TimeIntervalSmokingAlarmJudgment                    = 62,
                        VideoRecordingTimeAbnormalDrivingBehavior           = 63,
                        VideoRecordingTimeBeforeAndAfterCallAlarm           = 64,
                        VideoRecordingTimeBeforeAndAfterFatigueDrivingAlarm = 65,
                        VideoRecordingTimeBeforeAndAfterSmokingAlarm        = 66,

                        ClassifiedSpeedThresholdCameraOcclusion = 68,

                        ClassifiedSpeedThresholdDoubleHanderOff = 69,
                        VideoRecordingTimeDoubleHanderOff       = 70,
                        PhotographsDoubleHanderOff     = 71,
                        PictureIntervalDoubleHanderOff = 72,

                        ClassifiedSpeedThresholdInfraredSunglassesBlockingFailure = 73,
                        VideoRecordingTimeInfraredSunglassesBlockingFailure       = 74,
                        PhotographsInfraredSunglassesBlockingFailure     = 75,
                        PictureIntervalInfraredSunglassesBlockingFailure = 76,

                        ClassifiedSpeedThresholdNotBuckleUp = 77,
                        VideoRecordingTimeNotBuckleUp       = 78,
                        PhotographsNotBuckleUp     = 79,
                        PictureIntervalNotBuckleUp = 80,

                        ClassifiedSpeedThresholdPlayMobile = 81,
                        VideoRecordingTimePlayMobile       = 82,
                        PhotographsPlayMobile     = 83,
                        PictureIntervalPlayMobile = 84,

                        ClassifiedSpeedThresholdAbnormalDrivingBehavior        = 67,
                        VideoRecordingTimeBeforeAndAfterDistractedDrivingAlarm = 85
                    }
                }
            };
            var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();

            Assert.Equal("010000F36542052D030002000122231D26000000040000000A003E002E0102033941373831402F3033423C3D32553435433F3A3B36444D4E4F50494A4B4C45464748515253540506", hex);
        }