CINXE.COM
GitHub - SmallChi/JT808: JT/T808 protocol,JT808 protocol, GB808 protocol (support 2011, 2013, 2019 version) JT/T808协议、JT808协议、GB808协议(支持2011、2013、2019版本)
<!DOCTYPE html> <html lang="en" data-color-mode="auto" data-light-theme="light" data-dark-theme="dark" data-a11y-animated-images="system" data-a11y-link-underlines="true" > <head> <meta charset="utf-8"> <link rel="dns-prefetch" href="https://github.githubassets.com"> <link rel="dns-prefetch" href="https://avatars.githubusercontent.com"> <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com"> <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/"> <link rel="preconnect" href="https://github.githubassets.com" crossorigin> <link rel="preconnect" href="https://avatars.githubusercontent.com"> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-74231a1f3bbb.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-8a995f0bacd4.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-f37fb7684b1f.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-9ac301c3ebe5.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-cd826e8636dc.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-f91b0f603451.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-83beb16e0ecf.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-6e122dab64fc.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-18119e682df0.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-225433424a87.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-cba26849680f.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-b6cb3703b934.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-ea73c9cb5377.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/repository-4fce88777fa8.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-0210be90f4d3.css" /> <script type="application/json" id="client-env">{"locale":"en","featureFlags":["contentful_lp_flex_features_actions","contentful_lp_flex_features_codespaces","contentful_lp_flex_features_code_review","contentful_lp_flex_features_code_search","contentful_lp_flex_features_discussions","contentful_lp_flex_features_issues","copilot_immersive_issue_preview","copilot_new_references_ui","copilot_chat_repo_custom_instructions_preview","copilot_no_floating_button","copilot_topics_as_references","copilot_read_shared_conversation","copilot_duplicate_thread","dotcom_chat_client_side_skills","experimentation_azure_variant_endpoint","failbot_handle_non_errors","geojson_azure_maps","ghost_pilot_confidence_truncation_25","ghost_pilot_confidence_truncation_40","github_models_gateway_parse_params","github_models_o3_mini_streaming","insert_before_patch","issues_react_remove_placeholders","issues_react_blur_item_picker_on_close","issues_advanced_search_nested_ownership_filters","issues_dashboard_no_redirects","marketing_pages_search_explore_provider","primer_react_css_modules_ga","react_data_router_pull_requests","remove_child_patch","sample_network_conn_type","swp_enterprise_contact_form","site_copilot_pro_plus","site_proxima_australia_update","viewscreen_sandbox","issues_react_create_milestone","issues_react_cache_fix_workaround","lifecycle_label_name_updates","copilot_task_oriented_assistive_prompts","issue_types_prevent_private_type_creation","refresh_image_video_src","codespaces_prebuild_region_target_update","copilot_code_review_sign_up_closed"]}</script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/wp-runtime-66a1eb4c9cd6.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_oddbird_popover-polyfill_dist_popover-fn_js-81211bd82278.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_stacktrace-parser_dist_s-1d3d52-beff81c16ff3.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_failbot_failbot_ts-9fbd5fd3cc3c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/environment-463b9aab6d43.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_behaviors_dist_esm_index_mjs-0dbb79f97f8f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_selector-observer_dist_index_esm_js-f690fd9ae3d5.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_relative-time-element_dist_index_js-62d275b7ddd9.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_auto-complete-element_dist_index_js-node_modules_github_catalyst_-8e9f78-a90ac05d2469.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_text-expander-element_dist_index_js-78748950cb0c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_remote-inp-b5f1d7-a1760ffda83d.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_markdown-toolbar-element_dist_index_js-ceef33f593fa.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_primer_view-co-c44a69-e161df0781df.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/github-elements-6378bb58c624.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/element-registry-fe7dd1089680.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_braintree_browser-detection_dist_browser-detection_js-node_modules_githu-2906d7-2a07a295af40.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_lit-html_lit-html_js-be8cb88f481b.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_morphdom_dist_morphdom-esm_js-0c08218c7d5f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_turbo_dist_turbo_es2017-esm_js-a03ee12d659a.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-893f9f-b6294cf703b7.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_color-convert_index_js-e3180fe3bcb3.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_quote-selection_dist_index_js-node_modules_github_session-resume_-054bff-311c04966bb2.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_updatable-content_updatable-content_ts-62f3e9c52ece.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_task-list_ts-app_assets_modules_github_sso_ts-ui_packages-900dde-768abe60b1f8.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_sticky-scroll-into-view_ts-3e000c5d31a9.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_ajax-error_ts-app_assets_modules_github_behaviors_include-d0d0a6-e7f74ee74d91.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_commenting_edit_ts-app_assets_modules_github_behaviors_ht-83c235-4bcbbbfbe1d4.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-fd97a7eacc4d.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_delegated-events_dist_index_js-node_modules_github_catalyst_lib_index_js-f6223d90c7ba.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/notifications-global-01e85cd1be94.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_virtualized-list_es_inde-5cfb7e-e6b0d3ff3d24.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-70450e-4b93df70b903.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_ref-selector_ts-52913063a0b9.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/codespaces-e047fb0a7326.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_remote-inp-3eebbd-0763620ad7bf.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_decorators_js-node_modules_delegated-events_di-e161aa-9d41fb1b6c9e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_github_remote--3c9c82-b71ef90fbdc7.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/repositories-b48cde844c8c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_github_catalyst_lib_inde-dbbea9-26cce2010167.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/code-menu-d6d3c94ee97e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/primer-react-84641974c158.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-core-ea28978fa0f5.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-lib-f1bca44e0926.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/octicons-react-cf2f2ab8dab4.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_emotion_is-prop-valid_dist_emotion-is-prop-valid_esm_js-node_modules_emo-434cb6-95f395b76298.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_catalyst_lib_index_js-node_modules_tanstack_react-query_build_mod-3b1f5d-85b60118c668.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/notifications-subscriptions-menu-ff842efef2b9.js"></script> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.a490b7c9fa319e5cb069.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/notifications-subscriptions-menu.1bcff9205c241e99cff2.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.a490b7c9fa319e5cb069.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/notifications-subscriptions-menu.1bcff9205c241e99cff2.module.css" /> <title>GitHub - SmallChi/JT808: JT/T808 protocol,JT808 protocol, GB808 protocol (support 2011, 2013, 2019 version) JT/T808协议、JT808协议、GB808协议(支持2011、2013、2019版本)</title> <meta name="route-pattern" content="/:user_id/:repository" data-turbo-transient> <meta name="route-controller" content="files" data-turbo-transient> <meta name="route-action" content="disambiguate" data-turbo-transient> <meta name="current-catalog-service-hash" content="f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb"> <meta name="request-id" content="E1A4:33AE51:1D9F50:22D8C0:67F48A5A" data-pjax-transient="true"/><meta name="html-safe-nonce" content="8aae61e15a73ffc206feb13cfd33343b662094c7c29a524bdb62add313590274" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJFMUE0OjMzQUU1MToxRDlGNTA6MjJEOEMwOjY3RjQ4QTVBIiwidmlzaXRvcl9pZCI6IjcxNDc2MjE0NjU0OTc4MzIwMjYiLCJyZWdpb25fZWRnZSI6InNvdXRoZWFzdGFzaWEiLCJyZWdpb25fcmVuZGVyIjoic291dGhlYXN0YXNpYSJ9" data-pjax-transient="true"/><meta name="visitor-hmac" content="67e4935c3a199817855990df7929936ed1839b308eda5cd4aa08a069028b237c" data-pjax-transient="true"/> <meta name="hovercard-subject-tag" content="repository:152872227" data-turbo-transient> <meta name="github-keyboard-shortcuts" content="repository,copilot" data-turbo-transient="true" /> <meta name="selected-link" value="repo_source" data-turbo-transient> <link rel="assets" href="https://github.githubassets.com/"> <meta name="google-site-verification" content="Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I"> <meta name="octolytics-url" content="https://collector.github.com/github/collect" /> <meta name="analytics-location" content="/<user-name>/<repo-name>" data-turbo-transient="true" /> <meta name="user-login" content=""> <meta name="viewport" content="width=device-width"> <meta name="description" content="JT/T808 protocol,JT808 protocol, GB808 protocol (support 2011, 2013, 2019 version) JT/T808协议、JT808协议、GB808协议(支持2011、2013、2019版本) - SmallChi/JT808"> <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub"> <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub"> <meta property="fb:app_id" content="1401488693436528"> <meta name="apple-itunes-app" content="app-id=1477376905, app-argument=https://github.com/SmallChi/JT808" /> <meta name="twitter:image" content="https://opengraph.githubassets.com/45428b67a919f225b1d7ede32a235425c89cb3e644e99c44dfff9be24d1d7441/SmallChi/JT808" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="GitHub - SmallChi/JT808: JT/T808 protocol,JT808 protocol, GB808 protocol (support 2011, 2013, 2019 version) JT/T808协议、JT808协议、GB808协议(支持2011、2013、2019版本)" /><meta name="twitter:description" content="JT/T808 protocol,JT808 protocol, GB808 protocol (support 2011, 2013, 2019 version) JT/T808协议、JT808协议、GB808协议(支持2011、2013、2019版本) - SmallChi/JT808" /> <meta property="og:image" content="https://opengraph.githubassets.com/45428b67a919f225b1d7ede32a235425c89cb3e644e99c44dfff9be24d1d7441/SmallChi/JT808" /><meta property="og:image:alt" content="JT/T808 protocol,JT808 protocol, GB808 protocol (support 2011, 2013, 2019 version) JT/T808协议、JT808协议、GB808协议(支持2011、2013、2019版本) - SmallChi/JT808" /><meta property="og:image:width" content="1200" /><meta property="og:image:height" content="600" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="GitHub - SmallChi/JT808: JT/T808 protocol,JT808 protocol, GB808 protocol (support 2011, 2013, 2019 version) JT/T808协议、JT808协议、GB808协议(支持2011、2013、2019版本)" /><meta property="og:url" content="https://github.com/SmallChi/JT808" /><meta property="og:description" content="JT/T808 protocol,JT808 protocol, GB808 protocol (support 2011, 2013, 2019 version) JT/T808协议、JT808协议、GB808协议(支持2011、2013、2019版本) - SmallChi/JT808" /> <meta name="hostname" content="github.com"> <meta name="expected-hostname" content="github.com"> <meta http-equiv="x-pjax-version" content="6453065a4e35443d051bff0ad1ef9900dcafa67ca003506b809d801712c0ccf1" data-turbo-track="reload"> <meta http-equiv="x-pjax-csp-version" content="e26f9f0ba624ee85cc7ac057d8faa8618a4f25a85eab052c33d018ac0f6b1a46" data-turbo-track="reload"> <meta http-equiv="x-pjax-css-version" content="205838381d6e5f35c535dbb12458f905bc43e0b186c86bf75aabbd0c0f36537c" data-turbo-track="reload"> <meta http-equiv="x-pjax-js-version" content="910341dc9404e61f542fdecf7121c99bb767c68547746410627ec8bfc0a0e389" data-turbo-track="reload"> <meta name="turbo-cache-control" content="no-preview" data-turbo-transient=""> <meta data-hydrostats="publish"> <meta name="go-import" content="github.com/SmallChi/JT808 git https://github.com/SmallChi/JT808.git"> <meta name="octolytics-dimension-user_id" content="12674769" /><meta name="octolytics-dimension-user_login" content="SmallChi" /><meta name="octolytics-dimension-repository_id" content="152872227" /><meta name="octolytics-dimension-repository_nwo" content="SmallChi/JT808" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="152872227" /><meta name="octolytics-dimension-repository_network_root_nwo" content="SmallChi/JT808" /> <link rel="canonical" href="https://github.com/SmallChi/JT808" data-turbo-transient> <meta name="turbo-body-classes" content="logged-out env-production page-responsive"> <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats"> <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors"> <meta name="release" content="7f4387e2e7859c73e5a9fd7948e3273d26f99cf6"> <link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000"> <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png"> <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon.svg" data-base-href="https://github.githubassets.com/favicons/favicon"> <meta name="theme-color" content="#1e2327"> <meta name="color-scheme" content="light dark" /> <link rel="manifest" href="/manifest.json" crossOrigin="use-credentials"> </head> <body class="logged-out env-production page-responsive" style="word-wrap: break-word;"> <div data-turbo-body class="logged-out env-production page-responsive" style="word-wrap: break-word;"> <div class="position-relative header-wrapper js-header-wrapper "> <a href="#start-of-content" data-skip-target-assigned="false" class="px-2 py-4 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content">Skip to content</a> <span data-view-component="true" class="progress-pjax-loader Progress position-fixed width-full"> <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span> </span> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_ui-commands_ui-commands_ts-2d52c8e72e64.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/keyboard-shortcuts-dialog-3a2dc4c920ee.js"></script> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.a490b7c9fa319e5cb069.module.css" /> <react-partial partial-name="keyboard-shortcuts-dialog" data-ssr="false" data-attempted-ssr="false" > <script type="application/json" data-target="react-partial.embeddedData">{"props":{"docsUrl":"https://docs.github.com/get-started/accessibility/keyboard-shortcuts"}}</script> <div data-target="react-partial.reactRoot"></div> </react-partial> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-94fd67-4898d1bf4b51.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/sessions-45d6658f8b6b.js"></script> <header class="HeaderMktg header-logged-out js-details-container js-header Details f4 py-3" role="banner" data-is-top="true" data-color-mode=light data-light-theme=light data-dark-theme=dark> <h2 class="sr-only">Navigation Menu</h2> <button type="button" class="HeaderMktg-backdrop d-lg-none border-0 position-fixed top-0 left-0 width-full height-full js-details-target" aria-label="Toggle navigation"> <span class="d-none">Toggle navigation</span> </button> <div class="d-flex flex-column flex-lg-row flex-items-center px-3 px-md-4 px-lg-5 height-full position-relative z-1"> <div class="d-flex flex-justify-between flex-items-center width-full width-lg-auto"> <div class="flex-1"> <button aria-label="Toggle navigation" aria-expanded="false" type="button" data-view-component="true" class="js-details-target js-nav-padding-recalculate js-header-menu-toggle Button--link Button--medium Button d-lg-none color-fg-inherit p-1"> <span class="Button-content"> <span class="Button-label"><div class="HeaderMenu-toggle-bar rounded my-1"></div> <div class="HeaderMenu-toggle-bar rounded my-1"></div> <div class="HeaderMenu-toggle-bar rounded my-1"></div></span> </span> </button> </div> <a class="mr-lg-3 color-fg-inherit flex-order-2 js-prevent-focus-on-mobile-nav" href="/" aria-label="Homepage" data-analytics-event="{"category":"Marketing nav","action":"click to go to homepage","label":"ref_page:Marketing;ref_cta:Logomark;ref_loc:Header"}"> <svg height="32" aria-hidden="true" viewBox="0 0 24 24" version="1.1" width="32" data-view-component="true" class="octicon octicon-mark-github"> <path d="M12 1C5.9225 1 1 5.9225 1 12C1 16.8675 4.14875 20.9787 8.52125 22.4362C9.07125 22.5325 9.2775 22.2025 9.2775 21.9137C9.2775 21.6525 9.26375 20.7862 9.26375 19.865C6.5 20.3737 5.785 19.1912 5.565 18.5725C5.44125 18.2562 4.905 17.28 4.4375 17.0187C4.0525 16.8125 3.5025 16.3037 4.42375 16.29C5.29 16.2762 5.90875 17.0875 6.115 17.4175C7.105 19.0812 8.68625 18.6137 9.31875 18.325C9.415 17.61 9.70375 17.1287 10.02 16.8537C7.5725 16.5787 5.015 15.63 5.015 11.4225C5.015 10.2262 5.44125 9.23625 6.1425 8.46625C6.0325 8.19125 5.6475 7.06375 6.2525 5.55125C6.2525 5.55125 7.17375 5.2625 9.2775 6.67875C10.1575 6.43125 11.0925 6.3075 12.0275 6.3075C12.9625 6.3075 13.8975 6.43125 14.7775 6.67875C16.8813 5.24875 17.8025 5.55125 17.8025 5.55125C18.4075 7.06375 18.0225 8.19125 17.9125 8.46625C18.6138 9.23625 19.04 10.2125 19.04 11.4225C19.04 15.6437 16.4688 16.5787 14.0213 16.8537C14.42 17.1975 14.7638 17.8575 14.7638 18.8887C14.7638 20.36 14.75 21.5425 14.75 21.9137C14.75 22.2025 14.9563 22.5462 15.5063 22.4362C19.8513 20.9787 23 16.8537 23 12C23 5.9225 18.0775 1 12 1Z"></path> </svg> </a> <div class="flex-1 flex-order-2 text-right"> <a href="/login?return_to=https%3A%2F%2Fgithub.com%2FSmallChi%2FJT808" class="HeaderMenu-link HeaderMenu-button d-inline-flex d-lg-none flex-order-1 f5 no-underline border color-border-default rounded-2 px-2 py-1 color-fg-inherit js-prevent-focus-on-mobile-nav" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"site header menu","repository_id":null,"auth_type":"SIGN_UP","originating_url":"https://github.com/SmallChi/JT808","user_id":null}}" data-hydro-click-hmac="7faa3e615762df044a2cd6a128f070beb7ddec7c6da4eac40b0669214079ef0c" data-analytics-event="{"category":"Marketing nav","action":"click to Sign in","label":"ref_page:Marketing;ref_cta:Sign in;ref_loc:Header"}" > Sign in </a> </div> </div> <div class="HeaderMenu js-header-menu height-fit position-lg-relative d-lg-flex flex-column flex-auto top-0"> <div class="HeaderMenu-wrapper d-flex flex-column flex-self-start flex-lg-row flex-auto rounded rounded-lg-0"> <nav class="HeaderMenu-nav" aria-label="Global"> <ul class="d-lg-flex list-style-none"> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Product <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 d-lg-flex flex-wrap dropdown-menu-wide"> <div class="HeaderMenu-column px-lg-4 border-lg-right mb-4 mb-lg-0 pr-lg-7"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"github_copilot","context":"product","tag":"link","label":"github_copilot_link_product_navbar"}" href="https://github.com/features/copilot"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-copilot color-fg-subtle mr-3"> <path d="M23.922 16.992c-.861 1.495-5.859 5.023-11.922 5.023-6.063 0-11.061-3.528-11.922-5.023A.641.641 0 0 1 0 16.736v-2.869a.841.841 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.195 10.195 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952 1.399-1.136 3.392-2.093 6.122-2.093 2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.832.832 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256ZM12.172 11h-.344a4.323 4.323 0 0 1-.355.508C10.703 12.455 9.555 13 7.965 13c-1.725 0-2.989-.359-3.782-1.259a2.005 2.005 0 0 1-.085-.104L4 11.741v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.323 4.323 0 0 1-.355-.508h-.016.016Zm.641-2.935c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z"></path><path d="M14.5 14.25a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Zm-5 0a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Z"></path> </svg> <div> <div class="color-fg-default h4">GitHub Copilot</div> Write better code with AI </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"github_advanced_security","context":"product","tag":"link","label":"github_advanced_security_link_product_navbar"}" href="https://github.com/security/advanced-security"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-shield-check color-fg-subtle mr-3"> <path d="M16.53 9.78a.75.75 0 0 0-1.06-1.06L11 13.19l-1.97-1.97a.75.75 0 0 0-1.06 1.06l2.5 2.5a.75.75 0 0 0 1.06 0l5-5Z"></path><path d="m12.54.637 8.25 2.675A1.75 1.75 0 0 1 22 4.976V10c0 6.19-3.771 10.704-9.401 12.83a1.704 1.704 0 0 1-1.198 0C5.77 20.705 2 16.19 2 10V4.976c0-.758.489-1.43 1.21-1.664L11.46.637a1.748 1.748 0 0 1 1.08 0Zm-.617 1.426-8.25 2.676a.249.249 0 0 0-.173.237V10c0 5.46 3.28 9.483 8.43 11.426a.199.199 0 0 0 .14 0C17.22 19.483 20.5 15.461 20.5 10V4.976a.25.25 0 0 0-.173-.237l-8.25-2.676a.253.253 0 0 0-.154 0Z"></path> </svg> <div> <div class="color-fg-default h4">GitHub Advanced Security</div> Find and fix vulnerabilities </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"actions","context":"product","tag":"link","label":"actions_link_product_navbar"}" href="https://github.com/features/actions"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-workflow color-fg-subtle mr-3"> <path d="M1 3a2 2 0 0 1 2-2h6.5a2 2 0 0 1 2 2v6.5a2 2 0 0 1-2 2H7v4.063C7 16.355 7.644 17 8.438 17H12.5v-2.5a2 2 0 0 1 2-2H21a2 2 0 0 1 2 2V21a2 2 0 0 1-2 2h-6.5a2 2 0 0 1-2-2v-2.5H8.437A2.939 2.939 0 0 1 5.5 15.562V11.5H3a2 2 0 0 1-2-2Zm2-.5a.5.5 0 0 0-.5.5v6.5a.5.5 0 0 0 .5.5h6.5a.5.5 0 0 0 .5-.5V3a.5.5 0 0 0-.5-.5ZM14.5 14a.5.5 0 0 0-.5.5V21a.5.5 0 0 0 .5.5H21a.5.5 0 0 0 .5-.5v-6.5a.5.5 0 0 0-.5-.5Z"></path> </svg> <div> <div class="color-fg-default h4">Actions</div> Automate any workflow </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"codespaces","context":"product","tag":"link","label":"codespaces_link_product_navbar"}" href="https://github.com/features/codespaces"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-codespaces color-fg-subtle mr-3"> <path d="M3.5 3.75C3.5 2.784 4.284 2 5.25 2h13.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 18.75 13H5.25a1.75 1.75 0 0 1-1.75-1.75Zm-2 12c0-.966.784-1.75 1.75-1.75h17.5c.966 0 1.75.784 1.75 1.75v4a1.75 1.75 0 0 1-1.75 1.75H3.25a1.75 1.75 0 0 1-1.75-1.75ZM5.25 3.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h13.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Zm-2 12a.25.25 0 0 0-.25.25v4c0 .138.112.25.25.25h17.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25Z"></path><path d="M10 17.75a.75.75 0 0 1 .75-.75h6.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path> </svg> <div> <div class="color-fg-default h4">Codespaces</div> Instant dev environments </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"issues","context":"product","tag":"link","label":"issues_link_product_navbar"}" href="https://github.com/features/issues"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-issue-opened color-fg-subtle mr-3"> <path d="M12 1c6.075 0 11 4.925 11 11s-4.925 11-11 11S1 18.075 1 12 5.925 1 12 1ZM2.5 12a9.5 9.5 0 0 0 9.5 9.5 9.5 9.5 0 0 0 9.5-9.5A9.5 9.5 0 0 0 12 2.5 9.5 9.5 0 0 0 2.5 12Zm9.5 2a2 2 0 1 1-.001-3.999A2 2 0 0 1 12 14Z"></path> </svg> <div> <div class="color-fg-default h4">Issues</div> Plan and track work </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"code_review","context":"product","tag":"link","label":"code_review_link_product_navbar"}" href="https://github.com/features/code-review"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-code-review color-fg-subtle mr-3"> <path d="M10.3 6.74a.75.75 0 0 1-.04 1.06l-2.908 2.7 2.908 2.7a.75.75 0 1 1-1.02 1.1l-3.5-3.25a.75.75 0 0 1 0-1.1l3.5-3.25a.75.75 0 0 1 1.06.04Zm3.44 1.06a.75.75 0 1 1 1.02-1.1l3.5 3.25a.75.75 0 0 1 0 1.1l-3.5 3.25a.75.75 0 1 1-1.02-1.1l2.908-2.7-2.908-2.7Z"></path><path d="M1.5 4.25c0-.966.784-1.75 1.75-1.75h17.5c.966 0 1.75.784 1.75 1.75v12.5a1.75 1.75 0 0 1-1.75 1.75h-9.69l-3.573 3.573A1.458 1.458 0 0 1 5 21.043V18.5H3.25a1.75 1.75 0 0 1-1.75-1.75ZM3.25 4a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h2.5a.75.75 0 0 1 .75.75v3.19l3.72-3.72a.749.749 0 0 1 .53-.22h10a.25.25 0 0 0 .25-.25V4.25a.25.25 0 0 0-.25-.25Z"></path> </svg> <div> <div class="color-fg-default h4">Code Review</div> Manage code changes </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"discussions","context":"product","tag":"link","label":"discussions_link_product_navbar"}" href="https://github.com/features/discussions"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-comment-discussion color-fg-subtle mr-3"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 14.25 14H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 15.543V14H1.75A1.75 1.75 0 0 1 0 12.25v-9.5C0 1.784.784 1 1.75 1ZM1.5 2.75v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Z"></path><path d="M22.5 8.75a.25.25 0 0 0-.25-.25h-3.5a.75.75 0 0 1 0-1.5h3.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 22.25 20H21v1.543a1.457 1.457 0 0 1-2.487 1.03L15.939 20H10.75A1.75 1.75 0 0 1 9 18.25v-1.465a.75.75 0 0 1 1.5 0v1.465c0 .138.112.25.25.25h5.5a.75.75 0 0 1 .53.22l2.72 2.72v-2.19a.75.75 0 0 1 .75-.75h2a.25.25 0 0 0 .25-.25v-9.5Z"></path> </svg> <div> <div class="color-fg-default h4">Discussions</div> Collaborate outside of code </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"code_search","context":"product","tag":"link","label":"code_search_link_product_navbar"}" href="https://github.com/features/code-search"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-code-square color-fg-subtle mr-3"> <path d="M10.3 8.24a.75.75 0 0 1-.04 1.06L7.352 12l2.908 2.7a.75.75 0 1 1-1.02 1.1l-3.5-3.25a.75.75 0 0 1 0-1.1l3.5-3.25a.75.75 0 0 1 1.06.04Zm3.44 1.06a.75.75 0 1 1 1.02-1.1l3.5 3.25a.75.75 0 0 1 0 1.1l-3.5 3.25a.75.75 0 1 1-1.02-1.1l2.908-2.7-2.908-2.7Z"></path><path d="M2 3.75C2 2.784 2.784 2 3.75 2h16.5c.966 0 1.75.784 1.75 1.75v16.5A1.75 1.75 0 0 1 20.25 22H3.75A1.75 1.75 0 0 1 2 20.25Zm1.75-.25a.25.25 0 0 0-.25.25v16.5c0 .138.112.25.25.25h16.5a.25.25 0 0 0 .25-.25V3.75a.25.25 0 0 0-.25-.25Z"></path> </svg> <div> <div class="color-fg-default h4">Code Search</div> Find more, search less </div> </a></li> </ul> </div> </div> <div class="HeaderMenu-column px-lg-4"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="product-explore-heading">Explore</span> <ul class="list-style-none f5" aria-labelledby="product-explore-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"all_features","context":"product","tag":"link","label":"all_features_link_product_navbar"}" href="https://github.com/features"> All features </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"documentation","context":"product","tag":"link","label":"documentation_link_product_navbar"}" href="https://docs.github.com"> Documentation <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"github_skills","context":"product","tag":"link","label":"github_skills_link_product_navbar"}" href="https://skills.github.com"> GitHub Skills <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"blog","context":"product","tag":"link","label":"blog_link_product_navbar"}" href="https://github.blog"> Blog <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Solutions <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 d-lg-flex flex-wrap dropdown-menu-wide"> <div class="HeaderMenu-column px-lg-4 border-lg-right mb-4 mb-lg-0 pr-lg-7"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0 pb-lg-3 mb-3 mb-lg-0"> <span class="d-block h4 color-fg-default my-1" id="solutions-by-company-size-heading">By company size</span> <ul class="list-style-none f5" aria-labelledby="solutions-by-company-size-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"enterprises","context":"solutions","tag":"link","label":"enterprises_link_solutions_navbar"}" href="https://github.com/enterprise"> Enterprises </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"small_and_medium_teams","context":"solutions","tag":"link","label":"small_and_medium_teams_link_solutions_navbar"}" href="https://github.com/team"> Small and medium teams </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"startups","context":"solutions","tag":"link","label":"startups_link_solutions_navbar"}" href="https://github.com/enterprise/startups"> Startups </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"nonprofits","context":"solutions","tag":"link","label":"nonprofits_link_solutions_navbar"}" href="/solutions/industry/nonprofits"> Nonprofits </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="solutions-by-use-case-heading">By use case</span> <ul class="list-style-none f5" aria-labelledby="solutions-by-use-case-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"devsecops","context":"solutions","tag":"link","label":"devsecops_link_solutions_navbar"}" href="/solutions/use-case/devsecops"> DevSecOps </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"devops","context":"solutions","tag":"link","label":"devops_link_solutions_navbar"}" href="/solutions/use-case/devops"> DevOps </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"ci_cd","context":"solutions","tag":"link","label":"ci_cd_link_solutions_navbar"}" href="/solutions/use-case/ci-cd"> CI/CD </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"view_all_use_cases","context":"solutions","tag":"link","label":"view_all_use_cases_link_solutions_navbar"}" href="/solutions/use-case"> View all use cases </a></li> </ul> </div> </div> <div class="HeaderMenu-column px-lg-4"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="solutions-by-industry-heading">By industry</span> <ul class="list-style-none f5" aria-labelledby="solutions-by-industry-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"healthcare","context":"solutions","tag":"link","label":"healthcare_link_solutions_navbar"}" href="/solutions/industry/healthcare"> Healthcare </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"financial_services","context":"solutions","tag":"link","label":"financial_services_link_solutions_navbar"}" href="/solutions/industry/financial-services"> Financial services </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"manufacturing","context":"solutions","tag":"link","label":"manufacturing_link_solutions_navbar"}" href="/solutions/industry/manufacturing"> Manufacturing </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"government","context":"solutions","tag":"link","label":"government_link_solutions_navbar"}" href="/solutions/industry/government"> Government </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"view_all_industries","context":"solutions","tag":"link","label":"view_all_industries_link_solutions_navbar"}" href="/solutions/industry"> View all industries </a></li> </ul> </div> </div> <div class="HeaderMenu-trailing-link rounded-bottom-2 flex-shrink-0 mt-lg-4 px-lg-4 py-4 py-lg-3 f5 text-semibold"> <a href="/solutions"> View all solutions <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-right HeaderMenu-trailing-link-icon"> <path d="M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z"></path> </svg> </a> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Resources <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 d-lg-flex flex-wrap dropdown-menu-wide"> <div class="HeaderMenu-column px-lg-4 border-lg-right mb-4 mb-lg-0 pr-lg-7"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="resources-topics-heading">Topics</span> <ul class="list-style-none f5" aria-labelledby="resources-topics-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"ai","context":"resources","tag":"link","label":"ai_link_resources_navbar"}" href="/resources/articles/ai"> AI </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"devops","context":"resources","tag":"link","label":"devops_link_resources_navbar"}" href="/resources/articles/devops"> DevOps </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"security","context":"resources","tag":"link","label":"security_link_resources_navbar"}" href="/resources/articles/security"> Security </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"software_development","context":"resources","tag":"link","label":"software_development_link_resources_navbar"}" href="/resources/articles/software-development"> Software Development </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"view_all","context":"resources","tag":"link","label":"view_all_link_resources_navbar"}" href="/resources/articles"> View all </a></li> </ul> </div> </div> <div class="HeaderMenu-column px-lg-4"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="resources-explore-heading">Explore</span> <ul class="list-style-none f5" aria-labelledby="resources-explore-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"learning_pathways","context":"resources","tag":"link","label":"learning_pathways_link_resources_navbar"}" href="https://resources.github.com/learn/pathways"> Learning Pathways <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"events_amp_webinars","context":"resources","tag":"link","label":"events_amp_webinars_link_resources_navbar"}" href="https://resources.github.com"> Events & Webinars <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"ebooks_amp_whitepapers","context":"resources","tag":"link","label":"ebooks_amp_whitepapers_link_resources_navbar"}" href="https://github.com/resources/whitepapers"> Ebooks & Whitepapers </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"customer_stories","context":"resources","tag":"link","label":"customer_stories_link_resources_navbar"}" href="https://github.com/customer-stories"> Customer Stories </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"partners","context":"resources","tag":"link","label":"partners_link_resources_navbar"}" href="https://partner.github.com"> Partners <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"executive_insights","context":"resources","tag":"link","label":"executive_insights_link_resources_navbar"}" href="https://github.com/solutions/executive-insights"> Executive Insights </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Open Source <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 px-lg-4"> <div class="HeaderMenu-column"> <div class="border-bottom pb-3 pb-lg-0 pb-lg-3 mb-3 mb-lg-0 mb-lg-3"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"github_sponsors","context":"open_source","tag":"link","label":"github_sponsors_link_open_source_navbar"}" href="/sponsors"> <div> <div class="color-fg-default h4">GitHub Sponsors</div> Fund open source developers </div> </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 pb-lg-3 mb-3 mb-lg-0 mb-lg-3"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"the_readme_project","context":"open_source","tag":"link","label":"the_readme_project_link_open_source_navbar"}" href="https://github.com/readme"> <div> <div class="color-fg-default h4">The ReadME Project</div> GitHub community articles </div> </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="open-source-repositories-heading">Repositories</span> <ul class="list-style-none f5" aria-labelledby="open-source-repositories-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"topics","context":"open_source","tag":"link","label":"topics_link_open_source_navbar"}" href="https://github.com/topics"> Topics </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"trending","context":"open_source","tag":"link","label":"trending_link_open_source_navbar"}" href="https://github.com/trending"> Trending </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"collections","context":"open_source","tag":"link","label":"collections_link_open_source_navbar"}" href="https://github.com/collections"> Collections </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Enterprise <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 px-lg-4"> <div class="HeaderMenu-column"> <div class="border-bottom pb-3 pb-lg-0 pb-lg-3 mb-3 mb-lg-0 mb-lg-3"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"enterprise_platform","context":"enterprise","tag":"link","label":"enterprise_platform_link_enterprise_navbar"}" href="/enterprise"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-stack color-fg-subtle mr-3"> <path d="M11.063 1.456a1.749 1.749 0 0 1 1.874 0l8.383 5.316a1.751 1.751 0 0 1 0 2.956l-8.383 5.316a1.749 1.749 0 0 1-1.874 0L2.68 9.728a1.751 1.751 0 0 1 0-2.956Zm1.071 1.267a.25.25 0 0 0-.268 0L3.483 8.039a.25.25 0 0 0 0 .422l8.383 5.316a.25.25 0 0 0 .268 0l8.383-5.316a.25.25 0 0 0 0-.422Z"></path><path d="M1.867 12.324a.75.75 0 0 1 1.035-.232l8.964 5.685a.25.25 0 0 0 .268 0l8.964-5.685a.75.75 0 0 1 .804 1.267l-8.965 5.685a1.749 1.749 0 0 1-1.874 0l-8.965-5.685a.75.75 0 0 1-.231-1.035Z"></path><path d="M1.867 16.324a.75.75 0 0 1 1.035-.232l8.964 5.685a.25.25 0 0 0 .268 0l8.964-5.685a.75.75 0 0 1 .804 1.267l-8.965 5.685a1.749 1.749 0 0 1-1.874 0l-8.965-5.685a.75.75 0 0 1-.231-1.035Z"></path> </svg> <div> <div class="color-fg-default h4">Enterprise platform</div> AI-powered developer platform </div> </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="enterprise-available-add-ons-heading">Available add-ons</span> <ul class="list-style-none f5" aria-labelledby="enterprise-available-add-ons-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"github_advanced_security","context":"enterprise","tag":"link","label":"github_advanced_security_link_enterprise_navbar"}" href="https://github.com/security/advanced-security"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-shield-check color-fg-subtle mr-3"> <path d="M16.53 9.78a.75.75 0 0 0-1.06-1.06L11 13.19l-1.97-1.97a.75.75 0 0 0-1.06 1.06l2.5 2.5a.75.75 0 0 0 1.06 0l5-5Z"></path><path d="m12.54.637 8.25 2.675A1.75 1.75 0 0 1 22 4.976V10c0 6.19-3.771 10.704-9.401 12.83a1.704 1.704 0 0 1-1.198 0C5.77 20.705 2 16.19 2 10V4.976c0-.758.489-1.43 1.21-1.664L11.46.637a1.748 1.748 0 0 1 1.08 0Zm-.617 1.426-8.25 2.676a.249.249 0 0 0-.173.237V10c0 5.46 3.28 9.483 8.43 11.426a.199.199 0 0 0 .14 0C17.22 19.483 20.5 15.461 20.5 10V4.976a.25.25 0 0 0-.173-.237l-8.25-2.676a.253.253 0 0 0-.154 0Z"></path> </svg> <div> <div class="color-fg-default h4">GitHub Advanced Security</div> Enterprise-grade security features </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"copilot_for_business","context":"enterprise","tag":"link","label":"copilot_for_business_link_enterprise_navbar"}" href="/features/copilot/copilot-business"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-copilot color-fg-subtle mr-3"> <path d="M23.922 16.992c-.861 1.495-5.859 5.023-11.922 5.023-6.063 0-11.061-3.528-11.922-5.023A.641.641 0 0 1 0 16.736v-2.869a.841.841 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.195 10.195 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952 1.399-1.136 3.392-2.093 6.122-2.093 2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.832.832 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256ZM12.172 11h-.344a4.323 4.323 0 0 1-.355.508C10.703 12.455 9.555 13 7.965 13c-1.725 0-2.989-.359-3.782-1.259a2.005 2.005 0 0 1-.085-.104L4 11.741v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.323 4.323 0 0 1-.355-.508h-.016.016Zm.641-2.935c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z"></path><path d="M14.5 14.25a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Zm-5 0a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Z"></path> </svg> <div> <div class="color-fg-default h4">Copilot for business</div> Enterprise-grade AI features </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"premium_support","context":"enterprise","tag":"link","label":"premium_support_link_enterprise_navbar"}" href="/premium-support"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-comment-discussion color-fg-subtle mr-3"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 14.25 14H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 15.543V14H1.75A1.75 1.75 0 0 1 0 12.25v-9.5C0 1.784.784 1 1.75 1ZM1.5 2.75v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Z"></path><path d="M22.5 8.75a.25.25 0 0 0-.25-.25h-3.5a.75.75 0 0 1 0-1.5h3.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 22.25 20H21v1.543a1.457 1.457 0 0 1-2.487 1.03L15.939 20H10.75A1.75 1.75 0 0 1 9 18.25v-1.465a.75.75 0 0 1 1.5 0v1.465c0 .138.112.25.25.25h5.5a.75.75 0 0 1 .53.22l2.72 2.72v-2.19a.75.75 0 0 1 .75-.75h2a.25.25 0 0 0 .25-.25v-9.5Z"></path> </svg> <div> <div class="color-fg-default h4">Premium Support</div> Enterprise-grade 24/7 support </div> </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <a class="HeaderMenu-link no-underline px-0 px-lg-2 py-3 py-lg-2 d-block d-lg-inline-block" data-analytics-event="{"location":"navbar","action":"pricing","context":"global","tag":"link","label":"pricing_link_global_navbar"}" href="https://github.com/pricing">Pricing</a> </li> </ul> </nav> <div class="d-flex flex-column flex-lg-row width-full flex-justify-end flex-lg-items-center text-center mt-3 mt-lg-0 text-lg-left ml-lg-3"> <qbsearch-input class="search-input" data-scope="repo:SmallChi/JT808" data-custom-scopes-path="/search/custom_scopes" data-delete-custom-scopes-csrf="sCX9NiXcIW6USdcoImcslrvK5Cv_HwfcJN54Eytcwfz5Eo8L25gXPrQVOH3E5PWj-J50g7MLb2URUvvk3NleJg" data-max-custom-scopes="10" data-header-redesign-enabled="false" data-initial-value="" data-blackbird-suggestions-path="/search/suggestions" data-jump-to-suggestions-path="/_graphql/GetSuggestedNavigationDestinations" data-current-repository="SmallChi/JT808" data-current-org="" data-current-owner="SmallChi" data-logged-in="false" data-copilot-chat-enabled="false" data-nl-search-enabled="false" data-retain-scroll-position="true"> <div class="search-input-container search-with-dialog position-relative d-flex flex-row flex-items-center mr-4 rounded" data-action="click:qbsearch-input#searchInputContainerClicked" > <button type="button" class="header-search-button placeholder input-button form-control d-flex flex-1 flex-self-stretch flex-items-center no-wrap width-full py-0 pl-2 pr-0 text-left border-0 box-shadow-none" data-target="qbsearch-input.inputButton" aria-label="Search or jump to…" aria-haspopup="dialog" placeholder="Search or jump to..." data-hotkey=s,/ autocapitalize="off" data-analytics-event="{"location":"navbar","action":"searchbar","context":"global","tag":"input","label":"searchbar_input_global_navbar"}" data-action="click:qbsearch-input#handleExpand" > <div class="mr-2 color-fg-muted"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search"> <path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path> </svg> </div> <span class="flex-1" data-target="qbsearch-input.inputButtonText">Search or jump to...</span> <div class="d-flex" data-target="qbsearch-input.hotkeyIndicator"> <svg xmlns="http://www.w3.org/2000/svg" width="22" height="20" aria-hidden="true" class="mr-1"><path fill="none" stroke="#979A9C" opacity=".4" d="M3.5.5h12c1.7 0 3 1.3 3 3v13c0 1.7-1.3 3-3 3h-12c-1.7 0-3-1.3-3-3v-13c0-1.7 1.3-3 3-3z"></path><path fill="#979A9C" d="M11.8 6L8 15.1h-.9L10.8 6h1z"></path></svg> </div> </button> <input type="hidden" name="type" class="js-site-search-type-field"> <div class="Overlay--hidden " data-modal-dialog-overlay> <modal-dialog data-action="close:qbsearch-input#handleClose cancel:qbsearch-input#handleClose" data-target="qbsearch-input.searchSuggestionsDialog" role="dialog" id="search-suggestions-dialog" aria-modal="true" aria-labelledby="search-suggestions-dialog-header" data-view-component="true" class="Overlay Overlay--width-large Overlay--height-auto"> <h1 id="search-suggestions-dialog-header" class="sr-only">Search code, repositories, users, issues, pull requests...</h1> <div class="Overlay-body Overlay-body--paddingNone"> <div data-view-component="true"> <div class="search-suggestions position-fixed width-full color-shadow-large border color-fg-default color-bg-default overflow-hidden d-flex flex-column query-builder-container" style="border-radius: 12px;" data-target="qbsearch-input.queryBuilderContainer" hidden > <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="query-builder-test-form" action="" accept-charset="UTF-8" method="get"> <query-builder data-target="qbsearch-input.queryBuilder" id="query-builder-query-builder-test" data-filter-key=":" data-view-component="true" class="QueryBuilder search-query-builder"> <div class="FormControl FormControl--fullWidth"> <label id="query-builder-test-label" for="query-builder-test" class="FormControl-label sr-only"> Search </label> <div class="QueryBuilder-StyledInput width-fit " data-target="query-builder.styledInput" > <span id="query-builder-test-leadingvisual-wrap" class="FormControl-input-leadingVisualWrap QueryBuilder-leadingVisualWrap"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search FormControl-input-leadingVisual"> <path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path> </svg> </span> <div data-target="query-builder.styledInputContainer" class="QueryBuilder-StyledInputContainer"> <div aria-hidden="true" class="QueryBuilder-StyledInputContent" data-target="query-builder.styledInputContent" ></div> <div class="QueryBuilder-InputWrapper"> <div aria-hidden="true" class="QueryBuilder-Sizer" data-target="query-builder.sizer"></div> <input id="query-builder-test" name="query-builder-test" value="" autocomplete="off" type="text" role="combobox" spellcheck="false" aria-expanded="false" aria-describedby="validation-9c0ec8ce-3240-45de-87b8-ce1df2be9478" data-target="query-builder.input" data-action=" input:query-builder#inputChange blur:query-builder#inputBlur keydown:query-builder#inputKeydown focus:query-builder#inputFocus " data-view-component="true" class="FormControl-input QueryBuilder-Input FormControl-medium" /> </div> </div> <span class="sr-only" id="query-builder-test-clear">Clear</span> <button role="button" id="query-builder-test-clear-button" aria-labelledby="query-builder-test-clear query-builder-test-label" data-target="query-builder.clearButton" data-action=" click:query-builder#clear focus:query-builder#clearButtonFocus blur:query-builder#clearButtonBlur " variant="small" hidden="hidden" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium mr-1 px-2 py-0 d-flex flex-items-center rounded-1 color-fg-muted"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x-circle-fill Button-visual"> <path d="M2.343 13.657A8 8 0 1 1 13.658 2.343 8 8 0 0 1 2.343 13.657ZM6.03 4.97a.751.751 0 0 0-1.042.018.751.751 0 0 0-.018 1.042L6.94 8 4.97 9.97a.749.749 0 0 0 .326 1.275.749.749 0 0 0 .734-.215L8 9.06l1.97 1.97a.749.749 0 0 0 1.275-.326.749.749 0 0 0-.215-.734L9.06 8l1.97-1.97a.749.749 0 0 0-.326-1.275.749.749 0 0 0-.734.215L8 6.94Z"></path> </svg> </button> </div> <template id="search-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search"> <path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path> </svg> </template> <template id="code-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code"> <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path> </svg> </template> <template id="file-code-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-file-code"> <path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path> </svg> </template> <template id="history-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-history"> <path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path> </svg> </template> <template id="repo-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo"> <path d="M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v12.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-8a1 1 0 0 0-.714 1.7.75.75 0 1 1-1.072 1.05A2.495 2.495 0 0 1 2 11.5Zm10.5-1h-8a1 1 0 0 0-1 1v6.708A2.486 2.486 0 0 1 4.5 9h8ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.249.249 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2Z"></path> </svg> </template> <template id="bookmark-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bookmark"> <path d="M3 2.75C3 1.784 3.784 1 4.75 1h6.5c.966 0 1.75.784 1.75 1.75v11.5a.75.75 0 0 1-1.227.579L8 11.722l-3.773 3.107A.751.751 0 0 1 3 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.91l3.023-2.489a.75.75 0 0 1 .954 0l3.023 2.49V2.75a.25.25 0 0 0-.25-.25Z"></path> </svg> </template> <template id="plus-circle-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-plus-circle"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm7.25-3.25v2.5h2.5a.75.75 0 0 1 0 1.5h-2.5v2.5a.75.75 0 0 1-1.5 0v-2.5h-2.5a.75.75 0 0 1 0-1.5h2.5v-2.5a.75.75 0 0 1 1.5 0Z"></path> </svg> </template> <template id="circle-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-dot-fill"> <path d="M8 4a4 4 0 1 1 0 8 4 4 0 0 1 0-8Z"></path> </svg> </template> <template id="trash-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-trash"> <path d="M11 1.75V3h2.25a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75ZM4.496 6.675l.66 6.6a.25.25 0 0 0 .249.225h5.19a.25.25 0 0 0 .249-.225l.66-6.6a.75.75 0 0 1 1.492.149l-.66 6.6A1.748 1.748 0 0 1 10.595 15h-5.19a1.75 1.75 0 0 1-1.741-1.575l-.66-6.6a.75.75 0 1 1 1.492-.15ZM6.5 1.75V3h3V1.75a.25.25 0 0 0-.25-.25h-2.5a.25.25 0 0 0-.25.25Z"></path> </svg> </template> <template id="team-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-people"> <path d="M2 5.5a3.5 3.5 0 1 1 5.898 2.549 5.508 5.508 0 0 1 3.034 4.084.75.75 0 1 1-1.482.235 4 4 0 0 0-7.9 0 .75.75 0 0 1-1.482-.236A5.507 5.507 0 0 1 3.102 8.05 3.493 3.493 0 0 1 2 5.5ZM11 4a3.001 3.001 0 0 1 2.22 5.018 5.01 5.01 0 0 1 2.56 3.012.749.749 0 0 1-.885.954.752.752 0 0 1-.549-.514 3.507 3.507 0 0 0-2.522-2.372.75.75 0 0 1-.574-.73v-.352a.75.75 0 0 1 .416-.672A1.5 1.5 0 0 0 11 5.5.75.75 0 0 1 11 4Zm-5.5-.5a2 2 0 1 0-.001 3.999A2 2 0 0 0 5.5 3.5Z"></path> </svg> </template> <template id="project-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-project"> <path d="M1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0ZM1.5 1.75v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25ZM11.75 3a.75.75 0 0 1 .75.75v7.5a.75.75 0 0 1-1.5 0v-7.5a.75.75 0 0 1 .75-.75Zm-8.25.75a.75.75 0 0 1 1.5 0v5.5a.75.75 0 0 1-1.5 0ZM8 3a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 3Z"></path> </svg> </template> <template id="pencil-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-pencil"> <path d="M11.013 1.427a1.75 1.75 0 0 1 2.474 0l1.086 1.086a1.75 1.75 0 0 1 0 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 0 1-.927-.928l.929-3.25c.081-.286.235-.547.445-.758l8.61-8.61Zm.176 4.823L9.75 4.81l-6.286 6.287a.253.253 0 0 0-.064.108l-.558 1.953 1.953-.558a.253.253 0 0 0 .108-.064Zm1.238-3.763a.25.25 0 0 0-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 0 0 0-.354Z"></path> </svg> </template> <template id="copilot-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copilot"> <path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path> </svg> </template> <template id="copilot-error-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copilot-error"> <path d="M16 11.24c0 .112-.072.274-.21.467L13 9.688V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-.198 0-.388-.009-.571-.029L6.833 5.226a4.01 4.01 0 0 0 .17-.782c.117-.935-.037-1.395-.241-1.614-.193-.206-.637-.413-1.682-.297-.683.076-1.115.231-1.395.415l-1.257-.91c.579-.564 1.413-.877 2.485-.996 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095Zm-5.083-8.707c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Zm2.511 11.074c-1.393.776-3.272 1.428-5.43 1.428-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.18-.455-.241-.963-.252-1.475L.31 4.107A.747.747 0 0 1 0 3.509V3.49a.748.748 0 0 1 .625-.73c.156-.026.306.047.435.139l14.667 10.578a.592.592 0 0 1 .227.264.752.752 0 0 1 .046.249v.022a.75.75 0 0 1-1.19.596Zm-1.367-.991L5.635 7.964a5.128 5.128 0 0 1-.889.073c-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433 1.539 0 3.089-.505 4.063-.934Z"></path> </svg> </template> <template id="workflow-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-workflow"> <path d="M0 1.75C0 .784.784 0 1.75 0h3.5C6.216 0 7 .784 7 1.75v3.5A1.75 1.75 0 0 1 5.25 7H4v4a1 1 0 0 0 1 1h4v-1.25C9 9.784 9.784 9 10.75 9h3.5c.966 0 1.75.784 1.75 1.75v3.5A1.75 1.75 0 0 1 14.25 16h-3.5A1.75 1.75 0 0 1 9 14.25v-.75H5A2.5 2.5 0 0 1 2.5 11V7h-.75A1.75 1.75 0 0 1 0 5.25Zm1.75-.25a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Zm9 9a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Z"></path> </svg> </template> <template id="book-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-book"> <path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"></path> </svg> </template> <template id="code-review-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-review"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v8.5A1.75 1.75 0 0 1 14.25 13H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25v-8.5C0 1.784.784 1 1.75 1ZM1.5 2.75v8.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-8.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Zm5.28 1.72a.75.75 0 0 1 0 1.06L5.31 7l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.75.75 0 0 1 1.06 0Zm2.44 0a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L10.69 7 9.22 5.53a.75.75 0 0 1 0-1.06Z"></path> </svg> </template> <template id="codespaces-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-codespaces"> <path d="M0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm2-9.5C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 0 1-1.75 1.75h-8.5A1.75 1.75 0 0 1 2 6.75Zm1.75-.25a.25.25 0 0 0-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5a.25.25 0 0 0-.25-.25Zm-2 9.5a.25.25 0 0 0-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-3a.25.25 0 0 0-.25-.25Z"></path><path d="M7 12.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path> </svg> </template> <template id="comment-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment"> <path d="M1 2.75C1 1.784 1.784 1 2.75 1h10.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 13.25 12H9.06l-2.573 2.573A1.458 1.458 0 0 1 4 13.543V12H2.75A1.75 1.75 0 0 1 1 10.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h4.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> </template> <template id="comment-discussion-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment-discussion"> <path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path> </svg> </template> <template id="organization-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-organization"> <path d="M1.75 16A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0h8.5C11.216 0 12 .784 12 1.75v12.5c0 .085-.006.168-.018.25h2.268a.25.25 0 0 0 .25-.25V8.285a.25.25 0 0 0-.111-.208l-1.055-.703a.749.749 0 1 1 .832-1.248l1.055.703c.487.325.779.871.779 1.456v5.965A1.75 1.75 0 0 1 14.25 16h-3.5a.766.766 0 0 1-.197-.026c-.099.017-.2.026-.303.026h-3a.75.75 0 0 1-.75-.75V14h-1v1.25a.75.75 0 0 1-.75.75Zm-.25-1.75c0 .138.112.25.25.25H4v-1.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 .75.75v1.25h2.25a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25ZM3.75 6h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM3 3.75A.75.75 0 0 1 3.75 3h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 3.75Zm4 3A.75.75 0 0 1 7.75 6h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 7 6.75ZM7.75 3h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM3 9.75A.75.75 0 0 1 3.75 9h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 9.75ZM7.75 9h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5Z"></path> </svg> </template> <template id="rocket-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-rocket"> <path d="M14.064 0h.186C15.216 0 16 .784 16 1.75v.186a8.752 8.752 0 0 1-2.564 6.186l-.458.459c-.314.314-.641.616-.979.904v3.207c0 .608-.315 1.172-.833 1.49l-2.774 1.707a.749.749 0 0 1-1.11-.418l-.954-3.102a1.214 1.214 0 0 1-.145-.125L3.754 9.816a1.218 1.218 0 0 1-.124-.145L.528 8.717a.749.749 0 0 1-.418-1.11l1.71-2.774A1.748 1.748 0 0 1 3.31 4h3.204c.288-.338.59-.665.904-.979l.459-.458A8.749 8.749 0 0 1 14.064 0ZM8.938 3.623h-.002l-.458.458c-.76.76-1.437 1.598-2.02 2.5l-1.5 2.317 2.143 2.143 2.317-1.5c.902-.583 1.74-1.26 2.499-2.02l.459-.458a7.25 7.25 0 0 0 2.123-5.127V1.75a.25.25 0 0 0-.25-.25h-.186a7.249 7.249 0 0 0-5.125 2.123ZM3.56 14.56c-.732.732-2.334 1.045-3.005 1.148a.234.234 0 0 1-.201-.064.234.234 0 0 1-.064-.201c.103-.671.416-2.273 1.15-3.003a1.502 1.502 0 1 1 2.12 2.12Zm6.94-3.935c-.088.06-.177.118-.266.175l-2.35 1.521.548 1.783 1.949-1.2a.25.25 0 0 0 .119-.213ZM3.678 8.116 5.2 5.766c.058-.09.117-.178.176-.266H3.309a.25.25 0 0 0-.213.119l-1.2 1.95ZM12 5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> </template> <template id="shield-check-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield-check"> <path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> </template> <template id="heart-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart"> <path d="m8 14.25.345.666a.75.75 0 0 1-.69 0l-.008-.004-.018-.01a7.152 7.152 0 0 1-.31-.17 22.055 22.055 0 0 1-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.066 22.066 0 0 1-3.744 2.584l-.018.01-.006.003h-.002ZM4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.58 20.58 0 0 0 8 13.393a20.58 20.58 0 0 0 3.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.749.749 0 0 1-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5Z"></path> </svg> </template> <template id="server-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-server"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v4c0 .372-.116.717-.314 1 .198.283.314.628.314 1v4a1.75 1.75 0 0 1-1.75 1.75H1.75A1.75 1.75 0 0 1 0 12.75v-4c0-.358.109-.707.314-1a1.739 1.739 0 0 1-.314-1v-4C0 1.784.784 1 1.75 1ZM1.5 2.75v4c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Zm.25 5.75a.25.25 0 0 0-.25.25v4c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25ZM7 4.75A.75.75 0 0 1 7.75 4h4.5a.75.75 0 0 1 0 1.5h-4.5A.75.75 0 0 1 7 4.75ZM7.75 10h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM3 4.75A.75.75 0 0 1 3.75 4h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 4.75ZM3.75 10h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5Z"></path> </svg> </template> <template id="globe-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-globe"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM5.78 8.75a9.64 9.64 0 0 0 1.363 4.177c.255.426.542.832.857 1.215.245-.296.551-.705.857-1.215A9.64 9.64 0 0 0 10.22 8.75Zm4.44-1.5a9.64 9.64 0 0 0-1.363-4.177c-.307-.51-.612-.919-.857-1.215a9.927 9.927 0 0 0-.857 1.215A9.64 9.64 0 0 0 5.78 7.25Zm-5.944 1.5H1.543a6.507 6.507 0 0 0 4.666 5.5c-.123-.181-.24-.365-.352-.552-.715-1.192-1.437-2.874-1.581-4.948Zm-2.733-1.5h2.733c.144-2.074.866-3.756 1.58-4.948.12-.197.237-.381.353-.552a6.507 6.507 0 0 0-4.666 5.5Zm10.181 1.5c-.144 2.074-.866 3.756-1.58 4.948-.12.197-.237.381-.353.552a6.507 6.507 0 0 0 4.666-5.5Zm2.733-1.5a6.507 6.507 0 0 0-4.666-5.5c.123.181.24.365.353.552.714 1.192 1.436 2.874 1.58 4.948Z"></path> </svg> </template> <template id="issue-opened-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened"> <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path> </svg> </template> <template id="device-mobile-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-device-mobile"> <path d="M3.75 0h8.5C13.216 0 14 .784 14 1.75v12.5A1.75 1.75 0 0 1 12.25 16h-8.5A1.75 1.75 0 0 1 2 14.25V1.75C2 .784 2.784 0 3.75 0ZM3.5 1.75v12.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25ZM8 13a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> </template> <template id="package-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-package"> <path d="m8.878.392 5.25 3.045c.54.314.872.89.872 1.514v6.098a1.75 1.75 0 0 1-.872 1.514l-5.25 3.045a1.75 1.75 0 0 1-1.756 0l-5.25-3.045A1.75 1.75 0 0 1 1 11.049V4.951c0-.624.332-1.201.872-1.514L7.122.392a1.75 1.75 0 0 1 1.756 0ZM7.875 1.69l-4.63 2.685L8 7.133l4.755-2.758-4.63-2.685a.248.248 0 0 0-.25 0ZM2.5 5.677v5.372c0 .09.047.171.125.216l4.625 2.683V8.432Zm6.25 8.271 4.625-2.683a.25.25 0 0 0 .125-.216V5.677L8.75 8.432Z"></path> </svg> </template> <template id="credit-card-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-credit-card"> <path d="M10.75 9a.75.75 0 0 0 0 1.5h1.5a.75.75 0 0 0 0-1.5h-1.5Z"></path><path d="M0 3.75C0 2.784.784 2 1.75 2h12.5c.966 0 1.75.784 1.75 1.75v8.5A1.75 1.75 0 0 1 14.25 14H1.75A1.75 1.75 0 0 1 0 12.25ZM14.5 6.5h-13v5.75c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25Zm0-2.75a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25V5h13Z"></path> </svg> </template> <template id="play-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path> </svg> </template> <template id="gift-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-gift"> <path d="M2 2.75A2.75 2.75 0 0 1 4.75 0c.983 0 1.873.42 2.57 1.232.268.318.497.668.68 1.042.183-.375.411-.725.68-1.044C9.376.42 10.266 0 11.25 0a2.75 2.75 0 0 1 2.45 4h.55c.966 0 1.75.784 1.75 1.75v2c0 .698-.409 1.301-1 1.582v4.918A1.75 1.75 0 0 1 13.25 16H2.75A1.75 1.75 0 0 1 1 14.25V9.332C.409 9.05 0 8.448 0 7.75v-2C0 4.784.784 4 1.75 4h.55c-.192-.375-.3-.8-.3-1.25ZM7.25 9.5H2.5v4.75c0 .138.112.25.25.25h4.5Zm1.5 0v5h4.5a.25.25 0 0 0 .25-.25V9.5Zm0-4V8h5.5a.25.25 0 0 0 .25-.25v-2a.25.25 0 0 0-.25-.25Zm-7 0a.25.25 0 0 0-.25.25v2c0 .138.112.25.25.25h5.5V5.5h-5.5Zm3-4a1.25 1.25 0 0 0 0 2.5h2.309c-.233-.818-.542-1.401-.878-1.793-.43-.502-.915-.707-1.431-.707ZM8.941 4h2.309a1.25 1.25 0 0 0 0-2.5c-.516 0-1 .205-1.43.707-.337.392-.646.975-.879 1.793Z"></path> </svg> </template> <template id="code-square-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-square"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> </template> <template id="device-desktop-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-device-desktop"> <path d="M14.25 1c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 14.25 12h-3.727c.099 1.041.52 1.872 1.292 2.757A.752.752 0 0 1 11.25 16h-6.5a.75.75 0 0 1-.565-1.243c.772-.885 1.192-1.716 1.292-2.757H1.75A1.75 1.75 0 0 1 0 10.25v-7.5C0 1.784.784 1 1.75 1ZM1.75 2.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25ZM9.018 12H6.982a5.72 5.72 0 0 1-.765 2.5h3.566a5.72 5.72 0 0 1-.765-2.5Z"></path> </svg> </template> <div class="position-relative"> <ul role="listbox" class="ActionListWrap QueryBuilder-ListWrap" aria-label="Suggestions" data-action=" combobox-commit:query-builder#comboboxCommit mousedown:query-builder#resultsMousedown " data-target="query-builder.resultsList" data-persist-list=false id="query-builder-test-results" ></ul> </div> <div class="FormControl-inlineValidation" id="validation-9c0ec8ce-3240-45de-87b8-ce1df2be9478" hidden="hidden"> <span class="FormControl-inlineValidation--visual"> <svg aria-hidden="true" height="12" viewBox="0 0 12 12" version="1.1" width="12" data-view-component="true" class="octicon octicon-alert-fill"> <path d="M4.855.708c.5-.896 1.79-.896 2.29 0l4.675 8.351a1.312 1.312 0 0 1-1.146 1.954H1.33A1.313 1.313 0 0 1 .183 9.058ZM7 7V3H5v4Zm-1 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"></path> </svg> </span> <span></span> </div> </div> <div data-target="query-builder.screenReaderFeedback" aria-live="polite" aria-atomic="true" class="sr-only"></div> </query-builder></form> <div class="d-flex flex-row color-fg-muted px-3 text-small color-bg-default search-feedback-prompt"> <a target="_blank" href="https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax" data-view-component="true" class="Link color-fg-accent text-normal ml-2">Search syntax tips</a> <div class="d-flex flex-1"></div> </div> </div> </div> </div> </modal-dialog></div> </div> <div data-action="click:qbsearch-input#retract" class="dark-backdrop position-fixed" hidden data-target="qbsearch-input.darkBackdrop"></div> <div class="color-fg-default"> <dialog-helper> <dialog data-target="qbsearch-input.feedbackDialog" data-action="close:qbsearch-input#handleDialogClose cancel:qbsearch-input#handleDialogClose" id="feedback-dialog" aria-modal="true" aria-labelledby="feedback-dialog-title" aria-describedby="feedback-dialog-description" data-view-component="true" class="Overlay Overlay-whenNarrow Overlay--size-medium Overlay--motion-scaleFade Overlay--disableScroll"> <div data-view-component="true" class="Overlay-header"> <div class="Overlay-headerContentWrap"> <div class="Overlay-titleWrap"> <h1 class="Overlay-title " id="feedback-dialog-title"> Provide feedback </h1> </div> <div class="Overlay-actionWrap"> <button data-close-dialog-id="feedback-dialog" aria-label="Close" type="button" data-view-component="true" class="close-button Overlay-closeButton"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg></button> </div> </div> </div> <scrollable-region data-labelled-by="feedback-dialog-title"> <div data-view-component="true" class="Overlay-body"> <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="code-search-feedback-form" data-turbo="false" action="/search/feedback" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="EJb/Zyes+p0zig+OWql2mrfr64z0rIxLs8hQtz0k1B45oSox4u1FwmDzY63bh10pMd9hQ75zQS4BA+677Rs7+w==" /> <p>We read every piece of feedback, and take your input very seriously.</p> <textarea name="feedback" class="form-control width-full mb-2" style="height: 120px" id="feedback"></textarea> <input name="include_email" id="include_email" aria-label="Include my email address so I can be contacted" class="form-control mr-2" type="checkbox"> <label for="include_email" style="font-weight: normal">Include my email address so I can be contacted</label> </form></div> </scrollable-region> <div data-view-component="true" class="Overlay-footer Overlay-footer--alignEnd"> <button data-close-dialog-id="feedback-dialog" type="button" data-view-component="true" class="btn"> Cancel </button> <button form="code-search-feedback-form" data-action="click:qbsearch-input#submitFeedback" type="submit" data-view-component="true" class="btn-primary btn"> Submit feedback </button> </div> </dialog></dialog-helper> <custom-scopes data-target="qbsearch-input.customScopesManager"> <dialog-helper> <dialog data-target="custom-scopes.customScopesModalDialog" data-action="close:qbsearch-input#handleDialogClose cancel:qbsearch-input#handleDialogClose" id="custom-scopes-dialog" aria-modal="true" aria-labelledby="custom-scopes-dialog-title" aria-describedby="custom-scopes-dialog-description" data-view-component="true" class="Overlay Overlay-whenNarrow Overlay--size-medium Overlay--motion-scaleFade Overlay--disableScroll"> <div data-view-component="true" class="Overlay-header Overlay-header--divided"> <div class="Overlay-headerContentWrap"> <div class="Overlay-titleWrap"> <h1 class="Overlay-title " id="custom-scopes-dialog-title"> Saved searches </h1> <h2 id="custom-scopes-dialog-description" class="Overlay-description">Use saved searches to filter your results more quickly</h2> </div> <div class="Overlay-actionWrap"> <button data-close-dialog-id="custom-scopes-dialog" aria-label="Close" type="button" data-view-component="true" class="close-button Overlay-closeButton"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg></button> </div> </div> </div> <scrollable-region data-labelled-by="custom-scopes-dialog-title"> <div data-view-component="true" class="Overlay-body"> <div data-target="custom-scopes.customScopesModalDialogFlash"></div> <div hidden class="create-custom-scope-form" data-target="custom-scopes.createCustomScopeForm"> <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="custom-scopes-dialog-form" data-turbo="false" action="/search/custom_scopes" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="edzHOBc6Zfj5nIefv0kpYCsQuqVBU6foIwBZJoESNkDk8M8EAy5YMSo3fjkLp4c2A4AvzdisKmoIOcSScwrUIQ==" /> <div data-target="custom-scopes.customScopesModalDialogFlash"></div> <input type="hidden" id="custom_scope_id" name="custom_scope_id" data-target="custom-scopes.customScopesIdField"> <div class="form-group"> <label for="custom_scope_name">Name</label> <auto-check src="/search/custom_scopes/check_name" required only-validate-on-blur="false"> <input type="text" name="custom_scope_name" id="custom_scope_name" data-target="custom-scopes.customScopesNameField" class="form-control" autocomplete="off" placeholder="github-ruby" required maxlength="50"> <input type="hidden" data-csrf="true" value="mgpkesl77CnN6npg3WDVuTwLZg03UCRvCIXyBZp8WZriPlPH+43Qox5PW/lFyVzBCXffsdMuuuCEykN/rV9uPQ==" /> </auto-check> </div> <div class="form-group"> <label for="custom_scope_query">Query</label> <input type="text" name="custom_scope_query" id="custom_scope_query" data-target="custom-scopes.customScopesQueryField" class="form-control" autocomplete="off" placeholder="(repo:mona/a OR repo:mona/b) AND lang:python" required maxlength="500"> </div> <p class="text-small color-fg-muted"> To see all available qualifiers, see our <a class="Link--inTextBlock" href="https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax">documentation</a>. </p> </form> </div> <div data-target="custom-scopes.manageCustomScopesForm"> <div data-target="custom-scopes.list"></div> </div> </div> </scrollable-region> <div data-view-component="true" class="Overlay-footer Overlay-footer--alignEnd Overlay-footer--divided"> <button data-action="click:custom-scopes#customScopesCancel" type="button" data-view-component="true" class="btn"> Cancel </button> <button form="custom-scopes-dialog-form" data-action="click:custom-scopes#customScopesSubmit" data-target="custom-scopes.customScopesSubmitButton" type="submit" data-view-component="true" class="btn-primary btn"> Create saved search </button> </div> </dialog></dialog-helper> </custom-scopes> </div> </qbsearch-input> <div class="position-relative HeaderMenu-link-wrap d-lg-inline-block"> <a href="/login?return_to=https%3A%2F%2Fgithub.com%2FSmallChi%2FJT808" class="HeaderMenu-link HeaderMenu-link--sign-in HeaderMenu-button flex-shrink-0 no-underline d-none d-lg-inline-flex border border-lg-0 rounded rounded-lg-0 px-2 py-1" style="margin-left: 12px;" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"site header menu","repository_id":null,"auth_type":"SIGN_UP","originating_url":"https://github.com/SmallChi/JT808","user_id":null}}" data-hydro-click-hmac="7faa3e615762df044a2cd6a128f070beb7ddec7c6da4eac40b0669214079ef0c" data-analytics-event="{"category":"Marketing nav","action":"click to go to homepage","label":"ref_page:Marketing;ref_cta:Sign in;ref_loc:Header"}" > Sign in </a> </div> <a href="/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E&source=header-repo&source_repo=SmallChi%2FJT808" class="HeaderMenu-link HeaderMenu-link--sign-up HeaderMenu-button flex-shrink-0 d-flex d-lg-inline-flex no-underline border color-border-default rounded px-2 py-1" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"site header menu","repository_id":null,"auth_type":"SIGN_UP","originating_url":"https://github.com/SmallChi/JT808","user_id":null}}" data-hydro-click-hmac="7faa3e615762df044a2cd6a128f070beb7ddec7c6da4eac40b0669214079ef0c" data-analytics-event="{"category":"Sign up","action":"click to sign up for account","label":"ref_page:/<user-name>/<repo-name>;ref_cta:Sign up;ref_loc:header logged out"}" > Sign up </a> <button type="button" class="sr-only js-header-menu-focus-trap d-block d-lg-none">Reseting focus</button> </div> </div> </div> </div> </header> <div hidden="hidden" data-view-component="true" class="js-stale-session-flash stale-session-flash flash flash-warn flash-full"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <span class="js-stale-session-flash-switched" hidden>You switched accounts on another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <button id="icon-button-a2a4bdc5-a9ff-41c8-aa99-f75e49f9239f" aria-labelledby="tooltip-e1b740ff-9ac4-46e2-bb23-80b337024b70" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button><tool-tip id="tooltip-e1b740ff-9ac4-46e2-bb23-80b337024b70" for="icon-button-a2a4bdc5-a9ff-41c8-aa99-f75e49f9239f" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip> </div> </div> <div id="start-of-content" class="show-on-focus"></div> <div id="js-flash-container" class="flash-container" data-turbo-replace> <template class="js-flash-template"> <div class="flash flash-full {{ className }}"> <div > <button autofocus class="flash-close js-flash-close" type="button" aria-label="Dismiss this message"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button> <div aria-atomic="true" role="alert" class="js-flash-alert"> <div>{{ message }}</div> </div> </div> </div> </template> </div> <div class="application-main " data-commit-hovercards-enabled data-discussion-hovercards-enabled data-issue-and-pr-hovercards-enabled data-project-hovercards-enabled > <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class=""> <main id="js-repo-pjax-container" > <div id="repository-container-header" class="pt-3 hide-full-screen" style="background-color: var(--page-header-bgColor, var(--color-page-header-bg));" data-turbo-replace> <div class="d-flex flex-nowrap flex-justify-end mb-3 px-3 px-lg-5" style="gap: 1rem;"> <div class="flex-auto min-width-0 width-fit"> <div class=" d-flex flex-wrap flex-items-center wb-break-word f3 text-normal"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo color-fg-muted mr-2"> <path d="M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v12.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-8a1 1 0 0 0-.714 1.7.75.75 0 1 1-1.072 1.05A2.495 2.495 0 0 1 2 11.5Zm10.5-1h-8a1 1 0 0 0-1 1v6.708A2.486 2.486 0 0 1 4.5 9h8ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.249.249 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2Z"></path> </svg> <span class="author flex-self-stretch" itemprop="author"> <a class="url fn" rel="author" data-hovercard-type="user" data-hovercard-url="/users/SmallChi/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/SmallChi"> SmallChi </a> </span> <span class="mx-1 flex-self-stretch color-fg-muted">/</span> <strong itemprop="name" class="mr-2 flex-self-stretch"> <a data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" href="/SmallChi/JT808">JT808</a> </strong> <span></span><span class="Label Label--secondary v-align-middle mr-1">Public</span> </div> </div> <div id="repository-details-container" class="flex-shrink-0" data-turbo-replace style="max-width: 70%;"> <ul class="pagehead-actions flex-shrink-0 d-none d-md-inline" style="padding: 2px 0;"> <li> <a href="/login?return_to=%2FSmallChi%2FJT808" rel="nofollow" id="repository-details-watch-button" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"notification subscription menu watch","repository_id":null,"auth_type":"LOG_IN","originating_url":"https://github.com/SmallChi/JT808","user_id":null}}" data-hydro-click-hmac="7b60d587c01bf797e90fabee9a9d70366eab97d60a1ce1462f8eda4e27a23509" aria-label="You must be signed in to change notification settings" data-view-component="true" class="btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bell mr-2"> <path d="M8 16a2 2 0 0 0 1.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 0 0 8 16ZM3 5a5 5 0 0 1 10 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.519 1.519 0 0 1 13.482 13H2.518a1.516 1.516 0 0 1-1.263-2.36l1.703-2.554A.255.255 0 0 0 3 7.947Zm5-3.5A3.5 3.5 0 0 0 4.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.017.017 0 0 0-.003.01l.001.006c0 .002.002.004.004.006l.006.004.007.001h10.964l.007-.001.006-.004.004-.006.001-.007a.017.017 0 0 0-.003-.01l-1.703-2.554a1.745 1.745 0 0 1-.294-.97V5A3.5 3.5 0 0 0 8 1.5Z"></path> </svg>Notifications </a> <tool-tip id="tooltip-ba347cb8-f69d-4bf9-9ae2-fae2826f6c7c" for="repository-details-watch-button" popover="manual" data-direction="s" data-type="description" data-view-component="true" class="sr-only position-absolute">You must be signed in to change notification settings</tool-tip> </li> <li> <a icon="repo-forked" id="fork-button" href="/login?return_to=%2FSmallChi%2FJT808" rel="nofollow" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"repo details fork button","repository_id":152872227,"auth_type":"LOG_IN","originating_url":"https://github.com/SmallChi/JT808","user_id":null}}" data-hydro-click-hmac="8d20b794eb10b8362cdd812dc9cb341bb98d4f047517e44c5ec5e87322544b1c" data-view-component="true" class="btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-2"> <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path> </svg>Fork <span id="repo-network-counter" data-pjax-replace="true" data-turbo-replace="true" title="262" data-view-component="true" class="Counter">262</span> </a> </li> <li> <div data-view-component="true" class="BtnGroup d-flex"> <a href="/login?return_to=%2FSmallChi%2FJT808" rel="nofollow" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"star button","repository_id":152872227,"auth_type":"LOG_IN","originating_url":"https://github.com/SmallChi/JT808","user_id":null}}" data-hydro-click-hmac="55cdcf6391be8904e1ec8adf9e953ad6472e0e0bbf52133acb416aec5f9e4081" aria-label="You must be signed in to star a repository" data-view-component="true" class="tooltipped tooltipped-sw btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star v-align-text-bottom d-inline-block mr-2"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg><span data-view-component="true" class="d-inline"> Star </span> <span id="repo-stars-counter-star" aria-label="573 users starred this repository" data-singular-suffix="user starred this repository" data-plural-suffix="users starred this repository" data-turbo-replace="true" title="573" data-view-component="true" class="Counter js-social-count">573</span> </a></div> </li> </ul> </div> </div> <div id="responsive-meta-container" data-turbo-replace> <div class="d-block d-md-none mb-2 px-3 px-md-4 px-lg-5"> <p class="f4 mb-3 "> JT/T808 protocol,JT808 protocol, GB808 protocol (support 2011, 2013, 2019 version) JT/T808协议、JT808协议、GB808协议(支持2011、2013、2019版本) </p> <h3 class="sr-only">License</h3> <div class="mb-2"> <a href="/SmallChi/JT808/blob/master/LICENSE" class="Link--muted" data-analytics-event="{"category":"Repository Overview","action":"click","label":"location:sidebar;file:license"}" > <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-law mr-2"> <path d="M8.75.75V2h.985c.304 0 .603.08.867.231l1.29.736c.038.022.08.033.124.033h2.234a.75.75 0 0 1 0 1.5h-.427l2.111 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.006.005-.01.01-.045.04c-.21.176-.441.327-.686.45C14.556 10.78 13.88 11 13 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L12.178 4.5h-.162c-.305 0-.604-.079-.868-.231l-1.29-.736a.245.245 0 0 0-.124-.033H8.75V13h2.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1 0-1.5h2.5V3.5h-.984a.245.245 0 0 0-.124.033l-1.289.737c-.265.15-.564.23-.869.23h-.162l2.112 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.016.015-.045.04c-.21.176-.441.327-.686.45C4.556 10.78 3.88 11 3 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L2.178 4.5H1.75a.75.75 0 0 1 0-1.5h2.234a.249.249 0 0 0 .125-.033l1.288-.737c.265-.15.564-.23.869-.23h.984V.75a.75.75 0 0 1 1.5 0Zm2.945 8.477c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L13 6.327Zm-10 0c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L3 6.327Z"></path> </svg> MIT license </a> </div> <div class="mb-3"> <a class="Link--secondary no-underline mr-3" href="/SmallChi/JT808/stargazers"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star mr-1"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg> <span class="text-bold">573</span> stars </a> <a class="Link--secondary no-underline mr-3" href="/SmallChi/JT808/forks"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-1"> <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path> </svg> <span class="text-bold">262</span> forks </a> <a class="Link--secondary no-underline mr-3 d-inline-block" href="/SmallChi/JT808/branches"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-branch mr-1"> <path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path> </svg> <span>Branches</span> </a> <a class="Link--secondary no-underline d-inline-block" href="/SmallChi/JT808/tags"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-tag mr-1"> <path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"></path> </svg> <span>Tags</span> </a> <a class="Link--secondary no-underline d-inline-block" href="/SmallChi/JT808/activity"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-pulse mr-1"> <path d="M6 2c.306 0 .582.187.696.471L10 10.731l1.304-3.26A.751.751 0 0 1 12 7h3.25a.75.75 0 0 1 0 1.5h-2.742l-1.812 4.528a.751.751 0 0 1-1.392 0L6 4.77 4.696 8.03A.75.75 0 0 1 4 8.5H.75a.75.75 0 0 1 0-1.5h2.742l1.812-4.529A.751.751 0 0 1 6 2Z"></path> </svg> <span>Activity</span> </a> </div> <div class="d-flex flex-wrap gap-2"> <div class="flex-1"> <div data-view-component="true" class="BtnGroup d-flex"> <a href="/login?return_to=%2FSmallChi%2FJT808" rel="nofollow" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"star button","repository_id":152872227,"auth_type":"LOG_IN","originating_url":"https://github.com/SmallChi/JT808","user_id":null}}" data-hydro-click-hmac="55cdcf6391be8904e1ec8adf9e953ad6472e0e0bbf52133acb416aec5f9e4081" aria-label="You must be signed in to star a repository" data-view-component="true" class="tooltipped tooltipped-sw btn-sm btn btn-block"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star v-align-text-bottom d-inline-block mr-2"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg><span data-view-component="true" class="d-inline"> Star </span> </a></div> </div> <div class="flex-1"> <a href="/login?return_to=%2FSmallChi%2FJT808" rel="nofollow" id="files-overview-watch-button" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"notification subscription menu watch","repository_id":null,"auth_type":"LOG_IN","originating_url":"https://github.com/SmallChi/JT808","user_id":null}}" data-hydro-click-hmac="7b60d587c01bf797e90fabee9a9d70366eab97d60a1ce1462f8eda4e27a23509" aria-label="You must be signed in to change notification settings" data-view-component="true" class="btn-sm btn btn-block"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bell mr-2"> <path d="M8 16a2 2 0 0 0 1.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 0 0 8 16ZM3 5a5 5 0 0 1 10 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.519 1.519 0 0 1 13.482 13H2.518a1.516 1.516 0 0 1-1.263-2.36l1.703-2.554A.255.255 0 0 0 3 7.947Zm5-3.5A3.5 3.5 0 0 0 4.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.017.017 0 0 0-.003.01l.001.006c0 .002.002.004.004.006l.006.004.007.001h10.964l.007-.001.006-.004.004-.006.001-.007a.017.017 0 0 0-.003-.01l-1.703-2.554a1.745 1.745 0 0 1-.294-.97V5A3.5 3.5 0 0 0 8 1.5Z"></path> </svg>Notifications </a> <tool-tip id="tooltip-a371b4fd-b42e-4741-8e8f-98dca4683243" for="files-overview-watch-button" popover="manual" data-direction="s" data-type="description" data-view-component="true" class="sr-only position-absolute">You must be signed in to change notification settings</tool-tip> </div> <span> </span> </div> </div> </div> <nav data-pjax="#js-repo-pjax-container" aria-label="Repository" data-view-component="true" class="js-repo-nav js-sidenav-container-pjax js-responsive-underlinenav overflow-hidden UnderlineNav px-3 px-md-4 px-lg-5"> <ul data-view-component="true" class="UnderlineNav-body list-style-none"> <li data-view-component="true" class="d-inline-flex"> <a id="code-tab" href="/SmallChi/JT808" data-tab-item="i0code-tab" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages repo_deployments repo_attestations /SmallChi/JT808" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g c" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Code","target":"UNDERLINE_NAV.TAB"}" aria-current="page" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item selected"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code UnderlineNav-octicon d-none d-sm-inline"> <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path> </svg> <span data-content="Code">Code</span> <span id="code-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="issues-tab" href="/SmallChi/JT808/issues" data-tab-item="i1issues-tab" data-selected-links="repo_issues repo_labels repo_milestones /SmallChi/JT808/issues" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g i" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Issues","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened UnderlineNav-octicon d-none d-sm-inline"> <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path> </svg> <span data-content="Issues">Issues</span> <span id="issues-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="pull-requests-tab" href="/SmallChi/JT808/pulls" data-tab-item="i2pull-requests-tab" data-selected-links="repo_pulls checks /SmallChi/JT808/pulls" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g p" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Pull requests","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request UnderlineNav-octicon d-none d-sm-inline"> <path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path> </svg> <span data-content="Pull requests">Pull requests</span> <span id="pull-requests-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="actions-tab" href="/SmallChi/JT808/actions" data-tab-item="i3actions-tab" data-selected-links="repo_actions /SmallChi/JT808/actions" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g a" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Actions","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play UnderlineNav-octicon d-none d-sm-inline"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path> </svg> <span data-content="Actions">Actions</span> <span id="actions-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="projects-tab" href="/SmallChi/JT808/projects" data-tab-item="i4projects-tab" data-selected-links="repo_projects new_repo_project repo_project /SmallChi/JT808/projects" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g b" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Projects","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table UnderlineNav-octicon d-none d-sm-inline"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path> </svg> <span data-content="Projects">Projects</span> <span id="projects-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="security-tab" href="/SmallChi/JT808/security" data-tab-item="i5security-tab" data-selected-links="security overview alerts policy token_scanning code_scanning /SmallChi/JT808/security" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g s" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Security","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield UnderlineNav-octicon d-none d-sm-inline"> <path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <span data-content="Security">Security</span> <include-fragment src="/SmallChi/JT808/security/overall-count" accept="text/fragment+html"></include-fragment> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="insights-tab" href="/SmallChi/JT808/pulse" data-tab-item="i6insights-tab" data-selected-links="repo_graphs repo_contributors dependency_graph dependabot_updates pulse people community /SmallChi/JT808/pulse" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Insights","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph UnderlineNav-octicon d-none d-sm-inline"> <path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> <span data-content="Insights">Insights</span> <span id="insights-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> </a></li> </ul> <div style="visibility:hidden;" data-view-component="true" class="UnderlineNav-actions js-responsive-underlinenav-overflow position-absolute pr-3 pr-md-4 pr-lg-5 right-0"> <action-menu data-select-variant="none" data-view-component="true"> <focus-group direction="vertical" mnemonics retain> <button id="action-menu-a24b23df-39c1-415d-8e19-230fae944147-button" popovertarget="action-menu-a24b23df-39c1-415d-8e19-230fae944147-overlay" aria-controls="action-menu-a24b23df-39c1-415d-8e19-230fae944147-list" aria-haspopup="true" aria-labelledby="tooltip-2a908037-a6fd-4e4d-9ccf-865e0a6380e2" type="button" data-view-component="true" class="Button Button--iconOnly Button--secondary Button--medium UnderlineNav-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal Button-visual"> <path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path> </svg> </button><tool-tip id="tooltip-2a908037-a6fd-4e4d-9ccf-865e0a6380e2" for="action-menu-a24b23df-39c1-415d-8e19-230fae944147-button" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Additional navigation options</tool-tip> <anchored-position data-target="action-menu.overlay" id="action-menu-a24b23df-39c1-415d-8e19-230fae944147-overlay" anchor="action-menu-a24b23df-39c1-415d-8e19-230fae944147-button" align="start" side="outside-bottom" anchor-offset="normal" popover="auto" data-view-component="true"> <div data-view-component="true" class="Overlay Overlay--size-auto"> <div data-view-component="true" class="Overlay-body Overlay-body--paddingNone"> <action-list> <div data-view-component="true"> <ul aria-labelledby="action-menu-a24b23df-39c1-415d-8e19-230fae944147-button" id="action-menu-a24b23df-39c1-415d-8e19-230fae944147-list" role="menu" data-view-component="true" class="ActionListWrap--inset ActionListWrap"> <li hidden="hidden" data-menu-item="i0code-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-d90e73b3-c98f-4b48-95ea-488b5d735f58" href="/SmallChi/JT808" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code"> <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Code </span> </a> </li> <li hidden="hidden" data-menu-item="i1issues-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-c9fd2891-1e92-4c59-bf7c-50369863ec03" href="/SmallChi/JT808/issues" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened"> <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Issues </span> </a> </li> <li hidden="hidden" data-menu-item="i2pull-requests-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-666a9de4-6dd7-412e-a6f6-bcb4df021d53" href="/SmallChi/JT808/pulls" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request"> <path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Pull requests </span> </a> </li> <li hidden="hidden" data-menu-item="i3actions-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-da66f3ed-d8fe-4695-8e98-8078a9171711" href="/SmallChi/JT808/actions" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Actions </span> </a> </li> <li hidden="hidden" data-menu-item="i4projects-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-d8c87728-2b59-41dc-b11f-74ccd9853eec" href="/SmallChi/JT808/projects" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Projects </span> </a> </li> <li hidden="hidden" data-menu-item="i5security-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-6aa7542d-61ce-46a8-bbc2-a5296830f47f" href="/SmallChi/JT808/security" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield"> <path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Security </span> </a> </li> <li hidden="hidden" data-menu-item="i6insights-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-549e3559-0a68-4b57-85d2-3b0f6ea8dc4b" href="/SmallChi/JT808/pulse" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph"> <path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Insights </span> </a> </li> </ul> </div></action-list> </div> </div></anchored-position> </focus-group> </action-menu></div> </nav> </div> <turbo-frame id="repo-content-turbo-frame" target="_top" data-turbo-action="advance" class=""> <div id="repo-content-pjax-container" class="repository-content " > <h1 class='sr-only'>SmallChi/JT808</h1> <div class="clearfix container-xl px-md-4 px-lg-5 px-3"> <div> <div style="max-width: 100%" data-view-component="true" class="Layout Layout--flowRow-until-md react-repos-overview-margin Layout--sidebarPosition-end Layout--sidebarPosition-flowRow-end"> <div data-view-component="true" class="Layout-main"> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_dompurify_dist_purify_es_mjs-dd1d3ea6a436.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_tanstack_query-core_build_modern_queryObserver_js-node_modules_tanstack_-defd52-843b41414e0e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_aria-live_aria-live_ts-ui_packages_history_history_ts-ui_packages_promise-with-re-01dc80-b13b6c1d97b0.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_paths_index_ts-04e7ec2d63d9.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_ref-selector_RefSelector_tsx-7496afc3784d.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_commit-attribution_index_ts-ui_packages_commit-checks-status_index_ts-ui_packages-762eaa-d78307eadb45.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_code-view-shared_hooks_use-canonical-object_ts-ui_packages_code-view-shared_hooks-c2dbff-5269586204d9.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/repos-overview-17e42eb4cf35.js"></script> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.a490b7c9fa319e5cb069.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/repos-overview.0ee7cac3ab511a65d9f9.module.css" /> <react-partial partial-name="repos-overview" data-ssr="true" data-attempted-ssr="true" > <script type="application/json" data-target="react-partial.embeddedData">{"props":{"initialPayload":{"allShortcutsEnabled":false,"path":"/","repo":{"id":152872227,"defaultBranch":"master","name":"JT808","ownerLogin":"SmallChi","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2018-10-13T12:59:31.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/12674769?v=4","public":true,"private":false,"isOrgOwned":false},"currentUser":null,"refInfo":{"name":"master","listCacheKey":"v0:1743510081.0","canEdit":false,"refType":"branch","currentOid":"f5da1e4cdc02a801fda0036c6687fa1c4b971548"},"tree":{"items":[{"name":".github/workflows","path":".github/workflows","contentType":"directory","hasSimplifiedPath":true},{"name":".vscode","path":".vscode","contentType":"directory"},{"name":"src","path":"src","contentType":"directory"},{"name":".gitignore","path":".gitignore","contentType":"file"},{"name":"LICENSE","path":"LICENSE","contentType":"file"},{"name":"README.en.md","path":"README.en.md","contentType":"file"},{"name":"README.md","path":"README.md","contentType":"file"},{"name":"global.json","path":"global.json","contentType":"file"},{"name":"publish.bat","path":"publish.bat","contentType":"file"}],"templateDirectorySuggestionUrl":null,"readme":null,"totalCount":9,"showBranchInfobar":false},"fileTree":null,"fileTreeProcessingTime":null,"foldersToFetch":[],"treeExpanded":false,"symbolsExpanded":false,"isOverview":true,"overview":{"banners":{"shouldRecommendReadme":false,"isPersonalRepo":false,"showUseActionBanner":false,"actionSlug":null,"actionId":null,"showProtectBranchBanner":false,"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_repo","releasePath":"/SmallChi/JT808/releases/new?marketplace=true","showPublishActionBanner":false},"interactionLimitBanner":null,"showInvitationBanner":false,"inviterName":null,"actionsMigrationBannerInfo":{"releaseTags":[],"showImmutableActionsMigrationBanner":false,"initialMigrationStatus":null}},"codeButton":{"contactPath":"/contact","isEnterprise":false,"local":{"protocolInfo":{"httpAvailable":true,"sshAvailable":null,"httpUrl":"https://github.com/SmallChi/JT808.git","showCloneWarning":null,"sshUrl":null,"sshCertificatesRequired":null,"sshCertificatesAvailable":null,"ghCliUrl":"gh repo clone SmallChi/JT808","defaultProtocol":"http","newSshKeyUrl":"/settings/ssh/new","setProtocolPath":"/users/set_protocol"},"platformInfo":{"cloneUrl":"https://desktop.github.com","showVisualStudioCloneButton":false,"visualStudioCloneUrl":"https://windows.github.com","showXcodeCloneButton":false,"xcodeCloneUrl":"xcode://clone?repo=https%3A%2F%2Fgithub.com%2FSmallChi%2FJT808","zipballUrl":"/SmallChi/JT808/archive/refs/heads/master.zip"}},"newCodespacePath":"/codespaces/new?hide_repo_select=true\u0026repo=152872227"},"popovers":{"rename":null,"renamedParentRepo":null},"commitCount":"252","overviewFiles":[{"displayName":"README.md","repoName":"JT808","refName":"master","path":"README.md","preferredFileType":"readme","tabName":"README","richText":"\u003carticle class=\"markdown-body entry-content container-lg\" itemprop=\"text\"\u003e\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eJT/T808 协议\u003c/h1\u003e\u003ca id=\"user-content-jtt808-协议\" class=\"anchor\" aria-label=\"Permalink: JT/T808 协议\" href=\"#jtt808-协议\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://github.com/SmallChi/JT808/blob/master/LICENSE\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/e581ac49b7e1e99fb951242be63f6fdc6ebbc20c89a97fca0de99e1f2e6ae87e/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6d6173686170652f6170697374617475732e737667\" alt=\"MIT Licence\" data-canonical-src=\"https://img.shields.io/github/license/mashape/apistatus.svg\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\n \u003cspan\u003e中文\u003c/span\u003e | \n \u003ca href=\"/SmallChi/JT808/blob/master/README.en.md\"\u003eEnglish\u003c/a\u003e\n\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e前提条件\u003c/h2\u003e\u003ca id=\"user-content-前提条件\" class=\"anchor\" aria-label=\"Permalink: 前提条件\" href=\"#前提条件\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e掌握进制转换:二进制转十六进制;\u003c/li\u003e\n\u003cli\u003e掌握 BCD 编码、Hex 编码;\u003c/li\u003e\n\u003cli\u003e掌握各种位移、异或;\u003c/li\u003e\n\u003cli\u003e掌握常用反射;\u003c/li\u003e\n\u003cli\u003e掌握 JObject 的用法;\u003c/li\u003e\n\u003cli\u003e掌握快速 ctrl+c、ctrl+v;\u003c/li\u003e\n\u003cli\u003e掌握 Span\u0026lt;T\u0026gt;的基本用法\u003c/li\u003e\n\u003cli\u003e掌握以上装逼技能,就可以开始搬砖了。\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eJT808 数据结构解析\u003c/h2\u003e\u003ca id=\"user-content-jt808-数据结构解析\" class=\"anchor\" aria-label=\"Permalink: JT808 数据结构解析\" href=\"#jt808-数据结构解析\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e数据包[JT808Package]\u003c/h3\u003e\u003ca id=\"user-content-数据包jt808package\" class=\"anchor\" aria-label=\"Permalink: 数据包[JT808Package]\" href=\"#数据包jt808package\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth align=\"center\"\u003e头标识\u003c/th\u003e\n\u003cth align=\"center\"\u003e数据头\u003c/th\u003e\n\u003cth align=\"center\"\u003e数据体/分包数据体\u003c/th\u003e\n\u003cth align=\"center\"\u003e校验码\u003c/th\u003e\n\u003cth align=\"center\"\u003e尾标识\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003eBegin\u003c/td\u003e\n\u003ctd align=\"center\"\u003eJT808Header\u003c/td\u003e\n\u003ctd align=\"center\"\u003eJT808Bodies/JT808SubDataBodies\u003c/td\u003e\n\u003ctd align=\"center\"\u003eCheckCode\u003c/td\u003e\n\u003ctd align=\"center\"\u003eEnd\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e7E\u003c/td\u003e\n\u003ctd align=\"center\"\u003e-\u003c/td\u003e\n\u003ctd align=\"center\"\u003e-\u003c/td\u003e\n\u003ctd align=\"center\"\u003e-\u003c/td\u003e\n\u003ctd align=\"center\"\u003e7E\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e数据头[JT808Header]\u003c/h3\u003e\u003ca id=\"user-content-数据头jt808header\" class=\"anchor\" aria-label=\"Permalink: 数据头[JT808Header]\" href=\"#数据头jt808header\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth align=\"center\"\u003e消息 ID\u003c/th\u003e\n\u003cth align=\"center\"\u003e消息体属性\u003c/th\u003e\n\u003cth align=\"center\"\u003e协议版本号(2019 版本)\u003c/th\u003e\n\u003cth align=\"center\"\u003e终端手机号\u003c/th\u003e\n\u003cth align=\"center\"\u003e消息流水号\u003c/th\u003e\n\u003cth align=\"center\"\u003e消息总包数(依赖是否分包)\u003c/th\u003e\n\u003cth align=\"center\"\u003e包序号(依赖是否分包)\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003eMsgId\u003c/td\u003e\n\u003ctd align=\"center\"\u003eJT808HeaderMessageBodyProperty\u003c/td\u003e\n\u003ctd align=\"center\"\u003eProtocolVersion\u003c/td\u003e\n\u003ctd align=\"center\"\u003eTerminalPhoneNo\u003c/td\u003e\n\u003ctd align=\"center\"\u003eMsgNum\u003c/td\u003e\n\u003ctd align=\"center\"\u003ePackgeCount\u003c/td\u003e\n\u003ctd align=\"center\"\u003ePackageIndex\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e数据头-消息体属性[JT808HeaderMessageBodyProperty]\u003c/h4\u003e\u003ca id=\"user-content-数据头-消息体属性jt808headermessagebodyproperty\" class=\"anchor\" aria-label=\"Permalink: 数据头-消息体属性[JT808HeaderMessageBodyProperty]\" href=\"#数据头-消息体属性jt808headermessagebodyproperty\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth align=\"center\"\u003e版本标识(2019 版本)\u003c/th\u003e\n\u003cth align=\"center\"\u003e是否分包\u003c/th\u003e\n\u003cth align=\"center\"\u003e加密标识\u003c/th\u003e\n\u003cth align=\"center\"\u003e消息体长度\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003eVersionFlag\u003c/td\u003e\n\u003ctd align=\"center\"\u003eIsPackge\u003c/td\u003e\n\u003ctd align=\"center\"\u003eEncrypt\u003c/td\u003e\n\u003ctd align=\"center\"\u003eDataLength\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e消息体属性[JT808Bodies]\u003c/h4\u003e\u003ca id=\"user-content-消息体属性jt808bodies\" class=\"anchor\" aria-label=\"Permalink: 消息体属性[JT808Bodies]\" href=\"#消息体属性jt808bodies\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp dir=\"auto\"\u003e根据对应消息 ID:MsgId\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e\u003cem\u003e注意:数据内容(除去头和尾标识)进行转义判断\u003c/em\u003e\u003c/strong\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e转义规则如下:\u003c/p\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e若数据内容中有出现字符 0x7e 的,需替换为字符 0x7d 紧跟字符 0x02;\u003c/li\u003e\n\u003cli\u003e若数据内容中有出现字符 0x7d 的,需替换为字符 0x7d 紧跟字符 0x01;\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp dir=\"auto\"\u003e反转义的原因:确认 JT808 协议的 TCP 消息边界。\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e举个栗子 1\u003c/h3\u003e\u003ca id=\"user-content-举个栗子-1\" class=\"anchor\" aria-label=\"Permalink: 举个栗子 1\" href=\"#举个栗子-1\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e1.组包:\u003c/h4\u003e\u003ca id=\"user-content-1组包\" class=\"anchor\" aria-label=\"Permalink: 1.组包:\" href=\"#1组包\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp dir=\"auto\"\u003eMsgId 0x0200:位置信息汇报\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\nJT808Package jT808Package = new JT808Package();\n\njT808Package.Header = new JT808Header\n{\n MsgId = (ushort)JT808.Protocol.Enums.JT808MsgId._0x0200,\n ManualMsgNum = 126,\n TerminalPhoneNo = \u0026quot;123456789012\u0026quot;\n};\n\nJT808_0x0200 jT808_0x0200 = new JT808_0x0200();\njT808_0x0200.AlarmFlag = 1;\njT808_0x0200.Altitude = 40;\njT808_0x0200.GPSTime = DateTime.Parse(\u0026quot;2018-10-15 10:10:10\u0026quot;);\njT808_0x0200.Lat = 12222222;\njT808_0x0200.Lng = 132444444;\njT808_0x0200.Speed = 60;\njT808_0x0200.Direction = 0;\njT808_0x0200.StatusFlag = 2;\njT808_0x0200.BasicLocationAttachData = new Dictionary\u0026lt;byte, JT808_0x0200_BodyBase\u0026gt;();\n\njT808_0x0200.BasicLocationAttachData.Add(JT808Constants.JT808_0x0200_0x01, new JT808_0x0200_0x01\n{\n Mileage = 100\n});\n\njT808_0x0200.BasicLocationAttachData.Add(JT808Constants.JT808_0x0200_0x02, new JT808_0x0200_0x02\n{\n Oil = 125\n});\n\njT808Package.Bodies = jT808_0x0200;\n\nbyte[] data = JT808Serializer.Serialize(jT808Package);\n\nvar hex = data.ToHexString();\n\n// 输出结果Hex:\n// 7E 02 00 00 26 12 34 56 78 90 12 00 7D 02 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 7D 01 13 7E\"\u003e\u003cpre\u003e\u003cspan class=\"pl-smi\"\u003eJT808Package\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejT808Package\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eJT808Package\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-s1\"\u003ejT808Package\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eHeader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eJT808Header\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eMsgId\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eushort\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eJT808\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eProtocol\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eEnums\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eJT808MsgId\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003e_0x0200\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eManualMsgNum\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e126\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eTerminalPhoneNo\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"123456789012\"\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-smi\"\u003eJT808_0x0200\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejT808_0x0200\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eJT808_0x0200\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ejT808_0x0200\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eAlarmFlag\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ejT808_0x0200\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eAltitude\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e40\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ejT808_0x0200\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGPSTime\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eDateTime\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eParse\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"2018-10-15 10:10:10\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ejT808_0x0200\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eLat\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e12222222\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ejT808_0x0200\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eLng\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e132444444\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ejT808_0x0200\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSpeed\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e60\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ejT808_0x0200\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eDirection\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ejT808_0x0200\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eStatusFlag\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ejT808_0x0200\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eBasicLocationAttachData\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eDictionary\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003ebyte\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eJT808_0x0200_BodyBase\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-s1\"\u003ejT808_0x0200\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eBasicLocationAttachData\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAdd\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eJT808Constants\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eJT808_0x0200_0x01\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eJT808_0x0200_0x01\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eMileage\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e100\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-s1\"\u003ejT808_0x0200\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eBasicLocationAttachData\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAdd\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eJT808Constants\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eJT808_0x0200_0x02\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eJT808_0x0200_0x02\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eOil\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e125\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-s1\"\u003ejT808Package\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eBodies\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejT808_0x0200\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-smi\"\u003ebyte\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edata\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eJT808Serializer\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eSerialize\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ejT808Package\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehex\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edata\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToHexString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e// 输出结果Hex:\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e// 7E 02 00 00 26 12 34 56 78 90 12 00 7D 02 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 7D 01 13 7E\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e2.手动解包:\u003c/h4\u003e\u003ca id=\"user-content-2手动解包\" class=\"anchor\" aria-label=\"Permalink: 2.手动解包:\" href=\"#2手动解包\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"1.原包:\n7E 02 00 00 26 12 34 56 78 90 12 00 (7D 02) 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 (7D 01) 13 7E\n\n2.进行反转义\n7D 02 -\u0026gt;7E\n7D 01 -\u0026gt;7D\n反转义后\n7E 02 00 00 26 12 34 56 78 90 12 00 7E 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 7D 13 7E\n\n3.拆解\n7E --头标识\n02 00 --数据头-\u0026gt;消息ID\n00 26 --数据头-\u0026gt;消息体属性\n12 34 56 78 90 12 --数据头-\u0026gt;终端手机号\n00 7E --数据头-\u0026gt;消息流水号\n00 00 00 01 --消息体-\u0026gt;报警标志\n00 00 00 02 --消息体-\u0026gt;状态位标志\n00 BA 7F 0E --消息体-\u0026gt;纬度\n07 E4 F1 1C --消息体-\u0026gt;经度\n00 28 --消息体-\u0026gt;海拔高度\n00 3C --消息体-\u0026gt;速度\n00 00 --消息体-\u0026gt;方向\n18 10 15 10 10 10 --消息体-\u0026gt;GPS时间\n01 --消息体-\u0026gt;附加信息-\u0026gt;里程\n04 --消息体-\u0026gt;附加信息-\u0026gt;长度\n00 00 00 64 --消息体-\u0026gt;附加信息-\u0026gt;数据\n02 --消息体-\u0026gt;附加信息-\u0026gt;油量\n02 --消息体-\u0026gt;附加信息-\u0026gt;长度\n00 7D --消息体-\u0026gt;附加信息-\u0026gt;数据\n13 --检验码\n7E --尾标识\"\u003e\u003cpre lang=\"text\" class=\"notranslate\"\u003e\u003ccode\u003e1.原包:\n7E 02 00 00 26 12 34 56 78 90 12 00 (7D 02) 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 (7D 01) 13 7E\n\n2.进行反转义\n7D 02 -\u0026gt;7E\n7D 01 -\u0026gt;7D\n反转义后\n7E 02 00 00 26 12 34 56 78 90 12 00 7E 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 7D 13 7E\n\n3.拆解\n7E --头标识\n02 00 --数据头-\u0026gt;消息ID\n00 26 --数据头-\u0026gt;消息体属性\n12 34 56 78 90 12 --数据头-\u0026gt;终端手机号\n00 7E --数据头-\u0026gt;消息流水号\n00 00 00 01 --消息体-\u0026gt;报警标志\n00 00 00 02 --消息体-\u0026gt;状态位标志\n00 BA 7F 0E --消息体-\u0026gt;纬度\n07 E4 F1 1C --消息体-\u0026gt;经度\n00 28 --消息体-\u0026gt;海拔高度\n00 3C --消息体-\u0026gt;速度\n00 00 --消息体-\u0026gt;方向\n18 10 15 10 10 10 --消息体-\u0026gt;GPS时间\n01 --消息体-\u0026gt;附加信息-\u0026gt;里程\n04 --消息体-\u0026gt;附加信息-\u0026gt;长度\n00 00 00 64 --消息体-\u0026gt;附加信息-\u0026gt;数据\n02 --消息体-\u0026gt;附加信息-\u0026gt;油量\n02 --消息体-\u0026gt;附加信息-\u0026gt;长度\n00 7D --消息体-\u0026gt;附加信息-\u0026gt;数据\n13 --检验码\n7E --尾标识\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e3.程序解包:\u003c/h4\u003e\u003ca id=\"user-content-3程序解包\" class=\"anchor\" aria-label=\"Permalink: 3.程序解包:\" href=\"#3程序解包\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"//1.转成byte数组\nbyte[] bytes = \u0026quot;7E 02 00 00 26 12 34 56 78 90 12 00 7D 02 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 7D 01 13 7E\u0026quot;.ToHexBytes();\n\n//2.将数组反序列化\nvar jT808Package = JT808Serializer.Deserialize(bytes);\n\n//3.数据包头\nAssert.Equal(Enums.JT808MsgId._0x0200, jT808Package.Header.MsgId);\nAssert.Equal(38, jT808Package.Header.MessageBodyProperty.DataLength);\nAssert.Equal(126, jT808Package.Header.MsgNum);\nAssert.Equal(\u0026quot;123456789012\u0026quot;, jT808Package.Header.TerminalPhoneNo);\nAssert.False(jT808Package.Header.MessageBodyProperty.IsPackge);\nAssert.Equal(0, jT808Package.Header.PackageIndex);\nAssert.Equal(0, jT808Package.Header.PackgeCount);\nAssert.Equal(JT808EncryptMethod.None, jT808Package.Header.MessageBodyProperty.Encrypt);\n\n//4.数据包体\nJT808_0x0200 jT808_0x0200 = (JT808_0x0200)jT808Package.Bodies;\nAssert.Equal((uint)1, jT808_0x0200.AlarmFlag);\nAssert.Equal((uint)40, jT808_0x0200.Altitude);\nAssert.Equal(DateTime.Parse(\u0026quot;2018-10-15 10:10:10\u0026quot;), jT808_0x0200.GPSTime);\nAssert.Equal(12222222, jT808_0x0200.Lat);\nAssert.Equal(132444444, jT808_0x0200.Lng);\nAssert.Equal(60, jT808_0x0200.Speed);\nAssert.Equal(0, jT808_0x0200.Direction);\nAssert.Equal((uint)2, jT808_0x0200.StatusFlag);\n//4.1.附加信息1\nAssert.Equal(100, ((JT808_0x0200_0x01)jT808_0x0200.BasicLocationAttachData[JT808Constants.JT808_0x0200_0x01]).Mileage);\n//4.2.附加信息2\nAssert.Equal(125, ((JT808_0x0200_0x02)jT808_0x0200.BasicLocationAttachData[JT808Constants.JT808_0x0200_0x02]).Oil);\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e//1.转成byte数组\u003c/span\u003e\n\u003cspan class=\"pl-smi\"\u003ebyte\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ebytes\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"7E 02 00 00 26 12 34 56 78 90 12 00 7D 02 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 7D 01 13 7E\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToHexBytes\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e//2.将数组反序列化\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejT808Package\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eJT808Serializer\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eDeserialize\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ebytes\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e//3.数据包头\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eEnums\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eJT808MsgId\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003e_0x0200\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejT808Package\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eHeader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eMsgId\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e38\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejT808Package\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eHeader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eMessageBodyProperty\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eDataLength\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e126\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejT808Package\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eHeader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eMsgNum\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"123456789012\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejT808Package\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eHeader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eTerminalPhoneNo\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFalse\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ejT808Package\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eHeader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eMessageBodyProperty\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIsPackge\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejT808Package\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eHeader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ePackageIndex\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejT808Package\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eHeader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ePackgeCount\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eJT808EncryptMethod\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eNone\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejT808Package\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eHeader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eMessageBodyProperty\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eEncrypt\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e//4.数据包体\u003c/span\u003e\n\u003cspan class=\"pl-smi\"\u003eJT808_0x0200\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejT808_0x0200\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eJT808_0x0200\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ejT808Package\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eBodies\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003euint\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejT808_0x0200\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eAlarmFlag\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003euint\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e40\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejT808_0x0200\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eAltitude\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eDateTime\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eParse\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"2018-10-15 10:10:10\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejT808_0x0200\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGPSTime\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e12222222\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejT808_0x0200\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eLat\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e132444444\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejT808_0x0200\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eLng\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e60\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejT808_0x0200\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSpeed\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejT808_0x0200\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eDirection\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003euint\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejT808_0x0200\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eStatusFlag\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e//4.1.附加信息1\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e100\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eJT808_0x0200_0x01\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ejT808_0x0200\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eBasicLocationAttachData\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eJT808Constants\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eJT808_0x0200_0x01\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eMileage\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e//4.2.附加信息2\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e125\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eJT808_0x0200_0x02\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ejT808_0x0200\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eBasicLocationAttachData\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eJT808Constants\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eJT808_0x0200_0x02\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eOil\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e举个栗子 2\u003c/h3\u003e\u003ca id=\"user-content-举个栗子-2\" class=\"anchor\" aria-label=\"Permalink: 举个栗子 2\" href=\"#举个栗子-2\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"// 使用消息Id的扩展方法创建JT808Package包\nJT808Package jT808Package = Enums.JT808MsgId._0x0200.Create(\u0026quot;123456789012\u0026quot;,\n new JT808_0x0200 {\n AlarmFlag = 1,\n Altitude = 40,\n GPSTime = DateTime.Parse(\u0026quot;2018-10-15 10:10:10\u0026quot;),\n Lat = 12222222,\n Lng = 132444444,\n Speed = 60,\n Direction = 0,\n StatusFlag = 2,\n BasicLocationAttachData = new Dictionary\u0026lt;byte, JT808LocationAttachBase\u0026gt;\n {\n { JT808Constants.JT808_0x0200_0x01,new JT808_0x0200_0x01{Mileage = 100}},\n { JT808Constants.JT808_0x0200_0x02,new JT808_0x0200_0x02{Oil = 125}}\n }\n});\n\nbyte[] data = JT808Serializer.Serialize(jT808Package);\n\nvar hex = data.ToHexString();\n//输出结果Hex:\n//7E 02 00 00 26 12 34 56 78 90 12 00 01 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 7D 01 6C 7E\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e// 使用消息Id的扩展方法创建JT808Package包\u003c/span\u003e\n\u003cspan class=\"pl-smi\"\u003eJT808Package\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejT808Package\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eEnums\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eJT808MsgId\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003e_0x0200\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eCreate\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"123456789012\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eJT808_0x0200\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eAlarmFlag\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eAltitude\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e40\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eGPSTime\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eDateTime\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eParse\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"2018-10-15 10:10:10\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eLat\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e12222222\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eLng\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e132444444\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eSpeed\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e60\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eDirection\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eStatusFlag\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eBasicLocationAttachData\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eDictionary\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003ebyte\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eJT808LocationAttachBase\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eJT808Constants\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eJT808_0x0200_0x01\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eJT808_0x0200_0x01\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eMileage\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e100\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eJT808Constants\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eJT808_0x0200_0x02\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eJT808_0x0200_0x02\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eOil\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e125\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-smi\"\u003ebyte\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edata\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eJT808Serializer\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eSerialize\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ejT808Package\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehex\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edata\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToHexString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e//输出结果Hex:\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e//7E 02 00 00 26 12 34 56 78 90 12 00 01 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 7D 01 6C 7E\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e举个栗子 3\u003c/h3\u003e\u003ca id=\"user-content-举个栗子-3\" class=\"anchor\" aria-label=\"Permalink: 举个栗子 3\" href=\"#举个栗子-3\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"// 初始化配置\nIJT808Config DT1JT808Config = new DT1Config();\nIJT808Config DT2JT808Config = new DT2Config();\n// 注册自定义消息外部程序集\nDT1JT808Config.Register(Assembly.GetExecutingAssembly());\n// 跳过校验和验证\nDT1JT808Config.SkipCRCCode = true;\n// 根据不同的设备终端号,添加自定义消息Id\nDT1JT808Config.MsgIdFactory.SetMap\u0026lt;DT1Demo6\u0026gt;();\nDT1JT808Config.FormatterFactory.SetMap\u0026lt;DT1Demo6\u0026gt;();\nDT2JT808Config.MsgIdFactory.SetMap\u0026lt;DT2Demo6\u0026gt;();\nDT2JT808Config.FormatterFactory.SetMap\u0026lt;DT2Demo6\u0026gt;();\n// 初始化序列化实例\nJT808Serializer DT1JT808Serializer = new JT808Serializer(DT1JT808Config);\nJT808Serializer DT2JT808Serializer = new JT808Serializer(DT2JT808Config);\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e// 初始化配置\u003c/span\u003e\n\u003cspan class=\"pl-smi\"\u003eIJT808Config\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eDT1JT808Config\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eDT1Config\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-smi\"\u003eIJT808Config\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eDT2JT808Config\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eDT2Config\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e// 注册自定义消息外部程序集\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eDT1JT808Config\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eRegister\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eAssembly\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eGetExecutingAssembly\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e// 跳过校验和验证\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eDT1JT808Config\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSkipCRCCode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003etrue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e// 根据不同的设备终端号,添加自定义消息Id\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eDT1JT808Config\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eMsgIdFactory\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eSetMap\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eDT1Demo6\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eDT1JT808Config\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eFormatterFactory\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eSetMap\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eDT1Demo6\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eDT2JT808Config\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eMsgIdFactory\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eSetMap\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eDT2Demo6\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eDT2JT808Config\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eFormatterFactory\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eSetMap\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eDT2Demo6\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e// 初始化序列化实例\u003c/span\u003e\n\u003cspan class=\"pl-smi\"\u003eJT808Serializer\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eDT1JT808Serializer\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eJT808Serializer\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eDT1JT808Config\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-smi\"\u003eJT808Serializer\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eDT2JT808Serializer\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eJT808Serializer\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eDT2JT808Config\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo6.cs\"\u003e可以参考 Simples 的 Demo6\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e举个栗子 4\u003c/h3\u003e\u003ca id=\"user-content-举个栗子-4\" class=\"anchor\" aria-label=\"Permalink: 举个栗子 4\" href=\"#举个栗子-4\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e遇到的问题-多设备多协议的自定义位置附加信息\u003c/h4\u003e\u003ca id=\"user-content-遇到的问题-多设备多协议的自定义位置附加信息\" class=\"anchor\" aria-label=\"Permalink: 遇到的问题-多设备多协议的自定义位置附加信息\" href=\"#遇到的问题-多设备多协议的自定义位置附加信息\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e场景:\n一个设备厂商对应多个设备类型,不同设备类型可能存在相同的自定义位置附加信息 Id,导致自定义附加信息 Id 冲突,无法解析。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e\u003cem\u003e解决方式:\u003c/em\u003e\u003c/strong\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e1.可以根据设备类型做个工厂,解耦对公共序列化器的依赖。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e2.可以根据设备类型去实现(GlobalConfigBase)对应的配置,根据不同的 GlobalConfigBase 实例去绑定对应协议解析器。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo4.cs\"\u003e可以参考 Simples 的 Demo4\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo6.cs\"\u003e可以参考 Simples 的 Demo6\u003c/a\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp dir=\"auto\"\u003e要是哪位大佬还有其他的解决方式,请您告知我下,谢谢您了。\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e举个栗子 5\u003c/h3\u003e\u003ca id=\"user-content-举个栗子-5\" class=\"anchor\" aria-label=\"Permalink: 举个栗子 5\" href=\"#举个栗子-5\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e遇到的问题-多媒体数据上传进行分包处理\u003c/h4\u003e\u003ca id=\"user-content-遇到的问题-多媒体数据上传进行分包处理\" class=\"anchor\" aria-label=\"Permalink: 遇到的问题-多媒体数据上传进行分包处理\" href=\"#遇到的问题-多媒体数据上传进行分包处理\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e场景:\n设备在上传多媒体数据的时候,由于数据比较多,一次上传不了,所以采用分包方式处理。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e\u003cem\u003e解决方式:\u003c/em\u003e\u003c/strong\u003e\u003c/p\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e\n\u003cp dir=\"auto\"\u003e第一包数据上来采用平常的方式去解析数据;\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp dir=\"auto\"\u003e当第二包上来跟第一包的分包数据体(SubDataBodies)进行合并\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp dir=\"auto\"\u003e当 N 包数据上来,延续步骤 2 的方式。\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cblockquote\u003e\n\u003cp dir=\"auto\"\u003e普及知识点 1:由于消息体长度最大为 10bit 也就是 1023 的字节,所以这边就有个硬性条件不能超过最大长度。\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp dir=\"auto\"\u003e普及知识点 2:一般行业分包是按 256 的整数倍,太多不行,太少也不行,必须刚刚好。\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo5.cs\"\u003e可以参考 Simples 的 Demo5\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e举个栗子 6\u003c/h3\u003e\u003ca id=\"user-content-举个栗子-6\" class=\"anchor\" aria-label=\"Permalink: 举个栗子 6\" href=\"#举个栗子-6\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e遇到的问题-多设备多协议的消息 ID 冲突\u003c/h4\u003e\u003ca id=\"user-content-遇到的问题-多设备多协议的消息-id-冲突\" class=\"anchor\" aria-label=\"Permalink: 遇到的问题-多设备多协议的消息 ID 冲突\" href=\"#遇到的问题-多设备多协议的消息-id-冲突\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e场景:\n由于每个设备厂商不同,导致设备的私有协议可能使用相同的消息 ID 作为指令,导致平台解析不了。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e\u003cem\u003e解决方式:\u003c/em\u003e\u003c/strong\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e可以根据设备类型去实现(GlobalConfigBase)对应的配置,根据不同的 GlobalConfigBase 实例去绑定对应协议解析器。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo6.cs\"\u003e可以参考 Simples 的 Demo6\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e举个栗子 7\u003c/h3\u003e\u003ca id=\"user-content-举个栗子-7\" class=\"anchor\" aria-label=\"Permalink: 举个栗子 7\" href=\"#举个栗子-7\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e如何兼容 2019 版本\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp dir=\"auto\"\u003e最新协议文档已经写好了如何做兼容,就是在消息体属性中第 14 位为版本标识。\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e\n\u003cp dir=\"auto\"\u003e当第 14 位为 0 时,标识协议为 2011 年的版本;\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp dir=\"auto\"\u003e当第 14 位为 1 时,标识协议为 2019 年的版本。\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo7.cs\"\u003e可以参考 Simples 的 Demo7\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e举个栗子 8\u003c/h3\u003e\u003ca id=\"user-content-举个栗子-8\" class=\"anchor\" aria-label=\"Permalink: 举个栗子 8\" href=\"#举个栗子-8\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e协议分析器在数据出现异常和纠错的时候也是挺有用的,总不能凭借 24K 氪金眼去观察数据,那么可以在开发协议的同时就把协议分析器给写好,这样方便技术或者技术支持排查问题,提高效率。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo8.cs\"\u003e可以参考 Simples 的 Demo8\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e举个栗子 9\u003c/h3\u003e\u003ca id=\"user-content-举个栗子-9\" class=\"anchor\" aria-label=\"Permalink: 举个栗子 9\" href=\"#举个栗子-9\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e增加行车记录仪序列化器,既可以单独的存在,也可以组装在 808 的数据包当中。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo9.cs\"\u003e可以参考 Simples 的 Demo9\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e举个栗子 10\u003c/h3\u003e\u003ca id=\"user-content-举个栗子-10\" class=\"anchor\" aria-label=\"Permalink: 举个栗子 10\" href=\"#举个栗子-10\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e场景 1:\n有些设备,不会按照国标的附加信息 Id 来搞,把附加信息 Id 搞为两个字节,这样在上报上来的数据就会存在重复的附加 Id,导致平台解析出错。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e场景 2:\n由于粤标的设备厂家自定义的附加信息长度可以为四 4 个字节的,所以需要兼容。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e场景 3:\n有些设备上报会出现两个相同的附加信息 Id,那么只能解析一个,另一个只能丢在异常附加信息里面去处理。\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth align=\"left\"\u003e附加信息类说明\u003c/th\u003e\n\u003cth align=\"center\"\u003e附加 ID 字节数\u003c/th\u003e\n\u003cth align=\"center\"\u003e附加长度字节数\u003c/th\u003e\n\u003cth align=\"center\"\u003e备注\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003eJT808_0x0200_CustomBodyBase\u003c/td\u003e\n\u003ctd align=\"center\"\u003e1 BYTE\u003c/td\u003e\n\u003ctd align=\"center\"\u003e1 BYTE\u003c/td\u003e\n\u003ctd align=\"center\"\u003e标准\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003eJT808_0x0200_CustomBodyBase2\u003c/td\u003e\n\u003ctd align=\"center\"\u003e2 BYTE\u003c/td\u003e\n\u003ctd align=\"center\"\u003e1 BYTE\u003c/td\u003e\n\u003ctd align=\"center\"\u003e自定义\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003eJT808_0x0200_CustomBodyBase3\u003c/td\u003e\n\u003ctd align=\"center\"\u003e2 BYTE\u003c/td\u003e\n\u003ctd align=\"center\"\u003e2 BYTE\u003c/td\u003e\n\u003ctd align=\"center\"\u003e自定义\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003eJT808_0x0200_CustomBodyBase4\u003c/td\u003e\n\u003ctd align=\"center\"\u003e1 BYTE\u003c/td\u003e\n\u003ctd align=\"center\"\u003e4 BYTE\u003c/td\u003e\n\u003ctd align=\"center\"\u003e自定义\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo10.cs\"\u003e可以参考 Simples 的 Demo10\u003c/a\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp dir=\"auto\"\u003e注意:默认都是以\u003cstrong\u003e标准\u003c/strong\u003e的去解析,要是出现未知的附加,不一定解析就是正确,最好还是需要依照协议文档去开发然后自行注册解析器去解析。\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e举个栗子 11\u003c/h3\u003e\u003ca id=\"user-content-举个栗子-11\" class=\"anchor\" aria-label=\"Permalink: 举个栗子 11\" href=\"#举个栗子-11\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e场景:\n有些设备,补报的定位数据有异常数据包内容长度跟原始的内容长度不一致导致整包的数据的解析出错,再设备不升级,改不了的情况下,尽量能解析多少补报的数据量,就解析多少。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo11.cs\"\u003e可以参考 Simples 的 Demo11\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e举个栗子 12\u003c/h3\u003e\u003ca id=\"user-content-举个栗子-12\" class=\"anchor\" aria-label=\"Permalink: 举个栗子 12\" href=\"#举个栗子-12\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e场景:\n由于粤标的设备把 2019 版本的 0x8105 终端控制消息命令参数做了扩展,所以需要兼容。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo12.cs\"\u003e可以参考 Simples 的 Demo12\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e举个栗子 13\u003c/h3\u003e\u003ca id=\"user-content-举个栗子-13\" class=\"anchor\" aria-label=\"Permalink: 举个栗子 13\" href=\"#举个栗子-13\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e场景:\n由于协议库本身可能存在消息解析出错的情况,要么就提 PR 上来,但是不一定会及时发布,这时候就需要自己把原有的消息解析复制出来,改造好,然后重新注册。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo13.cs\"\u003e可以参考 Simples 的 Demo13\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e举个栗子 14\u003c/h3\u003e\u003ca id=\"user-content-举个栗子-14\" class=\"anchor\" aria-label=\"Permalink: 举个栗子 14\" href=\"#举个栗子-14\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e场景:\n由于某些厂商不按要求去做,明明使用的 2013 的协议但是在消息头部的版本标识位置为 1,导致程序认为是 2019 协议。从而解析报错。此时可以强制解析成 2013 后,然后修正版本标识,重新序列化消息,以供下游服务使用\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo14.cs\"\u003e可以参考 Simples 的 Demo14\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e举个栗子 15\u003c/h3\u003e\u003ca id=\"user-content-举个栗子-15\" class=\"anchor\" aria-label=\"Permalink: 举个栗子 15\" href=\"#举个栗子-15\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e场景:\n兼容 2011 协议的注册消息\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo15.cs\"\u003e可以参考 Simples 的 Demo15\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e举个栗子 16\u003c/h3\u003e\u003ca id=\"user-content-举个栗子-16\" class=\"anchor\" aria-label=\"Permalink: 举个栗子 16\" href=\"#举个栗子-16\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e场景:\n平台下发分包数据到设备\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e可以参考【举个栗子 5】中,设备上来的分包数据结构,然后举一反三的去实现。\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e举个栗子 17\u003c/h3\u003e\u003ca id=\"user-content-举个栗子-17\" class=\"anchor\" aria-label=\"Permalink: 举个栗子 17\" href=\"#举个栗子-17\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e场景:\n由于 808 的 0x0200 标准协议的附加数据是有明确的表示对部分附加信息 Id 进行保留的,所以按照标准,有些设备厂商把标准的附加信息 Id 占用,所以需要解析这部分的数据,可以参考外部自定义附加信息注册的方式来解决解析问题。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e可以参考\u003ca href=\"https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo10.cs\"\u003e举个栗子 10\u003c/a\u003e中的程序。\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e举个栗子 18\u003c/h3\u003e\u003ca id=\"user-content-举个栗子-18\" class=\"anchor\" aria-label=\"Permalink: 举个栗子 18\" href=\"#举个栗子-18\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e场景:\n由于接入很多不同设备厂商的协议,但是每个协议对接又比较少,想同时放在一个类库下面进行统一管理,那么在各个厂家不冲突的情况下使用程序集方式的注册是没有问题的,一旦有冲突,那么使用程序集的方式进行注册会报 Id 冲突,本身库不支持这种方式进行隔离的,所以遇到这种情况自己使用 SetMap 的方式进行管理。\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e实验功能\u003c/h2\u003e\u003ca id=\"user-content-实验功能\" class=\"anchor\" aria-label=\"Permalink: 实验功能\" href=\"#实验功能\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e自动合并分包\u003c/h3\u003e\u003ca id=\"user-content-自动合并分包\" class=\"anchor\" aria-label=\"Permalink: 自动合并分包\" href=\"#自动合并分包\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e场景:\n当数据体超过协议规定的 1023 个字节时,设备将会以分包的形式发送给服务,此时服务需要进行合并后才能正常解析\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e可以参考单元测试的\u003ca href=\"/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/JT808SerializerTest.cs#L52\"\u003eJT808SerializerTest.MergerTest\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e注意事项:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e默认缓存超时时间为5分钟\u003c/li\u003e\n\u003cli\u003e如果合并且反序列化成功则\u003ca href=\"/SmallChi/JT808/blob/master/src/JT808.Protocol/JT808Package.cs\"\u003eJT808Package\u003c/a\u003e的\u003ccode\u003eBodies\u003c/code\u003e不为空,反之亦然\u003c/li\u003e\n\u003cli\u003e超时计时为收到指定终端的指定消息id第一包开始,期间如果收到所有分包数据,在收到最后一个分包时自动反序列化,如果期间未收到所有分包数据,则后续将无法合并出完整的数据并反序列化\u003c/li\u003e\n\u003cli\u003e如有特殊需求请重写\u003ca href=\"/SmallChi/JT808/blob/master/src/JT808.Protocol/Internal/DefaultMerger.cs\"\u003e默认实现\u003c/a\u003e或自行实现\u003ca href=\"/SmallChi/JT808/blob/master/src/JT808.Protocol/Interfaces/IMerger.cs\"\u003e接口\u003c/a\u003e并手动设置\u003ca href=\"/SmallChi/JT808/blob/master/src/JT808.Protocol/Interfaces/GlobalConfigBase.cs#L130\"\u003e全局配置\u003c/a\u003e的\u003ccode\u003eJt808PackageMerger\u003c/code\u003e属性\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eNuGet 安装\u003c/h2\u003e\u003ca id=\"user-content-nuget-安装\" class=\"anchor\" aria-label=\"Permalink: NuGet 安装\" href=\"#nuget-安装\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003ePackage Name\u003c/th\u003e\n\u003cth\u003eVersion\u003c/th\u003e\n\u003cth\u003ePreview Version\u003c/th\u003e\n\u003cth\u003eDownloads\u003c/th\u003e\n\u003cth\u003eRemark\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eInstall-Package JT808\u003c/td\u003e\n\u003ctd\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/cac5ab03525c485c75f402c39abfeb375d7e825d7d406aac15f7f2e4273757d0/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f762f4a543830382e737667\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/cac5ab03525c485c75f402c39abfeb375d7e825d7d406aac15f7f2e4273757d0/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f762f4a543830382e737667\" alt=\"JT808\" data-canonical-src=\"https://img.shields.io/nuget/v/JT808.svg\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/cd9e58090d06a1e8fab0ce6127aa5835474bfd8a2140a770d420925943480f8b/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f767072652f4a543830382e737667\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/cd9e58090d06a1e8fab0ce6127aa5835474bfd8a2140a770d420925943480f8b/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f767072652f4a543830382e737667\" alt=\"JT808\" data-canonical-src=\"https://img.shields.io/nuget/vpre/JT808.svg\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/b16f1d5463e4f271161cf8a7669fb2bdea21822b599e678fa327c607725988cb/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f64742f4a543830382e737667\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/b16f1d5463e4f271161cf8a7669fb2bdea21822b599e678fa327c607725988cb/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f64742f4a543830382e737667\" alt=\"JT808\" data-canonical-src=\"https://img.shields.io/nuget/dt/JT808.svg\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eJT808\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eInstall-Package JT808.Protocol.Extensions.JT1078\u003c/td\u003e\n\u003ctd\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/c4659d2f9702b20e2fe7dded662abb2a93c352f9c2182a96612a917ad09c5b10/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f762f4a543830382e50726f746f636f6c2e457874656e73696f6e732e4a54313037382e737667\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/c4659d2f9702b20e2fe7dded662abb2a93c352f9c2182a96612a917ad09c5b10/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f762f4a543830382e50726f746f636f6c2e457874656e73696f6e732e4a54313037382e737667\" alt=\"JT808.Protocol.Extensions.JT1078\" data-canonical-src=\"https://img.shields.io/nuget/v/JT808.Protocol.Extensions.JT1078.svg\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/e507be9503bc3e1430b18fc68623b420a6df8c811fa5c63bfefe45df892df959/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f767072652f4a543830382e50726f746f636f6c2e457874656e73696f6e732e4a54313037382e737667\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/e507be9503bc3e1430b18fc68623b420a6df8c811fa5c63bfefe45df892df959/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f767072652f4a543830382e50726f746f636f6c2e457874656e73696f6e732e4a54313037382e737667\" alt=\"JT808.Protocol.Extensions.JT1078\" data-canonical-src=\"https://img.shields.io/nuget/vpre/JT808.Protocol.Extensions.JT1078.svg\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/9deed3a986d792c4b99dea9cff06f2e83489a8265d4bfe2bbc487f845509860b/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f64742f4a543830382e50726f746f636f6c2e457874656e73696f6e732e4a54313037382e737667\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/9deed3a986d792c4b99dea9cff06f2e83489a8265d4bfe2bbc487f845509860b/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f64742f4a543830382e50726f746f636f6c2e457874656e73696f6e732e4a54313037382e737667\" alt=\"JT808\" data-canonical-src=\"https://img.shields.io/nuget/dt/JT808.Protocol.Extensions.JT1078.svg\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eJT1078 扩展 JT808\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eInstall-Package JT808.Protocol.Extensions.SuBiao\u003c/td\u003e\n\u003ctd\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/0dd22278eac48839bbfde5199b79a133ae29f930f2bd02a95bc4a92ea43dc1f4/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f762f4a543830382e50726f746f636f6c2e457874656e73696f6e732e53754269616f2e737667\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/0dd22278eac48839bbfde5199b79a133ae29f930f2bd02a95bc4a92ea43dc1f4/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f762f4a543830382e50726f746f636f6c2e457874656e73696f6e732e53754269616f2e737667\" alt=\"JT808.Protocol.Extensions.SuBiao\" data-canonical-src=\"https://img.shields.io/nuget/v/JT808.Protocol.Extensions.SuBiao.svg\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/756a92eb670ddc9a36596b735bf66bdefb6ccd747a063d571a854b6684a5bda0/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f767072652f4a543830382e50726f746f636f6c2e457874656e73696f6e732e53754269616f2e737667\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/756a92eb670ddc9a36596b735bf66bdefb6ccd747a063d571a854b6684a5bda0/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f767072652f4a543830382e50726f746f636f6c2e457874656e73696f6e732e53754269616f2e737667\" alt=\"JT808.Protocol.Extensions.SuBiao\" data-canonical-src=\"https://img.shields.io/nuget/vpre/JT808.Protocol.Extensions.SuBiao.svg\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/7c2aa9070631f5b06f797c1a9e9c66696fb0e7350f9cb322e1a0f4a77ae57eac/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f64742f4a543830382e50726f746f636f6c2e457874656e73696f6e732e53754269616f2e737667\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/7c2aa9070631f5b06f797c1a9e9c66696fb0e7350f9cb322e1a0f4a77ae57eac/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f64742f4a543830382e50726f746f636f6c2e457874656e73696f6e732e53754269616f2e737667\" alt=\"JT808\" data-canonical-src=\"https://img.shields.io/nuget/dt/JT808.Protocol.Extensions.SuBiao.svg\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e主动安全(苏标)扩展 JT808\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eInstall-Package JT808.Protocol.Extensions.YueBiao\u003c/td\u003e\n\u003ctd\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/a14cba6ae52a64143e6fe59a6bcab6ac5eb7b3b263fffd3d16185f469a6a6fcd/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f762f4a543830382e50726f746f636f6c2e457874656e73696f6e732e5975654269616f2e737667\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/a14cba6ae52a64143e6fe59a6bcab6ac5eb7b3b263fffd3d16185f469a6a6fcd/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f762f4a543830382e50726f746f636f6c2e457874656e73696f6e732e5975654269616f2e737667\" alt=\"JT808.Protocol.Extensions.YueBiao\" data-canonical-src=\"https://img.shields.io/nuget/v/JT808.Protocol.Extensions.YueBiao.svg\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/c217610292e5df77ebc1c498d8aa23dc411596a9ee3eadf11b81ee6d2dfd243b/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f767072652f4a543830382e50726f746f636f6c2e457874656e73696f6e732e5975654269616f2e737667\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/c217610292e5df77ebc1c498d8aa23dc411596a9ee3eadf11b81ee6d2dfd243b/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f767072652f4a543830382e50726f746f636f6c2e457874656e73696f6e732e5975654269616f2e737667\" alt=\"JT808.Protocol.Extensions.YueBiao\" data-canonical-src=\"https://img.shields.io/nuget/vpre/JT808.Protocol.Extensions.YueBiao.svg\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/434ed0b013c6fdf0793d3a0b141a7c9f6bce0d4f4edc3d139d27dc38032f9d44/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f64742f4a543830382e50726f746f636f6c2e457874656e73696f6e732e5975654269616f2e737667\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/434ed0b013c6fdf0793d3a0b141a7c9f6bce0d4f4edc3d139d27dc38032f9d44/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f64742f4a543830382e50726f746f636f6c2e457874656e73696f6e732e5975654269616f2e737667\" alt=\"JT808\" data-canonical-src=\"https://img.shields.io/nuget/dt/JT808.Protocol.Extensions.YueBiao.svg\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e主动安全(粤标)扩展 JT808\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eInstall-Package JT808.Protocol.Extensions.GPS51\u003c/td\u003e\n\u003ctd\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/9ecfb4208adf6b669e09dc34c43ac8dd5e05069bc7584e701a71bce9230436d1/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f762f4a543830382e50726f746f636f6c2e457874656e73696f6e732e47505335312e737667\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/9ecfb4208adf6b669e09dc34c43ac8dd5e05069bc7584e701a71bce9230436d1/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f762f4a543830382e50726f746f636f6c2e457874656e73696f6e732e47505335312e737667\" alt=\"JT808.Protocol.Extensions.GPS51\" data-canonical-src=\"https://img.shields.io/nuget/v/JT808.Protocol.Extensions.GPS51.svg\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/4f5bbcdadcb430b19c293ee78796c19bdb9d0bd13a8bf3c02c2f2fd873b62dfe/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f767072652f4a543830382e50726f746f636f6c2e457874656e73696f6e732e47505335312e737667\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/4f5bbcdadcb430b19c293ee78796c19bdb9d0bd13a8bf3c02c2f2fd873b62dfe/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f767072652f4a543830382e50726f746f636f6c2e457874656e73696f6e732e47505335312e737667\" alt=\"JT808.Protocol.Extensions.GPS51\" data-canonical-src=\"https://img.shields.io/nuget/vpre/JT808.Protocol.Extensions.GPS51.svg\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/f6ad35ad9df903f17464eb8c1988c0dff6364f0caec787b1599c2ca4dd5eb4ad/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f64742f4a543830382e50726f746f636f6c2e457874656e73696f6e732e47505335312e737667\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/f6ad35ad9df903f17464eb8c1988c0dff6364f0caec787b1599c2ca4dd5eb4ad/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f64742f4a543830382e50726f746f636f6c2e457874656e73696f6e732e47505335312e737667\" alt=\"JT808\" data-canonical-src=\"https://img.shields.io/nuget/dt/JT808.Protocol.Extensions.GPS51.svg\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eGPS51 扩展JT808\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e使用 BenchmarkDotNet 性能测试报告(只是玩玩,不能当真)\u003c/h2\u003e\u003ca id=\"user-content-使用-benchmarkdotnet-性能测试报告只是玩玩不能当真\" class=\"anchor\" aria-label=\"Permalink: 使用 BenchmarkDotNet 性能测试报告(只是玩玩,不能当真)\" href=\"#使用-benchmarkdotnet-性能测试报告只是玩玩不能当真\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ini notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\nBenchmarkDotNet v0.14.0, Windows 11 (10.0.22631.4460/23H2/2023Update/SunValley3)\nIntel Core i7-8700K CPU 3.70GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores\n.NET SDK 9.0.100\n [Host] : .NET 9.0.0 (9.0.24.52809), X64 RyuJIT AVX2\n Job-PAIVRG : .NET 9.0.0 (9.0.24.52809), X64 RyuJIT AVX2\n\nPlatform=AnyCpu Server=False Toolchain=.NET 9.0 \n\"\u003e\u003cpre\u003eBenchmarkDotNet v0.14.0, Windows 11 (10.0.22631.4460/23H2/2023Update/SunValley3)\nIntel Core i7-8700K CPU 3.70GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores\n.NET SDK 9.0.100\n [Host] : .NET 9.0.0 (9.0.24.52809), X64 RyuJIT AVX2\n Job-PAIVRG : .NET 9.0.0 (9.0.24.52809), X64 RyuJIT AVX2\n\n\u003cspan class=\"pl-k\"\u003ePlatform\u003c/span\u003e=AnyCpu \u003cspan class=\"pl-k\"\u003eServer\u003c/span\u003e=False \u003cspan class=\"pl-k\"\u003eToolchain\u003c/span\u003e=.NET 9.0 \n\u003c/pre\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c/th\u003e\n\u003cth\u003eCategories\u003c/th\u003e\n\u003cth\u003eN\u003c/th\u003e\n\u003cth align=\"right\"\u003eMean\u003c/th\u003e\n\u003cth align=\"right\"\u003eError\u003c/th\u003e\n\u003cth align=\"right\"\u003eStdDev\u003c/th\u003e\n\u003cth align=\"right\"\u003eGen0\u003c/th\u003e\n\u003cth align=\"right\"\u003eGen1\u003c/th\u003e\n\u003cth align=\"right\"\u003eAllocated\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003e0x0100Serialize\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e0x0100Serializer\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e100\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e56.59 μs\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e0.331 μs\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e0.310 μs\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e10.8032\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e-\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e66.41 KB\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e0x0100Deserialize\u003c/td\u003e\n\u003ctd\u003e0x0100Serializer\u003c/td\u003e\n\u003ctd\u003e100\u003c/td\u003e\n\u003ctd align=\"right\"\u003e49.57 μs\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.624 μs\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.553 μs\u003c/td\u003e\n\u003ctd align=\"right\"\u003e15.8081\u003c/td\u003e\n\u003ctd align=\"right\"\u003e-\u003c/td\u003e\n\u003ctd align=\"right\"\u003e96.88 KB\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003e0x0100Serialize\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e0x0100Serializer\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e10000\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e5,443.03 μs\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e20.140 μs\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e18.839 μs\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e1078.1250\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e-\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e6640.63 KB\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e0x0100Deserialize\u003c/td\u003e\n\u003ctd\u003e0x0100Serializer\u003c/td\u003e\n\u003ctd\u003e10000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e5,171.28 μs\u003c/td\u003e\n\u003ctd align=\"right\"\u003e47.999 μs\u003c/td\u003e\n\u003ctd align=\"right\"\u003e44.899 μs\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1578.1250\u003c/td\u003e\n\u003ctd align=\"right\"\u003e-\u003c/td\u003e\n\u003ctd align=\"right\"\u003e9687.51 KB\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003e0x0100Serialize\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e0x0100Serializer\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e100000\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e54,690.88 μs\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e314.675 μs\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e294.347 μs\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e10800.0000\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e-\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e66406.35 KB\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e0x0100Deserialize\u003c/td\u003e\n\u003ctd\u003e0x0100Serializer\u003c/td\u003e\n\u003ctd\u003e100000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e49,058.00 μs\u003c/td\u003e\n\u003ctd align=\"right\"\u003e513.922 μs\u003c/td\u003e\n\u003ctd align=\"right\"\u003e480.723 μs\u003c/td\u003e\n\u003ctd align=\"right\"\u003e15727.2727\u003c/td\u003e\n\u003ctd align=\"right\"\u003e-\u003c/td\u003e\n\u003ctd align=\"right\"\u003e96875.09 KB\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003e0x0200_All_AttachId_Serialize\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e0x0200Serializer\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e100\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e107.02 μs\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e0.674 μs\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e0.598 μs\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e29.4189\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e0.1221\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e180.47 KB\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e0x0200_All_AttachId_Deserialize\u003c/td\u003e\n\u003ctd\u003e0x0200Serializer\u003c/td\u003e\n\u003ctd\u003e100\u003c/td\u003e\n\u003ctd align=\"right\"\u003e103.93 μs\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.414 μs\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.367 μs\u003c/td\u003e\n\u003ctd align=\"right\"\u003e38.2080\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.2441\u003c/td\u003e\n\u003ctd align=\"right\"\u003e234.38 KB\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003e0x0200_All_AttachId_Serialize\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e0x0200Serializer\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e10000\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e10,739.81 μs\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e77.963 μs\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e69.112 μs\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e2937.5000\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e-\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e18046.89 KB\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e0x0200_All_AttachId_Deserialize\u003c/td\u003e\n\u003ctd\u003e0x0200Serializer\u003c/td\u003e\n\u003ctd\u003e10000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e10,746.98 μs\u003c/td\u003e\n\u003ctd align=\"right\"\u003e82.140 μs\u003c/td\u003e\n\u003ctd align=\"right\"\u003e76.833 μs\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3812.5000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e15.6250\u003c/td\u003e\n\u003ctd align=\"right\"\u003e23437.52 KB\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003e0x0200_All_AttachId_Serialize\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e0x0200Serializer\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e100000\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e106,682.00 μs\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e1,466.321 μs\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e1,224.444 μs\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e29400.0000\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e-\u003c/strong\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003cstrong\u003e180468.95 KB\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e0x0200_All_AttachId_Deserialize\u003c/td\u003e\n\u003ctd\u003e0x0200Serializer\u003c/td\u003e\n\u003ctd\u003e100000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e104,389.33 μs\u003c/td\u003e\n\u003ctd align=\"right\"\u003e516.581 μs\u003c/td\u003e\n\u003ctd align=\"right\"\u003e483.210 μs\u003c/td\u003e\n\u003ctd align=\"right\"\u003e38200.0000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e200.0000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e234375.2 KB\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eJT808 终端通讯协议消息对照表\u003c/h2\u003e\u003ca id=\"user-content-jt808-终端通讯协议消息对照表\" class=\"anchor\" aria-label=\"Permalink: JT808 终端通讯协议消息对照表\" href=\"#jt808-终端通讯协议消息对照表\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth align=\"center\"\u003e序号\u003c/th\u003e\n\u003cth align=\"center\"\u003e消息 ID\u003c/th\u003e\n\u003cth align=\"center\"\u003e完成情况\u003c/th\u003e\n\u003cth align=\"center\"\u003e测试情况\u003c/th\u003e\n\u003cth align=\"left\"\u003e消息体名称\u003c/th\u003e\n\u003cth align=\"center\"\u003e2019 版本\u003c/th\u003e\n\u003cth align=\"center\"\u003e2011 版本\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e1\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0001\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e终端通用应答\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e2\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8001\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e平台通用应答\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e3\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0002\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e终端心跳\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e4\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8003\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e补传分包请求\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e被新增\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e5\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0100\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e终端注册\u003c/td\u003e\n\u003ctd align=\"center\"\u003e修改\u003c/td\u003e\n\u003ctd align=\"center\"\u003e被修改\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e6\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8100\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e终端注册应答\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e7\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0003\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e终端注销\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e8\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0102\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e终端鉴权\u003c/td\u003e\n\u003ctd align=\"center\"\u003e修改\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e9\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8103\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e设置终端参数\u003c/td\u003e\n\u003ctd align=\"center\"\u003e修改且增加\u003c/td\u003e\n\u003ctd align=\"center\"\u003e被修改\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e10\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8104\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e查询终端参数\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e11\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0104\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e查询终端参数应答\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e12\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8105\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e终端控制\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e13\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8106\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e查询指定终端参数\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e被新增\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e14\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8107\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e消息体为空\u003c/td\u003e\n\u003ctd align=\"left\"\u003e查询终端属性\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e被新增\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e15\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0107\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e查询终端属性应答\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e被新增\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e16\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8108\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e下发终端升级包\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e被新增\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e17\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0108\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e终端升级结果通知\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e被新增\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e18\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0200\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e位置信息汇报\u003c/td\u003e\n\u003ctd align=\"center\"\u003e增加附加信息\u003c/td\u003e\n\u003ctd align=\"center\"\u003e被修改\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e19\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8201\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e位置信息查询\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e20\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0201\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e位置信息查询应答\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e21\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8202\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e临时位置跟踪控制\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e22\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8203\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e人工确认报警消息\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e被新增\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e23\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8300\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e文本信息下发\u003c/td\u003e\n\u003ctd align=\"center\"\u003e修改\u003c/td\u003e\n\u003ctd align=\"center\"\u003e被修改\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e24\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8301\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e事件设置\u003c/td\u003e\n\u003ctd align=\"center\"\u003e删除\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e25\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0301\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e事件报告\u003c/td\u003e\n\u003ctd align=\"center\"\u003e删除\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e26\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8302\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e提问下发\u003c/td\u003e\n\u003ctd align=\"center\"\u003e删除\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e27\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0302\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e提问应答\u003c/td\u003e\n\u003ctd align=\"center\"\u003e删除\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e28\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8303\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e信息点播菜单设置\u003c/td\u003e\n\u003ctd align=\"center\"\u003e删除\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e29\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0303\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e信息点播/取消\u003c/td\u003e\n\u003ctd align=\"center\"\u003e删除\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e30\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8304\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e信息服务\u003c/td\u003e\n\u003ctd align=\"center\"\u003e删除\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e31\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8400\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e电话回拨\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e32\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8401\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e设置电话本\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e33\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8500\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e车辆控制\u003c/td\u003e\n\u003ctd align=\"center\"\u003e修改\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e34\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0500\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e车辆控制应答\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e35\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8600\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e设置圆形区域\u003c/td\u003e\n\u003ctd align=\"center\"\u003e修改\u003c/td\u003e\n\u003ctd align=\"center\"\u003e被修改\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e36\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8601\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e删除圆形区域\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e37\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8602\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e设置矩形区域\u003c/td\u003e\n\u003ctd align=\"center\"\u003e修改\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e38\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8603\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e删除矩形区域\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e39\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8604\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e设置多边形区域\u003c/td\u003e\n\u003ctd align=\"center\"\u003e修改\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e40\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8605\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e删除多边形区域\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e41\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8606\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e设置路线\u003c/td\u003e\n\u003ctd align=\"center\"\u003e修改\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e42\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8607\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e删除路线\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e43\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8700\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e行驶记录仪数据采集命令\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e被修改\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e44\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0700\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e行驶记录仪数据上传\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e45\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8701\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e行驶记录仪参数下传命令\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e被修改\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e46\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0701\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e电子运单上报\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e47\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0702\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e驾驶员身份信息采集上报\u003c/td\u003e\n\u003ctd align=\"center\"\u003e修改\u003c/td\u003e\n\u003ctd align=\"center\"\u003e被修改\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e48\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8702\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e消息体为空\u003c/td\u003e\n\u003ctd align=\"left\"\u003e上报驾驶员身份信息请求\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e被新增\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e49\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0704\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e定位数据批量上传\u003c/td\u003e\n\u003ctd align=\"center\"\u003e修改\u003c/td\u003e\n\u003ctd align=\"center\"\u003e被新增\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e50\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0705\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003eCAN 总线数据上传\u003c/td\u003e\n\u003ctd align=\"center\"\u003e修改\u003c/td\u003e\n\u003ctd align=\"center\"\u003e被新增\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e51\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0800\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e多媒体事件信息上传\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e被修改\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e52\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0801\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e多媒体数据上传\u003c/td\u003e\n\u003ctd align=\"center\"\u003e修改\u003c/td\u003e\n\u003ctd align=\"center\"\u003e被修改\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e53\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8800\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e多媒体数据上传应答\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e被修改\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e54\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8801\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e摄像头立即拍摄命令\u003c/td\u003e\n\u003ctd align=\"center\"\u003e修改\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e55\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0805\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e摄像头立即拍摄命令应答\u003c/td\u003e\n\u003ctd align=\"center\"\u003e修改\u003c/td\u003e\n\u003ctd align=\"center\"\u003e被新增\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e56\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8802\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e存储多媒体数据检索\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e57\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0802\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e存储多媒体数据检索应答\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e被修改\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e58\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8803\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e存储多媒体数据上传\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e59\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8804\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e录音开始命令\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e60\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8805\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e单条存储多媒体数据检索上传命令\u003c/td\u003e\n\u003ctd align=\"center\"\u003e修改\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e61\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8900\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e数据下行透传\u003c/td\u003e\n\u003ctd align=\"center\"\u003e修改\u003c/td\u003e\n\u003ctd align=\"center\"\u003e被修改\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e62\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0900\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e数据上行透传\u003c/td\u003e\n\u003ctd align=\"center\"\u003e修改\u003c/td\u003e\n\u003ctd align=\"center\"\u003e被修改\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e63\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0901\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e数据压缩上报\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e64\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8A00\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e平台 RSA 公钥\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e65\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0A00\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e终端 RSA 公钥\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e66\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8F00~0x8FFF\u003c/td\u003e\n\u003ctd align=\"center\"\u003e保留\u003c/td\u003e\n\u003ctd align=\"center\"\u003e保留\u003c/td\u003e\n\u003ctd align=\"left\"\u003e平台下行消息保留\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e67\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0F00~0x0FFF\u003c/td\u003e\n\u003ctd align=\"center\"\u003e保留\u003c/td\u003e\n\u003ctd align=\"center\"\u003e保留\u003c/td\u003e\n\u003ctd align=\"left\"\u003e终端上行消息保留\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e68\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0004\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e查询服务器时间请求\u003c/td\u003e\n\u003ctd align=\"center\"\u003e新增\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e69\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8004\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e查询服务器时间应答\u003c/td\u003e\n\u003ctd align=\"center\"\u003e新增\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e70\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0005\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e终端补传分包请求\u003c/td\u003e\n\u003ctd align=\"center\"\u003e新增\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e71\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8204\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e链路检测\u003c/td\u003e\n\u003ctd align=\"center\"\u003e新增\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e72\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8608\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e查询区域或线路数据\u003c/td\u003e\n\u003ctd align=\"center\"\u003e新增\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e73\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0608\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e查询区域或线路数据应答\u003c/td\u003e\n\u003ctd align=\"center\"\u003e新增\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e74\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0xE000~0xEFFF\u003c/td\u003e\n\u003ctd align=\"center\"\u003e保留\u003c/td\u003e\n\u003ctd align=\"center\"\u003e保留\u003c/td\u003e\n\u003ctd align=\"left\"\u003e厂商自定义上行消息\u003c/td\u003e\n\u003ctd align=\"center\"\u003e新增\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e75\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0xF000~0xFFFF\u003c/td\u003e\n\u003ctd align=\"center\"\u003e保留\u003c/td\u003e\n\u003ctd align=\"center\"\u003e保留\u003c/td\u003e\n\u003ctd align=\"left\"\u003e厂商自定义下行消息\u003c/td\u003e\n\u003ctd align=\"center\"\u003e新增\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eJT1078 扩展 JT808 议消息对照表\u003c/h2\u003e\u003ca id=\"user-content-jt1078-扩展-jt808-议消息对照表\" class=\"anchor\" aria-label=\"Permalink: JT1078 扩展 JT808 议消息对照表\" href=\"#jt1078-扩展-jt808-议消息对照表\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth align=\"center\"\u003e序号\u003c/th\u003e\n\u003cth align=\"center\"\u003e消息 ID\u003c/th\u003e\n\u003cth align=\"center\"\u003e完成情况\u003c/th\u003e\n\u003cth align=\"center\"\u003e测试情况\u003c/th\u003e\n\u003cth align=\"left\"\u003e消息体名称\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e1\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0200_0x14\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e视频相关报警\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e2\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0200_0x15\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e视频信号丢失报警状态\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e3\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0200_0x16\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e视频信号遮挡报警状态\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e4\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0200_0x17\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e存储器故障报警状态\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e5\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0200_0x18\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e异常驾驶行为报警详细描述\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e6\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8103_0x0075\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e音视频参数设置\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e7\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8103_0x0076\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e音视频通道列表设置\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e8\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8103_0x0077\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e单独视频通道参数设置\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e9\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8103_0x0079\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e特殊报警录像参数设置\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e10\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8103_0x007A\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e视频相关报警屏蔽字\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e11\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8103_0x007B\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e图像分析报警参数设置\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e12\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8103_0x007C\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e终端休眠模式唤醒设置\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e13\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x1003\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e终端上传音视频属性\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e14\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x1005\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e终端上传乘客流量\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e15\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x1205\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e终端上传音视频资源列表\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e16\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x1206\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e文件上传完成通知\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e17\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x9003\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e查询终端音视频属性\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e18\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x9101\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e实时音视频传输请求\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e19\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x9102\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e音视频实时传输控制\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e20\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x9105\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e实时音视频传输状态通知\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e21\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x9201\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e平台下发远程录像回放请求\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e22\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x9202\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e平台下发远程录像回放控制\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e23\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x9205\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e查询资源列表\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e24\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x9206\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e文件上传指令\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e25\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x9207\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e文件上传控制\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e26\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x9301\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e云台旋转\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e27\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x9302\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e云台调整焦距控制\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e28\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x9303\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e云台调整光圈控制\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e29\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x9304\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e云台雨刷控制\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e30\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x9305\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e红外补光控制\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e31\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x9306\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e云台变倍控制\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e使用方法\u003c/h2\u003e\u003ca id=\"user-content-使用方法\" class=\"anchor\" aria-label=\"Permalink: 使用方法\" href=\"#使用方法\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"DI:\nIServiceCollection serviceDescriptors1 = new ServiceCollection();\nserviceDescriptors1.AddJT808Configure()\n .AddJT1078Configure();\n全局注册:\nJT808Serializer.Instance.Register(JT808_JT1078_Constants.GetCurrentAssembly());\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eDI\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e\n\u003cspan class=\"pl-smi\"\u003eIServiceCollection\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eserviceDescriptors1\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eServiceCollection\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eserviceDescriptors1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAddJT808Configure\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAddJT1078Configure\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-smi\"\u003e全局注册\u003c/span\u003e:\n\u003cspan class=\"pl-s1\"\u003eJT808Serializer\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eInstance\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eRegister\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eJT808_JT1078_Constants\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGetCurrentAssembly\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e主动安全(苏标)扩展 JT808 协议消息对照表\u003c/h2\u003e\u003ca id=\"user-content-主动安全苏标扩展-jt808-协议消息对照表\" class=\"anchor\" aria-label=\"Permalink: 主动安全(苏标)扩展 JT808 协议消息对照表\" href=\"#主动安全苏标扩展-jt808-协议消息对照表\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth align=\"center\"\u003e序号\u003c/th\u003e\n\u003cth align=\"center\"\u003e消息 ID\u003c/th\u003e\n\u003cth align=\"center\"\u003e完成情况\u003c/th\u003e\n\u003cth align=\"center\"\u003e测试情况\u003c/th\u003e\n\u003cth align=\"left\"\u003e消息体名称\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e1\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x1210\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e报警附件信息消息\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e2\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x1211\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e文件信息上传\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e3\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x1212\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e文件上传完成消息\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e4\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x9208\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e报警附件上传指令\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e5\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x9212\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e文件上传完成消息应答\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e6\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0200_0x64\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e高级驾驶辅助系统报警信息\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e7\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0200_0x65\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e驾驶员状态监测系统报警信息\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e8\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0200_0x66\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e胎压监测系统报警信息\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e9\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0200_0x67\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e盲区监测系统报警信息\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e10\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8103_0xF364\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e高级驾驶辅助系统参数\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e11\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8103_0xF365\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e驾驶员状态监测系统参数\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e12\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8103_0xF366\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e胎压监测系统参数\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e13\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8103_0xF367\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e盲区监测系统参数\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e14\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0900\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e上传基本信息\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e15\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0900_0xF7\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e外设工作状态\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e16\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0900_0xF8\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e外设系统信息\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e17\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8900\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e查询基本信息\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e18\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8900_0xF7\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e外设工作状态\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e19\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8900_0xF8\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e外设系统信息\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e使用方法\u003c/h2\u003e\u003ca id=\"user-content-使用方法-1\" class=\"anchor\" aria-label=\"Permalink: 使用方法\" href=\"#使用方法-1\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"DI:\nIServiceCollection serviceDescriptors1 = new ServiceCollection();\nserviceDescriptors1.AddJT808Configure()\n .AddSuBiaoConfigure();\n\n全局注册:\nJT808Serializer.Instance.Register(JT808_SuBiao_Constants.GetCurrentAssembly());\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eDI\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e\n\u003cspan class=\"pl-smi\"\u003eIServiceCollection\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eserviceDescriptors1\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eServiceCollection\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eserviceDescriptors1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAddJT808Configure\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAddSuBiaoConfigure\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-s1\"\u003e全局注册\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eJT808Serializer\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eInstance\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eRegister\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eJT808_SuBiao_Constants\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eGetCurrentAssembly\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e主动安全(粤标)扩展 JT808 协议消息对照表\u003c/h2\u003e\u003ca id=\"user-content-主动安全粤标扩展-jt808-协议消息对照表\" class=\"anchor\" aria-label=\"Permalink: 主动安全(粤标)扩展 JT808 协议消息对照表\" href=\"#主动安全粤标扩展-jt808-协议消息对照表\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp dir=\"auto\"\u003e注意:基于 JT/T808 2019 版本\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth align=\"center\"\u003e序号\u003c/th\u003e\n\u003cth align=\"center\"\u003e消息 ID\u003c/th\u003e\n\u003cth align=\"center\"\u003e完成情况\u003c/th\u003e\n\u003cth align=\"center\"\u003e测试情况\u003c/th\u003e\n\u003cth align=\"left\"\u003e消息体名称\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e1\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x1210\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e报警附件信息消息\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e2\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x1211\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e文件信息上传\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e3\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x1212\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e文件上传完成消息\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e4\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x9208\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e报警附件上传指令\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e5\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x9212\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e文件上传完成消息应答\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e6\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x1FC4\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e终端升级进度上报\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e7\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0200_0x64\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e高级驾驶辅助系统报警信息\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e8\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0200_0x65\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e驾驶员状态监测系统报警信息\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e9\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0200_0x66\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e胎压监测系统报警信息\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e10\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0200_0x67\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e盲区监测系统报警信息\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e11\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8103_0xF364\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e高级驾驶辅助系统参数\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e12\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8103_0xF365\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e驾驶员状态监测系统参数\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e13\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8103_0xF366\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e胎压监测系统参数\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e14\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8103_0xF367\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e盲区监测系统参数\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e15\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8103_0xF370\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e智能视频协议版本信息\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e16\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0900\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e上传基本信息\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e17\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0900_0xF7\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e外设工作状态\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e18\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x0900_0xF8\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e外设系统信息\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e19\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8900\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e查询基本信息\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e20\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8900_0xF7\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e外设工作状态\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e21\u003c/td\u003e\n\u003ctd align=\"center\"\u003e0x8900_0xF8\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"center\"\u003e√\u003c/td\u003e\n\u003ctd align=\"left\"\u003e外设系统信息\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e使用方法\u003c/h2\u003e\u003ca id=\"user-content-使用方法-2\" class=\"anchor\" aria-label=\"Permalink: 使用方法\" href=\"#使用方法-2\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"DI:\nIServiceCollection serviceDescriptors1 = new ServiceCollection();\nserviceDescriptors1.AddJT808Configure()\n .AddYueBiaoConfigure();\n\n全局注册:\nJT808Serializer.Instance.Register(JT808_YueBiao_Constants.GetCurrentAssembly());\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eDI\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e\n\u003cspan class=\"pl-smi\"\u003eIServiceCollection\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eserviceDescriptors1\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eServiceCollection\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eserviceDescriptors1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAddJT808Configure\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAddYueBiaoConfigure\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-s1\"\u003e全局注册\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eJT808Serializer\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eInstance\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eRegister\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eJT808_YueBiao_Constants\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eGetCurrentAssembly\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003c/article\u003e","loaded":true,"timedOut":false,"errorMessage":null,"headerInfo":{"toc":[{"level":1,"text":"JT/T808 协议","anchor":"jtt808-协议","htmlText":"JT/T808 协议"},{"level":2,"text":"前提条件","anchor":"前提条件","htmlText":"前提条件"},{"level":2,"text":"JT808 数据结构解析","anchor":"jt808-数据结构解析","htmlText":"JT808 数据结构解析"},{"level":3,"text":"数据包[JT808Package]","anchor":"数据包jt808package","htmlText":"数据包[JT808Package]"},{"level":3,"text":"数据头[JT808Header]","anchor":"数据头jt808header","htmlText":"数据头[JT808Header]"},{"level":4,"text":"数据头-消息体属性[JT808HeaderMessageBodyProperty]","anchor":"数据头-消息体属性jt808headermessagebodyproperty","htmlText":"数据头-消息体属性[JT808HeaderMessageBodyProperty]"},{"level":4,"text":"消息体属性[JT808Bodies]","anchor":"消息体属性jt808bodies","htmlText":"消息体属性[JT808Bodies]"},{"level":3,"text":"举个栗子 1","anchor":"举个栗子-1","htmlText":"举个栗子 1"},{"level":4,"text":"1.组包:","anchor":"1组包","htmlText":"1.组包:"},{"level":4,"text":"2.手动解包:","anchor":"2手动解包","htmlText":"2.手动解包:"},{"level":4,"text":"3.程序解包:","anchor":"3程序解包","htmlText":"3.程序解包:"},{"level":3,"text":"举个栗子 2","anchor":"举个栗子-2","htmlText":"举个栗子 2"},{"level":3,"text":"举个栗子 3","anchor":"举个栗子-3","htmlText":"举个栗子 3"},{"level":3,"text":"举个栗子 4","anchor":"举个栗子-4","htmlText":"举个栗子 4"},{"level":4,"text":"遇到的问题-多设备多协议的自定义位置附加信息","anchor":"遇到的问题-多设备多协议的自定义位置附加信息","htmlText":"遇到的问题-多设备多协议的自定义位置附加信息"},{"level":3,"text":"举个栗子 5","anchor":"举个栗子-5","htmlText":"举个栗子 5"},{"level":4,"text":"遇到的问题-多媒体数据上传进行分包处理","anchor":"遇到的问题-多媒体数据上传进行分包处理","htmlText":"遇到的问题-多媒体数据上传进行分包处理"},{"level":3,"text":"举个栗子 6","anchor":"举个栗子-6","htmlText":"举个栗子 6"},{"level":4,"text":"遇到的问题-多设备多协议的消息 ID 冲突","anchor":"遇到的问题-多设备多协议的消息-id-冲突","htmlText":"遇到的问题-多设备多协议的消息 ID 冲突"},{"level":3,"text":"举个栗子 7","anchor":"举个栗子-7","htmlText":"举个栗子 7"},{"level":3,"text":"举个栗子 8","anchor":"举个栗子-8","htmlText":"举个栗子 8"},{"level":3,"text":"举个栗子 9","anchor":"举个栗子-9","htmlText":"举个栗子 9"},{"level":3,"text":"举个栗子 10","anchor":"举个栗子-10","htmlText":"举个栗子 10"},{"level":3,"text":"举个栗子 11","anchor":"举个栗子-11","htmlText":"举个栗子 11"},{"level":3,"text":"举个栗子 12","anchor":"举个栗子-12","htmlText":"举个栗子 12"},{"level":3,"text":"举个栗子 13","anchor":"举个栗子-13","htmlText":"举个栗子 13"},{"level":3,"text":"举个栗子 14","anchor":"举个栗子-14","htmlText":"举个栗子 14"},{"level":3,"text":"举个栗子 15","anchor":"举个栗子-15","htmlText":"举个栗子 15"},{"level":3,"text":"举个栗子 16","anchor":"举个栗子-16","htmlText":"举个栗子 16"},{"level":3,"text":"举个栗子 17","anchor":"举个栗子-17","htmlText":"举个栗子 17"},{"level":3,"text":"举个栗子 18","anchor":"举个栗子-18","htmlText":"举个栗子 18"},{"level":2,"text":"实验功能","anchor":"实验功能","htmlText":"实验功能"},{"level":3,"text":"自动合并分包","anchor":"自动合并分包","htmlText":"自动合并分包"},{"level":2,"text":"NuGet 安装","anchor":"nuget-安装","htmlText":"NuGet 安装"},{"level":2,"text":"使用 BenchmarkDotNet 性能测试报告(只是玩玩,不能当真)","anchor":"使用-benchmarkdotnet-性能测试报告只是玩玩不能当真","htmlText":"使用 BenchmarkDotNet 性能测试报告(只是玩玩,不能当真)"},{"level":2,"text":"JT808 终端通讯协议消息对照表","anchor":"jt808-终端通讯协议消息对照表","htmlText":"JT808 终端通讯协议消息对照表"},{"level":2,"text":"JT1078 扩展 JT808 议消息对照表","anchor":"jt1078-扩展-jt808-议消息对照表","htmlText":"JT1078 扩展 JT808 议消息对照表"},{"level":2,"text":"使用方法","anchor":"使用方法","htmlText":"使用方法"},{"level":2,"text":"主动安全(苏标)扩展 JT808 协议消息对照表","anchor":"主动安全苏标扩展-jt808-协议消息对照表","htmlText":"主动安全(苏标)扩展 JT808 协议消息对照表"},{"level":2,"text":"使用方法","anchor":"使用方法-1","htmlText":"使用方法"},{"level":2,"text":"主动安全(粤标)扩展 JT808 协议消息对照表","anchor":"主动安全粤标扩展-jt808-协议消息对照表","htmlText":"主动安全(粤标)扩展 JT808 协议消息对照表"},{"level":2,"text":"使用方法","anchor":"使用方法-2","htmlText":"使用方法"}],"siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2FSmallChi%2FJT808"}},{"displayName":"LICENSE","repoName":"JT808","refName":"master","path":"LICENSE","preferredFileType":"license","tabName":"MIT","richText":null,"loaded":false,"timedOut":false,"errorMessage":null,"headerInfo":{"toc":null,"siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2FSmallChi%2FJT808"}}],"overviewFilesProcessingTime":0}},"appPayload":{"helpUrl":"https://docs.github.com","findFileWorkerPath":"/assets-cdn/worker/find-file-worker-7d7eb7c71814.js","findInFileWorkerPath":"/assets-cdn/worker/find-in-file-worker-708ec8ade250.js","githubDevUrl":null,"enabled_features":{"copilot_workspace":null,"code_nav_ui_events":false,"overview_shared_code_dropdown_button":true,"react_blob_overlay":false,"accessible_code_button":true,"github_models_repo_integration":false}}}}</script> <div data-target="react-partial.reactRoot"><style data-styled="true" data-styled-version="5.3.11">.iVEunk{margin-top:16px;margin-bottom:16px;}/*!sc*/ .jzuOtQ{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;}/*!sc*/ .bGojzy{margin-bottom:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;row-gap:16px;}/*!sc*/ .iNSVHo{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding-bottom:16px;padding-top:8px;}/*!sc*/ .bVgnfw{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;gap:8px;}/*!sc*/ @media screen and (max-width:320px){.bVgnfw{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}}/*!sc*/ .CEgMp{position:relative;}/*!sc*/ @media screen and (max-width:380px){.CEgMp .ref-selector-button-text-container{max-width:80px;}}/*!sc*/ @media screen and (max-width:320px){.CEgMp{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}.CEgMp .overview-ref-selector{width:100%;}.CEgMp .overview-ref-selector > span{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;}.CEgMp .overview-ref-selector > span > span[data-component="text"]{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}}/*!sc*/ .gMOVLe[data-size="medium"]{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;min-width:0;}/*!sc*/ .gMOVLe[data-size="medium"] svg{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .gMOVLe[data-size="medium"] > span{width:inherit;}/*!sc*/ .gUkoLg{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;}/*!sc*/ .bZBlpz{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;}/*!sc*/ .lhTYNA{margin-right:4px;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .ffLUq{font-size:14px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}/*!sc*/ .bmcJak{min-width:0;}/*!sc*/ .fLXEGX{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ @media screen and (max-width:1079px){.fLXEGX{display:none;}}/*!sc*/ .lmSMZJ[data-size="medium"]{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));padding-left:4px;padding-right:4px;}/*!sc*/ .lmSMZJ[data-size="medium"] span[data-component="leadingVisual"]{margin-right:4px !important;}/*!sc*/ .dqfxud{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ @media screen and (min-width:1080px){.dqfxud{display:none;}}/*!sc*/ @media screen and (max-width:543px){.dqfxud{display:none;}}/*!sc*/ .fGwBZA[data-size="medium"][data-no-visuals]{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .jxTzTd{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-left:8px;gap:8px;}/*!sc*/ .gqqBXN{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;gap:8px;}/*!sc*/ @media screen and (max-width:543px){.gqqBXN{display:none;}}/*!sc*/ .dzXgxt{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ @media screen and (max-width:1011px){.dzXgxt{display:none;}}/*!sc*/ .iWFGlI{margin-left:8px;margin-right:8px;margin:0;}/*!sc*/ .vcvyP{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;min-width:160px;}/*!sc*/ .YUPas{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ @media screen and (min-width:1012px){.YUPas{display:none;}}/*!sc*/ .izFOf{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ @media screen and (min-width:544px){.izFOf{display:none;}}/*!sc*/ .vIPPs{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:16px;}/*!sc*/ .fdROMU{width:100%;border-collapse:separate;border-spacing:0;border:1px solid;border-color:var(--borderColor-default,var(--color-border-default,#d0d7de));border-radius:6px;table-layout:fixed;overflow:unset;}/*!sc*/ .jGKpsv{height:0px;line-height:0px;}/*!sc*/ .jGKpsv tr{height:0px;font-size:0px;}/*!sc*/ .jdgHnn{padding:16px;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));font-size:12px;text-align:left;height:40px;}/*!sc*/ .jdgHnn th{padding-left:16px;background-color:var(--bgColor-muted,var(--color-canvas-subtle,#f6f8fa));}/*!sc*/ .bQivRW{width:100%;border-top-left-radius:6px;}/*!sc*/ @media screen and (min-width:544px){.bQivRW{display:none;}}/*!sc*/ .ldkMIO{width:40%;border-top-left-radius:6px;}/*!sc*/ @media screen and (max-width:543px){.ldkMIO{display:none;}}/*!sc*/ .jMbWeI{text-align:right;padding-right:16px;width:136px;border-top-right-radius:6px;}/*!sc*/ .gpqjiB{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));font-size:12px;height:40px;}/*!sc*/ .dzCJzi{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;min-width:273px;padding:8px;}/*!sc*/ @media screen and (min-width:544px){.dzCJzi{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;}}/*!sc*/ .eNCcrz{text-align:center;vertical-align:center;height:40px;border-top:1px solid;border-color:var(--borderColor-default,var(--color-border-default,#d0d7de));}/*!sc*/ .bHTcCe{border-top:1px solid var(--borderColor-default,var(--color-border-default));cursor:pointer;}/*!sc*/ .csrIcr{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;gap:16px;}/*!sc*/ .bUQNHB{border:1px solid;border-color:var(--borderColor-default,var(--color-border-default,#d0d7de));border-radius:6px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}/*!sc*/ @media screen and (max-width:543px){.bUQNHB{margin-left:-16px;margin-right:-16px;max-width:calc(100% + 32px);}}/*!sc*/ @media screen and (min-width:544px){.bUQNHB{max-width:100%;}}/*!sc*/ .jPdcfu{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;border-bottom:1px solid;border-bottom-color:var(--borderColor-default,var(--color-border-default,#d0d7de));-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-right:8px;position:-webkit-sticky;position:sticky;top:0;background-color:var(--bgColor-default,var(--color-canvas-default,#ffffff));z-index:1;border-top-left-radius:6px;border-top-right-radius:6px;}/*!sc*/ .iphEWz{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;border-bottom:none;max-width:100%;padding-left:8px;padding-right:8px;}/*!sc*/ .hUCRAk{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}/*!sc*/ .cwoBXV[data-size="medium"]{color:var(--fgColor-muted,var(--color-fg-subtle,#6e7781));padding-left:8px;padding-right:8px;}/*!sc*/ .QkQOb{padding:32px;overflow:auto;}/*!sc*/ data-styled.g1[id="Box-sc-g0xbh4-0"]{content:"iVEunk,jzuOtQ,bGojzy,iNSVHo,bVgnfw,CEgMp,gMOVLe,gUkoLg,bZBlpz,lhTYNA,ffLUq,bmcJak,fLXEGX,lmSMZJ,dqfxud,fGwBZA,jxTzTd,gqqBXN,dzXgxt,iWFGlI,vcvyP,YUPas,izFOf,vIPPs,fdROMU,jGKpsv,jdgHnn,bQivRW,ldkMIO,jMbWeI,gpqjiB,dzCJzi,eNCcrz,bHTcCe,csrIcr,bUQNHB,jPdcfu,iphEWz,hUCRAk,cwoBXV,QkQOb,"}/*!sc*/ .brGdpi{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;-webkit-clip:rect(0,0,0,0);clip:rect(0,0,0,0);white-space:nowrap;border-width:0;}/*!sc*/ data-styled.g5[id="_VisuallyHidden__VisuallyHidden-sc-11jhm7a-0"]{content:"brGdpi,"}/*!sc*/ .hWlpPn{position:relative;display:inline-block;}/*!sc*/ .hWlpPn::after{position:absolute;z-index:1000000;display:none;padding:0.5em 0.75em;font:normal normal 11px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";-webkit-font-smoothing:subpixel-antialiased;color:var(--tooltip-fgColor,var(--fgColor-onEmphasis,var(--color-fg-on-emphasis,#ffffff)));text-align:center;-webkit-text-decoration:none;text-decoration:none;text-shadow:none;text-transform:none;-webkit-letter-spacing:normal;-moz-letter-spacing:normal;-ms-letter-spacing:normal;letter-spacing:normal;word-wrap:break-word;white-space:pre;pointer-events:none;content:attr(aria-label);background:var(--tooltip-bgColor,var(--bgColor-emphasis,var(--color-neutral-emphasis-plus,#24292f)));border-radius:6px;opacity:0;}/*!sc*/ @-webkit-keyframes tooltip-appear{from{opacity:0;}to{opacity:1;}}/*!sc*/ @keyframes tooltip-appear{from{opacity:0;}to{opacity:1;}}/*!sc*/ .hWlpPn:hover::after,.hWlpPn:active::after,.hWlpPn:focus::after,.hWlpPn:focus-within::after{display:inline-block;-webkit-text-decoration:none;text-decoration:none;-webkit-animation-name:tooltip-appear;animation-name:tooltip-appear;-webkit-animation-duration:0.1s;animation-duration:0.1s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-animation-delay:0s;animation-delay:0s;}/*!sc*/ .hWlpPn.tooltipped-no-delay:hover::after,.hWlpPn.tooltipped-no-delay:active::after,.hWlpPn.tooltipped-no-delay:focus::after,.hWlpPn.tooltipped-no-delay:focus-within::after{-webkit-animation-delay:0s;animation-delay:0s;}/*!sc*/ .hWlpPn.tooltipped-multiline:hover::after,.hWlpPn.tooltipped-multiline:active::after,.hWlpPn.tooltipped-multiline:focus::after,.hWlpPn.tooltipped-multiline:focus-within::after{display:table-cell;}/*!sc*/ .hWlpPn.tooltipped-s::after,.hWlpPn.tooltipped-se::after,.hWlpPn.tooltipped-sw::after{top:100%;right:50%;margin-top:6px;}/*!sc*/ .hWlpPn.tooltipped-se::after{right:auto;left:50%;margin-left:-16px;}/*!sc*/ .hWlpPn.tooltipped-sw::after{margin-right:-16px;}/*!sc*/ .hWlpPn.tooltipped-n::after,.hWlpPn.tooltipped-ne::after,.hWlpPn.tooltipped-nw::after{right:50%;bottom:100%;margin-bottom:6px;}/*!sc*/ .hWlpPn.tooltipped-ne::after{right:auto;left:50%;margin-left:-16px;}/*!sc*/ .hWlpPn.tooltipped-nw::after{margin-right:-16px;}/*!sc*/ .hWlpPn.tooltipped-s::after,.hWlpPn.tooltipped-n::after{-webkit-transform:translateX(50%);-ms-transform:translateX(50%);transform:translateX(50%);}/*!sc*/ .hWlpPn.tooltipped-w::after{right:100%;bottom:50%;margin-right:6px;-webkit-transform:translateY(50%);-ms-transform:translateY(50%);transform:translateY(50%);}/*!sc*/ .hWlpPn.tooltipped-e::after{bottom:50%;left:100%;margin-left:6px;-webkit-transform:translateY(50%);-ms-transform:translateY(50%);transform:translateY(50%);}/*!sc*/ .hWlpPn.tooltipped-multiline::after{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:250px;word-wrap:break-word;white-space:pre-line;border-collapse:separate;}/*!sc*/ .hWlpPn.tooltipped-multiline.tooltipped-s::after,.hWlpPn.tooltipped-multiline.tooltipped-n::after{right:auto;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);}/*!sc*/ .hWlpPn.tooltipped-multiline.tooltipped-w::after,.hWlpPn.tooltipped-multiline.tooltipped-e::after{right:100%;}/*!sc*/ .hWlpPn.tooltipped-align-right-2::after{right:0;margin-right:0;}/*!sc*/ .hWlpPn.tooltipped-align-left-2::after{left:0;margin-left:0;}/*!sc*/ data-styled.g16[id="Tooltip__TooltipBase-sc-17tf59c-0"]{content:"hWlpPn,"}/*!sc*/ .liVpTx{display:inline-block;overflow:hidden;text-overflow:ellipsis;vertical-align:top;white-space:nowrap;max-width:125px;}/*!sc*/ data-styled.g18[id="Truncate__StyledTruncate-sc-23o1d2-0"]{content:"liVpTx,"}/*!sc*/ </style> <!-- --> <!-- --> <div class="Box-sc-g0xbh4-0 iVEunk"><div class="Box-sc-g0xbh4-0 jzuOtQ"><div class="Box-sc-g0xbh4-0 bGojzy"></div></div><div class="Box-sc-g0xbh4-0 iNSVHo"><div class="Box-sc-g0xbh4-0 bVgnfw"><div class="Box-sc-g0xbh4-0 CEgMp"><button type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="master branch" data-testid="anchor-button" class="Box-sc-g0xbh4-0 gMOVLe prc-Button-ButtonBase-c50BI overview-ref-selector width-full" data-loading="false" data-size="medium" data-variant="default" aria-describedby="branch-picker-repos-header-ref-selector-loading-announcement" id="branch-picker-repos-header-ref-selector"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 gUkoLg prc-Button-ButtonContent-HKbr-"><span data-component="text" class="prc-Button-Label-pTQ3x"><div class="Box-sc-g0xbh4-0 bZBlpz"><div class="Box-sc-g0xbh4-0 lhTYNA"><svg aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></div><div class="Box-sc-g0xbh4-0 ffLUq ref-selector-button-text-container"><span class="Box-sc-g0xbh4-0 bmcJak prc-Text-Text-0ima0"> <!-- -->master</span></div></div></span><span data-component="trailingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><button hidden="" data-hotkey-scope="read-only-cursor-text-area"></button></div><div class="Box-sc-g0xbh4-0 fLXEGX"><a style="--button-color:fg.muted" type="button" href="/SmallChi/JT808/branches" class="Box-sc-g0xbh4-0 lmSMZJ prc-Button-ButtonBase-c50BI" data-loading="false" data-size="medium" data-variant="invisible" aria-describedby=":Rclab:-loading-announcement"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 gUkoLg prc-Button-ButtonContent-HKbr-"><span data-component="leadingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></span><span data-component="text" class="prc-Button-Label-pTQ3x">Branches</span></span></a><a style="--button-color:fg.muted" type="button" href="/SmallChi/JT808/tags" class="Box-sc-g0xbh4-0 lmSMZJ prc-Button-ButtonBase-c50BI" data-loading="false" data-size="medium" data-variant="invisible" aria-describedby=":Rklab:-loading-announcement"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 gUkoLg prc-Button-ButtonContent-HKbr-"><span data-component="leadingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="octicon octicon-tag" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"></path></svg></span><span data-component="text" class="prc-Button-Label-pTQ3x">Tags</span></span></a></div><div class="Box-sc-g0xbh4-0 dqfxud"><a style="--button-color:fg.muted" type="button" aria-label="Go to Branches page" href="/SmallChi/JT808/branches" class="Box-sc-g0xbh4-0 fGwBZA prc-Button-ButtonBase-c50BI" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-describedby=":Relab:-loading-announcement"><svg aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></a><a style="--button-color:fg.muted" type="button" aria-label="Go to Tags page" href="/SmallChi/JT808/tags" class="Box-sc-g0xbh4-0 fGwBZA prc-Button-ButtonBase-c50BI" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-describedby=":Rmlab:-loading-announcement"><svg aria-hidden="true" focusable="false" class="octicon octicon-tag" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"></path></svg></a></div></div><div class="Box-sc-g0xbh4-0 jxTzTd"><div class="Box-sc-g0xbh4-0 gqqBXN"><div class="Box-sc-g0xbh4-0 dzXgxt"><!--$--><div class="Box-sc-g0xbh4-0 iWFGlI"><span class="Box-sc-g0xbh4-0 vcvyP TextInput-wrapper prc-components-TextInputWrapper-i1ofR prc-components-TextInputBaseWrapper-ueK9q" data-leading-visual="true" data-trailing-visual="true" aria-busy="false"><span class="TextInput-icon" id=":R2j5ab:" aria-hidden="true"><svg aria-hidden="true" focusable="false" class="octicon octicon-search" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg></span><input type="text" aria-label="Go to file" role="combobox" aria-controls="file-results-list" aria-expanded="false" aria-haspopup="dialog" autoCorrect="off" spellcheck="false" placeholder="Go to file" aria-describedby=":R2j5ab: :R2j5abH1:" data-component="input" class="prc-components-Input-Ic-y8" value=""/><span class="TextInput-icon" id=":R2j5abH1:" aria-hidden="true"></span></span></div><!--/$--></div><div class="Box-sc-g0xbh4-0 YUPas"><button type="button" class="prc-Button-ButtonBase-c50BI" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":Rr5ab:-loading-announcement"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-HKbr-"><span data-component="text" class="prc-Button-Label-pTQ3x">Go to file</span></span></button></div><div class="react-directory-add-file-icon"></div><div class="react-directory-remove-file-icon"></div></div><button type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-c50BI" data-loading="false" data-size="medium" data-variant="primary" aria-describedby=":R55ab:-loading-announcement" id=":R55ab:"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-HKbr-"><span data-component="leadingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="octicon octicon-code hide-sm" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></span><span data-component="text" class="prc-Button-Label-pTQ3x">Code</span><span data-component="trailingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="Box-sc-g0xbh4-0 izFOf"><button data-component="IconButton" type="button" aria-label="Open more actions menu" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":R75ab:-loading-announcement" id=":R75ab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button></div></div></div><div class="Box-sc-g0xbh4-0 vIPPs"><div data-hpc="true"><button hidden="" data-testid="focus-next-element-button" data-hotkey="j"></button><button hidden="" data-testid="focus-previous-element-button" data-hotkey="k"></button><h2 class="sr-only ScreenReaderHeading-module__userSelectNone--vW4Cq prc-Heading-Heading-6CmGO" data-testid="screen-reader-heading" id="folders-and-files">Folders and files</h2><table aria-labelledby="folders-and-files" class="Box-sc-g0xbh4-0 fdROMU"><thead class="Box-sc-g0xbh4-0 jGKpsv"><tr class="Box-sc-g0xbh4-0 jdgHnn"><th colSpan="2" class="Box-sc-g0xbh4-0 bQivRW"><span class="text-bold">Name</span></th><th colSpan="1" class="Box-sc-g0xbh4-0 ldkMIO"><span class="text-bold">Name</span></th><th class="hide-sm"><div title="Last commit message" class="Truncate__StyledTruncate-sc-23o1d2-0 liVpTx width-fit"><span class="text-bold">Last commit message</span></div></th><th colSpan="1" class="Box-sc-g0xbh4-0 jMbWeI"><div title="Last commit date" class="Truncate__StyledTruncate-sc-23o1d2-0 liVpTx width-fit"><span class="text-bold">Last commit date</span></div></th></tr></thead><tbody><tr class="Box-sc-g0xbh4-0 gpqjiB"><td colSpan="3" class="bgColor-muted p-1 rounded-top-2"><div class="Box-sc-g0xbh4-0 dzCJzi"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone--vW4Cq prc-Heading-Heading-6CmGO" data-testid="screen-reader-heading">Latest commit</h2><div style="width:120px" class="Skeleton Skeleton--text" data-testid="loading"> </div><div class="d-flex flex-shrink-0 gap-2"><div data-testid="latest-commit-details" class="d-none d-sm-flex flex-items-center"></div><div class="d-flex gap-2"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone--vW4Cq prc-Heading-Heading-6CmGO" data-testid="screen-reader-heading">History</h2><a href="/SmallChi/JT808/commits/master/" class="prc-Button-ButtonBase-c50BI d-none d-lg-flex LinkButton-module__code-view-link-button--xvCGA flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible" aria-describedby=":Raqj8pab:-loading-announcement"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-HKbr-"><span data-component="leadingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span><span data-component="text" class="prc-Button-Label-pTQ3x"><span class="fgColor-default">252 Commits</span></span></span></a><div class="d-sm-none"></div><div class="d-flex d-lg-none"><span role="tooltip" aria-label="252 Commits" id="history-icon-button-tooltip" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-n"><a href="/SmallChi/JT808/commits/master/" class="prc-Button-ButtonBase-c50BI LinkButton-module__code-view-link-button--xvCGA flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible" aria-describedby=":R1iqj8pab:-loading-announcement history-icon-button-tooltip"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-HKbr-"><span data-component="leadingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span></span></a></span></div></div></div></div></td></tr><tr class="react-directory-row undefined" id="folder-row-0"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-directory-fill icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="This path skips through empty directories" aria-label=".github/workflows, (Directory)" class="Link--primary" href="/SmallChi/JT808/tree/master/.github/workflows"><span class="react-directory-default-color" data-testid="path-name-segment">.github/</span><span class="" data-testid="path-name-segment">workflows</span></a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-directory-fill icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="This path skips through empty directories" aria-label=".github/workflows, (Directory)" class="Link--primary" href="/SmallChi/JT808/tree/master/.github/workflows"><span class="react-directory-default-color" data-testid="path-name-segment">.github/</span><span class="" data-testid="path-name-segment">workflows</span></a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-1"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-directory-fill icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".vscode" aria-label=".vscode, (Directory)" class="Link--primary" href="/SmallChi/JT808/tree/master/.vscode">.vscode</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-directory-fill icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".vscode" aria-label=".vscode, (Directory)" class="Link--primary" href="/SmallChi/JT808/tree/master/.vscode">.vscode</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-2"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-directory-fill icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="src" aria-label="src, (Directory)" class="Link--primary" href="/SmallChi/JT808/tree/master/src">src</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-directory-fill icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="src" aria-label="src, (Directory)" class="Link--primary" href="/SmallChi/JT808/tree/master/src">src</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-3"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".gitignore" aria-label=".gitignore, (File)" class="Link--primary" href="/SmallChi/JT808/blob/master/.gitignore">.gitignore</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".gitignore" aria-label=".gitignore, (File)" class="Link--primary" href="/SmallChi/JT808/blob/master/.gitignore">.gitignore</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-4"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="LICENSE" aria-label="LICENSE, (File)" class="Link--primary" href="/SmallChi/JT808/blob/master/LICENSE">LICENSE</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="LICENSE" aria-label="LICENSE, (File)" class="Link--primary" href="/SmallChi/JT808/blob/master/LICENSE">LICENSE</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-5"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="README.en.md" aria-label="README.en.md, (File)" class="Link--primary" href="/SmallChi/JT808/blob/master/README.en.md">README.en.md</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="README.en.md" aria-label="README.en.md, (File)" class="Link--primary" href="/SmallChi/JT808/blob/master/README.en.md">README.en.md</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-6"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="README.md" aria-label="README.md, (File)" class="Link--primary" href="/SmallChi/JT808/blob/master/README.md">README.md</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="README.md" aria-label="README.md, (File)" class="Link--primary" href="/SmallChi/JT808/blob/master/README.md">README.md</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-7"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="global.json" aria-label="global.json, (File)" class="Link--primary" href="/SmallChi/JT808/blob/master/global.json">global.json</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="global.json" aria-label="global.json, (File)" class="Link--primary" href="/SmallChi/JT808/blob/master/global.json">global.json</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-8"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="publish.bat" aria-label="publish.bat, (File)" class="Link--primary" href="/SmallChi/JT808/blob/master/publish.bat">publish.bat</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="publish.bat" aria-label="publish.bat, (File)" class="Link--primary" href="/SmallChi/JT808/blob/master/publish.bat">publish.bat</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="Box-sc-g0xbh4-0 eNCcrz d-none" data-testid="view-all-files-row"><td colSpan="3" class="Box-sc-g0xbh4-0 bHTcCe"><div><button class="prc-Link-Link-85e08">View all files</button></div></td></tr></tbody></table></div><div class="Box-sc-g0xbh4-0 csrIcr"><div class="Box-sc-g0xbh4-0 bUQNHB"><div itemscope="" itemType="https://schema.org/abstract" class="Box-sc-g0xbh4-0 jPdcfu"><h2 class="_VisuallyHidden__VisuallyHidden-sc-11jhm7a-0 brGdpi">Repository files navigation</h2><nav class="Box-sc-g0xbh4-0 iphEWz prc-components-UnderlineWrapper-oOh5J" aria-label="Repository files"><ul class="prc-components-UnderlineItemList-b23Hf" role="list"><li class="Box-sc-g0xbh4-0 hUCRAk"><a class="prc-components-UnderlineItem-lJsg-" href="#" aria-current="page"><span data-component="icon"><svg aria-hidden="true" focusable="false" class="octicon octicon-book" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"></path></svg></span><span data-component="text" data-content="README">README</span></a></li><li class="Box-sc-g0xbh4-0 hUCRAk"><a class="prc-components-UnderlineItem-lJsg-" href="#"><span data-component="icon"><svg aria-hidden="true" focusable="false" class="octicon octicon-law" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8.75.75V2h.985c.304 0 .603.08.867.231l1.29.736c.038.022.08.033.124.033h2.234a.75.75 0 0 1 0 1.5h-.427l2.111 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.006.005-.01.01-.045.04c-.21.176-.441.327-.686.45C14.556 10.78 13.88 11 13 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L12.178 4.5h-.162c-.305 0-.604-.079-.868-.231l-1.29-.736a.245.245 0 0 0-.124-.033H8.75V13h2.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1 0-1.5h2.5V3.5h-.984a.245.245 0 0 0-.124.033l-1.289.737c-.265.15-.564.23-.869.23h-.162l2.112 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.016.015-.045.04c-.21.176-.441.327-.686.45C4.556 10.78 3.88 11 3 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L2.178 4.5H1.75a.75.75 0 0 1 0-1.5h2.234a.249.249 0 0 0 .125-.033l1.288-.737c.265-.15.564-.23.869-.23h.984V.75a.75.75 0 0 1 1.5 0Zm2.945 8.477c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L13 6.327Zm-10 0c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L3 6.327Z"></path></svg></span><span data-component="text" data-content="MIT license">MIT license</span></a></li></ul></nav><button style="--button-color:fg.subtle" type="button" aria-label="Outline" aria-haspopup="true" aria-expanded="false" tabindex="0" class="Box-sc-g0xbh4-0 cwoBXV prc-Button-ButtonBase-c50BI" data-loading="false" data-size="medium" data-variant="invisible" aria-describedby=":Rr9ab:-loading-announcement" id=":Rr9ab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-list-unordered" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M5.75 2.5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5ZM2 14a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm1-6a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM2 4a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg></button></div><div class="Box-sc-g0xbh4-0 QkQOb js-snippet-clipboard-copy-unpositioned undefined" data-hpc="true"><article class="markdown-body entry-content container-lg" itemprop="text"><div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">JT/T808 协议</h1><a id="user-content-jtt808-协议" class="anchor" aria-label="Permalink: JT/T808 协议" href="#jtt808-协议"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto"><a href="https://github.com/SmallChi/JT808/blob/master/LICENSE"><img src="https://camo.githubusercontent.com/e581ac49b7e1e99fb951242be63f6fdc6ebbc20c89a97fca0de99e1f2e6ae87e/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6d6173686170652f6170697374617475732e737667" alt="MIT Licence" data-canonical-src="https://img.shields.io/github/license/mashape/apistatus.svg" style="max-width: 100%;"></a></p> <p dir="auto"> <span>中文</span> | <a href="/SmallChi/JT808/blob/master/README.en.md">English</a> </p> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">前提条件</h2><a id="user-content-前提条件" class="anchor" aria-label="Permalink: 前提条件" href="#前提条件"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ol dir="auto"> <li>掌握进制转换:二进制转十六进制;</li> <li>掌握 BCD 编码、Hex 编码;</li> <li>掌握各种位移、异或;</li> <li>掌握常用反射;</li> <li>掌握 JObject 的用法;</li> <li>掌握快速 ctrl+c、ctrl+v;</li> <li>掌握 Span<T>的基本用法</li> <li>掌握以上装逼技能,就可以开始搬砖了。</li> </ol> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">JT808 数据结构解析</h2><a id="user-content-jt808-数据结构解析" class="anchor" aria-label="Permalink: JT808 数据结构解析" href="#jt808-数据结构解析"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">数据包[JT808Package]</h3><a id="user-content-数据包jt808package" class="anchor" aria-label="Permalink: 数据包[JT808Package]" href="#数据包jt808package"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th align="center">头标识</th> <th align="center">数据头</th> <th align="center">数据体/分包数据体</th> <th align="center">校验码</th> <th align="center">尾标识</th> </tr> </thead> <tbody> <tr> <td align="center">Begin</td> <td align="center">JT808Header</td> <td align="center">JT808Bodies/JT808SubDataBodies</td> <td align="center">CheckCode</td> <td align="center">End</td> </tr> <tr> <td align="center">7E</td> <td align="center">-</td> <td align="center">-</td> <td align="center">-</td> <td align="center">7E</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">数据头[JT808Header]</h3><a id="user-content-数据头jt808header" class="anchor" aria-label="Permalink: 数据头[JT808Header]" href="#数据头jt808header"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th align="center">消息 ID</th> <th align="center">消息体属性</th> <th align="center">协议版本号(2019 版本)</th> <th align="center">终端手机号</th> <th align="center">消息流水号</th> <th align="center">消息总包数(依赖是否分包)</th> <th align="center">包序号(依赖是否分包)</th> </tr> </thead> <tbody> <tr> <td align="center">MsgId</td> <td align="center">JT808HeaderMessageBodyProperty</td> <td align="center">ProtocolVersion</td> <td align="center">TerminalPhoneNo</td> <td align="center">MsgNum</td> <td align="center">PackgeCount</td> <td align="center">PackageIndex</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">数据头-消息体属性[JT808HeaderMessageBodyProperty]</h4><a id="user-content-数据头-消息体属性jt808headermessagebodyproperty" class="anchor" aria-label="Permalink: 数据头-消息体属性[JT808HeaderMessageBodyProperty]" href="#数据头-消息体属性jt808headermessagebodyproperty"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th align="center">版本标识(2019 版本)</th> <th align="center">是否分包</th> <th align="center">加密标识</th> <th align="center">消息体长度</th> </tr> </thead> <tbody> <tr> <td align="center">VersionFlag</td> <td align="center">IsPackge</td> <td align="center">Encrypt</td> <td align="center">DataLength</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">消息体属性[JT808Bodies]</h4><a id="user-content-消息体属性jt808bodies" class="anchor" aria-label="Permalink: 消息体属性[JT808Bodies]" href="#消息体属性jt808bodies"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <blockquote> <p dir="auto">根据对应消息 ID:MsgId</p> </blockquote> <p dir="auto"><strong><em>注意:数据内容(除去头和尾标识)进行转义判断</em></strong></p> <p dir="auto">转义规则如下:</p> <ol dir="auto"> <li>若数据内容中有出现字符 0x7e 的,需替换为字符 0x7d 紧跟字符 0x02;</li> <li>若数据内容中有出现字符 0x7d 的,需替换为字符 0x7d 紧跟字符 0x01;</li> </ol> <p dir="auto">反转义的原因:确认 JT808 协议的 TCP 消息边界。</p> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">举个栗子 1</h3><a id="user-content-举个栗子-1" class="anchor" aria-label="Permalink: 举个栗子 1" href="#举个栗子-1"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">1.组包:</h4><a id="user-content-1组包" class="anchor" aria-label="Permalink: 1.组包:" href="#1组包"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <blockquote> <p dir="auto">MsgId 0x0200:位置信息汇报</p> </blockquote> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content=" JT808Package jT808Package = new JT808Package(); jT808Package.Header = new JT808Header { MsgId = (ushort)JT808.Protocol.Enums.JT808MsgId._0x0200, ManualMsgNum = 126, TerminalPhoneNo = "123456789012" }; JT808_0x0200 jT808_0x0200 = new JT808_0x0200(); jT808_0x0200.AlarmFlag = 1; jT808_0x0200.Altitude = 40; jT808_0x0200.GPSTime = DateTime.Parse("2018-10-15 10:10:10"); jT808_0x0200.Lat = 12222222; jT808_0x0200.Lng = 132444444; jT808_0x0200.Speed = 60; jT808_0x0200.Direction = 0; jT808_0x0200.StatusFlag = 2; jT808_0x0200.BasicLocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>(); jT808_0x0200.BasicLocationAttachData.Add(JT808Constants.JT808_0x0200_0x01, new JT808_0x0200_0x01 { Mileage = 100 }); jT808_0x0200.BasicLocationAttachData.Add(JT808Constants.JT808_0x0200_0x02, new JT808_0x0200_0x02 { Oil = 125 }); jT808Package.Bodies = jT808_0x0200; byte[] data = JT808Serializer.Serialize(jT808Package); var hex = data.ToHexString(); // 输出结果Hex: // 7E 02 00 00 26 12 34 56 78 90 12 00 7D 02 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 7D 01 13 7E"><pre><span class="pl-smi">JT808Package</span> <span class="pl-s1">jT808Package</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-smi">JT808Package</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">jT808Package</span><span class="pl-kos">.</span><span class="pl-s1">Header</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-smi">JT808Header</span> <span class="pl-kos">{</span> <span class="pl-s1">MsgId</span> <span class="pl-c1">=</span> <span class="pl-kos">(</span><span class="pl-smi">ushort</span><span class="pl-kos">)</span><span class="pl-s1">JT808</span><span class="pl-kos">.</span><span class="pl-s1">Protocol</span><span class="pl-kos">.</span><span class="pl-s1">Enums</span><span class="pl-kos">.</span><span class="pl-s1">JT808MsgId</span><span class="pl-kos">.</span><span class="pl-s1">_0x0200</span><span class="pl-kos">,</span> <span class="pl-s1">ManualMsgNum</span> <span class="pl-c1">=</span> <span class="pl-c1">126</span><span class="pl-kos">,</span> <span class="pl-s1">TerminalPhoneNo</span> <span class="pl-c1">=</span> <span class="pl-s">"123456789012"</span> <span class="pl-kos">}</span><span class="pl-kos">;</span> <span class="pl-smi">JT808_0x0200</span> <span class="pl-s1">jT808_0x0200</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-smi">JT808_0x0200</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">jT808_0x0200</span><span class="pl-kos">.</span><span class="pl-s1">AlarmFlag</span> <span class="pl-c1">=</span> <span class="pl-c1">1</span><span class="pl-kos">;</span> <span class="pl-s1">jT808_0x0200</span><span class="pl-kos">.</span><span class="pl-s1">Altitude</span> <span class="pl-c1">=</span> <span class="pl-c1">40</span><span class="pl-kos">;</span> <span class="pl-s1">jT808_0x0200</span><span class="pl-kos">.</span><span class="pl-s1">GPSTime</span> <span class="pl-c1">=</span> <span class="pl-s1">DateTime</span><span class="pl-kos">.</span><span class="pl-en">Parse</span><span class="pl-kos">(</span><span class="pl-s">"2018-10-15 10:10:10"</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">jT808_0x0200</span><span class="pl-kos">.</span><span class="pl-s1">Lat</span> <span class="pl-c1">=</span> <span class="pl-c1">12222222</span><span class="pl-kos">;</span> <span class="pl-s1">jT808_0x0200</span><span class="pl-kos">.</span><span class="pl-s1">Lng</span> <span class="pl-c1">=</span> <span class="pl-c1">132444444</span><span class="pl-kos">;</span> <span class="pl-s1">jT808_0x0200</span><span class="pl-kos">.</span><span class="pl-s1">Speed</span> <span class="pl-c1">=</span> <span class="pl-c1">60</span><span class="pl-kos">;</span> <span class="pl-s1">jT808_0x0200</span><span class="pl-kos">.</span><span class="pl-s1">Direction</span> <span class="pl-c1">=</span> <span class="pl-c1">0</span><span class="pl-kos">;</span> <span class="pl-s1">jT808_0x0200</span><span class="pl-kos">.</span><span class="pl-s1">StatusFlag</span> <span class="pl-c1">=</span> <span class="pl-c1">2</span><span class="pl-kos">;</span> <span class="pl-s1">jT808_0x0200</span><span class="pl-kos">.</span><span class="pl-s1">BasicLocationAttachData</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-smi">Dictionary</span><span class="pl-c1"><</span><span class="pl-smi">byte</span><span class="pl-kos">,</span> <span class="pl-smi">JT808_0x0200_BodyBase</span><span class="pl-c1">></span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">jT808_0x0200</span><span class="pl-kos">.</span><span class="pl-s1">BasicLocationAttachData</span><span class="pl-kos">.</span><span class="pl-en">Add</span><span class="pl-kos">(</span><span class="pl-s1">JT808Constants</span><span class="pl-kos">.</span><span class="pl-s1">JT808_0x0200_0x01</span><span class="pl-kos">,</span> <span class="pl-k">new</span> <span class="pl-smi">JT808_0x0200_0x01</span> <span class="pl-kos">{</span> <span class="pl-s1">Mileage</span> <span class="pl-c1">=</span> <span class="pl-c1">100</span> <span class="pl-kos">}</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">jT808_0x0200</span><span class="pl-kos">.</span><span class="pl-s1">BasicLocationAttachData</span><span class="pl-kos">.</span><span class="pl-en">Add</span><span class="pl-kos">(</span><span class="pl-s1">JT808Constants</span><span class="pl-kos">.</span><span class="pl-s1">JT808_0x0200_0x02</span><span class="pl-kos">,</span> <span class="pl-k">new</span> <span class="pl-smi">JT808_0x0200_0x02</span> <span class="pl-kos">{</span> <span class="pl-s1">Oil</span> <span class="pl-c1">=</span> <span class="pl-c1">125</span> <span class="pl-kos">}</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">jT808Package</span><span class="pl-kos">.</span><span class="pl-s1">Bodies</span> <span class="pl-c1">=</span> <span class="pl-s1">jT808_0x0200</span><span class="pl-kos">;</span> <span class="pl-smi">byte</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-s1">data</span> <span class="pl-c1">=</span> <span class="pl-s1">JT808Serializer</span><span class="pl-kos">.</span><span class="pl-en">Serialize</span><span class="pl-kos">(</span><span class="pl-s1">jT808Package</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">var</span> <span class="pl-s1">hex</span> <span class="pl-c1">=</span> <span class="pl-s1">data</span><span class="pl-kos">.</span><span class="pl-en">ToHexString</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">// 输出结果Hex:</span> <span class="pl-c">// 7E 02 00 00 26 12 34 56 78 90 12 00 7D 02 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 7D 01 13 7E</span></pre></div> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">2.手动解包:</h4><a id="user-content-2手动解包" class="anchor" aria-label="Permalink: 2.手动解包:" href="#2手动解包"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="1.原包: 7E 02 00 00 26 12 34 56 78 90 12 00 (7D 02) 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 (7D 01) 13 7E 2.进行反转义 7D 02 ->7E 7D 01 ->7D 反转义后 7E 02 00 00 26 12 34 56 78 90 12 00 7E 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 7D 13 7E 3.拆解 7E --头标识 02 00 --数据头->消息ID 00 26 --数据头->消息体属性 12 34 56 78 90 12 --数据头->终端手机号 00 7E --数据头->消息流水号 00 00 00 01 --消息体->报警标志 00 00 00 02 --消息体->状态位标志 00 BA 7F 0E --消息体->纬度 07 E4 F1 1C --消息体->经度 00 28 --消息体->海拔高度 00 3C --消息体->速度 00 00 --消息体->方向 18 10 15 10 10 10 --消息体->GPS时间 01 --消息体->附加信息->里程 04 --消息体->附加信息->长度 00 00 00 64 --消息体->附加信息->数据 02 --消息体->附加信息->油量 02 --消息体->附加信息->长度 00 7D --消息体->附加信息->数据 13 --检验码 7E --尾标识"><pre lang="text" class="notranslate"><code>1.原包: 7E 02 00 00 26 12 34 56 78 90 12 00 (7D 02) 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 (7D 01) 13 7E 2.进行反转义 7D 02 ->7E 7D 01 ->7D 反转义后 7E 02 00 00 26 12 34 56 78 90 12 00 7E 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 7D 13 7E 3.拆解 7E --头标识 02 00 --数据头->消息ID 00 26 --数据头->消息体属性 12 34 56 78 90 12 --数据头->终端手机号 00 7E --数据头->消息流水号 00 00 00 01 --消息体->报警标志 00 00 00 02 --消息体->状态位标志 00 BA 7F 0E --消息体->纬度 07 E4 F1 1C --消息体->经度 00 28 --消息体->海拔高度 00 3C --消息体->速度 00 00 --消息体->方向 18 10 15 10 10 10 --消息体->GPS时间 01 --消息体->附加信息->里程 04 --消息体->附加信息->长度 00 00 00 64 --消息体->附加信息->数据 02 --消息体->附加信息->油量 02 --消息体->附加信息->长度 00 7D --消息体->附加信息->数据 13 --检验码 7E --尾标识 </code></pre></div> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">3.程序解包:</h4><a id="user-content-3程序解包" class="anchor" aria-label="Permalink: 3.程序解包:" href="#3程序解包"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="//1.转成byte数组 byte[] bytes = "7E 02 00 00 26 12 34 56 78 90 12 00 7D 02 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 7D 01 13 7E".ToHexBytes(); //2.将数组反序列化 var jT808Package = JT808Serializer.Deserialize(bytes); //3.数据包头 Assert.Equal(Enums.JT808MsgId._0x0200, jT808Package.Header.MsgId); Assert.Equal(38, jT808Package.Header.MessageBodyProperty.DataLength); Assert.Equal(126, jT808Package.Header.MsgNum); Assert.Equal("123456789012", jT808Package.Header.TerminalPhoneNo); Assert.False(jT808Package.Header.MessageBodyProperty.IsPackge); Assert.Equal(0, jT808Package.Header.PackageIndex); Assert.Equal(0, jT808Package.Header.PackgeCount); Assert.Equal(JT808EncryptMethod.None, jT808Package.Header.MessageBodyProperty.Encrypt); //4.数据包体 JT808_0x0200 jT808_0x0200 = (JT808_0x0200)jT808Package.Bodies; Assert.Equal((uint)1, jT808_0x0200.AlarmFlag); Assert.Equal((uint)40, jT808_0x0200.Altitude); Assert.Equal(DateTime.Parse("2018-10-15 10:10:10"), jT808_0x0200.GPSTime); Assert.Equal(12222222, jT808_0x0200.Lat); Assert.Equal(132444444, jT808_0x0200.Lng); Assert.Equal(60, jT808_0x0200.Speed); Assert.Equal(0, jT808_0x0200.Direction); Assert.Equal((uint)2, jT808_0x0200.StatusFlag); //4.1.附加信息1 Assert.Equal(100, ((JT808_0x0200_0x01)jT808_0x0200.BasicLocationAttachData[JT808Constants.JT808_0x0200_0x01]).Mileage); //4.2.附加信息2 Assert.Equal(125, ((JT808_0x0200_0x02)jT808_0x0200.BasicLocationAttachData[JT808Constants.JT808_0x0200_0x02]).Oil);"><pre><span class="pl-c">//1.转成byte数组</span> <span class="pl-smi">byte</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-s1">bytes</span> <span class="pl-c1">=</span> <span class="pl-s">"7E 02 00 00 26 12 34 56 78 90 12 00 7D 02 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 7D 01 13 7E"</span><span class="pl-kos">.</span><span class="pl-en">ToHexBytes</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">//2.将数组反序列化</span> <span class="pl-k">var</span> <span class="pl-s1">jT808Package</span> <span class="pl-c1">=</span> <span class="pl-s1">JT808Serializer</span><span class="pl-kos">.</span><span class="pl-en">Deserialize</span><span class="pl-kos">(</span><span class="pl-s1">bytes</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">//3.数据包头</span> <span class="pl-s1">Assert</span><span class="pl-kos">.</span><span class="pl-en">Equal</span><span class="pl-kos">(</span><span class="pl-s1">Enums</span><span class="pl-kos">.</span><span class="pl-s1">JT808MsgId</span><span class="pl-kos">.</span><span class="pl-s1">_0x0200</span><span class="pl-kos">,</span> <span class="pl-s1">jT808Package</span><span class="pl-kos">.</span><span class="pl-s1">Header</span><span class="pl-kos">.</span><span class="pl-s1">MsgId</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">Assert</span><span class="pl-kos">.</span><span class="pl-en">Equal</span><span class="pl-kos">(</span><span class="pl-c1">38</span><span class="pl-kos">,</span> <span class="pl-s1">jT808Package</span><span class="pl-kos">.</span><span class="pl-s1">Header</span><span class="pl-kos">.</span><span class="pl-s1">MessageBodyProperty</span><span class="pl-kos">.</span><span class="pl-s1">DataLength</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">Assert</span><span class="pl-kos">.</span><span class="pl-en">Equal</span><span class="pl-kos">(</span><span class="pl-c1">126</span><span class="pl-kos">,</span> <span class="pl-s1">jT808Package</span><span class="pl-kos">.</span><span class="pl-s1">Header</span><span class="pl-kos">.</span><span class="pl-s1">MsgNum</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">Assert</span><span class="pl-kos">.</span><span class="pl-en">Equal</span><span class="pl-kos">(</span><span class="pl-s">"123456789012"</span><span class="pl-kos">,</span> <span class="pl-s1">jT808Package</span><span class="pl-kos">.</span><span class="pl-s1">Header</span><span class="pl-kos">.</span><span class="pl-s1">TerminalPhoneNo</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">Assert</span><span class="pl-kos">.</span><span class="pl-en">False</span><span class="pl-kos">(</span><span class="pl-s1">jT808Package</span><span class="pl-kos">.</span><span class="pl-s1">Header</span><span class="pl-kos">.</span><span class="pl-s1">MessageBodyProperty</span><span class="pl-kos">.</span><span class="pl-s1">IsPackge</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">Assert</span><span class="pl-kos">.</span><span class="pl-en">Equal</span><span class="pl-kos">(</span><span class="pl-c1">0</span><span class="pl-kos">,</span> <span class="pl-s1">jT808Package</span><span class="pl-kos">.</span><span class="pl-s1">Header</span><span class="pl-kos">.</span><span class="pl-s1">PackageIndex</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">Assert</span><span class="pl-kos">.</span><span class="pl-en">Equal</span><span class="pl-kos">(</span><span class="pl-c1">0</span><span class="pl-kos">,</span> <span class="pl-s1">jT808Package</span><span class="pl-kos">.</span><span class="pl-s1">Header</span><span class="pl-kos">.</span><span class="pl-s1">PackgeCount</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">Assert</span><span class="pl-kos">.</span><span class="pl-en">Equal</span><span class="pl-kos">(</span><span class="pl-s1">JT808EncryptMethod</span><span class="pl-kos">.</span><span class="pl-s1">None</span><span class="pl-kos">,</span> <span class="pl-s1">jT808Package</span><span class="pl-kos">.</span><span class="pl-s1">Header</span><span class="pl-kos">.</span><span class="pl-s1">MessageBodyProperty</span><span class="pl-kos">.</span><span class="pl-s1">Encrypt</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">//4.数据包体</span> <span class="pl-smi">JT808_0x0200</span> <span class="pl-s1">jT808_0x0200</span> <span class="pl-c1">=</span> <span class="pl-kos">(</span><span class="pl-smi">JT808_0x0200</span><span class="pl-kos">)</span><span class="pl-s1">jT808Package</span><span class="pl-kos">.</span><span class="pl-s1">Bodies</span><span class="pl-kos">;</span> <span class="pl-s1">Assert</span><span class="pl-kos">.</span><span class="pl-en">Equal</span><span class="pl-kos">(</span><span class="pl-kos">(</span><span class="pl-smi">uint</span><span class="pl-kos">)</span><span class="pl-c1">1</span><span class="pl-kos">,</span> <span class="pl-s1">jT808_0x0200</span><span class="pl-kos">.</span><span class="pl-s1">AlarmFlag</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">Assert</span><span class="pl-kos">.</span><span class="pl-en">Equal</span><span class="pl-kos">(</span><span class="pl-kos">(</span><span class="pl-smi">uint</span><span class="pl-kos">)</span><span class="pl-c1">40</span><span class="pl-kos">,</span> <span class="pl-s1">jT808_0x0200</span><span class="pl-kos">.</span><span class="pl-s1">Altitude</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">Assert</span><span class="pl-kos">.</span><span class="pl-en">Equal</span><span class="pl-kos">(</span><span class="pl-s1">DateTime</span><span class="pl-kos">.</span><span class="pl-en">Parse</span><span class="pl-kos">(</span><span class="pl-s">"2018-10-15 10:10:10"</span><span class="pl-kos">)</span><span class="pl-kos">,</span> <span class="pl-s1">jT808_0x0200</span><span class="pl-kos">.</span><span class="pl-s1">GPSTime</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">Assert</span><span class="pl-kos">.</span><span class="pl-en">Equal</span><span class="pl-kos">(</span><span class="pl-c1">12222222</span><span class="pl-kos">,</span> <span class="pl-s1">jT808_0x0200</span><span class="pl-kos">.</span><span class="pl-s1">Lat</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">Assert</span><span class="pl-kos">.</span><span class="pl-en">Equal</span><span class="pl-kos">(</span><span class="pl-c1">132444444</span><span class="pl-kos">,</span> <span class="pl-s1">jT808_0x0200</span><span class="pl-kos">.</span><span class="pl-s1">Lng</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">Assert</span><span class="pl-kos">.</span><span class="pl-en">Equal</span><span class="pl-kos">(</span><span class="pl-c1">60</span><span class="pl-kos">,</span> <span class="pl-s1">jT808_0x0200</span><span class="pl-kos">.</span><span class="pl-s1">Speed</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">Assert</span><span class="pl-kos">.</span><span class="pl-en">Equal</span><span class="pl-kos">(</span><span class="pl-c1">0</span><span class="pl-kos">,</span> <span class="pl-s1">jT808_0x0200</span><span class="pl-kos">.</span><span class="pl-s1">Direction</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">Assert</span><span class="pl-kos">.</span><span class="pl-en">Equal</span><span class="pl-kos">(</span><span class="pl-kos">(</span><span class="pl-smi">uint</span><span class="pl-kos">)</span><span class="pl-c1">2</span><span class="pl-kos">,</span> <span class="pl-s1">jT808_0x0200</span><span class="pl-kos">.</span><span class="pl-s1">StatusFlag</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">//4.1.附加信息1</span> <span class="pl-s1">Assert</span><span class="pl-kos">.</span><span class="pl-en">Equal</span><span class="pl-kos">(</span><span class="pl-c1">100</span><span class="pl-kos">,</span> <span class="pl-kos">(</span><span class="pl-kos">(</span><span class="pl-smi">JT808_0x0200_0x01</span><span class="pl-kos">)</span><span class="pl-s1">jT808_0x0200</span><span class="pl-kos">.</span><span class="pl-s1">BasicLocationAttachData</span><span class="pl-kos">[</span><span class="pl-s1">JT808Constants</span><span class="pl-kos">.</span><span class="pl-s1">JT808_0x0200_0x01</span><span class="pl-kos">]</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-s1">Mileage</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">//4.2.附加信息2</span> <span class="pl-s1">Assert</span><span class="pl-kos">.</span><span class="pl-en">Equal</span><span class="pl-kos">(</span><span class="pl-c1">125</span><span class="pl-kos">,</span> <span class="pl-kos">(</span><span class="pl-kos">(</span><span class="pl-smi">JT808_0x0200_0x02</span><span class="pl-kos">)</span><span class="pl-s1">jT808_0x0200</span><span class="pl-kos">.</span><span class="pl-s1">BasicLocationAttachData</span><span class="pl-kos">[</span><span class="pl-s1">JT808Constants</span><span class="pl-kos">.</span><span class="pl-s1">JT808_0x0200_0x02</span><span class="pl-kos">]</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-s1">Oil</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">举个栗子 2</h3><a id="user-content-举个栗子-2" class="anchor" aria-label="Permalink: 举个栗子 2" href="#举个栗子-2"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="// 使用消息Id的扩展方法创建JT808Package包 JT808Package jT808Package = Enums.JT808MsgId._0x0200.Create("123456789012", new JT808_0x0200 { AlarmFlag = 1, Altitude = 40, GPSTime = DateTime.Parse("2018-10-15 10:10:10"), Lat = 12222222, Lng = 132444444, Speed = 60, Direction = 0, StatusFlag = 2, BasicLocationAttachData = new Dictionary<byte, JT808LocationAttachBase> { { JT808Constants.JT808_0x0200_0x01,new JT808_0x0200_0x01{Mileage = 100}}, { JT808Constants.JT808_0x0200_0x02,new JT808_0x0200_0x02{Oil = 125}} } }); byte[] data = JT808Serializer.Serialize(jT808Package); var hex = data.ToHexString(); //输出结果Hex: //7E 02 00 00 26 12 34 56 78 90 12 00 01 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 7D 01 6C 7E"><pre><span class="pl-c">// 使用消息Id的扩展方法创建JT808Package包</span> <span class="pl-smi">JT808Package</span> <span class="pl-s1">jT808Package</span> <span class="pl-c1">=</span> <span class="pl-s1">Enums</span><span class="pl-kos">.</span><span class="pl-s1">JT808MsgId</span><span class="pl-kos">.</span><span class="pl-s1">_0x0200</span><span class="pl-kos">.</span><span class="pl-en">Create</span><span class="pl-kos">(</span><span class="pl-s">"123456789012"</span><span class="pl-kos">,</span> <span class="pl-k">new</span> <span class="pl-smi">JT808_0x0200</span> <span class="pl-kos">{</span> <span class="pl-s1">AlarmFlag</span> <span class="pl-c1">=</span> <span class="pl-c1">1</span><span class="pl-kos">,</span> <span class="pl-s1">Altitude</span> <span class="pl-c1">=</span> <span class="pl-c1">40</span><span class="pl-kos">,</span> <span class="pl-s1">GPSTime</span> <span class="pl-c1">=</span> <span class="pl-s1">DateTime</span><span class="pl-kos">.</span><span class="pl-en">Parse</span><span class="pl-kos">(</span><span class="pl-s">"2018-10-15 10:10:10"</span><span class="pl-kos">)</span><span class="pl-kos">,</span> <span class="pl-s1">Lat</span> <span class="pl-c1">=</span> <span class="pl-c1">12222222</span><span class="pl-kos">,</span> <span class="pl-s1">Lng</span> <span class="pl-c1">=</span> <span class="pl-c1">132444444</span><span class="pl-kos">,</span> <span class="pl-s1">Speed</span> <span class="pl-c1">=</span> <span class="pl-c1">60</span><span class="pl-kos">,</span> <span class="pl-s1">Direction</span> <span class="pl-c1">=</span> <span class="pl-c1">0</span><span class="pl-kos">,</span> <span class="pl-s1">StatusFlag</span> <span class="pl-c1">=</span> <span class="pl-c1">2</span><span class="pl-kos">,</span> <span class="pl-s1">BasicLocationAttachData</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-smi">Dictionary</span><span class="pl-c1"><</span><span class="pl-smi">byte</span><span class="pl-kos">,</span> <span class="pl-smi">JT808LocationAttachBase</span><span class="pl-c1">></span> <span class="pl-kos">{</span> <span class="pl-kos">{</span> <span class="pl-s1">JT808Constants</span><span class="pl-kos">.</span><span class="pl-s1">JT808_0x0200_0x01</span><span class="pl-kos">,</span><span class="pl-k">new</span> <span class="pl-smi">JT808_0x0200_0x01</span><span class="pl-kos">{</span><span class="pl-s1">Mileage</span> <span class="pl-c1">=</span> <span class="pl-c1">100</span><span class="pl-kos">}</span><span class="pl-kos">}</span><span class="pl-kos">,</span> <span class="pl-kos">{</span> <span class="pl-s1">JT808Constants</span><span class="pl-kos">.</span><span class="pl-s1">JT808_0x0200_0x02</span><span class="pl-kos">,</span><span class="pl-k">new</span> <span class="pl-smi">JT808_0x0200_0x02</span><span class="pl-kos">{</span><span class="pl-s1">Oil</span> <span class="pl-c1">=</span> <span class="pl-c1">125</span><span class="pl-kos">}</span><span class="pl-kos">}</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-smi">byte</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-s1">data</span> <span class="pl-c1">=</span> <span class="pl-s1">JT808Serializer</span><span class="pl-kos">.</span><span class="pl-en">Serialize</span><span class="pl-kos">(</span><span class="pl-s1">jT808Package</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">var</span> <span class="pl-s1">hex</span> <span class="pl-c1">=</span> <span class="pl-s1">data</span><span class="pl-kos">.</span><span class="pl-en">ToHexString</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">//输出结果Hex:</span> <span class="pl-c">//7E 02 00 00 26 12 34 56 78 90 12 00 01 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 7D 01 6C 7E</span></pre></div> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">举个栗子 3</h3><a id="user-content-举个栗子-3" class="anchor" aria-label="Permalink: 举个栗子 3" href="#举个栗子-3"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="// 初始化配置 IJT808Config DT1JT808Config = new DT1Config(); IJT808Config DT2JT808Config = new DT2Config(); // 注册自定义消息外部程序集 DT1JT808Config.Register(Assembly.GetExecutingAssembly()); // 跳过校验和验证 DT1JT808Config.SkipCRCCode = true; // 根据不同的设备终端号,添加自定义消息Id DT1JT808Config.MsgIdFactory.SetMap<DT1Demo6>(); DT1JT808Config.FormatterFactory.SetMap<DT1Demo6>(); DT2JT808Config.MsgIdFactory.SetMap<DT2Demo6>(); DT2JT808Config.FormatterFactory.SetMap<DT2Demo6>(); // 初始化序列化实例 JT808Serializer DT1JT808Serializer = new JT808Serializer(DT1JT808Config); JT808Serializer DT2JT808Serializer = new JT808Serializer(DT2JT808Config);"><pre><span class="pl-c">// 初始化配置</span> <span class="pl-smi">IJT808Config</span> <span class="pl-s1">DT1JT808Config</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-smi">DT1Config</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-smi">IJT808Config</span> <span class="pl-s1">DT2JT808Config</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-smi">DT2Config</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">// 注册自定义消息外部程序集</span> <span class="pl-s1">DT1JT808Config</span><span class="pl-kos">.</span><span class="pl-en">Register</span><span class="pl-kos">(</span><span class="pl-s1">Assembly</span><span class="pl-kos">.</span><span class="pl-en">GetExecutingAssembly</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">// 跳过校验和验证</span> <span class="pl-s1">DT1JT808Config</span><span class="pl-kos">.</span><span class="pl-s1">SkipCRCCode</span> <span class="pl-c1">=</span> <span class="pl-c1">true</span><span class="pl-kos">;</span> <span class="pl-c">// 根据不同的设备终端号,添加自定义消息Id</span> <span class="pl-s1">DT1JT808Config</span><span class="pl-kos">.</span><span class="pl-s1">MsgIdFactory</span><span class="pl-kos">.</span><span class="pl-smi">SetMap</span><span class="pl-c1"><</span><span class="pl-smi">DT1Demo6</span><span class="pl-c1">></span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">DT1JT808Config</span><span class="pl-kos">.</span><span class="pl-s1">FormatterFactory</span><span class="pl-kos">.</span><span class="pl-smi">SetMap</span><span class="pl-c1"><</span><span class="pl-smi">DT1Demo6</span><span class="pl-c1">></span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">DT2JT808Config</span><span class="pl-kos">.</span><span class="pl-s1">MsgIdFactory</span><span class="pl-kos">.</span><span class="pl-smi">SetMap</span><span class="pl-c1"><</span><span class="pl-smi">DT2Demo6</span><span class="pl-c1">></span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">DT2JT808Config</span><span class="pl-kos">.</span><span class="pl-s1">FormatterFactory</span><span class="pl-kos">.</span><span class="pl-smi">SetMap</span><span class="pl-c1"><</span><span class="pl-smi">DT2Demo6</span><span class="pl-c1">></span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">// 初始化序列化实例</span> <span class="pl-smi">JT808Serializer</span> <span class="pl-s1">DT1JT808Serializer</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-smi">JT808Serializer</span><span class="pl-kos">(</span><span class="pl-s1">DT1JT808Config</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-smi">JT808Serializer</span> <span class="pl-s1">DT2JT808Serializer</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-smi">JT808Serializer</span><span class="pl-kos">(</span><span class="pl-s1">DT2JT808Config</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div> <p dir="auto"><a href="https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo6.cs">可以参考 Simples 的 Demo6</a></p> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">举个栗子 4</h3><a id="user-content-举个栗子-4" class="anchor" aria-label="Permalink: 举个栗子 4" href="#举个栗子-4"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">遇到的问题-多设备多协议的自定义位置附加信息</h4><a id="user-content-遇到的问题-多设备多协议的自定义位置附加信息" class="anchor" aria-label="Permalink: 遇到的问题-多设备多协议的自定义位置附加信息" href="#遇到的问题-多设备多协议的自定义位置附加信息"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">场景: 一个设备厂商对应多个设备类型,不同设备类型可能存在相同的自定义位置附加信息 Id,导致自定义附加信息 Id 冲突,无法解析。</p> <p dir="auto"><strong><em>解决方式:</em></strong></p> <p dir="auto">1.可以根据设备类型做个工厂,解耦对公共序列化器的依赖。</p> <p dir="auto">2.可以根据设备类型去实现(GlobalConfigBase)对应的配置,根据不同的 GlobalConfigBase 实例去绑定对应协议解析器。</p> <p dir="auto"><a href="https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo4.cs">可以参考 Simples 的 Demo4</a></p> <p dir="auto"><a href="https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo6.cs">可以参考 Simples 的 Demo6</a></p> <blockquote> <p dir="auto">要是哪位大佬还有其他的解决方式,请您告知我下,谢谢您了。</p> </blockquote> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">举个栗子 5</h3><a id="user-content-举个栗子-5" class="anchor" aria-label="Permalink: 举个栗子 5" href="#举个栗子-5"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">遇到的问题-多媒体数据上传进行分包处理</h4><a id="user-content-遇到的问题-多媒体数据上传进行分包处理" class="anchor" aria-label="Permalink: 遇到的问题-多媒体数据上传进行分包处理" href="#遇到的问题-多媒体数据上传进行分包处理"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">场景: 设备在上传多媒体数据的时候,由于数据比较多,一次上传不了,所以采用分包方式处理。</p> <p dir="auto"><strong><em>解决方式:</em></strong></p> <ol dir="auto"> <li> <p dir="auto">第一包数据上来采用平常的方式去解析数据;</p> </li> <li> <p dir="auto">当第二包上来跟第一包的分包数据体(SubDataBodies)进行合并</p> </li> <li> <p dir="auto">当 N 包数据上来,延续步骤 2 的方式。</p> </li> </ol> <blockquote> <p dir="auto">普及知识点 1:由于消息体长度最大为 10bit 也就是 1023 的字节,所以这边就有个硬性条件不能超过最大长度。</p> </blockquote> <blockquote> <p dir="auto">普及知识点 2:一般行业分包是按 256 的整数倍,太多不行,太少也不行,必须刚刚好。</p> </blockquote> <p dir="auto"><a href="https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo5.cs">可以参考 Simples 的 Demo5</a></p> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">举个栗子 6</h3><a id="user-content-举个栗子-6" class="anchor" aria-label="Permalink: 举个栗子 6" href="#举个栗子-6"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">遇到的问题-多设备多协议的消息 ID 冲突</h4><a id="user-content-遇到的问题-多设备多协议的消息-id-冲突" class="anchor" aria-label="Permalink: 遇到的问题-多设备多协议的消息 ID 冲突" href="#遇到的问题-多设备多协议的消息-id-冲突"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">场景: 由于每个设备厂商不同,导致设备的私有协议可能使用相同的消息 ID 作为指令,导致平台解析不了。</p> <p dir="auto"><strong><em>解决方式:</em></strong></p> <p dir="auto">可以根据设备类型去实现(GlobalConfigBase)对应的配置,根据不同的 GlobalConfigBase 实例去绑定对应协议解析器。</p> <p dir="auto"><a href="https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo6.cs">可以参考 Simples 的 Demo6</a></p> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">举个栗子 7</h3><a id="user-content-举个栗子-7" class="anchor" aria-label="Permalink: 举个栗子 7" href="#举个栗子-7"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">如何兼容 2019 版本</p> <blockquote> <p dir="auto">最新协议文档已经写好了如何做兼容,就是在消息体属性中第 14 位为版本标识。</p> </blockquote> <ol dir="auto"> <li> <p dir="auto">当第 14 位为 0 时,标识协议为 2011 年的版本;</p> </li> <li> <p dir="auto">当第 14 位为 1 时,标识协议为 2019 年的版本。</p> </li> </ol> <p dir="auto"><a href="https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo7.cs">可以参考 Simples 的 Demo7</a></p> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">举个栗子 8</h3><a id="user-content-举个栗子-8" class="anchor" aria-label="Permalink: 举个栗子 8" href="#举个栗子-8"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">协议分析器在数据出现异常和纠错的时候也是挺有用的,总不能凭借 24K 氪金眼去观察数据,那么可以在开发协议的同时就把协议分析器给写好,这样方便技术或者技术支持排查问题,提高效率。</p> <p dir="auto"><a href="https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo8.cs">可以参考 Simples 的 Demo8</a></p> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">举个栗子 9</h3><a id="user-content-举个栗子-9" class="anchor" aria-label="Permalink: 举个栗子 9" href="#举个栗子-9"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">增加行车记录仪序列化器,既可以单独的存在,也可以组装在 808 的数据包当中。</p> <p dir="auto"><a href="https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo9.cs">可以参考 Simples 的 Demo9</a></p> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">举个栗子 10</h3><a id="user-content-举个栗子-10" class="anchor" aria-label="Permalink: 举个栗子 10" href="#举个栗子-10"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">场景 1: 有些设备,不会按照国标的附加信息 Id 来搞,把附加信息 Id 搞为两个字节,这样在上报上来的数据就会存在重复的附加 Id,导致平台解析出错。</p> <p dir="auto">场景 2: 由于粤标的设备厂家自定义的附加信息长度可以为四 4 个字节的,所以需要兼容。</p> <p dir="auto">场景 3: 有些设备上报会出现两个相同的附加信息 Id,那么只能解析一个,另一个只能丢在异常附加信息里面去处理。</p> <markdown-accessiblity-table><table> <thead> <tr> <th align="left">附加信息类说明</th> <th align="center">附加 ID 字节数</th> <th align="center">附加长度字节数</th> <th align="center">备注</th> </tr> </thead> <tbody> <tr> <td align="left">JT808_0x0200_CustomBodyBase</td> <td align="center">1 BYTE</td> <td align="center">1 BYTE</td> <td align="center">标准</td> </tr> <tr> <td align="left">JT808_0x0200_CustomBodyBase2</td> <td align="center">2 BYTE</td> <td align="center">1 BYTE</td> <td align="center">自定义</td> </tr> <tr> <td align="left">JT808_0x0200_CustomBodyBase3</td> <td align="center">2 BYTE</td> <td align="center">2 BYTE</td> <td align="center">自定义</td> </tr> <tr> <td align="left">JT808_0x0200_CustomBodyBase4</td> <td align="center">1 BYTE</td> <td align="center">4 BYTE</td> <td align="center">自定义</td> </tr> </tbody> </table></markdown-accessiblity-table> <p dir="auto"><a href="https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo10.cs">可以参考 Simples 的 Demo10</a></p> <blockquote> <p dir="auto">注意:默认都是以<strong>标准</strong>的去解析,要是出现未知的附加,不一定解析就是正确,最好还是需要依照协议文档去开发然后自行注册解析器去解析。</p> </blockquote> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">举个栗子 11</h3><a id="user-content-举个栗子-11" class="anchor" aria-label="Permalink: 举个栗子 11" href="#举个栗子-11"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">场景: 有些设备,补报的定位数据有异常数据包内容长度跟原始的内容长度不一致导致整包的数据的解析出错,再设备不升级,改不了的情况下,尽量能解析多少补报的数据量,就解析多少。</p> <p dir="auto"><a href="https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo11.cs">可以参考 Simples 的 Demo11</a></p> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">举个栗子 12</h3><a id="user-content-举个栗子-12" class="anchor" aria-label="Permalink: 举个栗子 12" href="#举个栗子-12"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">场景: 由于粤标的设备把 2019 版本的 0x8105 终端控制消息命令参数做了扩展,所以需要兼容。</p> <p dir="auto"><a href="https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo12.cs">可以参考 Simples 的 Demo12</a></p> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">举个栗子 13</h3><a id="user-content-举个栗子-13" class="anchor" aria-label="Permalink: 举个栗子 13" href="#举个栗子-13"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">场景: 由于协议库本身可能存在消息解析出错的情况,要么就提 PR 上来,但是不一定会及时发布,这时候就需要自己把原有的消息解析复制出来,改造好,然后重新注册。</p> <p dir="auto"><a href="https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo13.cs">可以参考 Simples 的 Demo13</a></p> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">举个栗子 14</h3><a id="user-content-举个栗子-14" class="anchor" aria-label="Permalink: 举个栗子 14" href="#举个栗子-14"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">场景: 由于某些厂商不按要求去做,明明使用的 2013 的协议但是在消息头部的版本标识位置为 1,导致程序认为是 2019 协议。从而解析报错。此时可以强制解析成 2013 后,然后修正版本标识,重新序列化消息,以供下游服务使用</p> <p dir="auto"><a href="https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo14.cs">可以参考 Simples 的 Demo14</a></p> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">举个栗子 15</h3><a id="user-content-举个栗子-15" class="anchor" aria-label="Permalink: 举个栗子 15" href="#举个栗子-15"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">场景: 兼容 2011 协议的注册消息</p> <p dir="auto"><a href="https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo15.cs">可以参考 Simples 的 Demo15</a></p> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">举个栗子 16</h3><a id="user-content-举个栗子-16" class="anchor" aria-label="Permalink: 举个栗子 16" href="#举个栗子-16"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">场景: 平台下发分包数据到设备</p> <p dir="auto">可以参考【举个栗子 5】中,设备上来的分包数据结构,然后举一反三的去实现。</p> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">举个栗子 17</h3><a id="user-content-举个栗子-17" class="anchor" aria-label="Permalink: 举个栗子 17" href="#举个栗子-17"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">场景: 由于 808 的 0x0200 标准协议的附加数据是有明确的表示对部分附加信息 Id 进行保留的,所以按照标准,有些设备厂商把标准的附加信息 Id 占用,所以需要解析这部分的数据,可以参考外部自定义附加信息注册的方式来解决解析问题。</p> <p dir="auto">可以参考<a href="https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo10.cs">举个栗子 10</a>中的程序。</p> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">举个栗子 18</h3><a id="user-content-举个栗子-18" class="anchor" aria-label="Permalink: 举个栗子 18" href="#举个栗子-18"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">场景: 由于接入很多不同设备厂商的协议,但是每个协议对接又比较少,想同时放在一个类库下面进行统一管理,那么在各个厂家不冲突的情况下使用程序集方式的注册是没有问题的,一旦有冲突,那么使用程序集的方式进行注册会报 Id 冲突,本身库不支持这种方式进行隔离的,所以遇到这种情况自己使用 SetMap 的方式进行管理。</p> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">实验功能</h2><a id="user-content-实验功能" class="anchor" aria-label="Permalink: 实验功能" href="#实验功能"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">自动合并分包</h3><a id="user-content-自动合并分包" class="anchor" aria-label="Permalink: 自动合并分包" href="#自动合并分包"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">场景: 当数据体超过协议规定的 1023 个字节时,设备将会以分包的形式发送给服务,此时服务需要进行合并后才能正常解析</p> <p dir="auto">可以参考单元测试的<a href="/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/JT808SerializerTest.cs#L52">JT808SerializerTest.MergerTest</a></p> <p dir="auto">注意事项:</p> <ul dir="auto"> <li>默认缓存超时时间为5分钟</li> <li>如果合并且反序列化成功则<a href="/SmallChi/JT808/blob/master/src/JT808.Protocol/JT808Package.cs">JT808Package</a>的<code>Bodies</code>不为空,反之亦然</li> <li>超时计时为收到指定终端的指定消息id第一包开始,期间如果收到所有分包数据,在收到最后一个分包时自动反序列化,如果期间未收到所有分包数据,则后续将无法合并出完整的数据并反序列化</li> <li>如有特殊需求请重写<a href="/SmallChi/JT808/blob/master/src/JT808.Protocol/Internal/DefaultMerger.cs">默认实现</a>或自行实现<a href="/SmallChi/JT808/blob/master/src/JT808.Protocol/Interfaces/IMerger.cs">接口</a>并手动设置<a href="/SmallChi/JT808/blob/master/src/JT808.Protocol/Interfaces/GlobalConfigBase.cs#L130">全局配置</a>的<code>Jt808PackageMerger</code>属性</li> </ul> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">NuGet 安装</h2><a id="user-content-nuget-安装" class="anchor" aria-label="Permalink: NuGet 安装" href="#nuget-安装"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th>Package Name</th> <th>Version</th> <th>Preview Version</th> <th>Downloads</th> <th>Remark</th> </tr> </thead> <tbody> <tr> <td>Install-Package JT808</td> <td><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/cac5ab03525c485c75f402c39abfeb375d7e825d7d406aac15f7f2e4273757d0/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f762f4a543830382e737667"><img src="https://camo.githubusercontent.com/cac5ab03525c485c75f402c39abfeb375d7e825d7d406aac15f7f2e4273757d0/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f762f4a543830382e737667" alt="JT808" data-canonical-src="https://img.shields.io/nuget/v/JT808.svg" style="max-width: 100%;"></a></td> <td><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/cd9e58090d06a1e8fab0ce6127aa5835474bfd8a2140a770d420925943480f8b/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f767072652f4a543830382e737667"><img src="https://camo.githubusercontent.com/cd9e58090d06a1e8fab0ce6127aa5835474bfd8a2140a770d420925943480f8b/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f767072652f4a543830382e737667" alt="JT808" data-canonical-src="https://img.shields.io/nuget/vpre/JT808.svg" style="max-width: 100%;"></a></td> <td><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/b16f1d5463e4f271161cf8a7669fb2bdea21822b599e678fa327c607725988cb/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f64742f4a543830382e737667"><img src="https://camo.githubusercontent.com/b16f1d5463e4f271161cf8a7669fb2bdea21822b599e678fa327c607725988cb/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f64742f4a543830382e737667" alt="JT808" data-canonical-src="https://img.shields.io/nuget/dt/JT808.svg" style="max-width: 100%;"></a></td> <td>JT808</td> </tr> <tr> <td>Install-Package JT808.Protocol.Extensions.JT1078</td> <td><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/c4659d2f9702b20e2fe7dded662abb2a93c352f9c2182a96612a917ad09c5b10/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f762f4a543830382e50726f746f636f6c2e457874656e73696f6e732e4a54313037382e737667"><img src="https://camo.githubusercontent.com/c4659d2f9702b20e2fe7dded662abb2a93c352f9c2182a96612a917ad09c5b10/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f762f4a543830382e50726f746f636f6c2e457874656e73696f6e732e4a54313037382e737667" alt="JT808.Protocol.Extensions.JT1078" data-canonical-src="https://img.shields.io/nuget/v/JT808.Protocol.Extensions.JT1078.svg" style="max-width: 100%;"></a></td> <td><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/e507be9503bc3e1430b18fc68623b420a6df8c811fa5c63bfefe45df892df959/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f767072652f4a543830382e50726f746f636f6c2e457874656e73696f6e732e4a54313037382e737667"><img src="https://camo.githubusercontent.com/e507be9503bc3e1430b18fc68623b420a6df8c811fa5c63bfefe45df892df959/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f767072652f4a543830382e50726f746f636f6c2e457874656e73696f6e732e4a54313037382e737667" alt="JT808.Protocol.Extensions.JT1078" data-canonical-src="https://img.shields.io/nuget/vpre/JT808.Protocol.Extensions.JT1078.svg" style="max-width: 100%;"></a></td> <td><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/9deed3a986d792c4b99dea9cff06f2e83489a8265d4bfe2bbc487f845509860b/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f64742f4a543830382e50726f746f636f6c2e457874656e73696f6e732e4a54313037382e737667"><img src="https://camo.githubusercontent.com/9deed3a986d792c4b99dea9cff06f2e83489a8265d4bfe2bbc487f845509860b/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f64742f4a543830382e50726f746f636f6c2e457874656e73696f6e732e4a54313037382e737667" alt="JT808" data-canonical-src="https://img.shields.io/nuget/dt/JT808.Protocol.Extensions.JT1078.svg" style="max-width: 100%;"></a></td> <td>JT1078 扩展 JT808</td> </tr> <tr> <td>Install-Package JT808.Protocol.Extensions.SuBiao</td> <td><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/0dd22278eac48839bbfde5199b79a133ae29f930f2bd02a95bc4a92ea43dc1f4/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f762f4a543830382e50726f746f636f6c2e457874656e73696f6e732e53754269616f2e737667"><img src="https://camo.githubusercontent.com/0dd22278eac48839bbfde5199b79a133ae29f930f2bd02a95bc4a92ea43dc1f4/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f762f4a543830382e50726f746f636f6c2e457874656e73696f6e732e53754269616f2e737667" alt="JT808.Protocol.Extensions.SuBiao" data-canonical-src="https://img.shields.io/nuget/v/JT808.Protocol.Extensions.SuBiao.svg" style="max-width: 100%;"></a></td> <td><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/756a92eb670ddc9a36596b735bf66bdefb6ccd747a063d571a854b6684a5bda0/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f767072652f4a543830382e50726f746f636f6c2e457874656e73696f6e732e53754269616f2e737667"><img src="https://camo.githubusercontent.com/756a92eb670ddc9a36596b735bf66bdefb6ccd747a063d571a854b6684a5bda0/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f767072652f4a543830382e50726f746f636f6c2e457874656e73696f6e732e53754269616f2e737667" alt="JT808.Protocol.Extensions.SuBiao" data-canonical-src="https://img.shields.io/nuget/vpre/JT808.Protocol.Extensions.SuBiao.svg" style="max-width: 100%;"></a></td> <td><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/7c2aa9070631f5b06f797c1a9e9c66696fb0e7350f9cb322e1a0f4a77ae57eac/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f64742f4a543830382e50726f746f636f6c2e457874656e73696f6e732e53754269616f2e737667"><img src="https://camo.githubusercontent.com/7c2aa9070631f5b06f797c1a9e9c66696fb0e7350f9cb322e1a0f4a77ae57eac/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f64742f4a543830382e50726f746f636f6c2e457874656e73696f6e732e53754269616f2e737667" alt="JT808" data-canonical-src="https://img.shields.io/nuget/dt/JT808.Protocol.Extensions.SuBiao.svg" style="max-width: 100%;"></a></td> <td>主动安全(苏标)扩展 JT808</td> </tr> <tr> <td>Install-Package JT808.Protocol.Extensions.YueBiao</td> <td><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/a14cba6ae52a64143e6fe59a6bcab6ac5eb7b3b263fffd3d16185f469a6a6fcd/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f762f4a543830382e50726f746f636f6c2e457874656e73696f6e732e5975654269616f2e737667"><img src="https://camo.githubusercontent.com/a14cba6ae52a64143e6fe59a6bcab6ac5eb7b3b263fffd3d16185f469a6a6fcd/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f762f4a543830382e50726f746f636f6c2e457874656e73696f6e732e5975654269616f2e737667" alt="JT808.Protocol.Extensions.YueBiao" data-canonical-src="https://img.shields.io/nuget/v/JT808.Protocol.Extensions.YueBiao.svg" style="max-width: 100%;"></a></td> <td><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/c217610292e5df77ebc1c498d8aa23dc411596a9ee3eadf11b81ee6d2dfd243b/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f767072652f4a543830382e50726f746f636f6c2e457874656e73696f6e732e5975654269616f2e737667"><img src="https://camo.githubusercontent.com/c217610292e5df77ebc1c498d8aa23dc411596a9ee3eadf11b81ee6d2dfd243b/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f767072652f4a543830382e50726f746f636f6c2e457874656e73696f6e732e5975654269616f2e737667" alt="JT808.Protocol.Extensions.YueBiao" data-canonical-src="https://img.shields.io/nuget/vpre/JT808.Protocol.Extensions.YueBiao.svg" style="max-width: 100%;"></a></td> <td><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/434ed0b013c6fdf0793d3a0b141a7c9f6bce0d4f4edc3d139d27dc38032f9d44/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f64742f4a543830382e50726f746f636f6c2e457874656e73696f6e732e5975654269616f2e737667"><img src="https://camo.githubusercontent.com/434ed0b013c6fdf0793d3a0b141a7c9f6bce0d4f4edc3d139d27dc38032f9d44/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f64742f4a543830382e50726f746f636f6c2e457874656e73696f6e732e5975654269616f2e737667" alt="JT808" data-canonical-src="https://img.shields.io/nuget/dt/JT808.Protocol.Extensions.YueBiao.svg" style="max-width: 100%;"></a></td> <td>主动安全(粤标)扩展 JT808</td> </tr> <tr> <td>Install-Package JT808.Protocol.Extensions.GPS51</td> <td><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/9ecfb4208adf6b669e09dc34c43ac8dd5e05069bc7584e701a71bce9230436d1/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f762f4a543830382e50726f746f636f6c2e457874656e73696f6e732e47505335312e737667"><img src="https://camo.githubusercontent.com/9ecfb4208adf6b669e09dc34c43ac8dd5e05069bc7584e701a71bce9230436d1/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f762f4a543830382e50726f746f636f6c2e457874656e73696f6e732e47505335312e737667" alt="JT808.Protocol.Extensions.GPS51" data-canonical-src="https://img.shields.io/nuget/v/JT808.Protocol.Extensions.GPS51.svg" style="max-width: 100%;"></a></td> <td><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/4f5bbcdadcb430b19c293ee78796c19bdb9d0bd13a8bf3c02c2f2fd873b62dfe/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f767072652f4a543830382e50726f746f636f6c2e457874656e73696f6e732e47505335312e737667"><img src="https://camo.githubusercontent.com/4f5bbcdadcb430b19c293ee78796c19bdb9d0bd13a8bf3c02c2f2fd873b62dfe/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f767072652f4a543830382e50726f746f636f6c2e457874656e73696f6e732e47505335312e737667" alt="JT808.Protocol.Extensions.GPS51" data-canonical-src="https://img.shields.io/nuget/vpre/JT808.Protocol.Extensions.GPS51.svg" style="max-width: 100%;"></a></td> <td><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/f6ad35ad9df903f17464eb8c1988c0dff6364f0caec787b1599c2ca4dd5eb4ad/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f64742f4a543830382e50726f746f636f6c2e457874656e73696f6e732e47505335312e737667"><img src="https://camo.githubusercontent.com/f6ad35ad9df903f17464eb8c1988c0dff6364f0caec787b1599c2ca4dd5eb4ad/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f64742f4a543830382e50726f746f636f6c2e457874656e73696f6e732e47505335312e737667" alt="JT808" data-canonical-src="https://img.shields.io/nuget/dt/JT808.Protocol.Extensions.GPS51.svg" style="max-width: 100%;"></a></td> <td>GPS51 扩展JT808</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">使用 BenchmarkDotNet 性能测试报告(只是玩玩,不能当真)</h2><a id="user-content-使用-benchmarkdotnet-性能测试报告只是玩玩不能当真" class="anchor" aria-label="Permalink: 使用 BenchmarkDotNet 性能测试报告(只是玩玩,不能当真)" href="#使用-benchmarkdotnet-性能测试报告只是玩玩不能当真"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="highlight highlight-source-ini notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content=" BenchmarkDotNet v0.14.0, Windows 11 (10.0.22631.4460/23H2/2023Update/SunValley3) Intel Core i7-8700K CPU 3.70GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores .NET SDK 9.0.100 [Host] : .NET 9.0.0 (9.0.24.52809), X64 RyuJIT AVX2 Job-PAIVRG : .NET 9.0.0 (9.0.24.52809), X64 RyuJIT AVX2 Platform=AnyCpu Server=False Toolchain=.NET 9.0 "><pre>BenchmarkDotNet v0.14.0, Windows 11 (10.0.22631.4460/23H2/2023Update/SunValley3) Intel Core i7-8700K CPU 3.70GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores .NET SDK 9.0.100 [Host] : .NET 9.0.0 (9.0.24.52809), X64 RyuJIT AVX2 Job-PAIVRG : .NET 9.0.0 (9.0.24.52809), X64 RyuJIT AVX2 <span class="pl-k">Platform</span>=AnyCpu <span class="pl-k">Server</span>=False <span class="pl-k">Toolchain</span>=.NET 9.0 </pre></div> <markdown-accessiblity-table><table> <thead> <tr> <th>Method</th> <th>Categories</th> <th>N</th> <th align="right">Mean</th> <th align="right">Error</th> <th align="right">StdDev</th> <th align="right">Gen0</th> <th align="right">Gen1</th> <th align="right">Allocated</th> </tr> </thead> <tbody> <tr> <td><strong>0x0100Serialize</strong></td> <td><strong>0x0100Serializer</strong></td> <td><strong>100</strong></td> <td align="right"><strong>56.59 μs</strong></td> <td align="right"><strong>0.331 μs</strong></td> <td align="right"><strong>0.310 μs</strong></td> <td align="right"><strong>10.8032</strong></td> <td align="right"><strong>-</strong></td> <td align="right"><strong>66.41 KB</strong></td> </tr> <tr> <td>0x0100Deserialize</td> <td>0x0100Serializer</td> <td>100</td> <td align="right">49.57 μs</td> <td align="right">0.624 μs</td> <td align="right">0.553 μs</td> <td align="right">15.8081</td> <td align="right">-</td> <td align="right">96.88 KB</td> </tr> <tr> <td><strong>0x0100Serialize</strong></td> <td><strong>0x0100Serializer</strong></td> <td><strong>10000</strong></td> <td align="right"><strong>5,443.03 μs</strong></td> <td align="right"><strong>20.140 μs</strong></td> <td align="right"><strong>18.839 μs</strong></td> <td align="right"><strong>1078.1250</strong></td> <td align="right"><strong>-</strong></td> <td align="right"><strong>6640.63 KB</strong></td> </tr> <tr> <td>0x0100Deserialize</td> <td>0x0100Serializer</td> <td>10000</td> <td align="right">5,171.28 μs</td> <td align="right">47.999 μs</td> <td align="right">44.899 μs</td> <td align="right">1578.1250</td> <td align="right">-</td> <td align="right">9687.51 KB</td> </tr> <tr> <td><strong>0x0100Serialize</strong></td> <td><strong>0x0100Serializer</strong></td> <td><strong>100000</strong></td> <td align="right"><strong>54,690.88 μs</strong></td> <td align="right"><strong>314.675 μs</strong></td> <td align="right"><strong>294.347 μs</strong></td> <td align="right"><strong>10800.0000</strong></td> <td align="right"><strong>-</strong></td> <td align="right"><strong>66406.35 KB</strong></td> </tr> <tr> <td>0x0100Deserialize</td> <td>0x0100Serializer</td> <td>100000</td> <td align="right">49,058.00 μs</td> <td align="right">513.922 μs</td> <td align="right">480.723 μs</td> <td align="right">15727.2727</td> <td align="right">-</td> <td align="right">96875.09 KB</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td><strong>0x0200_All_AttachId_Serialize</strong></td> <td><strong>0x0200Serializer</strong></td> <td><strong>100</strong></td> <td align="right"><strong>107.02 μs</strong></td> <td align="right"><strong>0.674 μs</strong></td> <td align="right"><strong>0.598 μs</strong></td> <td align="right"><strong>29.4189</strong></td> <td align="right"><strong>0.1221</strong></td> <td align="right"><strong>180.47 KB</strong></td> </tr> <tr> <td>0x0200_All_AttachId_Deserialize</td> <td>0x0200Serializer</td> <td>100</td> <td align="right">103.93 μs</td> <td align="right">0.414 μs</td> <td align="right">0.367 μs</td> <td align="right">38.2080</td> <td align="right">0.2441</td> <td align="right">234.38 KB</td> </tr> <tr> <td><strong>0x0200_All_AttachId_Serialize</strong></td> <td><strong>0x0200Serializer</strong></td> <td><strong>10000</strong></td> <td align="right"><strong>10,739.81 μs</strong></td> <td align="right"><strong>77.963 μs</strong></td> <td align="right"><strong>69.112 μs</strong></td> <td align="right"><strong>2937.5000</strong></td> <td align="right"><strong>-</strong></td> <td align="right"><strong>18046.89 KB</strong></td> </tr> <tr> <td>0x0200_All_AttachId_Deserialize</td> <td>0x0200Serializer</td> <td>10000</td> <td align="right">10,746.98 μs</td> <td align="right">82.140 μs</td> <td align="right">76.833 μs</td> <td align="right">3812.5000</td> <td align="right">15.6250</td> <td align="right">23437.52 KB</td> </tr> <tr> <td><strong>0x0200_All_AttachId_Serialize</strong></td> <td><strong>0x0200Serializer</strong></td> <td><strong>100000</strong></td> <td align="right"><strong>106,682.00 μs</strong></td> <td align="right"><strong>1,466.321 μs</strong></td> <td align="right"><strong>1,224.444 μs</strong></td> <td align="right"><strong>29400.0000</strong></td> <td align="right"><strong>-</strong></td> <td align="right"><strong>180468.95 KB</strong></td> </tr> <tr> <td>0x0200_All_AttachId_Deserialize</td> <td>0x0200Serializer</td> <td>100000</td> <td align="right">104,389.33 μs</td> <td align="right">516.581 μs</td> <td align="right">483.210 μs</td> <td align="right">38200.0000</td> <td align="right">200.0000</td> <td align="right">234375.2 KB</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">JT808 终端通讯协议消息对照表</h2><a id="user-content-jt808-终端通讯协议消息对照表" class="anchor" aria-label="Permalink: JT808 终端通讯协议消息对照表" href="#jt808-终端通讯协议消息对照表"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th align="center">序号</th> <th align="center">消息 ID</th> <th align="center">完成情况</th> <th align="center">测试情况</th> <th align="left">消息体名称</th> <th align="center">2019 版本</th> <th align="center">2011 版本</th> </tr> </thead> <tbody> <tr> <td align="center">1</td> <td align="center">0x0001</td> <td align="center">√</td> <td align="center">√</td> <td align="left">终端通用应答</td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center">2</td> <td align="center">0x8001</td> <td align="center">√</td> <td align="center">√</td> <td align="left">平台通用应答</td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center">3</td> <td align="center">0x0002</td> <td align="center">√</td> <td align="center">√</td> <td align="left">终端心跳</td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center">4</td> <td align="center">0x8003</td> <td align="center">√</td> <td align="center">√</td> <td align="left">补传分包请求</td> <td align="center"></td> <td align="center">被新增</td> </tr> <tr> <td align="center">5</td> <td align="center">0x0100</td> <td align="center">√</td> <td align="center">√</td> <td align="left">终端注册</td> <td align="center">修改</td> <td align="center">被修改</td> </tr> <tr> <td align="center">6</td> <td align="center">0x8100</td> <td align="center">√</td> <td align="center">√</td> <td align="left">终端注册应答</td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center">7</td> <td align="center">0x0003</td> <td align="center">√</td> <td align="center">√</td> <td align="left">终端注销</td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center">8</td> <td align="center">0x0102</td> <td align="center">√</td> <td align="center">√</td> <td align="left">终端鉴权</td> <td align="center">修改</td> <td align="center"></td> </tr> <tr> <td align="center">9</td> <td align="center">0x8103</td> <td align="center">√</td> <td align="center">√</td> <td align="left">设置终端参数</td> <td align="center">修改且增加</td> <td align="center">被修改</td> </tr> <tr> <td align="center">10</td> <td align="center">0x8104</td> <td align="center">√</td> <td align="center">√</td> <td align="left">查询终端参数</td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center">11</td> <td align="center">0x0104</td> <td align="center">√</td> <td align="center">√</td> <td align="left">查询终端参数应答</td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center">12</td> <td align="center">0x8105</td> <td align="center">√</td> <td align="center">√</td> <td align="left">终端控制</td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center">13</td> <td align="center">0x8106</td> <td align="center">√</td> <td align="center">√</td> <td align="left">查询指定终端参数</td> <td align="center"></td> <td align="center">被新增</td> </tr> <tr> <td align="center">14</td> <td align="center">0x8107</td> <td align="center">√</td> <td align="center">消息体为空</td> <td align="left">查询终端属性</td> <td align="center"></td> <td align="center">被新增</td> </tr> <tr> <td align="center">15</td> <td align="center">0x0107</td> <td align="center">√</td> <td align="center">√</td> <td align="left">查询终端属性应答</td> <td align="center"></td> <td align="center">被新增</td> </tr> <tr> <td align="center">16</td> <td align="center">0x8108</td> <td align="center">√</td> <td align="center">√</td> <td align="left">下发终端升级包</td> <td align="center"></td> <td align="center">被新增</td> </tr> <tr> <td align="center">17</td> <td align="center">0x0108</td> <td align="center">√</td> <td align="center">√</td> <td align="left">终端升级结果通知</td> <td align="center"></td> <td align="center">被新增</td> </tr> <tr> <td align="center">18</td> <td align="center">0x0200</td> <td align="center">√</td> <td align="center">√</td> <td align="left">位置信息汇报</td> <td align="center">增加附加信息</td> <td align="center">被修改</td> </tr> <tr> <td align="center">19</td> <td align="center">0x8201</td> <td align="center">√</td> <td align="center">√</td> <td align="left">位置信息查询</td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center">20</td> <td align="center">0x0201</td> <td align="center">√</td> <td align="center">√</td> <td align="left">位置信息查询应答</td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center">21</td> <td align="center">0x8202</td> <td align="center">√</td> <td align="center">√</td> <td align="left">临时位置跟踪控制</td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center">22</td> <td align="center">0x8203</td> <td align="center">√</td> <td align="center">√</td> <td align="left">人工确认报警消息</td> <td align="center"></td> <td align="center">被新增</td> </tr> <tr> <td align="center">23</td> <td align="center">0x8300</td> <td align="center">√</td> <td align="center">√</td> <td align="left">文本信息下发</td> <td align="center">修改</td> <td align="center">被修改</td> </tr> <tr> <td align="center">24</td> <td align="center">0x8301</td> <td align="center">√</td> <td align="center">√</td> <td align="left">事件设置</td> <td align="center">删除</td> <td align="center"></td> </tr> <tr> <td align="center">25</td> <td align="center">0x0301</td> <td align="center">√</td> <td align="center">√</td> <td align="left">事件报告</td> <td align="center">删除</td> <td align="center"></td> </tr> <tr> <td align="center">26</td> <td align="center">0x8302</td> <td align="center">√</td> <td align="center">√</td> <td align="left">提问下发</td> <td align="center">删除</td> <td align="center"></td> </tr> <tr> <td align="center">27</td> <td align="center">0x0302</td> <td align="center">√</td> <td align="center">√</td> <td align="left">提问应答</td> <td align="center">删除</td> <td align="center"></td> </tr> <tr> <td align="center">28</td> <td align="center">0x8303</td> <td align="center">√</td> <td align="center">√</td> <td align="left">信息点播菜单设置</td> <td align="center">删除</td> <td align="center"></td> </tr> <tr> <td align="center">29</td> <td align="center">0x0303</td> <td align="center">√</td> <td align="center">√</td> <td align="left">信息点播/取消</td> <td align="center">删除</td> <td align="center"></td> </tr> <tr> <td align="center">30</td> <td align="center">0x8304</td> <td align="center">√</td> <td align="center">√</td> <td align="left">信息服务</td> <td align="center">删除</td> <td align="center"></td> </tr> <tr> <td align="center">31</td> <td align="center">0x8400</td> <td align="center">√</td> <td align="center">√</td> <td align="left">电话回拨</td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center">32</td> <td align="center">0x8401</td> <td align="center">√</td> <td align="center">√</td> <td align="left">设置电话本</td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center">33</td> <td align="center">0x8500</td> <td align="center">√</td> <td align="center">√</td> <td align="left">车辆控制</td> <td align="center">修改</td> <td align="center"></td> </tr> <tr> <td align="center">34</td> <td align="center">0x0500</td> <td align="center">√</td> <td align="center">√</td> <td align="left">车辆控制应答</td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center">35</td> <td align="center">0x8600</td> <td align="center">√</td> <td align="center">√</td> <td align="left">设置圆形区域</td> <td align="center">修改</td> <td align="center">被修改</td> </tr> <tr> <td align="center">36</td> <td align="center">0x8601</td> <td align="center">√</td> <td align="center">√</td> <td align="left">删除圆形区域</td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center">37</td> <td align="center">0x8602</td> <td align="center">√</td> <td align="center">√</td> <td align="left">设置矩形区域</td> <td align="center">修改</td> <td align="center"></td> </tr> <tr> <td align="center">38</td> <td align="center">0x8603</td> <td align="center">√</td> <td align="center">√</td> <td align="left">删除矩形区域</td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center">39</td> <td align="center">0x8604</td> <td align="center">√</td> <td align="center">√</td> <td align="left">设置多边形区域</td> <td align="center">修改</td> <td align="center"></td> </tr> <tr> <td align="center">40</td> <td align="center">0x8605</td> <td align="center">√</td> <td align="center">√</td> <td align="left">删除多边形区域</td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center">41</td> <td align="center">0x8606</td> <td align="center">√</td> <td align="center">√</td> <td align="left">设置路线</td> <td align="center">修改</td> <td align="center"></td> </tr> <tr> <td align="center">42</td> <td align="center">0x8607</td> <td align="center">√</td> <td align="center">√</td> <td align="left">删除路线</td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center">43</td> <td align="center">0x8700</td> <td align="center">√</td> <td align="center">√</td> <td align="left">行驶记录仪数据采集命令</td> <td align="center"></td> <td align="center">被修改</td> </tr> <tr> <td align="center">44</td> <td align="center">0x0700</td> <td align="center">√</td> <td align="center">√</td> <td align="left">行驶记录仪数据上传</td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center">45</td> <td align="center">0x8701</td> <td align="center">√</td> <td align="center">√</td> <td align="left">行驶记录仪参数下传命令</td> <td align="center"></td> <td align="center">被修改</td> </tr> <tr> <td align="center">46</td> <td align="center">0x0701</td> <td align="center">√</td> <td align="center">√</td> <td align="left">电子运单上报</td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center">47</td> <td align="center">0x0702</td> <td align="center">√</td> <td align="center">√</td> <td align="left">驾驶员身份信息采集上报</td> <td align="center">修改</td> <td align="center">被修改</td> </tr> <tr> <td align="center">48</td> <td align="center">0x8702</td> <td align="center">√</td> <td align="center">消息体为空</td> <td align="left">上报驾驶员身份信息请求</td> <td align="center"></td> <td align="center">被新增</td> </tr> <tr> <td align="center">49</td> <td align="center">0x0704</td> <td align="center">√</td> <td align="center">√</td> <td align="left">定位数据批量上传</td> <td align="center">修改</td> <td align="center">被新增</td> </tr> <tr> <td align="center">50</td> <td align="center">0x0705</td> <td align="center">√</td> <td align="center">√</td> <td align="left">CAN 总线数据上传</td> <td align="center">修改</td> <td align="center">被新增</td> </tr> <tr> <td align="center">51</td> <td align="center">0x0800</td> <td align="center">√</td> <td align="center">√</td> <td align="left">多媒体事件信息上传</td> <td align="center"></td> <td align="center">被修改</td> </tr> <tr> <td align="center">52</td> <td align="center">0x0801</td> <td align="center">√</td> <td align="center">√</td> <td align="left">多媒体数据上传</td> <td align="center">修改</td> <td align="center">被修改</td> </tr> <tr> <td align="center">53</td> <td align="center">0x8800</td> <td align="center">√</td> <td align="center">√</td> <td align="left">多媒体数据上传应答</td> <td align="center"></td> <td align="center">被修改</td> </tr> <tr> <td align="center">54</td> <td align="center">0x8801</td> <td align="center">√</td> <td align="center">√</td> <td align="left">摄像头立即拍摄命令</td> <td align="center">修改</td> <td align="center"></td> </tr> <tr> <td align="center">55</td> <td align="center">0x0805</td> <td align="center">√</td> <td align="center">√</td> <td align="left">摄像头立即拍摄命令应答</td> <td align="center">修改</td> <td align="center">被新增</td> </tr> <tr> <td align="center">56</td> <td align="center">0x8802</td> <td align="center">√</td> <td align="center">√</td> <td align="left">存储多媒体数据检索</td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center">57</td> <td align="center">0x0802</td> <td align="center">√</td> <td align="center">√</td> <td align="left">存储多媒体数据检索应答</td> <td align="center"></td> <td align="center">被修改</td> </tr> <tr> <td align="center">58</td> <td align="center">0x8803</td> <td align="center">√</td> <td align="center">√</td> <td align="left">存储多媒体数据上传</td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center">59</td> <td align="center">0x8804</td> <td align="center">√</td> <td align="center">√</td> <td align="left">录音开始命令</td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center">60</td> <td align="center">0x8805</td> <td align="center">√</td> <td align="center">√</td> <td align="left">单条存储多媒体数据检索上传命令</td> <td align="center">修改</td> <td align="center"></td> </tr> <tr> <td align="center">61</td> <td align="center">0x8900</td> <td align="center">√</td> <td align="center">√</td> <td align="left">数据下行透传</td> <td align="center">修改</td> <td align="center">被修改</td> </tr> <tr> <td align="center">62</td> <td align="center">0x0900</td> <td align="center">√</td> <td align="center">√</td> <td align="left">数据上行透传</td> <td align="center">修改</td> <td align="center">被修改</td> </tr> <tr> <td align="center">63</td> <td align="center">0x0901</td> <td align="center">√</td> <td align="center">√</td> <td align="left">数据压缩上报</td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center">64</td> <td align="center">0x8A00</td> <td align="center">√</td> <td align="center">√</td> <td align="left">平台 RSA 公钥</td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center">65</td> <td align="center">0x0A00</td> <td align="center">√</td> <td align="center">√</td> <td align="left">终端 RSA 公钥</td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center">66</td> <td align="center">0x8F00~0x8FFF</td> <td align="center">保留</td> <td align="center">保留</td> <td align="left">平台下行消息保留</td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center">67</td> <td align="center">0x0F00~0x0FFF</td> <td align="center">保留</td> <td align="center">保留</td> <td align="left">终端上行消息保留</td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center">68</td> <td align="center">0x0004</td> <td align="center">√</td> <td align="center">√</td> <td align="left">查询服务器时间请求</td> <td align="center">新增</td> <td align="center"></td> </tr> <tr> <td align="center">69</td> <td align="center">0x8004</td> <td align="center">√</td> <td align="center">√</td> <td align="left">查询服务器时间应答</td> <td align="center">新增</td> <td align="center"></td> </tr> <tr> <td align="center">70</td> <td align="center">0x0005</td> <td align="center">√</td> <td align="center">√</td> <td align="left">终端补传分包请求</td> <td align="center">新增</td> <td align="center"></td> </tr> <tr> <td align="center">71</td> <td align="center">0x8204</td> <td align="center">√</td> <td align="center">√</td> <td align="left">链路检测</td> <td align="center">新增</td> <td align="center"></td> </tr> <tr> <td align="center">72</td> <td align="center">0x8608</td> <td align="center">√</td> <td align="center">√</td> <td align="left">查询区域或线路数据</td> <td align="center">新增</td> <td align="center"></td> </tr> <tr> <td align="center">73</td> <td align="center">0x0608</td> <td align="center">√</td> <td align="center">√</td> <td align="left">查询区域或线路数据应答</td> <td align="center">新增</td> <td align="center"></td> </tr> <tr> <td align="center">74</td> <td align="center">0xE000~0xEFFF</td> <td align="center">保留</td> <td align="center">保留</td> <td align="left">厂商自定义上行消息</td> <td align="center">新增</td> <td align="center"></td> </tr> <tr> <td align="center">75</td> <td align="center">0xF000~0xFFFF</td> <td align="center">保留</td> <td align="center">保留</td> <td align="left">厂商自定义下行消息</td> <td align="center">新增</td> <td align="center"></td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">JT1078 扩展 JT808 议消息对照表</h2><a id="user-content-jt1078-扩展-jt808-议消息对照表" class="anchor" aria-label="Permalink: JT1078 扩展 JT808 议消息对照表" href="#jt1078-扩展-jt808-议消息对照表"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th align="center">序号</th> <th align="center">消息 ID</th> <th align="center">完成情况</th> <th align="center">测试情况</th> <th align="left">消息体名称</th> </tr> </thead> <tbody> <tr> <td align="center">1</td> <td align="center">0x0200_0x14</td> <td align="center">√</td> <td align="center">√</td> <td align="left">视频相关报警</td> </tr> <tr> <td align="center">2</td> <td align="center">0x0200_0x15</td> <td align="center">√</td> <td align="center">√</td> <td align="left">视频信号丢失报警状态</td> </tr> <tr> <td align="center">3</td> <td align="center">0x0200_0x16</td> <td align="center">√</td> <td align="center">√</td> <td align="left">视频信号遮挡报警状态</td> </tr> <tr> <td align="center">4</td> <td align="center">0x0200_0x17</td> <td align="center">√</td> <td align="center">√</td> <td align="left">存储器故障报警状态</td> </tr> <tr> <td align="center">5</td> <td align="center">0x0200_0x18</td> <td align="center">√</td> <td align="center">√</td> <td align="left">异常驾驶行为报警详细描述</td> </tr> <tr> <td align="center">6</td> <td align="center">0x8103_0x0075</td> <td align="center">√</td> <td align="center">√</td> <td align="left">音视频参数设置</td> </tr> <tr> <td align="center">7</td> <td align="center">0x8103_0x0076</td> <td align="center">√</td> <td align="center">√</td> <td align="left">音视频通道列表设置</td> </tr> <tr> <td align="center">8</td> <td align="center">0x8103_0x0077</td> <td align="center">√</td> <td align="center">√</td> <td align="left">单独视频通道参数设置</td> </tr> <tr> <td align="center">9</td> <td align="center">0x8103_0x0079</td> <td align="center">√</td> <td align="center">√</td> <td align="left">特殊报警录像参数设置</td> </tr> <tr> <td align="center">10</td> <td align="center">0x8103_0x007A</td> <td align="center">√</td> <td align="center">√</td> <td align="left">视频相关报警屏蔽字</td> </tr> <tr> <td align="center">11</td> <td align="center">0x8103_0x007B</td> <td align="center">√</td> <td align="center">√</td> <td align="left">图像分析报警参数设置</td> </tr> <tr> <td align="center">12</td> <td align="center">0x8103_0x007C</td> <td align="center">√</td> <td align="center">√</td> <td align="left">终端休眠模式唤醒设置</td> </tr> <tr> <td align="center">13</td> <td align="center">0x1003</td> <td align="center">√</td> <td align="center">√</td> <td align="left">终端上传音视频属性</td> </tr> <tr> <td align="center">14</td> <td align="center">0x1005</td> <td align="center">√</td> <td align="center">√</td> <td align="left">终端上传乘客流量</td> </tr> <tr> <td align="center">15</td> <td align="center">0x1205</td> <td align="center">√</td> <td align="center">√</td> <td align="left">终端上传音视频资源列表</td> </tr> <tr> <td align="center">16</td> <td align="center">0x1206</td> <td align="center">√</td> <td align="center">√</td> <td align="left">文件上传完成通知</td> </tr> <tr> <td align="center">17</td> <td align="center">0x9003</td> <td align="center">√</td> <td align="center">√</td> <td align="left">查询终端音视频属性</td> </tr> <tr> <td align="center">18</td> <td align="center">0x9101</td> <td align="center">√</td> <td align="center">√</td> <td align="left">实时音视频传输请求</td> </tr> <tr> <td align="center">19</td> <td align="center">0x9102</td> <td align="center">√</td> <td align="center">√</td> <td align="left">音视频实时传输控制</td> </tr> <tr> <td align="center">20</td> <td align="center">0x9105</td> <td align="center">√</td> <td align="center">√</td> <td align="left">实时音视频传输状态通知</td> </tr> <tr> <td align="center">21</td> <td align="center">0x9201</td> <td align="center">√</td> <td align="center">√</td> <td align="left">平台下发远程录像回放请求</td> </tr> <tr> <td align="center">22</td> <td align="center">0x9202</td> <td align="center">√</td> <td align="center">√</td> <td align="left">平台下发远程录像回放控制</td> </tr> <tr> <td align="center">23</td> <td align="center">0x9205</td> <td align="center">√</td> <td align="center">√</td> <td align="left">查询资源列表</td> </tr> <tr> <td align="center">24</td> <td align="center">0x9206</td> <td align="center">√</td> <td align="center">√</td> <td align="left">文件上传指令</td> </tr> <tr> <td align="center">25</td> <td align="center">0x9207</td> <td align="center">√</td> <td align="center">√</td> <td align="left">文件上传控制</td> </tr> <tr> <td align="center">26</td> <td align="center">0x9301</td> <td align="center">√</td> <td align="center">√</td> <td align="left">云台旋转</td> </tr> <tr> <td align="center">27</td> <td align="center">0x9302</td> <td align="center">√</td> <td align="center">√</td> <td align="left">云台调整焦距控制</td> </tr> <tr> <td align="center">28</td> <td align="center">0x9303</td> <td align="center">√</td> <td align="center">√</td> <td align="left">云台调整光圈控制</td> </tr> <tr> <td align="center">29</td> <td align="center">0x9304</td> <td align="center">√</td> <td align="center">√</td> <td align="left">云台雨刷控制</td> </tr> <tr> <td align="center">30</td> <td align="center">0x9305</td> <td align="center">√</td> <td align="center">√</td> <td align="left">红外补光控制</td> </tr> <tr> <td align="center">31</td> <td align="center">0x9306</td> <td align="center">√</td> <td align="center">√</td> <td align="left">云台变倍控制</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">使用方法</h2><a id="user-content-使用方法" class="anchor" aria-label="Permalink: 使用方法" href="#使用方法"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="DI: IServiceCollection serviceDescriptors1 = new ServiceCollection(); serviceDescriptors1.AddJT808Configure() .AddJT1078Configure(); 全局注册: JT808Serializer.Instance.Register(JT808_JT1078_Constants.GetCurrentAssembly());"><pre><span class="pl-s1">DI</span><span class="pl-c1">:</span> <span class="pl-smi">IServiceCollection</span> <span class="pl-s1">serviceDescriptors1</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-smi">ServiceCollection</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">serviceDescriptors1</span><span class="pl-kos">.</span><span class="pl-en">AddJT808Configure</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">.</span><span class="pl-en">AddJT1078Configure</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-smi">全局注册</span>: <span class="pl-s1">JT808Serializer</span><span class="pl-kos">.</span><span class="pl-s1">Instance</span><span class="pl-kos">.</span><span class="pl-en">Register</span><span class="pl-kos">(</span><span class="pl-s1">JT808_JT1078_Constants</span><span class="pl-kos">.</span><span class="pl-s1">GetCurrentAssembly</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">主动安全(苏标)扩展 JT808 协议消息对照表</h2><a id="user-content-主动安全苏标扩展-jt808-协议消息对照表" class="anchor" aria-label="Permalink: 主动安全(苏标)扩展 JT808 协议消息对照表" href="#主动安全苏标扩展-jt808-协议消息对照表"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th align="center">序号</th> <th align="center">消息 ID</th> <th align="center">完成情况</th> <th align="center">测试情况</th> <th align="left">消息体名称</th> </tr> </thead> <tbody> <tr> <td align="center">1</td> <td align="center">0x1210</td> <td align="center">√</td> <td align="center">√</td> <td align="left">报警附件信息消息</td> </tr> <tr> <td align="center">2</td> <td align="center">0x1211</td> <td align="center">√</td> <td align="center">√</td> <td align="left">文件信息上传</td> </tr> <tr> <td align="center">3</td> <td align="center">0x1212</td> <td align="center">√</td> <td align="center">√</td> <td align="left">文件上传完成消息</td> </tr> <tr> <td align="center">4</td> <td align="center">0x9208</td> <td align="center">√</td> <td align="center">√</td> <td align="left">报警附件上传指令</td> </tr> <tr> <td align="center">5</td> <td align="center">0x9212</td> <td align="center">√</td> <td align="center">√</td> <td align="left">文件上传完成消息应答</td> </tr> <tr> <td align="center">6</td> <td align="center">0x0200_0x64</td> <td align="center">√</td> <td align="center">√</td> <td align="left">高级驾驶辅助系统报警信息</td> </tr> <tr> <td align="center">7</td> <td align="center">0x0200_0x65</td> <td align="center">√</td> <td align="center">√</td> <td align="left">驾驶员状态监测系统报警信息</td> </tr> <tr> <td align="center">8</td> <td align="center">0x0200_0x66</td> <td align="center">√</td> <td align="center">√</td> <td align="left">胎压监测系统报警信息</td> </tr> <tr> <td align="center">9</td> <td align="center">0x0200_0x67</td> <td align="center">√</td> <td align="center">√</td> <td align="left">盲区监测系统报警信息</td> </tr> <tr> <td align="center">10</td> <td align="center">0x8103_0xF364</td> <td align="center">√</td> <td align="center">√</td> <td align="left">高级驾驶辅助系统参数</td> </tr> <tr> <td align="center">11</td> <td align="center">0x8103_0xF365</td> <td align="center">√</td> <td align="center">√</td> <td align="left">驾驶员状态监测系统参数</td> </tr> <tr> <td align="center">12</td> <td align="center">0x8103_0xF366</td> <td align="center">√</td> <td align="center">√</td> <td align="left">胎压监测系统参数</td> </tr> <tr> <td align="center">13</td> <td align="center">0x8103_0xF367</td> <td align="center">√</td> <td align="center">√</td> <td align="left">盲区监测系统参数</td> </tr> <tr> <td align="center">14</td> <td align="center">0x0900</td> <td align="center">√</td> <td align="center">√</td> <td align="left">上传基本信息</td> </tr> <tr> <td align="center">15</td> <td align="center">0x0900_0xF7</td> <td align="center">√</td> <td align="center">√</td> <td align="left">外设工作状态</td> </tr> <tr> <td align="center">16</td> <td align="center">0x0900_0xF8</td> <td align="center">√</td> <td align="center">√</td> <td align="left">外设系统信息</td> </tr> <tr> <td align="center">17</td> <td align="center">0x8900</td> <td align="center">√</td> <td align="center">√</td> <td align="left">查询基本信息</td> </tr> <tr> <td align="center">18</td> <td align="center">0x8900_0xF7</td> <td align="center">√</td> <td align="center">√</td> <td align="left">外设工作状态</td> </tr> <tr> <td align="center">19</td> <td align="center">0x8900_0xF8</td> <td align="center">√</td> <td align="center">√</td> <td align="left">外设系统信息</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">使用方法</h2><a id="user-content-使用方法-1" class="anchor" aria-label="Permalink: 使用方法" href="#使用方法-1"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="DI: IServiceCollection serviceDescriptors1 = new ServiceCollection(); serviceDescriptors1.AddJT808Configure() .AddSuBiaoConfigure(); 全局注册: JT808Serializer.Instance.Register(JT808_SuBiao_Constants.GetCurrentAssembly());"><pre><span class="pl-s1">DI</span><span class="pl-c1">:</span> <span class="pl-smi">IServiceCollection</span> <span class="pl-s1">serviceDescriptors1</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-smi">ServiceCollection</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">serviceDescriptors1</span><span class="pl-kos">.</span><span class="pl-en">AddJT808Configure</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">.</span><span class="pl-en">AddSuBiaoConfigure</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">全局注册</span><span class="pl-c1">:</span> <span class="pl-s1">JT808Serializer</span><span class="pl-kos">.</span><span class="pl-s1">Instance</span><span class="pl-kos">.</span><span class="pl-en">Register</span><span class="pl-kos">(</span><span class="pl-s1">JT808_SuBiao_Constants</span><span class="pl-kos">.</span><span class="pl-en">GetCurrentAssembly</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">主动安全(粤标)扩展 JT808 协议消息对照表</h2><a id="user-content-主动安全粤标扩展-jt808-协议消息对照表" class="anchor" aria-label="Permalink: 主动安全(粤标)扩展 JT808 协议消息对照表" href="#主动安全粤标扩展-jt808-协议消息对照表"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <blockquote> <p dir="auto">注意:基于 JT/T808 2019 版本</p> </blockquote> <markdown-accessiblity-table><table> <thead> <tr> <th align="center">序号</th> <th align="center">消息 ID</th> <th align="center">完成情况</th> <th align="center">测试情况</th> <th align="left">消息体名称</th> </tr> </thead> <tbody> <tr> <td align="center">1</td> <td align="center">0x1210</td> <td align="center">√</td> <td align="center">√</td> <td align="left">报警附件信息消息</td> </tr> <tr> <td align="center">2</td> <td align="center">0x1211</td> <td align="center">√</td> <td align="center">√</td> <td align="left">文件信息上传</td> </tr> <tr> <td align="center">3</td> <td align="center">0x1212</td> <td align="center">√</td> <td align="center">√</td> <td align="left">文件上传完成消息</td> </tr> <tr> <td align="center">4</td> <td align="center">0x9208</td> <td align="center">√</td> <td align="center">√</td> <td align="left">报警附件上传指令</td> </tr> <tr> <td align="center">5</td> <td align="center">0x9212</td> <td align="center">√</td> <td align="center">√</td> <td align="left">文件上传完成消息应答</td> </tr> <tr> <td align="center">6</td> <td align="center">0x1FC4</td> <td align="center">√</td> <td align="center">√</td> <td align="left">终端升级进度上报</td> </tr> <tr> <td align="center">7</td> <td align="center">0x0200_0x64</td> <td align="center">√</td> <td align="center">√</td> <td align="left">高级驾驶辅助系统报警信息</td> </tr> <tr> <td align="center">8</td> <td align="center">0x0200_0x65</td> <td align="center">√</td> <td align="center">√</td> <td align="left">驾驶员状态监测系统报警信息</td> </tr> <tr> <td align="center">9</td> <td align="center">0x0200_0x66</td> <td align="center">√</td> <td align="center">√</td> <td align="left">胎压监测系统报警信息</td> </tr> <tr> <td align="center">10</td> <td align="center">0x0200_0x67</td> <td align="center">√</td> <td align="center">√</td> <td align="left">盲区监测系统报警信息</td> </tr> <tr> <td align="center">11</td> <td align="center">0x8103_0xF364</td> <td align="center">√</td> <td align="center">√</td> <td align="left">高级驾驶辅助系统参数</td> </tr> <tr> <td align="center">12</td> <td align="center">0x8103_0xF365</td> <td align="center">√</td> <td align="center">√</td> <td align="left">驾驶员状态监测系统参数</td> </tr> <tr> <td align="center">13</td> <td align="center">0x8103_0xF366</td> <td align="center">√</td> <td align="center">√</td> <td align="left">胎压监测系统参数</td> </tr> <tr> <td align="center">14</td> <td align="center">0x8103_0xF367</td> <td align="center">√</td> <td align="center">√</td> <td align="left">盲区监测系统参数</td> </tr> <tr> <td align="center">15</td> <td align="center">0x8103_0xF370</td> <td align="center">√</td> <td align="center">√</td> <td align="left">智能视频协议版本信息</td> </tr> <tr> <td align="center">16</td> <td align="center">0x0900</td> <td align="center">√</td> <td align="center">√</td> <td align="left">上传基本信息</td> </tr> <tr> <td align="center">17</td> <td align="center">0x0900_0xF7</td> <td align="center">√</td> <td align="center">√</td> <td align="left">外设工作状态</td> </tr> <tr> <td align="center">18</td> <td align="center">0x0900_0xF8</td> <td align="center">√</td> <td align="center">√</td> <td align="left">外设系统信息</td> </tr> <tr> <td align="center">19</td> <td align="center">0x8900</td> <td align="center">√</td> <td align="center">√</td> <td align="left">查询基本信息</td> </tr> <tr> <td align="center">20</td> <td align="center">0x8900_0xF7</td> <td align="center">√</td> <td align="center">√</td> <td align="left">外设工作状态</td> </tr> <tr> <td align="center">21</td> <td align="center">0x8900_0xF8</td> <td align="center">√</td> <td align="center">√</td> <td align="left">外设系统信息</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">使用方法</h2><a id="user-content-使用方法-2" class="anchor" aria-label="Permalink: 使用方法" href="#使用方法-2"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="DI: IServiceCollection serviceDescriptors1 = new ServiceCollection(); serviceDescriptors1.AddJT808Configure() .AddYueBiaoConfigure(); 全局注册: JT808Serializer.Instance.Register(JT808_YueBiao_Constants.GetCurrentAssembly());"><pre><span class="pl-s1">DI</span><span class="pl-c1">:</span> <span class="pl-smi">IServiceCollection</span> <span class="pl-s1">serviceDescriptors1</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-smi">ServiceCollection</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">serviceDescriptors1</span><span class="pl-kos">.</span><span class="pl-en">AddJT808Configure</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">.</span><span class="pl-en">AddYueBiaoConfigure</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">全局注册</span><span class="pl-c1">:</span> <span class="pl-s1">JT808Serializer</span><span class="pl-kos">.</span><span class="pl-s1">Instance</span><span class="pl-kos">.</span><span class="pl-en">Register</span><span class="pl-kos">(</span><span class="pl-s1">JT808_YueBiao_Constants</span><span class="pl-kos">.</span><span class="pl-en">GetCurrentAssembly</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div> </article></div></div></div></div></div> <!-- --> <!-- --> <script type="application/json" id="__PRIMER_DATA_:R0:__">{"resolvedServerColorMode":"day"}</script></div> </react-partial> <input type="hidden" data-csrf="true" value="XwHduUruG9n0GL6VQkCFmHtN6KcwEoRV/G+uagmgrkptgdc9uoMK8RH73QtKrvijy/e/8daIyCdCFcIuGTXx1g==" /> </div> <div data-view-component="true" class="Layout-sidebar"> <div class="BorderGrid about-margin" data-pjax> <div class="BorderGrid-row"> <div class="BorderGrid-cell"> <div class="hide-sm hide-md"> <h2 class="mb-3 h4">About</h2> <p class="f4 my-3"> JT/T808 protocol,JT808 protocol, GB808 protocol (support 2011, 2013, 2019 version) JT/T808协议、JT808协议、GB808协议(支持2011、2013、2019版本) </p> <h3 class="sr-only">Topics</h3> <div class="my-3"> <div class="f6"> <a href="/topics/tracker" title="Topic: tracker" data-view-component="true" class="topic-tag topic-tag-link"> tracker </a> <a href="/topics/csharp" title="Topic: csharp" data-view-component="true" class="topic-tag topic-tag-link"> csharp </a> <a href="/topics/dotnet" title="Topic: dotnet" data-view-component="true" class="topic-tag topic-tag-link"> dotnet </a> <a href="/topics/dotnetcore" title="Topic: dotnetcore" data-view-component="true" class="topic-tag topic-tag-link"> dotnetcore </a> <a href="/topics/gps" title="Topic: gps" data-view-component="true" class="topic-tag topic-tag-link"> gps </a> <a href="/topics/jt808" title="Topic: jt808" data-view-component="true" class="topic-tag topic-tag-link"> jt808 </a> <a href="/topics/808" title="Topic: 808" data-view-component="true" class="topic-tag topic-tag-link"> 808 </a> <a href="/topics/gb808" title="Topic: gb808" data-view-component="true" class="topic-tag topic-tag-link"> gb808 </a> <a href="/topics/jtt808" title="Topic: jtt808" data-view-component="true" class="topic-tag topic-tag-link"> jtt808 </a> <a href="/topics/jt1078" title="Topic: jt1078" data-view-component="true" class="topic-tag topic-tag-link"> jt1078 </a> <a href="/topics/1078" title="Topic: 1078" data-view-component="true" class="topic-tag topic-tag-link"> 1078 </a> <a href="/topics/jt19056" title="Topic: jt19056" data-view-component="true" class="topic-tag topic-tag-link"> jt19056 </a> <a href="/topics/gb19056" title="Topic: gb19056" data-view-component="true" class="topic-tag topic-tag-link"> gb19056 </a> <a href="/topics/jtt19056" title="Topic: jtt19056" data-view-component="true" class="topic-tag topic-tag-link"> jtt19056 </a> <a href="/topics/net7" title="Topic: net7" data-view-component="true" class="topic-tag topic-tag-link"> net7 </a> <a href="/topics/net8" title="Topic: net8" data-view-component="true" class="topic-tag topic-tag-link"> net8 </a> <a href="/topics/net9" title="Topic: net9" data-view-component="true" class="topic-tag topic-tag-link"> net9 </a> </div> </div> <h3 class="sr-only">Resources</h3> <div class="mt-2"> <a class="Link--muted" data-analytics-event="{"category":"Repository Overview","action":"click","label":"location:sidebar;file:readme"}" href="#readme-ov-file"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-book mr-2"> <path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"></path> </svg> Readme </a> </div> <h3 class="sr-only">License</h3> <div class="mt-2"> <a href="#MIT-1-ov-file" class="Link--muted" data-analytics-event="{"category":"Repository Overview","action":"click","label":"location:sidebar;file:license"}" > <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-law mr-2"> <path d="M8.75.75V2h.985c.304 0 .603.08.867.231l1.29.736c.038.022.08.033.124.033h2.234a.75.75 0 0 1 0 1.5h-.427l2.111 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.006.005-.01.01-.045.04c-.21.176-.441.327-.686.45C14.556 10.78 13.88 11 13 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L12.178 4.5h-.162c-.305 0-.604-.079-.868-.231l-1.29-.736a.245.245 0 0 0-.124-.033H8.75V13h2.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1 0-1.5h2.5V3.5h-.984a.245.245 0 0 0-.124.033l-1.289.737c-.265.15-.564.23-.869.23h-.162l2.112 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.016.015-.045.04c-.21.176-.441.327-.686.45C4.556 10.78 3.88 11 3 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L2.178 4.5H1.75a.75.75 0 0 1 0-1.5h2.234a.249.249 0 0 0 .125-.033l1.288-.737c.265-.15.564-.23.869-.23h.984V.75a.75.75 0 0 1 1.5 0Zm2.945 8.477c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L13 6.327Zm-10 0c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L3 6.327Z"></path> </svg> MIT license </a> </div> <include-fragment src="/SmallChi/JT808/hovercards/citation/sidebar_partial?tree_name=master"> </include-fragment> <div class="mt-2"> <a href="/SmallChi/JT808/activity" data-view-component="true" class="Link Link--muted"><svg text="gray" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-pulse mr-2"> <path d="M6 2c.306 0 .582.187.696.471L10 10.731l1.304-3.26A.751.751 0 0 1 12 7h3.25a.75.75 0 0 1 0 1.5h-2.742l-1.812 4.528a.751.751 0 0 1-1.392 0L6 4.77 4.696 8.03A.75.75 0 0 1 4 8.5H.75a.75.75 0 0 1 0-1.5h2.742l1.812-4.529A.751.751 0 0 1 6 2Z"></path> </svg> <span class="color-fg-muted">Activity</span></a> </div> <h3 class="sr-only">Stars</h3> <div class="mt-2"> <a href="/SmallChi/JT808/stargazers" data-view-component="true" class="Link Link--muted"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star mr-2"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg> <strong>573</strong> stars</a> </div> <h3 class="sr-only">Watchers</h3> <div class="mt-2"> <a href="/SmallChi/JT808/watchers" data-view-component="true" class="Link Link--muted"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-eye mr-2"> <path d="M8 2c1.981 0 3.671.992 4.933 2.078 1.27 1.091 2.187 2.345 2.637 3.023a1.62 1.62 0 0 1 0 1.798c-.45.678-1.367 1.932-2.637 3.023C11.67 13.008 9.981 14 8 14c-1.981 0-3.671-.992-4.933-2.078C1.797 10.83.88 9.576.43 8.898a1.62 1.62 0 0 1 0-1.798c.45-.677 1.367-1.931 2.637-3.022C4.33 2.992 6.019 2 8 2ZM1.679 7.932a.12.12 0 0 0 0 .136c.411.622 1.241 1.75 2.366 2.717C5.176 11.758 6.527 12.5 8 12.5c1.473 0 2.825-.742 3.955-1.715 1.124-.967 1.954-2.096 2.366-2.717a.12.12 0 0 0 0-.136c-.412-.621-1.242-1.75-2.366-2.717C10.824 4.242 9.473 3.5 8 3.5c-1.473 0-2.825.742-3.955 1.715-1.124.967-1.954 2.096-2.366 2.717ZM8 10a2 2 0 1 1-.001-3.999A2 2 0 0 1 8 10Z"></path> </svg> <strong>31</strong> watching</a> </div> <h3 class="sr-only">Forks</h3> <div class="mt-2"> <a href="/SmallChi/JT808/forks" data-view-component="true" class="Link Link--muted"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-2"> <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path> </svg> <strong>262</strong> forks</a> </div> <div class="mt-2"> <a class="Link--muted" href="/contact/report-content?content_url=https%3A%2F%2Fgithub.com%2FSmallChi%2FJT808&report=SmallChi+%28user%29"> Report repository </a> </div> </div> </div> </div> <div class="BorderGrid-row"> <div class="BorderGrid-cell"> <h2 class="h4 mb-3" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame"> <a href="/SmallChi/JT808/releases" data-view-component="true" class="Link--primary no-underline Link">Releases <span title="26" data-view-component="true" class="Counter">26</span></a></h2> <a class="Link--primary d-flex no-underline" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" href="/SmallChi/JT808/releases/tag/v2.7.2"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-tag flex-shrink-0 mt-1 color-fg-success"> <path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"></path> </svg> <div class="ml-2 min-width-0"> <div class="d-flex"> <span class="css-truncate css-truncate-target text-bold mr-2" style="max-width: none;">v2.7.2</span> <span title="Label: Latest" data-view-component="true" class="Label Label--success flex-shrink-0"> Latest </span> </div> <div class="text-small color-fg-muted"><relative-time datetime="2025-04-01T12:22:09Z" class="no-wrap">Apr 1, 2025</relative-time></div> </div> </a> <div data-view-component="true" class="mt-3"> <a text="small" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" href="/SmallChi/JT808/releases" data-view-component="true" class="Link">+ 25 releases</a></div> </div> </div> <div class="BorderGrid-row"> <div class="BorderGrid-cell"> <h2 class="h4 mb-3"> <a href="/users/SmallChi/packages?repo_name=JT808" data-view-component="true" class="Link--primary no-underline Link d-flex flex-items-center">Packages <span title="0" hidden="hidden" data-view-component="true" class="Counter ml-1">0</span></a></h2> <div class="text-small color-fg-muted" > No packages published <br> </div> </div> </div> <div class="BorderGrid-row" hidden> <div class="BorderGrid-cell"> <include-fragment src="/SmallChi/JT808/used_by_list" accept="text/fragment+html"> </include-fragment> </div> </div> <div class="BorderGrid-row"> <div class="BorderGrid-cell"> <h2 class="h4 mb-3"> <a href="/SmallChi/JT808/graphs/contributors" data-view-component="true" class="Link--primary no-underline Link d-flex flex-items-center">Contributors <span title="7" data-view-component="true" class="Counter ml-1">7</span></a></h2> <include-fragment src="/SmallChi/JT808/contributors_list?count=7&current_repository=JT808&items_to_show=7" aria-busy="true" aria-label="Loading contributors"> <ul class="list-style-none d-flex flex-wrap mb-n2"> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> </ul> </include-fragment> </div> </div> <div class="BorderGrid-row"> <div class="BorderGrid-cell"> <h2 class="h4 mb-3">Languages</h2> <div class="mb-2"> <span data-view-component="true" class="Progress"> <span style="background-color:#178600 !important;;width: 100.0%;" itemprop="keywords" data-view-component="true" class="Progress-item color-bg-success-emphasis"></span> </span></div> <ul class="list-style-none"> <li class="d-inline"> <a class="d-inline-flex flex-items-center flex-nowrap Link--secondary no-underline text-small mr-3" href="/SmallChi/JT808/search?l=c%23" data-ga-click="Repository, language stats search click, location:repo overview"> <svg style="color:#178600;" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-dot-fill mr-2"> <path d="M8 4a4 4 0 1 1 0 8 4 4 0 0 1 0-8Z"></path> </svg> <span class="color-fg-default text-bold mr-1">C#</span> <span>100.0%</span> </a> </li> </ul> </div> </div> </div> </div> </div></div> </div> </div> </turbo-frame> </main> </div> </div> <footer class="footer pt-8 pb-6 f6 color-fg-muted p-responsive" role="contentinfo" > <h2 class='sr-only'>Footer</h2> <div class="d-flex flex-justify-center flex-items-center flex-column-reverse flex-lg-row flex-wrap flex-lg-nowrap"> <div class="d-flex flex-items-center flex-shrink-0 mx-2"> <a aria-label="Homepage" title="GitHub" class="footer-octicon mr-2" href="https://github.com"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-mark-github"> <path d="M12 1C5.9225 1 1 5.9225 1 12C1 16.8675 4.14875 20.9787 8.52125 22.4362C9.07125 22.5325 9.2775 22.2025 9.2775 21.9137C9.2775 21.6525 9.26375 20.7862 9.26375 19.865C6.5 20.3737 5.785 19.1912 5.565 18.5725C5.44125 18.2562 4.905 17.28 4.4375 17.0187C4.0525 16.8125 3.5025 16.3037 4.42375 16.29C5.29 16.2762 5.90875 17.0875 6.115 17.4175C7.105 19.0812 8.68625 18.6137 9.31875 18.325C9.415 17.61 9.70375 17.1287 10.02 16.8537C7.5725 16.5787 5.015 15.63 5.015 11.4225C5.015 10.2262 5.44125 9.23625 6.1425 8.46625C6.0325 8.19125 5.6475 7.06375 6.2525 5.55125C6.2525 5.55125 7.17375 5.2625 9.2775 6.67875C10.1575 6.43125 11.0925 6.3075 12.0275 6.3075C12.9625 6.3075 13.8975 6.43125 14.7775 6.67875C16.8813 5.24875 17.8025 5.55125 17.8025 5.55125C18.4075 7.06375 18.0225 8.19125 17.9125 8.46625C18.6138 9.23625 19.04 10.2125 19.04 11.4225C19.04 15.6437 16.4688 16.5787 14.0213 16.8537C14.42 17.1975 14.7638 17.8575 14.7638 18.8887C14.7638 20.36 14.75 21.5425 14.75 21.9137C14.75 22.2025 14.9563 22.5462 15.5063 22.4362C19.8513 20.9787 23 16.8537 23 12C23 5.9225 18.0775 1 12 1Z"></path> </svg> </a> <span> © 2025 GitHub, Inc. </span> </div> <nav aria-label="Footer"> <h3 class="sr-only" id="sr-footer-heading">Footer navigation</h3> <ul class="list-style-none d-flex flex-justify-center flex-wrap mb-2 mb-lg-0" aria-labelledby="sr-footer-heading"> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to Terms","label":"text:terms"}" href="https://docs.github.com/site-policy/github-terms/github-terms-of-service" data-view-component="true" class="Link--secondary Link">Terms</a> </li> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to privacy","label":"text:privacy"}" href="https://docs.github.com/site-policy/privacy-policies/github-privacy-statement" data-view-component="true" class="Link--secondary Link">Privacy</a> </li> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to security","label":"text:security"}" href="https://github.com/security" data-view-component="true" class="Link--secondary Link">Security</a> </li> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to status","label":"text:status"}" href="https://www.githubstatus.com/" data-view-component="true" class="Link--secondary Link">Status</a> </li> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to docs","label":"text:docs"}" href="https://docs.github.com/" data-view-component="true" class="Link--secondary Link">Docs</a> </li> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to contact","label":"text:contact"}" href="https://support.github.com?tags=dotcom-footer" data-view-component="true" class="Link--secondary Link">Contact</a> </li> <li class="mx-2" > <cookie-consent-link> <button type="button" class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent" data-action="click:cookie-consent-link#showConsentManagement" data-analytics-event="{"location":"footer","action":"cookies","context":"subfooter","tag":"link","label":"cookies_link_subfooter_footer"}" > Manage cookies </button> </cookie-consent-link> </li> <li class="mx-2"> <cookie-consent-link> <button type="button" class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent" data-action="click:cookie-consent-link#showConsentManagement" data-analytics-event="{"location":"footer","action":"dont_share_info","context":"subfooter","tag":"link","label":"dont_share_info_link_subfooter_footer"}" > Do not share my personal information </button> </cookie-consent-link> </li> </ul> </nav> </div> </footer> <ghcc-consent id="ghcc" class="position-fixed bottom-0 left-0" style="z-index: 999999" data-initial-cookie-consent-allowed="" data-cookie-consent-required="false"></ghcc-consent> <div id="ajax-error-message" class="ajax-error-message flash flash-error" hidden> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button> You can’t perform that action at this time. </div> <template id="site-details-dialog"> <details class="details-reset details-overlay details-overlay-dark lh-default color-fg-default hx_rsm" open> <summary role="button" aria-label="Close dialog"></summary> <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal"> <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button> <div class="octocat-spinner my-6 js-details-dialog-spinner"></div> </details-dialog> </details> </template> <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;"> <div class="Popover-message Popover-message--bottom-left Popover-message--large Box color-shadow-large" style="width:360px;"> </div> </div> <template id="snippet-clipboard-copy-button"> <div class="zeroclipboard-container position-absolute right-0 top-0"> <clipboard-copy aria-label="Copy" class="ClipboardButton btn js-clipboard-copy m-2 p-0" data-copy-feedback="Copied!" data-tooltip-direction="w"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon m-2"> <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none m-2"> <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path> </svg> </clipboard-copy> </div> </template> <template id="snippet-clipboard-copy-button-unpositioned"> <div class="zeroclipboard-container"> <clipboard-copy aria-label="Copy" class="ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center" data-copy-feedback="Copied!" data-tooltip-direction="w"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon"> <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none"> <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path> </svg> </clipboard-copy> </div> </template> </div> <div id="js-global-screen-reader-notice" class="sr-only mt-n1" aria-live="polite" aria-atomic="true" ></div> <div id="js-global-screen-reader-notice-assertive" class="sr-only mt-n1" aria-live="assertive" aria-atomic="true"></div> </body> </html>