diff --git a/.gitignore b/.gitignore
index a7b2f501..64db009c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,11 @@
/.env
**.log
+/docs/ble/_sources/
+/docs/ble/.doctrees/
+/docs/ble/.buildinfo
+/docs/ble/objects.inv
+
/test.html
/link_results
.vscode
diff --git a/docs/_config.yml b/docs/_config.yml
index d1eff18c..0eb1fbf0 100644
--- a/docs/_config.yml
+++ b/docs/_config.yml
@@ -163,8 +163,6 @@ collections:
tutorials:
output: true
sort_by: lesson
- demos:
- output: true
# Defaults
defaults:
@@ -176,6 +174,17 @@ defaults:
read_time: true
toc: true
toc_sticky: true
+ - scope:
+ path: ble
+ values:
+ layout: spec
+ canonical_url: https://gopro.github.io/OpenGoPro/ble # Minimal mistakes is overwriting this to bad value in seo.html
+ - scope:
+ path: http
+ values:
+ layout: spec
+ canonical_url: https://gopro.github.io/OpenGoPro/http # Minimal mistakes is overwriting this to bad value in seo.html
+
jekyll-spaceship:
# default enabled processors
diff --git a/docs/_includes/head/custom.html b/docs/_includes/head/custom.html
index af927485..23de18d7 100644
--- a/docs/_includes/head/custom.html
+++ b/docs/_includes/head/custom.html
@@ -1,3 +1,15 @@
+
+
+
+{% include seo.html %}
+
+
+
+
+
+
+
+
+
+
+
+
+{% if site.head_scripts %}
+ {% for script in site.head_scripts %}
+
+ {% endfor %}
+{% endif %}
\ No newline at end of file
diff --git a/docs/_includes/masthead_spec.html b/docs/_includes/masthead_spec.html
new file mode 100644
index 00000000..eeae23a3
--- /dev/null
+++ b/docs/_includes/masthead_spec.html
@@ -0,0 +1,25 @@
+{% capture logo_path %}{{ site.logo }}{% endcapture %}
+
+
- {% include sidebar.html %}
-
-
- {% if page.title %}{% endif %}
- {% if page.excerpt %}{% endif %}
- {% if page.date %}{% endif %}
- {% if page.last_modified_at %}{% endif %}
-
-
- {% unless page.header.overlay_color or page.header.overlay_image %}
-
- {% if page.title %}{{ page.title | markdownify | remove: "
" | remove: "
" }}{% endif %}
- {% include page__meta.html %}
-
- {% endunless %}
-
-
- {% if page.toc %}
-
- {% endif %}
-
- {{ content }}
- {% if page.link %}{% endif %}
-
-
-
-
- {% if page.share %}{% include social-share.html %}{% endif %}
-
- {% include post_pagination.html %}
-
-
-
\ No newline at end of file
diff --git a/docs/_layouts/protobuf_markdown.tmpl b/docs/_layouts/protobuf_markdown.tmpl
deleted file mode 100644
index bcf2c48f..00000000
--- a/docs/_layouts/protobuf_markdown.tmpl
+++ /dev/null
@@ -1,92 +0,0 @@
----
-permalink: /protos
-read_time: false
-sidebar:
- nav: 'specs'
----
-
-# Protocol Documentation
-This page provides documentation for all of the protobuf message fields.
-
-## Protobuf Files
-{{range .Files}}
-{{$file_name := .Name}}- [{{.Name}}](#{{.Name | anchor}})
-{{end}}
-{{range .Files}}
-{{$file_name := .Name}}
-
+
diff --git a/docs/_sass/minimal-mistakes/_base_spec.scss b/docs/_sass/minimal-mistakes/_base_spec.scss
new file mode 100644
index 00000000..e3bf5ba9
--- /dev/null
+++ b/docs/_sass/minimal-mistakes/_base_spec.scss
@@ -0,0 +1,82 @@
+/* ==========================================================================
+ BASE ELEMENTS
+ ========================================================================== */
+
+html {
+ /* sticky footer fix */
+ position: relative;
+ min-height: 100%;
+}
+
+.masthead__menu-item a {
+ color: rgb(255, 255, 255) !important;
+}
+
+body {
+ margin: 0;
+ padding: $masthead-height 0 0;
+ color: $text-color;
+ font-family: $global-font-family;
+ line-height: 1.5;
+
+ &.overflow--hidden {
+ /* when primary navigation is visible, the content in the background won't scroll */
+ overflow: hidden;
+ }
+}
+
+/* reduce orphans and widows when printing */
+
+p,
+pre,
+blockquote,
+ul,
+ol,
+dl,
+figure,
+table,
+fieldset {
+ orphans: 3;
+ widows: 3;
+}
+
+pre {
+ overflow-x: auto; /* add scrollbars to wide code blocks*/
+}
+
+
+/* Fix IE9 SVG bug */
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+/*
+ Global animation transition
+ ========================================================================== */
+
+b,
+i,
+strong,
+em,
+blockquote,
+p,
+q,
+span,
+figure,
+img,
+h1,
+h2,
+header,
+input,
+a,
+tr,
+td,
+form button,
+input[type="submit"],
+.btn,
+.highlight,
+.archive__item-teaser {
+ -webkit-transition: $global-transition;
+ transition: $global-transition;
+}
diff --git a/docs/assets/css/custom.css b/docs/assets/css/custom.css
index 0000c1db..b471e6c5 100644
--- a/docs/assets/css/custom.css
+++ b/docs/assets/css/custom.css
@@ -259,3 +259,8 @@ img.mermaid {
.panel p {
margin: 0 0 0.2em !important;
}
+
+/* https://www.bryanbraun.com/anchorjs/#pages-with-a-sticky-navbar */
+:target {
+ scroll-margin-top: 4em;
+}
diff --git a/docs/assets/css/main_spec.scss b/docs/assets/css/main_spec.scss
new file mode 100644
index 00000000..908025f4
--- /dev/null
+++ b/docs/assets/css/main_spec.scss
@@ -0,0 +1,23 @@
+---
+# Only the main Sass file needs front matter (the dashes are enough)
+---
+
+/* Variables */
+@import "minimal-mistakes/variables";
+
+/* Mixins and functions */
+@import "minimal-mistakes/vendor/breakpoint/breakpoint";
+@include breakpoint-set("to ems", true);
+@import "minimal-mistakes/vendor/magnific-popup/magnific-popup"; // Magnific Popup
+@import "minimal-mistakes/vendor/susy/susy";
+@import "minimal-mistakes/mixins";
+
+/* Core CSS */
+@import "minimal-mistakes/reset";
+@import "minimal-mistakes/base_spec";
+@import "minimal-mistakes/animations";
+
+/* Components */
+@import "minimal-mistakes/masthead";
+@import "minimal-mistakes/search";
+@import "minimal-mistakes/navigation";
diff --git a/docs/ble/.buildinfo b/docs/ble/.buildinfo
deleted file mode 100644
index f1c5c582..00000000
--- a/docs/ble/.buildinfo
+++ /dev/null
@@ -1,4 +0,0 @@
-# Sphinx build info version 1
-# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
-config: 89a0577da11095cac3736955c6affe01
-tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/docs/ble/.doctrees/environment.pickle b/docs/ble/.doctrees/environment.pickle
deleted file mode 100644
index 95881ba9..00000000
Binary files a/docs/ble/.doctrees/environment.pickle and /dev/null differ
diff --git a/docs/ble/.doctrees/features/access_points.doctree b/docs/ble/.doctrees/features/access_points.doctree
deleted file mode 100644
index 0935b805..00000000
Binary files a/docs/ble/.doctrees/features/access_points.doctree and /dev/null differ
diff --git a/docs/ble/.doctrees/features/cohn.doctree b/docs/ble/.doctrees/features/cohn.doctree
deleted file mode 100644
index 4e688231..00000000
Binary files a/docs/ble/.doctrees/features/cohn.doctree and /dev/null differ
diff --git a/docs/ble/.doctrees/features/control.doctree b/docs/ble/.doctrees/features/control.doctree
deleted file mode 100644
index c88be43f..00000000
Binary files a/docs/ble/.doctrees/features/control.doctree and /dev/null differ
diff --git a/docs/ble/.doctrees/features/hilights.doctree b/docs/ble/.doctrees/features/hilights.doctree
deleted file mode 100644
index ff928199..00000000
Binary files a/docs/ble/.doctrees/features/hilights.doctree and /dev/null differ
diff --git a/docs/ble/.doctrees/features/live_streaming.doctree b/docs/ble/.doctrees/features/live_streaming.doctree
deleted file mode 100644
index fc01018b..00000000
Binary files a/docs/ble/.doctrees/features/live_streaming.doctree and /dev/null differ
diff --git a/docs/ble/.doctrees/features/presets.doctree b/docs/ble/.doctrees/features/presets.doctree
deleted file mode 100644
index 07e5f379..00000000
Binary files a/docs/ble/.doctrees/features/presets.doctree and /dev/null differ
diff --git a/docs/ble/.doctrees/features/query.doctree b/docs/ble/.doctrees/features/query.doctree
deleted file mode 100644
index 99c05d79..00000000
Binary files a/docs/ble/.doctrees/features/query.doctree and /dev/null differ
diff --git a/docs/ble/.doctrees/features/settings.doctree b/docs/ble/.doctrees/features/settings.doctree
deleted file mode 100644
index 2bf29427..00000000
Binary files a/docs/ble/.doctrees/features/settings.doctree and /dev/null differ
diff --git a/docs/ble/.doctrees/features/statuses.doctree b/docs/ble/.doctrees/features/statuses.doctree
deleted file mode 100644
index dbb1f473..00000000
Binary files a/docs/ble/.doctrees/features/statuses.doctree and /dev/null differ
diff --git a/docs/ble/.doctrees/index.doctree b/docs/ble/.doctrees/index.doctree
deleted file mode 100644
index 0c6160a1..00000000
Binary files a/docs/ble/.doctrees/index.doctree and /dev/null differ
diff --git a/docs/ble/.doctrees/protocol.doctree b/docs/ble/.doctrees/protocol.doctree
deleted file mode 100644
index e74c1d74..00000000
Binary files a/docs/ble/.doctrees/protocol.doctree and /dev/null differ
diff --git a/docs/ble/.doctrees/protocol/ble_setup.doctree b/docs/ble/.doctrees/protocol/ble_setup.doctree
deleted file mode 100644
index 46d013fd..00000000
Binary files a/docs/ble/.doctrees/protocol/ble_setup.doctree and /dev/null differ
diff --git a/docs/ble/.doctrees/protocol/data_protocol.doctree b/docs/ble/.doctrees/protocol/data_protocol.doctree
deleted file mode 100644
index 38a1478b..00000000
Binary files a/docs/ble/.doctrees/protocol/data_protocol.doctree and /dev/null differ
diff --git a/docs/ble/.doctrees/protocol/id_tables.doctree b/docs/ble/.doctrees/protocol/id_tables.doctree
deleted file mode 100644
index 38614aa1..00000000
Binary files a/docs/ble/.doctrees/protocol/id_tables.doctree and /dev/null differ
diff --git a/docs/ble/.doctrees/protocol/protobuf.doctree b/docs/ble/.doctrees/protocol/protobuf.doctree
deleted file mode 100644
index 62d510dc..00000000
Binary files a/docs/ble/.doctrees/protocol/protobuf.doctree and /dev/null differ
diff --git a/docs/ble/.doctrees/protocol/state_management.doctree b/docs/ble/.doctrees/protocol/state_management.doctree
deleted file mode 100644
index aec39266..00000000
Binary files a/docs/ble/.doctrees/protocol/state_management.doctree and /dev/null differ
diff --git a/docs/ble/_sources/features/access_points.rst.txt b/docs/ble/_sources/features/access_points.rst.txt
deleted file mode 100644
index 7bc3edf8..00000000
--- a/docs/ble/_sources/features/access_points.rst.txt
+++ /dev/null
@@ -1,100 +0,0 @@
-Access Point
-============
-
-The camera supports connecting to access points in `Station Mode (STA)
`__.
-This is necessary for features such as :doc:`Live Streaming ` where the camera needs an
-Internet connection. While in this mode, HTTP command and control of the camera is not available on some cameras.
-
-Operations
-----------
-
-.. operation:protobuf:: Scan for Access Points
-
- .. image:: ../../assets/images/plantuml_ble_scan_for_ssids.png
-
- .. operation:protobuf-message:: request
- :feature-id: 0x02
- :action-id: 0x02
- :uuid: Network Management Command
- :message: RequestStartScan
-
- .. operation:protobuf-message:: response
- :feature-id: 0x02
- :action-id: 0x82
- :uuid: Network Management Response
- :message: ResponseStartScanning
-
- .. operation:protobuf-message:: notification
- :feature-id: 0x02
- :action-id: 0x0B
- :uuid: Network Management Response
- :message: NotifStartScanning
-
-.. operation:protobuf:: Get AP Scan Results
-
- .. operation:protobuf-message:: request
- :feature-id: 0x02
- :action-id: 0x04
- :uuid: Network Management Command
- :message: RequestGetApEntries
-
- .. operation:protobuf-message:: response
- :feature-id: 0x02
- :action-id: 0x84
- :uuid: Network Management Response
- :message: ResponseGetApEntries
-
-.. operation:protobuf:: Connect to Provisioned Access Point
-
- .. image:: ../../assets/images/plantuml_ble_connect_ap.png
-
- .. operation:protobuf-message:: request
- :feature-id: 0x02
- :action-id: 0x04
- :uuid: Network Management Command
- :message: RequestConnect
-
- .. operation:protobuf-message:: response
- :feature-id: 0x02
- :action-id: 0x84
- :uuid: Network Management Response
- :message: ResponseConnect
-
- .. operation:protobuf-message:: notification
- :feature-id: 0x02
- :action-id: 0x0C
- :uuid: Network Management Response
- :message: NotifProvisioningState
-
-.. operation:protobuf:: Connect to a New Access Point
-
- .. note:: This should only be done once to provision the AP; subsequent connections should use RequestConnect.
-
- .. image:: ../../assets/images/plantuml_ble_connect_new_ap.png
-
- .. operation:protobuf-message:: request
- :feature-id: 0x02
- :action-id: 0x05
- :uuid: Network Management Command
- :message: RequestConnectNew
-
- .. operation:protobuf-message:: response
- :feature-id: 0x02
- :action-id: 0x85
- :uuid: Network Management Response
- :message: ResponseConnectNew
-
- .. operation:protobuf-message:: notification
- :feature-id: 0x02
- :action-id: 0x0C
- :uuid: Network Management Response
- :message: NotifProvisioningState
-
-Disconnect from Access Point
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-To disconnect from a connected Access Point and return the camera to AP mode, use
-`Set AP Control <../features/control.html#set_ap_control>`__
-to set AP Control: ON, which disables Station Mode.
-
-.. image:: ../../assets/images/plantuml_ble_disconnect_ap.png
diff --git a/docs/ble/_sources/features/cohn.rst.txt b/docs/ble/_sources/features/cohn.rst.txt
deleted file mode 100644
index 1990522d..00000000
--- a/docs/ble/_sources/features/cohn.rst.txt
+++ /dev/null
@@ -1,156 +0,0 @@
-Camera on the Home Network
-**************************
-
-Some cameras support Camera On the Home Network (COHN). This capability allows the client to perform command and control
-with the camera indirectly through an access point such as a router at home. For security purposes, all communications
-are performed over HTTPS.
-
-================= =========
-Camera Supported
-================= =========
-Hero12 Black ✔
-Hero11 Black Mini ❌
-Hero11 Black ❌
-Hero10 Black ❌
-Hero9 Black ❌
-================= =========
-
-Certificates
-============
-
-Secure communication with the camera over HTTPS requires two things: a trusted
-`SSL/TLS `_ certificate and Basic auth
-username/password used in the HTTPS header.
-
-A provisioned camera has two certificates:
-
-- A Root CA cert provided to the client, which has a 1 year lifespan
-- A Camera cert, which contains the camera's current IP address on the local network and is signed by the Root CA cert
-
-This use of a `certificate chain `_ allows the camera's IP
-address to change (e.g. when DHCP lease expires or when access point is reset/replaced) without the client needing to
-download and install/trust a new certificate.
-
-Verifying Certificate
----------------------
-
-The camera acts as the Root Certificate Authority in creating the COHN certificate (Root CA cert). Clients can verify
-that the certificate is valid using utilities such as openssl:
-
-.. code-block:: shell
-
- $ openssl verify -CAfile '/path/to/GoProRootCA.crt' '/path/to/GoProRootCA.crt'
- GoProRootCA.crt: OK
-
-View Certificate Details
-------------------------
-
-Most operating systems have utilities to view details about a SSL/TLS certificate:
-
-- MacOS: Right-mouse-click >> Quick Look
-- Windows: Right-mouse-click >> Properties
-- Ubuntu: Right-mouse-click >> Open with View File
-- `OpenSSL `_ : openssl x509 -in /path/to/GoProRootCA.crt -noout -text
-
-Provisioning Procedure
-======================
-
-In order to use the COHN capability, the camera must first be provisioned for COHN. At a high level, the provisioning process
-is as follows:
-
-1. Instruct the GoPro to `create `__ the COHN certificate
-2. `Get `__ the created COHN certificate
-3. `Get `__ the Basic auth credentials
-4. Connect the camera to an :doc:`access point`
-
-.. tip:: Depending on the use case, some of these steps can be performed via `HTTP `_
-
-.. image:: ../../assets/images/plantuml_ble_cohn_provision.png
-
-Once the camera is provisioned, the client can communicate with the camera via HTTPS. The camera supports nearly all
-functionality over HTTPS that it does over HTTP. For more details about HTTP/HTTPS, see the
-Open GoPro `HTTP specification `_.
-
-Operations
-==========
-
-.. operation:protobuf:: Clear COHN Certificate
- :unsupported: boilers kongs pismo sultans
-
- .. operation:protobuf-message:: request
- :feature-id: 0xF1
- :action-id: 0x66
- :uuid: Command
- :message: WSDK_RequestClearCOHNCert
-
- .. operation:protobuf-message:: response
- :feature-id: 0xF1
- :action-id: 0xE6
- :uuid: Response
- :message: ResponseGeneric
-
-.. operation:protobuf:: Create COHN Certificate
- :unsupported: boilers kongs pismo sultans
-
- .. operation:protobuf-message:: request
- :feature-id: 0xF1
- :action-id: 0x67
- :uuid: Command
- :message: WSDK_RequestCreateCOHNCert
-
- .. operation:protobuf-message:: response
- :feature-id: 0xF1
- :action-id: 0xE7
- :uuid: Response
- :message: ResponseGeneric
-
-.. operation:protobuf:: Get COHN Certificate
- :unsupported: boilers kongs pismo sultans
-
- .. operation:protobuf-message:: request
- :feature-id: 0xF5
- :action-id: 0x6E
- :uuid: Command
- :message: WSDK_RequestCOHNCert
-
- .. operation:protobuf-message:: response
- :feature-id: 0xF5
- :action-id: 0xEE
- :uuid: Response
- :message: WSDK_ResponseCOHNCert
-
-.. operation:protobuf:: Get COHN Status
- :unsupported: boilers kongs pismo sultans
-
- .. operation:protobuf-message:: request
- :feature-id: 0xF5
- :action-id: 0x6F
- :uuid: Command
- :message: WSDK_RequestGetCOHNStatus
-
- .. operation:protobuf-message:: response
- :feature-id: 0xF5
- :action-id: 0xEF
- :uuid: Response
- :message: WSDK_NotifyCOHNStatus
-
- .. operation:protobuf-message:: notification
- :feature-id: 0xF5
- :action-id: 0xEF
- :uuid: Response
- :message: WSDK_NotifyCOHNStatus
-
-.. operation:protobuf:: Set COHN Setting
- :unsupported: boilers kongs pismo sultans
-
- .. operation:protobuf-message:: request
- :feature-id: 0xF1
- :action-id: 0x65
- :uuid: Command
- :message: WSDK_RequestSetCOHNSetting
-
- .. operation:protobuf-message:: response
- :feature-id: 0xF1
- :action-id: 0xE5
- :uuid: Response
- :message: ResponseGeneric
diff --git a/docs/ble/_sources/features/control.rst.txt b/docs/ble/_sources/features/control.rst.txt
deleted file mode 100644
index 85b418b0..00000000
--- a/docs/ble/_sources/features/control.rst.txt
+++ /dev/null
@@ -1,156 +0,0 @@
-Control
-=======
-
-This page will detail operations to command and control the GoPro.
-
-Operations
-----------
-
-.. operation:tlv-command:: Keep Alive
- :id: 0x5B
-
- In order to maximize battery life, GoPro cameras automatically go to sleep after some time. This logic is handled by
- a combination of the `Auto Power Down <../features/settings.html#setting_59>`_
- setting which most (but not all) cameras support and a Keep Alive message that the user can regularly send to the
- camera. The camera will automatically go to sleep if both timers reach zero.
-
- The Auto Power Down timer is reset when the user taps the LCD screen, presses a button on the camera,
- programmatically (un)sets the shutter, sets a setting, or loads a Preset.
-
- The Keep Alive timer is reset when the user sends a keep alive message.
-
- The best practice to prevent the camera from inadvertently going to sleep is to start sending Keep Alive
- messages every 3.0 seconds after a connection is established.
-
- .. operation:tlv-message:: Request
- :uuid: Setting
- :params:
- - keep_alive (uint8): hard-coded data set to 0x42
- .. operation:tlv-message:: Response
- :uuid: Settings Response
-
-.. operation:tlv-command:: Set Analytics
- :id: 0x50
-
- Configure the client as third-party for analytic tracking.
-
- .. operation:tlv-message:: Request
- :uuid: Command
- .. operation:tlv-message:: Response
- :uuid: Command Response
-
-.. operation:tlv-command:: Set AP Control
- :id: 0x17
-
- Enable / disable the camera's WiFi access point.
-
- .. operation:tlv-message:: Request
- :uuid: Command
- :params:
- - mode (uint8) : 0 to disable, 1 to enable
- .. operation:tlv-message:: Response
- :uuid: Command Response
-
-.. operation:protobuf:: Set Camera Control
- :unsupported: boilers
-
- .. image:: ../../assets/images/global_behaviors.png
-
- .. operation:protobuf-message:: request
- :feature-id: 0xF1
- :action-id: 0x69
- :uuid: Command
- :message: WSDK_RequestSetCameraControlStatus
-
- .. operation:protobuf-message:: response
- :feature-id: 0xF1
- :action-id: 0xE9
- :uuid: Command Response
- :message: ResponseGeneric
-
-.. operation:tlv-command:: Set Date Time
- :id: 0x0D
-
- Set the camera's date and time (without timezone and daylight-savings information).
-
- The **date_time** parameter is a 7 byte value defined as such:
-
- - uint16 year
- - uint8 month (1-12)
- - uint8 day (1-31)
- - uint8 hour (0-23)
- - uint8 minute (0-59)
- - uint8 second (0-59)
-
- For example, date time "2023-01-31 03:04:05" is serialized as **07:e7:01:1f:03:04:05**
-
- .. operation:tlv-message:: Request
- :uuid: Command
- :params:
- - date_time (7 byte date_time defined above): Date time to set
- .. operation:tlv-message:: Response
- :uuid: Command Response
-
-.. operation:tlv-command:: Set Local Date Time
- :id: 0x0F
- :unsupported: boilers kongs
-
- Set the cameras date and time with timezone and daylight-savings information.
-
- The **date_time** parameter is a 10 byte value defined as such:
-
- - uint16 year
- - uint8 month (1-12)
- - uint8 day (1-31)
- - uint8 hour (0-23)
- - uint8 minute (0-59)
- - uint8 second (0-59)
- - int16 `UTC offset `__ in minutes
- - uint8 is_dst (1 if daylight savings time is enabled, 0 otherwise)
-
- For example, date time "2023-01-31 03:04:05 (utc-02:00) (dst: on)" is serialized as **07:E7:01:1F:03:04:05:FF:88:01**
-
- .. operation:tlv-message:: Request
- :uuid: Command
- :params:
- - date_time (10 byte date_time defined above): Date time to set
- .. operation:tlv-message:: Response
- :uuid: Command Response
-
-.. operation:tlv-command:: Set Shutter
- :id: 0x01
-
- Set Shutter On / Off
-
- .. operation:tlv-message:: Request
- :uuid: Command
- :params:
- - mode (uint8) : 0 for off, 1 for on
- .. operation:tlv-message:: Response
- :uuid: Command Response
-
-.. operation:protobuf:: Set Turbo Transfer
-
- .. operation:protobuf-message:: request
- :feature-id: 0xF1
- :action-id: 0x6B
- :uuid: Command
- :message: WSDK_RequestSetTurboActive
-
- .. operation:protobuf-message:: response
- :feature-id: 0xF1
- :action-id: 0xEB
- :uuid: Command Response
- :message: ResponseGeneric
-
-.. operation:tlv-command:: Sleep
- :id: 0x05
-
- Put the camera to sleep.
-
- .. note:: The camera is still be connectable via BLE in sleep.
-
- .. operation:tlv-message:: Request
- :uuid: Command
- .. operation:tlv-message:: Response
- :uuid: Command Response
diff --git a/docs/ble/_sources/features/hilights.rst.txt b/docs/ble/_sources/features/hilights.rst.txt
deleted file mode 100644
index 2fbddfd1..00000000
--- a/docs/ble/_sources/features/hilights.rst.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-Hilights
-========
-
-Operations
-----------
-
-.. operation:tlv-command:: Hilight Moment
- :id: 0x18
-
- Add a hilight while recording. This can only be used during encoding.
-
- .. operation:tlv-message:: Request
- :uuid: Command
- .. operation:tlv-message:: Response
- :uuid: Command Response
\ No newline at end of file
diff --git a/docs/ble/_sources/features/live_streaming.rst.txt b/docs/ble/_sources/features/live_streaming.rst.txt
deleted file mode 100644
index 9265800b..00000000
--- a/docs/ble/_sources/features/live_streaming.rst.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-Live Streaming
-==============
-
-The camera supports the ability to stream to social media platforms such as Twitch, YouTube, Facebook or any other site
-that accepts RTMP(S) URLs.
-
-For additional details about getting started with RTMP, see
-`How to Stream `__.
-
-Live streaming with camera is accomplished as follows:
-
-1. Put the camera into :doc:`Station Mode` and connect it to an access point
-2. Set the `Livestream Mode `__
-3. Poll for `Livestream Status `__ until the camera indicates it is ready
-4. Set the shutter to begin live streaming
-5. Unset the shutter to stop live streaming
-
-.. image:: ../../assets/images/plantuml_ble_live_streaming.png
-
-Operations
-----------
-
-.. operation:protobuf:: Set Livestream Mode
-
- .. note:: The current Livestream Mode can be queried via
- `Get Livestream Status `__
-
-
- .. operation:protobuf-message:: request
- :feature-id: 0xF1
- :action-id: 0x79
- :uuid: Command
- :message: WSDK_RequestSetLiveStreamMode
-
- .. operation:protobuf-message:: response
- :feature-id: 0xF1
- :action-id: 0xF9
- :uuid: Command Response
- :message: ResponseGeneric
-
-.. operation:protobuf:: Get Livestream Status
-
- .. operation:protobuf-message:: request
- :feature-id: 0xF5
- :action-id: 0x74
- :uuid: Command
- :message: WSDK_RequestGetLiveStreamStatus
-
- .. operation:protobuf-message:: response
- :feature-id: 0xF5
- :action-id: 0xF4
- :uuid: Command Response
- :message: WSDK_NotifyLiveStreamStatus
-
- .. operation:protobuf-message:: notification
- :feature-id: 0xF5
- :action-id: 0xF5
- :uuid: Command Response
- :message: WSDK_NotifyLiveStreamStatus
diff --git a/docs/ble/_sources/features/presets.rst.txt b/docs/ble/_sources/features/presets.rst.txt
deleted file mode 100644
index a2e27a8f..00000000
--- a/docs/ble/_sources/features/presets.rst.txt
+++ /dev/null
@@ -1,92 +0,0 @@
-Presets
-=======
-
-The camera organizes many modes of operation into Presets.
-
-Depending on the camera's state, different collections of presets will be available for immediate loading and use.
-Below is a table of settings that affect the current preset collection and thereby which presets can be loaded
-
-=== =======================
-ID Setting
-=== =======================
-162 Max Lens
-173 Video Performance Mode
-175 Controls
-177 Enable Night Photo
-180 Video Mode
-186 Video Mode
-187 Lapse Mode
-189 Max Lens Mod
-190 Max Lens Mod Enable
-191 Photo Mode
-=== =======================
-
-Preset Groups
--------------
-
-Presets are organized into Preset Groups.
-
-To find the currently available Presets / Preset Groups, use `Get Available Presets <../features/presets.html#get_available_presets>`__
-
-Operations
-----------
-
-.. operation:protobuf:: Get Available Presets
-
- .. operation:protobuf-message:: request
- :feature-id: 0xF5
- :action-id: 0x72
- :uuid: Query
- :message: WSDK_RequestGetPresetStatus
-
- .. operation:protobuf-message:: response
- :feature-id: 0xF5
- :action-id: 0xF2
- :uuid: Query Response
- :message: WSDK_NotifyPresetStatus
-
- .. operation:protobuf-message:: notification
- :feature-id: 0xF5
- :action-id: 0xF3
- :uuid: Query Response
- :message: WSDK_NotifyPresetStatus
-
-.. operation:tlv-command:: Load Preset
- :id: 0x40
-
- Load preset by ID. The ID must be found from `Get Available Presets <../features/presets.html#get_available_presets>`__
-
- .. operation:tlv-message:: Request
- :uuid: Command
- :params:
- - preset (uint32): preset ID
- .. operation:tlv-message:: Response
- :uuid: Command Response
-
-
-.. operation:tlv-command:: Load Preset Group
- :id: 0x3E
-
- Load preset group by ID. The ID must be found from `Get Available Presets <../features/presets.html#get_available_presets>`__
-
- .. operation:tlv-message:: Request
- :uuid: Command
- :params:
- - preset (uint32): preset group ID
- .. operation:tlv-message:: Response
- :uuid: Command Response
-
-.. operation:protobuf:: Update Custom Preset
- :unsupported: boilers kongs pismo sultans
-
- .. operation:protobuf-message:: request
- :feature-id: 0xF1
- :action-id: 0x64
- :uuid: Command
- :message: WSDK_RequestCustomPresetUpdate
-
- .. operation:protobuf-message:: response
- :feature-id: 0xF1
- :action-id: 0xE4
- :uuid: Command Response
- :message: ResponseGeneric
diff --git a/docs/ble/_sources/features/query.rst.txt b/docs/ble/_sources/features/query.rst.txt
deleted file mode 100644
index e30588ea..00000000
--- a/docs/ble/_sources/features/query.rst.txt
+++ /dev/null
@@ -1,310 +0,0 @@
-Query
-=====
-
-This section describes operations to query various GoPro state / information.
-
-Operations
-----------
-
-.. operation:tlv-command:: Get Open GoPro Version
- :id: 0x51
-
- Get the current version of the Open GoPro API.
-
- .. operation:tlv-message:: Request
- :uuid: Command
- .. operation:tlv-message:: Response
- :uuid: Command Response
- :params:
- - major_length (uint8): length of major parameter
- - major (unsigned major_length bytes) : major part of version number
- - minor_length (uint8): length of minor parameter
- - minor (unsigned minor_length bytes) : minor part of version number
-
-.. operation:tlv-command:: Get Date Time
- :id: 0x0E
-
- Get the current date and time (without daylight savings times and timezone information).
-
- .. operation:tlv-message:: Request
- :uuid: Command
- .. operation:tlv-message:: Response
- :uuid: Command Response
- :params:
- - response_length (uint8): length of response payload
- - year (uint16) : year
- - month (uint8) : month from 1 - 12
- - day (uint8) : day from 1 - 31
- - hour (uint8) : hour from 0 - 23
- - minute (uint8) : minute from 0 - 59
- - second (uint8) : second from 0 - 59
- - weekday (uint8): Sunday = 0, Saturday = 6
-
-.. operation:tlv-command:: Get Hardware Info
- :id: 0x3C
-
- Get information about the camera and firmware.
-
- Note that the model numbers are found under :ref:`Supported Cameras`
-
- .. operation:tlv-message:: Request
- :uuid: Command
- .. operation:tlv-message:: Response
- :uuid: Command Response
- :params:
- - model_number_length (uint8): length of model_number parameter
- - model_number (unsigned model_number_length) : model number. See note above.
- - model_name_length (uint8): length of model_name parameter
- - model_name (string of length model_name_length) : i.e. "HERO12 Black"
- - deprecated_length (uint8): length of deprecated parameter
- - deprecated (unsigned deprecated_length): deprecated
- - firmware_version_length (uint8): length of firmware_version parameter
- - firmware_version (string of length firmware_version_length) : "H23.01.01.99.56"
- - serial_number_length (uint8): length of serial_number parameter
- - serial_number (string of length serial_number_length): i.e. "C1234567812345"
- - ap_ssid_length (uint8): length of ap_ssid parameter
- - ap_ssid (string of length ap_ssid_length) : i.e. "GP12345678"
- - ap_mac_address_length (uint8): length of ap_mac_address parameter
- - ap_mac_address (string of length ap_mac_address_length) : i.e. "2674f7f65f78"
- - reserved (11 bytes): reserved data not part of the payload
-
-.. operation:tlv-command:: Get Local Date Time
- :id: 0x10
- :unsupported: boilers kongs
-
- Get the current date and time with daylight savings and timezone information.
-
- .. operation:tlv-message:: Request
- :uuid: Command
- .. operation:tlv-message:: Response
- :uuid: Command Response
- :params:
- - response_length (uint8): length of response payload
- - year (uint16) : year
- - month (uint8) : month from 1 - 12
- - day (uint8) : day from 1 - 31
- - hour (uint8) : hour from 0 - 23
- - minute (uint8) : minute from 0 - 59
- - second (uint8) : second from 0 - 59
- - offset (int16): UTC offset in minutes
- - is_dst (uint8): Is daylight savings? 1 if yes, 0 if no
-
-.. operation:protobuf:: Get Last Captured Media
- :unsupported: boilers kongs pismo sultans
-
- .. operation:protobuf-message:: request
- :feature-id: 0xF5
- :action-id: 0x6D
- :uuid: Query
- :message: WSDK_RequestGetLastCapturedMedia
-
- .. operation:protobuf-message:: response
- :feature-id: 0xF5
- :action-id: 0xED
- :uuid: Query Response
- :message: WSDK_ResponseLastCapturedMedia
-
-.. operation:tlv-query:: Get Setting Values
-
- Get the current value associated with one or more settings.
-
- .. note:: If the element ID array is empty, all settings will be queried
-
- .. operation:tlv-message:: Request
- :id: 0x12
- :uuid: Query
-
- The element ID array is an array of uint8 :ref:`Setting IDs` to query.
-
- .. operation:tlv-message:: Response
- :id: 0x12
- :uuid: Query Response
-
- The fields of the results array are:
-
- - **ID**: :ref:`Setting ID`
- - **value**: Setting value defined via the individual :doc:`Setting` documentation
-
-.. operation:tlv-query:: Get Status Values
-
- Get the current value of one or more camera statuses.
-
- .. note:: If the element ID array is empty, all statuses will be queried
-
- .. operation:tlv-message:: Request
- :uuid: Query
- :id: 0x13
-
- The element ID array is an array of uint8 :ref:`Status IDs` to query.
-
- .. operation:tlv-message:: Response
- :uuid: Query Response
- :id: 0x13
-
- The fields of the results array are:
-
- - **ID**: :ref:`Status ID`
- - **value**: Status value defined via the individual :doc:`Status` documentation
-
-.. operation:tlv-query:: Get Setting Capabilities
-
- Get one or more setting value capabilities. The reported capabilities are only those setting options that are
- **currently** supported.
-
- .. note:: If the element ID array is empty, all settings will be queried.
-
- .. operation:tlv-message:: Request
- :uuid: Query
- :id: 0x32
-
- The element ID array is an array of uint8 :ref:`Setting IDs` to query.
-
- .. operation:tlv-message:: Response
- :uuid: Query Response
- :id: 0x32
-
- The fields of the results array are:
-
- - **ID**: :ref:`Setting ID`
- - **value**: Setting value defined via the individual :doc:`Setting` documentation
-
-.. operation:tlv-query:: Register for Setting Value Updates
-
- Register to receive updates when one or more setting values change. The initial response contains the current
- setting values. Notifications will be sent whenever one of the requested setting's values change.
-
- .. note:: If the element ID array is empty, all settings will be registered for.
-
- .. operation:tlv-message:: Request
- :uuid: Query
- :id: 0x52
-
- The element ID array is an array of uint8 :ref:`Setting IDs` to register for.
-
- .. operation:tlv-message:: Response
- :uuid: Query Response
- :id: 0x52
-
- The fields of the results array are:
-
- - **ID**: :ref:`Setting ID`
- - **value**: Setting value defined via the individual :doc:`Setting` documentation
-
- .. operation:tlv-message:: Notification
- :uuid: Query Response
- :id: 0x92
-
- The fields of the results array are:
-
- - **ID**: :ref:`Setting ID`
- - **value**: Setting value defined via the individual :doc:`Setting` documentation
-
-.. operation:tlv-query:: Register for Status Value Updates
-
- Register to receive updates when one or more status values change. The initial response contains the current
- status values. Notifications will be sent whenever one of the requested statuses' values change.
-
- .. note:: If the element ID array is empty, all statuses will be registered for.
-
- .. operation:tlv-message:: Request
- :uuid: Query
- :id: 0x53
-
- The element ID array is an array of uint8 :ref:`Status IDs` to register for.
-
- .. operation:tlv-message:: Response
- :uuid: Query Response
- :id: 0x53
-
- The fields of the results array are:
-
- - **ID**: :ref:`Status ID`
- - **value**: Status value defined via the individual :doc:`Status` documentation
-
- .. operation:tlv-message:: Notification
- :uuid: Query Response
- :id: 0x93
-
- The fields of the results array are:
-
- - **ID**: :ref:`Status ID`
- - **value**: Status value defined via the individual :doc:`Status` documentation
-
-.. operation:tlv-query:: Register for Setting Capability Updates
-
- Register to receive updates when one or more setting capabilities change. The initial response contains the current
- setting capabilities. Notifications will be sent whenever one of the requested settings' capabilities change.
-
- .. note:: If the element ID array is empty, all settings will be registered for.
-
- .. operation:tlv-message:: Request
- :uuid: Query
- :id: 0x62
-
- The element ID array is an array of uint8 :ref:`Setting IDs` to register for.
-
- .. operation:tlv-message:: Response
- :uuid: Query Response
- :id: 0x62
-
- The fields of the results array are:
-
- - **ID**: :ref:`Setting ID`
- - **value**: Setting value defined via the individual :doc:`Setting` documentation
-
- .. operation:tlv-message:: Notification
- :uuid: Query Response
- :id: 0xA2
-
- The fields of the results array are:
-
- - **ID**: :ref:`Setting ID`
- - **value**: Setting value defined via the individual :doc:`Setting` documentation
-
-.. operation:tlv-query:: Unregister for Setting Value Updates
-
- Cancel ongoing setting value updates.
-
- .. note:: If the element ID array is empty, all settings will be unregistered for.
-
- .. operation:tlv-message:: Request
- :uuid: Query
- :id: 0x72
-
- The element ID array is an array of uint8 :ref:`Setting IDs` to unregister for.
-
- .. operation:tlv-message:: Response
- :uuid: Query Response
- :id: 0x72
-
-.. operation:tlv-query:: Unregister for Status Value Updates
-
- Cancel ongoing status value updates.
-
- .. note:: If the element ID array is empty, all Statuses will be unregistered for.
-
- .. operation:tlv-message:: Request
- :uuid: Query
- :id: 0x73
-
- The element ID array is an array of uint8 :ref:`Status IDs` to unregister for.
-
- .. operation:tlv-message:: Response
- :uuid: Query Response
- :id: 0x73
-
-.. operation:tlv-query:: Unregister for Setting Capability Updates
-
- Cancel ongoing setting capability updates.
-
- .. note:: If the element array is empty, all settings will be unregistered for.
-
- .. operation:tlv-message:: Request
- :uuid: Query
- :id: 0x82
-
- The element ID array is an array of uint8 :ref:`Setting IDs` to unregister for.
-
- .. operation:tlv-message:: Response
- :uuid: Query Response
- :id: 0x82
\ No newline at end of file
diff --git a/docs/ble/_sources/features/settings.rst.txt b/docs/ble/_sources/features/settings.rst.txt
deleted file mode 100644
index 5acb4886..00000000
--- a/docs/ble/_sources/features/settings.rst.txt
+++ /dev/null
@@ -1,70 +0,0 @@
-Settings
-********
-
-Camera Capabilities
-===================
-
-Camera capabilities usually change from one camera to another and often change from one release to the next. Below are
-documents that detail whitelists for basic video settings for every supported camera release.
-
-These capability documents define supported camera states. Each state is comprised of a set of setting options that are
-presented in **dependency order**. This means each state is guaranteed to be attainable if and only if the setting options
-are set in the order presented. Failure to adhere to dependency ordering may result in the camera's blacklist rules
-rejecting a `Set Setting `_ command.
-
-============= ========= =================== ========= ========= ================ =================
-Camera Command 1 Command 2 Command 3 Command 4 Command 5 Guaranteed Valid?
-============= ========= =================== ========= ========= ================ =================
-Hero 10 Black Res: 1080 Anti-Flicker: 60 Hz FPS: 240 FOV: Wide Hypersmooth: Off ✔
-Hero 10 Black Res: 240 Anti-Flicker: 60 Hz RES: 1080 FOV: Wide Hypersmooth: off ❌
-============= ========= =================== ========= ========= ================ =================
-
-In the example above, the first set of commands will always work for basic video presets such as Standard.
-
-In the second example, suppose the camera's Video Resolution was previously set to 4K. If the user tries to set Video FPS
-to 240, it will fail because 4K/240fps is not supported.
-
-Capability documents for each camera / firmware version can be found in the following file formats:
-
-XLSX
-----
-
-An XLSX file can be found `here `__.
-
-The capabilities spreadsheet contains worksheets for every supported release. Each row in a worksheet represents a
-whitelisted state and is presented in dependency order as outlined above.
-
-JSON
-----
-
-A JSON file can be found `here `__.
-
-The capabilities JSON contains a set of whitelist states for every supported release. Each state is comprised of a list
-of objects that contain setting and option IDs necessary to construct
-`Set Setting `_ commands and are given in dependency
-order as outlined above. For more information on the object format, see the JSON schema
-
-Operations
-==========
-
-.. operation:tlv-command:: Set Setting
- :id: SettingID
-
- Set an individual :ref:`Setting ID` to a given value.
-
- The superset of per-setting values can be found in the `setting `__ documentation. Alternatively,
- the currently supported setting values can be dynamically queried via
- `Get Setting Capabilities <../features/query.html#get_setting_capabilities>`_
-
- .. operation:tlv-message:: Request
- :uuid: Setting
- :params:
- - value_length (uint8): length of `value`
- - value (variable length and type): value to set, of length `value_length`
- .. operation:tlv-message:: Response
- :uuid: Settings Response
-
-Setting IDs
-===========
-
-.. operation:setting-descriptions::
\ No newline at end of file
diff --git a/docs/ble/_sources/features/statuses.rst.txt b/docs/ble/_sources/features/statuses.rst.txt
deleted file mode 100644
index d27c979a..00000000
--- a/docs/ble/_sources/features/statuses.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Statuses
-********
-
-This section will describe each status and its supported values. See the :doc:`Query` section for operations to query
-status values.
-
-.. operation:status-descriptions::
\ No newline at end of file
diff --git a/docs/ble/_sources/index.rst.txt b/docs/ble/_sources/index.rst.txt
deleted file mode 100644
index a4502463..00000000
--- a/docs/ble/_sources/index.rst.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-Welcome to Open GoPro BLE API's documentation!
-**********************************************
-
-This document describes the format, capabilities, and use of
-`Bluetooth Low Energy (BLE) `_ as it pertains to communicating
-with GoPro cameras via the Open GoPro API.
-
-Supported Cameras
-=================
-
-Below is a table of cameras that support GoPro's public BLE API:
-
- ========== ============ =================== ==========================
- Model ID Model Code Marketing Name Minimal Firmware Version
- ========== ============ =================== ==========================
- 62 H23.01 HERO12 Black `v01.10.00 `__
- 60 H22.03 HERO11 Black Mini `v01.10.00 `__
- 58 H22.01 HERO11 Black `v01.10.00 `__
- 57 H21.01 HERO10 Black `v01.10.00 `__
- 55 HD9.01 HERO9 Black `v01.70.00 `__
- ========== ============ =================== ==========================
-
-.. warning:: While the version listed above are *mininum versions* needed to support the Open GoPro API, the documentation
- assumes that the GoPro is always updated to the most recent version. This is relevant in cases where functionality
- changes between versions.
-
-Getting Started
-===============
-
-First, read through the protocol section to understand how to send and receive BLE messages via the Open GoPro
-protocol:
-
-.. toctree::
- :maxdepth: 2
-
- protocol
-
-Then see any of the subsequent feature sections to perform desired functionality:
-
-.. toctree::
- :maxdepth: 1
-
- features/control
- features/query
- features/access_points
- features/live_streaming
- features/cohn
- features/hilights
- features/presets
- features/settings
- features/statuses
-
-.. tip:: Additionally, there are walk-through
- `tutorials `_ available to demonstrate basic BLE functionality
- as well as complete `demos `_ in various programming languages.
-
-Limitations
-===========
-
-General
--------
-
-- The camera will reject requests to change settings while encoding; for example, if Hindsight feature is active, the
- user can not change settings
-- Querying the value for a setting that is not associated with the current preset/core mode results in an undefined value.
- For example, the user should not try to query the current Photo Digital Lenses (FOV) value while in a video-based
- Preset.
diff --git a/docs/ble/_sources/protocol.rst.txt b/docs/ble/_sources/protocol.rst.txt
deleted file mode 100644
index d12d8059..00000000
--- a/docs/ble/_sources/protocol.rst.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-########
-Protocol
-########
-
-Read through the following sections in order to initialize and configure Open GoPro BLE communication.
-
-.. toctree::
- :maxdepth: 2
-
- protocol/ble_setup
- protocol/data_protocol
- protocol/state_management
-
-The following sections are used for reference for the various feature operations.
-
-.. toctree::
- :maxdepth: 2
-
- protocol/id_tables
-
-.. toctree::
- :maxdepth: 1
-
- protocol/protobuf
diff --git a/docs/ble/_sources/protocol/ble_setup.rst.txt b/docs/ble/_sources/protocol/ble_setup.rst.txt
deleted file mode 100644
index 8652aff7..00000000
--- a/docs/ble/_sources/protocol/ble_setup.rst.txt
+++ /dev/null
@@ -1,89 +0,0 @@
-BLE Setup
-*********
-
-Before sending and receiving data, it is first necessary to configure the BLE connection for communication.
-
-Below is an overview of setting up communication. See the relevant section below for more information:
-
-#. Ensure the camera is connectable and in `pairing mode `__
-#. Scan to discover :ref:`advertisements ` from GoPro peripheral devices (which can be narrowed by
- limiting to peripherals that advertise service **0xFEA6**)
-#. Connect to a discovered peripheral device
-#. :ref:`Finish pairing ` with the peripheral device
-#. Discover all advertised services and characteristics
-#. :ref:`Subscribe to notifications ` from all characteristics that have the notify flag set
-
-Pairing Mode
-============
-
-In order for the camera to be discoverable and allow connections, it must first be put into
-`pairing mode `__ via the
-camera UI.
-
-
-Advertisements
-==============
-
-Once in pairing mode, the camera will send BLE advertisements while it is ON and for the first 8 hours after the camera
-is put to sleep. During this time, the camera is discoverable and can be connected to. If the camera is in sleep mode,
-connecting to it will cause the camera to wake and boot up.
-
-Finish Pairing
-==============
-
-In order to communicate with a GoPro camera via BLE, a client must first be paired with the camera. The pairing
-procedure must be done once for each new client. If the camera is factory reset, all clients will need to pair again.
-The camera will store pairing information so subsequent connections with this client do not require pairing.
-
-Configure GATT Characteristics
-==============================
-
-In order to enable two-way communication with a GoPro camera, clients must subscribe to characteristics that have the
-notify flag set. Best practice is to query the GATT table to dynamically discover all notifiable characteristics.
-Alternatively, see the GATT table below.
-
-.. warning:: The GoPro device does not support the BLE feature of caching these subscriptions so the characteristics must be
- re-subscribed for upon each connection.
-
-BLE Characteristics
--------------------
-
-.. note:: **GP-XXXX** is shorthand for GoPro's 128-bit UUID: **b5f9XXXX-aa8d-11e3-9046-0002a5d5c51b**
-
-+--------------+-------------------------+---------------------+----------------------------+-----------------+
-| Service UUID | Service | Characteristic UUID | Description | Permissions |
-+==============+=========================+=====================+============================+=================+
-| GP-0001 | GoPro Wifi Access Point | GP-0002 | WiFi AP SSID | Read / Write |
-+ | +---------------------+----------------------------+-----------------+
-| | | GP-0003 | WiFi AP Password | Read / Write |
-+ | +---------------------+----------------------------+-----------------+
-| | | GP-0004 | WiFi AP Power | Write |
-+ | +---------------------+----------------------------+-----------------+
-| | | GP-0005 | WiFi AP State | Read / Indicate |
-+--------------+-------------------------+---------------------+----------------------------+-----------------+
-| GP-0090 | GoPro Camera Management | GP-0091 | Network Management Command | Write |
-+ | +---------------------+----------------------------+-----------------+
-| | | GP-0092 | Network Management Response| Notify |
-+--------------+-------------------------+---------------------+----------------------------+-----------------+
-| FEA6 | Control & Query | GP-0072 | Command | Write |
-+ | +---------------------+----------------------------+-----------------+
-| | | GP-0073 | Command Response | Notify |
-+ | +---------------------+----------------------------+-----------------+
-| | | GP-0074 | Settings | Write |
-+ | +---------------------+----------------------------+-----------------+
-| | | GP-0075 | Settings Response | Notify |
-+ | +---------------------+----------------------------+-----------------+
-| | | GP-0076 | Query | Write |
-+ | +---------------------+----------------------------+-----------------+
-| | | GP-0077 | Query Response | Notify |
-+--------------+-------------------------+---------------------+----------------------------+-----------------+
-
-Send Messages
--------------
-
-Messages are sent to the camera by writing to a write-enabled UUID and then waiting for a notification
-from the corresponding response / notification UUID. Responses and notifications indicate whether the message was valid
-and will be (asynchronously) processed. For example, to send a camera control command, a client should write to
-GP-0072 and then wait for a response notification from GP-0073.
-
-See the following Protocol sections for steps to build and parse messages.
diff --git a/docs/ble/_sources/protocol/data_protocol.rst.txt b/docs/ble/_sources/protocol/data_protocol.rst.txt
deleted file mode 100644
index c4bd8e11..00000000
--- a/docs/ble/_sources/protocol/data_protocol.rst.txt
+++ /dev/null
@@ -1,258 +0,0 @@
-Data Protocol
-*************
-
-Note the following terminology used in this section:
-
-- **packet**: GATT-level byte data including packet headers
-- **message**: Payload data accumulated from one or more packets (not including packet headers)
-
-This section will describe the data protocol used to send and receive BLE messages. The general procedure to parse a
-message is to:
-
-#. :ref:`Accumulate and depacketize ` BLE packets to extract the message payload
-#. :ref:`Decipher ` the message's ID and payload type
-#. Depending on the :ref:`payload type `, use the per-message documentation
- (identified by the message's ID) to parse the message
-
-.. note:: All byte ordering is in Big Endian unless otherwise noted.
-
-Packetization
-=============
-
-The BLE protocol (<= v4.2) limits packet size to 20 bytes per packet. To accommodate this limitation, GoPro
-cameras use start and continuation packets to packetize larger payloads. If a message is less than 20 bytes, it
-can be sent with a single packet containing the start packet header. Otherwise,
-it must be split into multiple packets with the first packet containing a start packet header and subsequent packets
-containing continuation packet headers.
-
-Packet Headers
---------------
-
-Message sending and receiving is accomplished by prepending **General (5-bit)**, **Extended (13-bit)**,
-**Extended (16-bit)**, or **Continuation** headers onto each packet depending on the message size and state.
-
-.. note:: For byte-level examples of the below packet types, see the
- `tutorials `__
-
-General (5-bit) Packets
-^^^^^^^^^^^^^^^^^^^^^^^
-
-Messages that are 31 bytes or fewer can be sent or received using the following format:
-
-+-----------+---+----------+---+---+---+---+------+
-| Byte 0 |
-+===========+===+==========+===+===+===+===+======+
-| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
-+-----------+---+----------+---+---+---+---+------+
-| Start (0) | General (00) | 5-bit Message Length |
-+-----------+---+----------+---+---+---+---+------+
-
-Extended (13-bit) Packets
-^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Messages that are 8191 bytes or fewer can be sent or received using the following format:
-
-+-----------+---+------------------+---+---+---+---+------+---+---+---+---+---+---+---+---+
-| Byte 0 | Byte 1 |
-+===========+===+==================+===+===+===+===+======+===+===+===+===+===+===+===+===+
-| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
-+-----------+---+------------------+---+---+---+---+------+---+---+---+---+---+---+---+---+
-| Start (0) | 13-bit Extended (01) | 13-bit Message Length |
-+-----------+---+------------------+---+---+---+---+------+---+---+---+---+---+---+---+---+
-
-.. tip:: Always use Extended (13-bit) packet headers when sending messages to avoid having to work with multiple packet
- header formats.
-
-Extended (16-bit) Packets
-^^^^^^^^^^^^^^^^^^^^^^^^^
-
-If a message is 8192 bytes or longer, the camera will respond using the format below.
-
-+-----------+---+------------------+---+---+---+---+------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
-| Byte 0 | Byte 1 | Byte 2 |
-+===========+===+==================+===+===+===+===+======+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+
-| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
-+-----------+---+------------------+---+---+---+---+------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
-| Start (0) | 13-bit Extended (10) | Reserved | 16-bit Message Length |
-+-----------+---+------------------+---+---+---+---+------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
-
-.. warning:: This format can not be used for sending messages to the camera. It is only used to receive messages.
-
-Continuation Packets
-^^^^^^^^^^^^^^^^^^^^
-
-When sending or receiving a message that is longer than 20 bytes, the message must be split into N packets with packet 1
-containing a start packet header and packets 2..N containing a continuation packet header.
-
-.. note:: Counters start at 0x0 and reset after 0xF.
-
-+------------------+---+----+---+---+---+---+---+
-| Byte 0 |
-+==================+===+====+===+===+===+===+===+
-| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
-+------------------+---+----+---+---+---+---+---+
-| Continuation (1) | Reserved | 4-bit Counter |
-+------------------+------------+---+---+---+---+
-
-Decipher Message Payload Type
-=============================
-
-Once the packets have been accumulated and the payload has been extracted, it is necessary to decipher the message type
-in order to determine whether it is TLV or Protobuf and then parse it appropriately.
-
-Below is pseudocode describing how to do this:
-
-.. parsed-literal::
-
- Camera sends response message from UUID U (string) with payload P (array of bytes)
- // Is it a Protobuf response?
- for each row in the :ref:`Protobuf IDs table` {
- F (int) = Feature ID
- A (array of int) = Action IDs
- if P[0] == F and P[1] in A {
- P is a :ref:`Protobuf Message`
- Match Feature ID P[0] and Action ID P[1] to a Protobuf message in the :ref:`Protobuf IDs table`
- Use matched :doc:`Protobuf message ` to parse byte payload into useful data structure
- Exit
- }
- }
- // Nope. It is a TLV response
- if U == GP-0072 (Command) {
- Parse message payload using :ref:`Command Table` with :ref:`Command scheme`
- }
- else if U == GP-0074 (Settings) {
- Parse using :ref:`Setting ID mapping` with :ref:`Command scheme`
- }
- else if U == GP-0076 (Query) {
- Parse message payload using :ref:`Query Table` with :ref:`Query scheme`
- }
-
-Alternatively this is described in flowchart form here:
-
-.. image:: ../../assets/images/plantuml_ble_tlv_vs_protobuf.png
-
-Message Payload
-===============
-
-Once the payload has been extracted and had its type deciphered, it can then be parsed depending on its type.
-The Open GoPro protocol uses two different top-level message payload formats:
-
-- :ref:`Type Length Value (TLV) `
-- :ref:`Protobuf `
-
-.. note:: The byte table examples in this section do not contain the :ref:`protocol/data_protocol:packet headers`; they only consider the payload.
-
-Type Length Value
------------------
-
-There are two different request / response Type-Length-Value (TLV) schemes as described in the following sections.
-
-Commands
-^^^^^^^^
-
-Commands are messages sent / received on either:
-
-- The Command and Command Response :ref:`characteristics `
-- The Setting and Setting Response :ref:`characteristics `
-
-They are summarized in the :ref:`commands table` and individually documented throughout
-the relevant feature section.
-
-.. rubric:: Command Request
-
-Below is the top level message format for command requests:
-
-=========================== ===========================
-Type (Command / Setting ID) Optional Parameters
-=========================== ===========================
-1 Byte Array of length-value pairs
-=========================== ===========================
-
-where each element of the parameter array is:
-
-====== ================
-Length Value
-====== ================
-1 Byte **Length** Bytes
-====== ================
-
-The individual command documentation specified by the message's :ref:`Command ID`
-will define the length and value options for each of its parameters.
-
-.. rubric:: Command Response
-
-Below is the top level message format for command responses:
-
-=========================== ============== =================
-Type (Command / Setting ID) Command Status Optional Response
-=========================== ============== =================
-1 Byte 1 Byte Variable Length
-=========================== ============== =================
-
-The individual command documentation specified by the message's
-:ref:`Command ID` will define the response.
-
-.. tip:: For byte-level examples, see the
- `tutorials `__.
-
-Queries
-^^^^^^^
-
-Queries are messages sent / received on the Query and Query Response :ref:`characteristics `,
-respectively. They are summarized in the :ref:`queries table` and individually documented
-in :doc:`../features/query`.
-
-.. rubric:: Query Request
-
-Below is the top level message format for query requests:
-
-========= ====================
-Query ID Array of Element IDs
-========= ====================
-1 Byte Variable
-========= ====================
-
-The individual query documentation specified by the message's :ref:`Query ID`
-will define the elements that comprise the element ID array.
-
-.. rubric:: Query Response
-
-Below is the top level message format for query responses:
-
-========= ============== =================================
-Query ID Command Status Query Results
-========= ============== =================================
-1 Byte 1 Byte Array of id-length-value triplets
-========= ============== =================================
-
-where each element of the results array is:
-
-====== ====== ================
-ID Length Value
-====== ====== ================
-1 Byte 1 byte **Length** Bytes
-====== ====== ================
-
-The individual query documentation specified by the message's
-:ref:`Query ID` will define the format of the result array.
-
-.. tip:: For byte-level examples, see the
- `tutorials `__.
-
-Protobuf
---------
-
-In order to maximize BLE bandwidth, some commands use `Google Protobuf (Protocol Buffers) `_.
-Open GoPro currently uses Protocol Buffers `Version 2 `_
-
-Protobuf requests and responses are identified by a Feature ID and an Action ID prepended before their serialized payload.
-The top level message format for a Protobuf message is as follows:
-
-============ ========== ===========================
-Feature ID Action ID Serialized Protobuf Message
-============ ========== ===========================
-1 Byte 1 Byte Variable Length
-============ ========== ===========================
-
-The individual Protobuf object specified by the message's
-:ref:`action / feature id` is used to serialize / deserialize the payload.
diff --git a/docs/ble/_sources/protocol/id_tables.rst.txt b/docs/ble/_sources/protocol/id_tables.rst.txt
deleted file mode 100644
index af64f144..00000000
--- a/docs/ble/_sources/protocol/id_tables.rst.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-ID Tables
-=========
-
-Command IDs
------------
-
-.. operation:command-id-table::
-
-Query IDs
----------
-
-======== ===============================================
-Query ID Query
-======== ===============================================
-0x12 `Get Setting Values <../features/query.html#get_setting_values>`__
-0x13 `Get Status Values <../features/query.html#get_status_values>`__
-0x32 `Get Setting Capabilities <../features/query.html#get_setting_capabilities>`__
-0x52 `Register for Setting Value Updates <../features/query.html#register_for_setting_value_updates>`__
-0x53 `Register for Status Value Updates <../features/query.html#register_for_status_value_updates>`__
-0x62 `Register for Setting Capability Updates <../features/query.html#register_for_setting_capability_updates>`__
-0x72 `Unregister for Setting Value Updates <../features/query.html#unregister_for_setting_value_updates>`__
-0x73 `Unregister for Status Value Updates <../features/query.html#unregister_for_status_value_updates>`__
-0x82 `Unregister for Setting Capability Updates <../features/query.html#unregister_for_setting_capability_updates>`__
-0x92 `Asynchronous setting value Notification <../features/query.html#register_for_setting_value_updates>`__
-0x93 `Asynchronous status value Notification <../features/query.html#register_for_status_value_updates>`__
-0xA2 `Asynchronous setting capability Notification <../features/query.html#register_for_setting_capability_updates>`__
-======== ===============================================
-
-Protobuf IDs
-------------
-
-.. operation:protobuf-id-table::
-
-Setting IDs
------------
-
-.. operation:setting-id-table::
-
-Status IDs
-----------
-
-.. operation:status-id-table::
diff --git a/docs/ble/_sources/protocol/protobuf.rst.txt b/docs/ble/_sources/protocol/protobuf.rst.txt
deleted file mode 100644
index 36939882..00000000
--- a/docs/ble/_sources/protocol/protobuf.rst.txt
+++ /dev/null
@@ -1,3323 +0,0 @@
-
-Protobuf Documentation
-======================
-
-Enums
------
-
-
-
-.. _proto-enumcohnnetworkstate:
-
-EnumCOHNNetworkState
-^^^^^^^^^^^^^^^^^^^^
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-.. list-table::
- :widths: 10 10 40
- :header-rows: 1
-
- * - name
- - value
- - summary
- * - COHN_STATE_Init
- - 0
-
- -
-
- * - COHN_STATE_Error
- - 1
-
- -
-
- * - COHN_STATE_Exit
- - 2
-
- -
-
- * - COHN_STATE_Idle
- - 5
-
- -
-
- * - COHN_STATE_NetworkConnected
- - 27
-
- -
-
- * - COHN_STATE_NetworkDisconnected
- - 28
-
- -
-
- * - COHN_STATE_ConnectingToNetwork
- - 29
-
- -
-
- * - COHN_STATE_Invalid
- - 30
-
- -
-
-
-
-
-
-.. _proto-enumcohnstatus:
-
-EnumCOHNStatus
-^^^^^^^^^^^^^^
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-.. list-table::
- :widths: 10 10 40
- :header-rows: 1
-
- * - name
- - value
- - summary
- * - COHN_UNPROVISIONED
- - 0
-
- -
-
- * - COHN_PROVISIONED
- - 1
-
- -
-
-
-
-
-
-.. _proto-enumcameracontrolstatus:
-
-EnumCameraControlStatus
-^^^^^^^^^^^^^^^^^^^^^^^
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-.. list-table::
- :widths: 10 10 40
- :header-rows: 1
-
- * - name
- - value
- - summary
- * - CAMERA_IDLE
- - 0
-
- -
-
- * - CAMERA_CONTROL
- - 1
-
- - Can only be set by camera, not by app or third party
-
- * - CAMERA_EXTERNAL_CONTROL
- - 2
-
- -
-
-
-
-
-
-.. _proto-enumflatmode:
-
-EnumFlatMode
-^^^^^^^^^^^^
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-.. list-table::
- :widths: 10 10 40
- :header-rows: 1
-
- * - name
- - value
- - summary
- * - FLAT_MODE_UNKNOWN
- - -1
-
- -
-
- * - FLAT_MODE_PLAYBACK
- - 4
-
- -
-
- * - FLAT_MODE_SETUP
- - 5
-
- -
-
- * - FLAT_MODE_VIDEO
- - 12
-
- -
-
- * - FLAT_MODE_TIME_LAPSE_VIDEO
- - 13
-
- -
-
- * - FLAT_MODE_LOOPING
- - 15
-
- -
-
- * - FLAT_MODE_PHOTO_SINGLE
- - 16
-
- -
-
- * - FLAT_MODE_PHOTO
- - 17
-
- -
-
- * - FLAT_MODE_PHOTO_NIGHT
- - 18
-
- -
-
- * - FLAT_MODE_PHOTO_BURST
- - 19
-
- -
-
- * - FLAT_MODE_TIME_LAPSE_PHOTO
- - 20
-
- -
-
- * - FLAT_MODE_NIGHT_LAPSE_PHOTO
- - 21
-
- -
-
- * - FLAT_MODE_BROADCAST_RECORD
- - 22
-
- -
-
- * - FLAT_MODE_BROADCAST_BROADCAST
- - 23
-
- -
-
- * - FLAT_MODE_TIME_WARP_VIDEO
- - 24
-
- -
-
- * - FLAT_MODE_LIVE_BURST
- - 25
-
- -
-
- * - FLAT_MODE_NIGHT_LAPSE_VIDEO
- - 26
-
- -
-
- * - FLAT_MODE_SLOMO
- - 27
-
- -
-
- * - FLAT_MODE_IDLE
- - 28
-
- -
-
- * - FLAT_MODE_VIDEO_STAR_TRAIL
- - 29
-
- -
-
- * - FLAT_MODE_VIDEO_LIGHT_PAINTING
- - 30
-
- -
-
- * - FLAT_MODE_VIDEO_LIGHT_TRAIL
- - 31
-
- -
-
-
-
-
-
-.. _proto-enumlens:
-
-EnumLens
-^^^^^^^^
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-.. list-table::
- :widths: 10 10 40
- :header-rows: 1
-
- * - name
- - value
- - summary
- * - LENS_WIDE
- - 0
-
- -
-
- * - LENS_SUPERVIEW
- - 3
-
- -
-
- * - LENS_LINEAR
- - 4
-
- -
-
-
-
-
-
-.. _proto-enumlivestreamerror:
-
-EnumLiveStreamError
-^^^^^^^^^^^^^^^^^^^
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-.. list-table::
- :widths: 10 10 40
- :header-rows: 1
-
- * - name
- - value
- - summary
- * - LIVE_STREAM_ERROR_NONE
- - 0
-
- - No error (success)
-
- * - LIVE_STREAM_ERROR_NETWORK
- - 1
-
- - General network error during the stream
-
- * - LIVE_STREAM_ERROR_CREATESTREAM
- - 2
-
- - Startup error: bad URL or valid with live stream server
-
- * - LIVE_STREAM_ERROR_OUTOFMEMORY
- - 3
-
- - Not enough memory on camera to complete task
-
- * - LIVE_STREAM_ERROR_INPUTSTREAM
- - 4
-
- - Failed to get stream from low level camera system
-
- * - LIVE_STREAM_ERROR_INTERNET
- - 5
-
- - No internet access detected on startup of streamer
-
- * - LIVE_STREAM_ERROR_OSNETWORK
- - 6
-
- - Error occured in linux networking stack. Usually means the server closed the connection
-
- * - LIVE_STREAM_ERROR_SELECTEDNETWORKTIMEOUT
- - 7
-
- - Timed out attemping to connect to the wifi network when attemping live stream
-
- * - LIVE_STREAM_ERROR_SSL_HANDSHAKE
- - 8
-
- - SSL handshake failed (commonly caused due to incorrect time / time zone)
-
- * - LIVE_STREAM_ERROR_CAMERA_BLOCKED
- - 9
-
- - Low level camera system rejected attempt to start live stream
-
- * - LIVE_STREAM_ERROR_UNKNOWN
- - 10
-
- - Unknown
-
- * - LIVE_STREAM_ERROR_SD_CARD_FULL
- - 40
-
- - Can not perform livestream because sd card is full
-
- * - LIVE_STREAM_ERROR_SD_CARD_REMOVED
- - 41
-
- - Livestream stopped because sd card was removed
-
-
-
-
-
-.. _proto-enumlivestreamstatus:
-
-EnumLiveStreamStatus
-^^^^^^^^^^^^^^^^^^^^
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-.. list-table::
- :widths: 10 10 40
- :header-rows: 1
-
- * - name
- - value
- - summary
- * - LIVE_STREAM_STATE_IDLE
- - 0
-
- - Initial status. Livestream has not yet been configured
-
- * - LIVE_STREAM_STATE_CONFIG
- - 1
-
- - Livestream is being configured
-
- * - LIVE_STREAM_STATE_READY
- - 2
-
- - | Livestream has finished configuration and is ready to start streaming
-
- * - LIVE_STREAM_STATE_STREAMING
- - 3
-
- - Livestream is actively streaming
-
- * - LIVE_STREAM_STATE_COMPLETE_STAY_ON
- - 4
-
- - Live stream is exiting. No errors occured.
-
- * - LIVE_STREAM_STATE_FAILED_STAY_ON
- - 5
-
- - Live stream is exiting. An error occurred.
-
- * - LIVE_STREAM_STATE_RECONNECTING
- - 6
-
- - An error occurred during livestream and stream is attempting to reconnect.
-
-
-
-
-
-.. _proto-enumpresetgroup:
-
-EnumPresetGroup
-^^^^^^^^^^^^^^^
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-.. list-table::
- :widths: 10 10 40
- :header-rows: 1
-
- * - name
- - value
- - summary
- * - PRESET_GROUP_ID_VIDEO
- - 1000
-
- -
-
- * - PRESET_GROUP_ID_PHOTO
- - 1001
-
- -
-
- * - PRESET_GROUP_ID_TIMELAPSE
- - 1002
-
- -
-
-
-
-
-
-.. _proto-enumpresetgroupicon:
-
-EnumPresetGroupIcon
-^^^^^^^^^^^^^^^^^^^
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-.. list-table::
- :widths: 10 10 40
- :header-rows: 1
-
- * - name
- - value
- - summary
- * - PRESET_GROUP_VIDEO_ICON_ID
- - 0
-
- -
-
- * - PRESET_GROUP_PHOTO_ICON_ID
- - 1
-
- -
-
- * - PRESET_GROUP_TIMELAPSE_ICON_ID
- - 2
-
- -
-
- * - PRESET_GROUP_LONG_BAT_VIDEO_ICON_ID
- - 3
-
- -
-
- * - PRESET_GROUP_ENDURANCE_VIDEO_ICON_ID
- - 4
-
- -
-
- * - PRESET_GROUP_MAX_VIDEO_ICON_ID
- - 5
-
- -
-
- * - PRESET_GROUP_MAX_PHOTO_ICON_ID
- - 6
-
- -
-
- * - PRESET_GROUP_MAX_TIMELAPSE_ICON_ID
- - 7
-
- -
-
-
-
-
-
-.. _proto-enumpreseticon:
-
-EnumPresetIcon
-^^^^^^^^^^^^^^
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-.. list-table::
- :widths: 10 10 40
- :header-rows: 1
-
- * - name
- - value
- - summary
- * - PRESET_ICON_VIDEO
- - 0
-
- -
-
- * - PRESET_ICON_ACTIVITY
- - 1
-
- -
-
- * - PRESET_ICON_CINEMATIC
- - 2
-
- -
-
- * - PRESET_ICON_PHOTO
- - 3
-
- -
-
- * - PRESET_ICON_LIVE_BURST
- - 4
-
- -
-
- * - PRESET_ICON_BURST
- - 5
-
- -
-
- * - PRESET_ICON_PHOTO_NIGHT
- - 6
-
- -
-
- * - PRESET_ICON_TIMEWARP
- - 7
-
- -
-
- * - PRESET_ICON_TIMELAPSE
- - 8
-
- -
-
- * - PRESET_ICON_NIGHTLAPSE
- - 9
-
- -
-
- * - PRESET_ICON_SNAIL
- - 10
-
- -
-
- * - PRESET_ICON_VIDEO_2
- - 11
-
- -
-
- * - PRESET_ICON_PHOTO_2
- - 13
-
- -
-
- * - PRESET_ICON_PANORAMA
- - 14
-
- -
-
- * - PRESET_ICON_BURST_2
- - 15
-
- -
-
- * - PRESET_ICON_TIMEWARP_2
- - 16
-
- -
-
- * - PRESET_ICON_TIMELAPSE_2
- - 17
-
- -
-
- * - PRESET_ICON_CUSTOM
- - 18
-
- -
-
- * - PRESET_ICON_AIR
- - 19
-
- -
-
- * - PRESET_ICON_BIKE
- - 20
-
- -
-
- * - PRESET_ICON_EPIC
- - 21
-
- -
-
- * - PRESET_ICON_INDOOR
- - 22
-
- -
-
- * - PRESET_ICON_MOTOR
- - 23
-
- -
-
- * - PRESET_ICON_MOUNTED
- - 24
-
- -
-
- * - PRESET_ICON_OUTDOOR
- - 25
-
- -
-
- * - PRESET_ICON_POV
- - 26
-
- -
-
- * - PRESET_ICON_SELFIE
- - 27
-
- -
-
- * - PRESET_ICON_SKATE
- - 28
-
- -
-
- * - PRESET_ICON_SNOW
- - 29
-
- -
-
- * - PRESET_ICON_TRAIL
- - 30
-
- -
-
- * - PRESET_ICON_TRAVEL
- - 31
-
- -
-
- * - PRESET_ICON_WATER
- - 32
-
- -
-
- * - PRESET_ICON_LOOPING
- - 33
-
- -
-
- * - PRESET_ICON_STARS
- - 34
-
- -
-
- * - PRESET_ICON_ACTION
- - 35
-
- -
-
- * - PRESET_ICON_FOLLOW_CAM
- - 36
-
- -
-
- * - PRESET_ICON_SURF
- - 37
-
- -
-
- * - PRESET_ICON_CITY
- - 38
-
- -
-
- * - PRESET_ICON_SHAKY
- - 39
-
- -
-
- * - PRESET_ICON_CHESTY
- - 40
-
- -
-
- * - PRESET_ICON_HELMET
- - 41
-
- -
-
- * - PRESET_ICON_BITE
- - 42
-
- -
-
- * - PRESET_ICON_BASIC
- - 58
-
- -
-
- * - PRESET_ICON_ULTRA_SLO_MO
- - 59
-
- -
-
- * - PRESET_ICON_STANDARD_ENDURANCE
- - 60
-
- -
-
- * - PRESET_ICON_ACTIVITY_ENDURANCE
- - 61
-
- -
-
- * - PRESET_ICON_CINEMATIC_ENDURANCE
- - 62
-
- -
-
- * - PRESET_ICON_SLOMO_ENDURANCE
- - 63
-
- -
-
- * - PRESET_ICON_STATIONARY_1
- - 64
-
- -
-
- * - PRESET_ICON_STATIONARY_2
- - 65
-
- -
-
- * - PRESET_ICON_STATIONARY_3
- - 66
-
- -
-
- * - PRESET_ICON_STATIONARY_4
- - 67
-
- -
-
- * - PRESET_ICON_SIMPLE_SUPER_PHOTO
- - 70
-
- -
-
- * - PRESET_ICON_SIMPLE_NIGHT_PHOTO
- - 71
-
- -
-
- * - PRESET_ICON_HIGHEST_QUALITY_VIDEO
- - 73
-
- -
-
- * - PRESET_ICON_STANDARD_QUALITY_VIDEO
- - 74
-
- -
-
- * - PRESET_ICON_BASIC_QUALITY_VIDEO
- - 75
-
- -
-
- * - PRESET_ICON_STAR_TRAIL
- - 76
-
- -
-
- * - PRESET_ICON_LIGHT_PAINTING
- - 77
-
- -
-
- * - PRESET_ICON_LIGHT_TRAIL
- - 78
-
- -
-
- * - PRESET_ICON_FULL_FRAME
- - 79
-
- -
-
- * - PRESET_ICON_TIMELAPSE_PHOTO
- - 1000
-
- -
-
- * - PRESET_ICON_NIGHTLAPSE_PHOTO
- - 1001
-
- -
-
-
-
-
-
-.. _proto-enumpresettitle:
-
-EnumPresetTitle
-^^^^^^^^^^^^^^^
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-.. list-table::
- :widths: 10 10 40
- :header-rows: 1
-
- * - name
- - value
- - summary
- * - PRESET_TITLE_ACTIVITY
- - 0
-
- -
-
- * - PRESET_TITLE_STANDARD
- - 1
-
- -
-
- * - PRESET_TITLE_CINEMATIC
- - 2
-
- -
-
- * - PRESET_TITLE_PHOTO
- - 3
-
- -
-
- * - PRESET_TITLE_LIVE_BURST
- - 4
-
- -
-
- * - PRESET_TITLE_BURST
- - 5
-
- -
-
- * - PRESET_TITLE_NIGHT
- - 6
-
- -
-
- * - PRESET_TITLE_TIME_WARP
- - 7
-
- -
-
- * - PRESET_TITLE_TIME_LAPSE
- - 8
-
- -
-
- * - PRESET_TITLE_NIGHT_LAPSE
- - 9
-
- -
-
- * - PRESET_TITLE_VIDEO
- - 10
-
- -
-
- * - PRESET_TITLE_SLOMO
- - 11
-
- -
-
- * - PRESET_TITLE_PHOTO_2
- - 13
-
- -
-
- * - PRESET_TITLE_PANORAMA
- - 14
-
- -
-
- * - PRESET_TITLE_TIME_WARP_2
- - 16
-
- -
-
- * - PRESET_TITLE_CUSTOM
- - 18
-
- -
-
- * - PRESET_TITLE_AIR
- - 19
-
- -
-
- * - PRESET_TITLE_BIKE
- - 20
-
- -
-
- * - PRESET_TITLE_EPIC
- - 21
-
- -
-
- * - PRESET_TITLE_INDOOR
- - 22
-
- -
-
- * - PRESET_TITLE_MOTOR
- - 23
-
- -
-
- * - PRESET_TITLE_MOUNTED
- - 24
-
- -
-
- * - PRESET_TITLE_OUTDOOR
- - 25
-
- -
-
- * - PRESET_TITLE_POV
- - 26
-
- -
-
- * - PRESET_TITLE_SELFIE
- - 27
-
- -
-
- * - PRESET_TITLE_SKATE
- - 28
-
- -
-
- * - PRESET_TITLE_SNOW
- - 29
-
- -
-
- * - PRESET_TITLE_TRAIL
- - 30
-
- -
-
- * - PRESET_TITLE_TRAVEL
- - 31
-
- -
-
- * - PRESET_TITLE_WATER
- - 32
-
- -
-
- * - PRESET_TITLE_LOOPING
- - 33
-
- -
-
- * - PRESET_TITLE_STARS
- - 34
-
- -
-
- * - PRESET_TITLE_ACTION
- - 35
-
- -
-
- * - PRESET_TITLE_FOLLOW_CAM
- - 36
-
- -
-
- * - PRESET_TITLE_SURF
- - 37
-
- -
-
- * - PRESET_TITLE_CITY
- - 38
-
- -
-
- * - PRESET_TITLE_SHAKY
- - 39
-
- -
-
- * - PRESET_TITLE_CHESTY
- - 40
-
- -
-
- * - PRESET_TITLE_HELMET
- - 41
-
- -
-
- * - PRESET_TITLE_BITE
- - 42
-
- -
-
- * - PRESET_TITLE_BASIC
- - 58
-
- -
-
- * - PRESET_TITLE_ULTRA_SLO_MO
- - 59
-
- -
-
- * - PRESET_TITLE_STANDARD_ENDURANCE
- - 60
-
- -
-
- * - PRESET_TITLE_ACTIVITY_ENDURANCE
- - 61
-
- -
-
- * - PRESET_TITLE_CINEMATIC_ENDURANCE
- - 62
-
- -
-
- * - PRESET_TITLE_SLOMO_ENDURANCE
- - 63
-
- -
-
- * - PRESET_TITLE_STATIONARY_1
- - 64
-
- -
-
- * - PRESET_TITLE_STATIONARY_2
- - 65
-
- -
-
- * - PRESET_TITLE_STATIONARY_3
- - 66
-
- -
-
- * - PRESET_TITLE_STATIONARY_4
- - 67
-
- -
-
- * - PRESET_TITLE_SIMPLE_VIDEO
- - 68
-
- -
-
- * - PRESET_TITLE_SIMPLE_TIME_WARP
- - 69
-
- -
-
- * - PRESET_TITLE_SIMPLE_SUPER_PHOTO
- - 70
-
- -
-
- * - PRESET_TITLE_SIMPLE_NIGHT_PHOTO
- - 71
-
- -
-
- * - PRESET_TITLE_SIMPLE_VIDEO_ENDURANCE
- - 72
-
- -
-
- * - PRESET_TITLE_HIGHEST_QUALITY
- - 73
-
- -
-
- * - PRESET_TITLE_EXTENDED_BATTERY
- - 74
-
- -
-
- * - PRESET_TITLE_LONGEST_BATTERY
- - 75
-
- -
-
- * - PRESET_TITLE_STAR_TRAIL
- - 76
-
- -
-
- * - PRESET_TITLE_LIGHT_PAINTING
- - 77
-
- -
-
- * - PRESET_TITLE_LIGHT_TRAIL
- - 78
-
- -
-
- * - PRESET_TITLE_FULL_FRAME
- - 79
-
- -
-
- * - PRESET_TITLE_STANDARD_QUALITY_VIDEO
- - 82
-
- -
-
- * - PRESET_TITLE_BASIC_QUALITY_VIDEO
- - 83
-
- -
-
- * - PRESET_TITLE_HIGHEST_QUALITY_VIDEO
- - 93
-
- -
-
- * - PRESET_TITLE_USER_DEFINED_CUSTOM_NAME
- - 94
-
- -
-
-
-
-
-
-.. _proto-enumprovisioning:
-
-EnumProvisioning
-^^^^^^^^^^^^^^^^
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-.. list-table::
- :widths: 10 10 40
- :header-rows: 1
-
- * - name
- - value
- - summary
- * - PROVISIONING_UNKNOWN
- - 0
-
- -
-
- * - PROVISIONING_NEVER_STARTED
- - 1
-
- -
-
- * - PROVISIONING_STARTED
- - 2
-
- -
-
- * - PROVISIONING_ABORTED_BY_SYSTEM
- - 3
-
- -
-
- * - PROVISIONING_CANCELLED_BY_USER
- - 4
-
- -
-
- * - PROVISIONING_SUCCESS_NEW_AP
- - 5
-
- -
-
- * - PROVISIONING_SUCCESS_OLD_AP
- - 6
-
- -
-
- * - PROVISIONING_ERROR_FAILED_TO_ASSOCIATE
- - 7
-
- -
-
- * - PROVISIONING_ERROR_PASSWORD_AUTH
- - 8
-
- -
-
- * - PROVISIONING_ERROR_EULA_BLOCKING
- - 9
-
- -
-
- * - PROVISIONING_ERROR_NO_INTERNET
- - 10
-
- -
-
- * - PROVISIONING_ERROR_UNSUPPORTED_TYPE
- - 11
-
- -
-
-
-
-
-
-.. _proto-enumregisterlivestreamstatus:
-
-EnumRegisterLiveStreamStatus
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-.. list-table::
- :widths: 10 10 40
- :header-rows: 1
-
- * - name
- - value
- - summary
- * - REGISTER_LIVE_STREAM_STATUS_STATUS
- - 1
-
- -
-
- * - REGISTER_LIVE_STREAM_STATUS_ERROR
- - 2
-
- -
-
- * - REGISTER_LIVE_STREAM_STATUS_MODE
- - 3
-
- -
-
- * - REGISTER_LIVE_STREAM_STATUS_BITRATE
- - 4
-
- -
-
-
-
-
-
-.. _proto-enumregisterpresetstatus:
-
-EnumRegisterPresetStatus
-^^^^^^^^^^^^^^^^^^^^^^^^
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-.. list-table::
- :widths: 10 10 40
- :header-rows: 1
-
- * - name
- - value
- - summary
- * - REGISTER_PRESET_STATUS_PRESET
- - 1
-
- - Send notification when properties of a preset change
-
- * - REGISTER_PRESET_STATUS_PRESET_GROUP_ARRAY
- - 2
-
- - Send notification when properties of a preset group change
-
-
-
-
-
-.. _proto-enumresultgeneric:
-
-EnumResultGeneric
-^^^^^^^^^^^^^^^^^
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-.. list-table::
- :widths: 10 10 40
- :header-rows: 1
-
- * - name
- - value
- - summary
- * - RESULT_UNKNOWN
- - 0
-
- -
-
- * - RESULT_SUCCESS
- - 1
-
- -
-
- * - RESULT_ILL_FORMED
- - 2
-
- -
-
- * - RESULT_NOT_SUPPORTED
- - 3
-
- -
-
- * - RESULT_ARGUMENT_OUT_OF_BOUNDS
- - 4
-
- -
-
- * - RESULT_ARGUMENT_INVALID
- - 5
-
- -
-
- * - RESULT_RESOURCE_NOT_AVAILABLE
- - 6
-
- -
-
-
-
-
-
-.. _proto-enumscanentryflags:
-
-EnumScanEntryFlags
-^^^^^^^^^^^^^^^^^^
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-.. list-table::
- :widths: 10 10 40
- :header-rows: 1
-
- * - name
- - value
- - summary
- * - SCAN_FLAG_OPEN
- - 0
-
- - This network does not require authentication
-
- * - SCAN_FLAG_AUTHENTICATED
- - 1
-
- - This network requires authentication
-
- * - SCAN_FLAG_CONFIGURED
- - 2
-
- - This network has been previously provisioned
-
- * - SCAN_FLAG_BEST_SSID
- - 4
-
- -
-
- * - SCAN_FLAG_ASSOCIATED
- - 8
-
- - Camera is connected to this AP
-
- * - SCAN_FLAG_UNSUPPORTED_TYPE
- - 16
-
- -
-
-
-
-
-
-.. _proto-enumscanning:
-
-EnumScanning
-^^^^^^^^^^^^
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-.. list-table::
- :widths: 10 10 40
- :header-rows: 1
-
- * - name
- - value
- - summary
- * - SCANNING_UNKNOWN
- - 0
-
- -
-
- * - SCANNING_NEVER_STARTED
- - 1
-
- -
-
- * - SCANNING_STARTED
- - 2
-
- -
-
- * - SCANNING_ABORTED_BY_SYSTEM
- - 3
-
- -
-
- * - SCANNING_CANCELLED_BY_USER
- - 4
-
- -
-
- * - SCANNING_SUCCESS
- - 5
-
- -
-
-
-
-
-
-.. _proto-enumwindowsize:
-
-EnumWindowSize
-^^^^^^^^^^^^^^
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-.. list-table::
- :widths: 10 10 40
- :header-rows: 1
-
- * - name
- - value
- - summary
- * - WINDOW_SIZE_480
- - 4
-
- -
-
- * - WINDOW_SIZE_720
- - 7
-
- -
-
- * - WINDOW_SIZE_1080
- - 12
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-.. _proto-media:
-
-Media
------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-A common model to represent a media file
-
-.. list-table::
- :widths: 10 10 15 40
- :header-rows: 1
-
- * - field
- - typespec
- - value
- - summary
- * - folder
- - string
- - 1
-
- - Directory in which the media is contained
-
- * - file
- - string
- - 2
-
- - Filename of media
-
-
-
-
-
-
-.. _proto-notifprovisioningstate:
-
-NotifProvisioningState
-----------------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-Provision state notification
-
-Sent during provisioning triggered via :ref:`proto-requestconnect` or :ref:`proto-requestconnectnew`
-
-.. list-table::
- :widths: 10 10 15 40
- :header-rows: 1
-
- * - field
- - typespec
- - value
- - summary
- * - provisioning_state
-
- - :ref:`proto-enumprovisioning`
- - 1
-
- - Provisioning / connection state
-
-
-
-
-
-
-.. _proto-notifstartscanning:
-
-NotifStartScanning
-------------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-Scanning state notification
-
-Triggered via :ref:`proto-requeststartscan`
-
-.. list-table::
- :widths: 10 10 15 40
- :header-rows: 1
-
- * - field
- - typespec
- - value
- - summary
- * - scanning_state
-
- - :ref:`proto-enumscanning`
- - 1
-
- - Scanning state
-
- * - scan_id
- - int32
- - 2
-
- - ID associated with scan results (included if scan was successful)
-
- * - total_entries
- - int32
- - 3
-
- - Number of APs found during scan (included if scan was successful)
-
- * - total_configured_ssid
- - int32
- - 4
-
- - Total count of camera's provisioned SSIDs
-
-
-
-
-
-
-.. _proto-notifycohnstatus:
-
-NotifyCOHNStatus
-----------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-Current COHN status triggered by a :ref:`proto-requestgetcohnstatus`
-
-.. list-table::
- :widths: 10 10 15 40
- :header-rows: 1
-
- * - field
- - typespec
- - value
- - summary
- * - status
-
- - :ref:`proto-enumcohnstatus`
- - 1
-
- - Current COHN status
-
- * - state
-
- - :ref:`proto-enumcohnnetworkstate`
- - 2
-
- - Current COHN network state
-
- * - username
- - string
- - 3
-
- - Username used for http basic auth header
-
- * - password
- - string
- - 4
-
- - Password used for http basic auth header
-
- * - ipaddress
- - string
- - 5
-
- - Camera's IP address on the local network
-
- * - enabled
- - bool
- - 6
-
- - Is COHN currently enabled?
-
- * - ssid
- - string
- - 7
-
- - Currently connected SSID
-
- * - macaddress
- - string
- - 8
-
- - MAC address of the wifi adapter
-
-
-
-
-
-
-.. _proto-notifylivestreamstatus:
-
-NotifyLiveStreamStatus
-----------------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-Live Stream status
-
-Sent either:
-
- - As a synchronous response to initial :ref:`proto-requestgetlivestreamstatus`
- - As an asynchronous notifications registered for via :ref:`proto-requestgetlivestreamstatus`
-
-.. list-table::
- :widths: 10 10 15 40
- :header-rows: 1
-
- * - field
- - typespec
- - value
- - summary
- * - live_stream_status
-
- - :ref:`proto-enumlivestreamstatus`
- - 1
-
- - Live stream status
-
- * - live_stream_error
-
- - :ref:`proto-enumlivestreamerror`
- - 2
-
- - Live stream error
-
- * - live_stream_encode
- - bool
- - 3
-
- - Is live stream encoding?
-
- * - live_stream_bitrate
- - int32
- - 4
-
- - Live stream bitrate (Kbps)
-
- * - live_stream_window_size_supported_array
-
- - :ref:`proto-enumwindowsize`
- - 5
-
- - Set of currently supported resolutions
-
- * - live_stream_encode_supported
- - bool
- - 6
-
- - Does the camera support encoding while live streaming?
-
- * - live_stream_max_lens_unsupported
- - bool
- - 7
-
- - Is the Max Lens feature NOT supported?
-
- * - live_stream_minimum_stream_bitrate
- - int32
- - 8
-
- - Camera-defined minimum bitrate (static) (Kbps)
-
- * - live_stream_maximum_stream_bitrate
- - int32
- - 9
-
- - Camera-defined maximum bitrate (static) (Kbps)
-
- * - live_stream_lens_supported
- - bool
- - 10
-
- - Does camera support setting lens for live streaming?
-
- * - live_stream_lens_supported_array
-
- - :ref:`proto-enumlens`
- - 11
-
- - Set of currently supported FOV options
-
-
-
-
-
-
-.. _proto-notifypresetstatus:
-
-NotifyPresetStatus
-------------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-Current Preset status
-
-Sent either:
-
-- Synchronously via initial response to :ref:`proto-requestgetpresetstatus`
-- Asynchronously when Preset change if registered in :ref:`proto-requestgetpresetstatus`
-
-.. list-table::
- :widths: 10 10 15 40
- :header-rows: 1
-
- * - field
- - typespec
- - value
- - summary
- * - preset_group_array
-
- - :ref:`proto-presetgroup`
- - 1
-
- - List of currently available Preset Groups
-
-
-
-
-
-
-.. _proto-preset:
-
-Preset
-------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-An individual preset.
-
-.. list-table::
- :widths: 10 10 15 40
- :header-rows: 1
-
- * - field
- - typespec
- - value
- - summary
- * - id
- - int32
- - 1
-
- - Preset ID
-
- * - mode
-
- - :ref:`proto-enumflatmode`
- - 2
-
- - Preset flatmode ID
-
- * - title_id
-
- - :ref:`proto-enumpresettitle`
- - 3
-
- - Preset Title ID
-
- * - title_number
- - int32
- - 4
-
- - Preset Title Number (e.g. 1/2/3 in Custom1, Custom2, Custom3)
-
- * - user_defined
- - bool
- - 5
-
- - Is the Preset custom/user-defined?
-
- * - icon
-
- - :ref:`proto-enumpreseticon`
- - 6
-
- - Preset Icon ID
-
- * - setting_array
-
- - :ref:`proto-presetsetting`
- - 7
-
- - Array of settings associated with this Preset
-
- * - is_modified
- - bool
- - 8
-
- - Has Preset been modified from factory defaults? (False for user-defined Presets)
-
- * - is_fixed
- - bool
- - 9
-
- - Is this Preset mutable?
-
- * - custom_name
- - string
- - 10
-
- - Custom string name given to this preset via :ref:`proto-requestcustompresetupdate`
-
-
-
-
-
-
-.. _proto-presetgroup:
-
-PresetGroup
------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-Preset Group meta information and contained Presets
-
-.. list-table::
- :widths: 10 10 15 40
- :header-rows: 1
-
- * - field
- - typespec
- - value
- - summary
- * - id
-
- - :ref:`proto-enumpresetgroup`
- - 1
-
- - Preset Group ID
-
- * - preset_array
-
- - :ref:`proto-preset`
- - 2
-
- - Array of Presets contained in this Preset Group
-
- * - can_add_preset
- - bool
- - 3
-
- - Is there room in the group to add additional Presets?
-
- * - icon
-
- - :ref:`proto-enumpresetgroupicon`
- - 4
-
- - The icon to display for this preset group
-
-
-
-
-
-
-.. _proto-presetsetting:
-
-PresetSetting
--------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-Setting representation that comprises a :ref:`proto-preset`
-
-.. list-table::
- :widths: 10 10 15 40
- :header-rows: 1
-
- * - field
- - typespec
- - value
- - summary
- * - id
- - int32
- - 1
-
- - Setting ID
-
- * - value
- - int32
- - 2
-
- - Setting value
-
- * - is_caption
- - bool
- - 3
-
- - Does this setting appear on the Preset "pill" in the camera UI?
-
-
-
-
-
-
-.. _proto-requestcohncert:
-
-RequestCOHNCert
----------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-Get the COHN certificate.
-
-Returns a :ref:`proto-responsecohncert`
-
-
-
-
-
-.. _proto-requestclearcohncert:
-
-RequestClearCOHNCert
---------------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-Clear the COHN certificate.
-
-Returns a :ref:`proto-responsegeneric` with the status of the clear
-
-
-
-
-
-.. _proto-requestconnect:
-
-RequestConnect
---------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-Connect to (but do not authenticate with) an Access Point
-
-This is intended to be used to connect to a previously-connected Access Point
-
-Response: :ref:`proto-responseconnect`
-
-Notification: :ref:`proto-notifprovisioningstate` sent periodically as provisioning state changes
-
-.. list-table::
- :widths: 10 10 15 40
- :header-rows: 1
-
- * - field
- - typespec
- - value
- - summary
- * - ssid
- - string
- - 1
-
- - AP SSID
-
-
-
-
-
-
-.. _proto-requestconnectnew:
-
-RequestConnectNew
------------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-Connect to and authenticate with an Access Point
-
-This is only intended to be used if the AP is not previously provisioned.
-
-Response: :ref:`proto-responseconnectnew` sent immediately
-
-Notification: :ref:`proto-notifprovisioningstate` sent periodically as provisioning state changes
-
-.. list-table::
- :widths: 10 10 15 40
- :header-rows: 1
-
- * - field
- - typespec
- - value
- - summary
- * - ssid
- - string
- - 1
-
- - AP SSID
-
- * - password
- - string
- - 2
-
- - AP password
-
- * - static_ip
- - bytes
- - 3
-
- - Static IP address
-
- * - gateway
- - bytes
- - 4
-
- - Gateway IP address
-
- * - subnet
- - bytes
- - 5
-
- - Subnet mask
-
- * - dns_primary
- - bytes
- - 6
-
- - Primary DNS
-
- * - dns_secondary
- - bytes
- - 7
-
- - Secondary DNS
-
-
-
-
-
-
-.. _proto-requestcreatecohncert:
-
-RequestCreateCOHNCert
----------------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-Create the Camera On the Home Network SSL/TLS certificate.
-
-Returns a :ref:`proto-responsegeneric` with the status of the creation
-
-.. list-table::
- :widths: 10 10 15 40
- :header-rows: 1
-
- * - field
- - typespec
- - value
- - summary
- * - override
- - bool
- - 1
-
- - Override current provisioning and create new cert
-
-
-
-
-
-
-.. _proto-requestcustompresetupdate:
-
-RequestCustomPresetUpdate
--------------------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-Request to Update the Title and / or Icon of the Active Custom Preset
-
-This only operates on the currently active Preset and will fail if the current
-Preset is not custom.
-
-The use cases are:
-
-1. Update the Custom Preset Icon
-
- - `icon_id` is always optional and can always be passed
-
-and / or
-
-2. Update the Custom Preset Title to a...
-
- - **Factory Preset Title**: Set `title_id` to a non-PRESET_TITLE_USER_DEFINED_CUSTOM_NAME (94) value
- - **Custom Preset Name**: Set `title_id` to PRESET_TITLE_USER_DEFINED_CUSTOM_NAME (94) and specify a `custom_name`
-
-Returns a :ref:`proto-responsegeneric` with the status of the preset update request.
-
-.. list-table::
- :widths: 10 10 15 40
- :header-rows: 1
-
- * - field
- - typespec
- - value
- - summary
- * - title_id
-
- - :ref:`proto-enumpresettitle`
- - 1
-
- - | Preset Title ID
- |
- | The range of acceptable custom title ID's can be found in the initial :ref:`proto-notifypresetstatus` response
- | to :ref:`proto-requestgetpresetstatus`
-
- * - custom_name
- - string
- - 2
-
- - | UTF-8 encoded custom preset name
- |
- | The name must obey the following:
- |
- | - Custom titles must be between 1 and 16 characters (inclusive)
- | - No special characters outside of the following languages: English, French, Italian, German,
- | Spanish, Portuguese, Swedish, Russian
-
- * - icon_id
-
- - :ref:`proto-enumpreseticon`
- - 3
-
- - | Preset Icon ID
- |
- | The range of acceptable custom icon ID's can be found in the initial :ref:`proto-notifypresetstatus` response to
- | :ref:`proto-requestgetpresetstatus`
-
-
-
-
-
-
-.. _proto-requestgetapentries:
-
-RequestGetApEntries
--------------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-Get a list of Access Points found during a :ref:`proto-requeststartscan`
-
-Response: :ref:`proto-responsegetapentries`
-
-.. list-table::
- :widths: 10 10 15 40
- :header-rows: 1
-
- * - field
- - typespec
- - value
- - summary
- * - start_index
- - int32
- - 1
-
- - Used for paging. 0 <= start_index < :ref:`proto-responsegetapentries` .total_entries
-
- * - max_entries
- - int32
- - 2
-
- - Used for paging. Value must be < :ref:`proto-responsegetapentries` .total_entries
-
- * - scan_id
- - int32
- - 3
-
- - ID corresponding to a set of scan results (i.e. :ref:`proto-responsegetapentries` .scan_id)
-
-
-
-
-
-
-.. _proto-requestgetcohnstatus:
-
-RequestGetCOHNStatus
---------------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-Get the current COHN status.
-
-Response: :ref:`proto-notifycohnstatus`
-
-Additionally, asynchronous updates can also be registered to return more :ref:`proto-notifycohnstatus` when a value
-changes.
-
-.. list-table::
- :widths: 10 10 15 40
- :header-rows: 1
-
- * - field
- - typespec
- - value
- - summary
- * - register_cohn_status
- - bool
- - 1
-
- - 1 to register, 0 to unregister
-
-
-
-
-
-
-.. _proto-requestgetlastcapturedmedia:
-
-RequestGetLastCapturedMedia
----------------------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-Get the last captured media filename
-
-Returns a :ref:`proto-responselastcapturedmedia`
-
-
-
-
-
-.. _proto-requestgetlivestreamstatus:
-
-RequestGetLiveStreamStatus
---------------------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-Get the current livestream status (and optionally register for future status changes)
-
-Response: :ref:`proto-notifylivestreamstatus`
-
-Notification: :ref:`proto-notifylivestreamstatus`
-
-.. list-table::
- :widths: 10 10 15 40
- :header-rows: 1
-
- * - field
- - typespec
- - value
- - summary
- * - register_live_stream_status
-
- - :ref:`proto-enumregisterlivestreamstatus`
- - 1
-
- - Array of live stream statuses to be notified about
-
- * - unregister_live_stream_status
-
- - :ref:`proto-enumregisterlivestreamstatus`
- - 2
-
- - Array of live stream statuses to stop being notified about
-
-
-
-
-
-
-.. _proto-requestgetpresetstatus:
-
-RequestGetPresetStatus
-----------------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-Get preset status (and optionally register to be notified when it changes)
-
-Response: :ref:`proto-notifypresetstatus` sent immediately
-
-Notification: :ref:`proto-notifypresetstatus` sent periodically as preset status changes, if registered.
-
-.. list-table::
- :widths: 10 10 15 40
- :header-rows: 1
-
- * - field
- - typespec
- - value
- - summary
- * - register_preset_status
-
- - :ref:`proto-enumregisterpresetstatus`
- - 1
-
- - Array of Preset statuses to be notified about
-
- * - unregister_preset_status
-
- - :ref:`proto-enumregisterpresetstatus`
- - 2
-
- - Array of Preset statuses to stop being notified about
-
-
-
-
-
-
-.. _proto-requestreleasenetwork:
-
-RequestReleaseNetwork
----------------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-Request to disconnect from currently-connected AP
-
-This drops the camera out of Station (STA) Mode and returns it to Access Point (AP) mode.
-
-Response: :ref:`proto-responsegeneric`
-
-
-
-
-
-.. _proto-requestsetcohnsetting:
-
-RequestSetCOHNSetting
----------------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-Configure a COHN Setting
-
-Returns a :ref:`proto-responsegeneric`
-
-.. list-table::
- :widths: 10 10 15 40
- :header-rows: 1
-
- * - field
- - typespec
- - value
- - summary
- * - cohn_active
- - bool
- - 1
-
- - | 1 to enable COHN, 0 to disable COHN
- |
- | When set to 1, STA Mode connection will be dropped and camera will not automatically re-connect for COHN.
-
-
-
-
-
-
-.. _proto-requestsetcameracontrolstatus:
-
-RequestSetCameraControlStatus
------------------------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-Set Camera Control Status (as part of Global Behaviors feature)
-
-This command is used to tell the camera that the app (i.e. External Control) wishes to claim control of the camera.
-This causes the camera to immediately exit most contextual menus and return to the idle screen. Any interaction with
-the camera's physical buttons will cause the camera to reclaim control and update control status accordingly. If the
-user returns the camera UI to the idle screen, the camera updates control status to Idle.
-
-The entity currently claiming control of the camera is advertised in camera status 114. Information about whether the
-camera is in a contextual menu or not is advertised in camera status 63.
-
-Response: :ref:`proto-responsegeneric`
-
-.. list-table::
- :widths: 10 10 15 40
- :header-rows: 1
-
- * - field
- - typespec
- - value
- - summary
- * - camera_control_status
-
- - :ref:`proto-enumcameracontrolstatus`
- - 1
-
- - Declare who is taking control of the camera
-
-
-
-
-
-
-.. _proto-requestsetlivestreammode:
-
-RequestSetLiveStreamMode
-------------------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-Configure Live Streaming
-
-Response: :ref:`proto-responsegeneric`
-
-.. list-table::
- :widths: 10 10 15 40
- :header-rows: 1
-
- * - field
- - typespec
- - value
- - summary
- * - url
- - string
- - 1
-
- - RTMP(S) URL used for live stream
-
- * - encode
- - bool
- - 2
-
- - Save media to sdcard while streaming?
-
- * - window_size
-
- - :ref:`proto-enumwindowsize`
- - 3
-
- - | Resolution to use for live stream
- |
- | The set of supported lenses is only available from the `live_stream_window_size_supported_array` in :ref:`proto-notifylivestreamstatus`)
-
- * - cert
- - bytes
- - 6
-
- - Certificate for servers that require it in PEM format
-
- * - minimum_bitrate
- - int32
- - 7
-
- - Minimum desired bitrate (may or may not be honored)
-
- * - maximum_bitrate
- - int32
- - 8
-
- - Maximum desired bitrate (may or may not be honored)
-
- * - starting_bitrate
- - int32
- - 9
-
- - Starting bitrate
-
- * - lens
-
- - :ref:`proto-enumlens`
- - 10
-
- - | Lens to use for live stream
- |
- | The set of supported lenses is only available from the `live_stream_lens_supported_array` in :ref:`proto-notifylivestreamstatus`)
-
-
-
-
-
-
-.. _proto-requestsetturboactive:
-
-RequestSetTurboActive
----------------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-Enable/disable display of "Transferring Media" UI
-
-Response: :ref:`proto-responsegeneric`
-
-.. list-table::
- :widths: 10 10 15 40
- :header-rows: 1
-
- * - field
- - typespec
- - value
- - summary
- * - active
- - bool
- - 1
-
- - Enable or disable Turbo Transfer feature
-
-
-
-
-
-
-.. _proto-requeststartscan:
-
-RequestStartScan
-----------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-Start scanning for Access Points
-
-.. note:: Serialization of this object is zero bytes.
-
-Response: :ref:`proto-responsestartscanning` are sent immediately after the camera receives this command
-
-Notifications: :ref:`proto-notifstartscanning` are sent periodically as scanning state changes. Use to detect scan complete.
-
-
-
-
-
-.. _proto-responsecohncert:
-
-ResponseCOHNCert
-----------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-COHN Certificate response triggered by :ref:`proto-requestcohncert`
-
-.. list-table::
- :widths: 10 10 15 40
- :header-rows: 1
-
- * - field
- - typespec
- - value
- - summary
- * - result
-
- - :ref:`proto-enumresultgeneric`
- - 1
-
- - Was request successful?
-
- * - cert
- - string
- - 2
-
- - Root CA cert (ASCII text)
-
-
-
-
-
-
-.. _proto-responseconnect:
-
-ResponseConnect
----------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-The status of an attempt to connect to an Access Point
-
-Sent as the initial response to :ref:`proto-requestconnect`
-
-.. list-table::
- :widths: 10 10 15 40
- :header-rows: 1
-
- * - field
- - typespec
- - value
- - summary
- * - result
-
- - :ref:`proto-enumresultgeneric`
- - 1
-
- - Generic pass/fail/error info
-
- * - provisioning_state
-
- - :ref:`proto-enumprovisioning`
- - 2
-
- - Provisioning/connection state
-
- * - timeout_seconds
- - int32
- - 3
-
- - Network connection timeout (seconds)
-
-
-
-
-
-
-.. _proto-responseconnectnew:
-
-ResponseConnectNew
-------------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-The status of an attempt to connect to an Access Point
-
-Sent as the initial response to :ref:`proto-requestconnectnew`
-
-.. list-table::
- :widths: 10 10 15 40
- :header-rows: 1
-
- * - field
- - typespec
- - value
- - summary
- * - result
-
- - :ref:`proto-enumresultgeneric`
- - 1
-
- - Status of Connect New request
-
- * - provisioning_state
-
- - :ref:`proto-enumprovisioning`
- - 2
-
- - Current provisioning state of the network
-
- * - timeout_seconds
- - int32
- - 3
-
- - | Number of seconds camera will wait before declaring a network connection attempt failed
-
-
-
-
-
-
-.. _proto-responsegeneric:
-
-ResponseGeneric
----------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-Generic Response used across many response / notification messages
-
-.. list-table::
- :widths: 10 10 15 40
- :header-rows: 1
-
- * - field
- - typespec
- - value
- - summary
- * - result
-
- - :ref:`proto-enumresultgeneric`
- - 1
-
- - Generic pass/fail/error info
-
-
-
-
-
-
-.. _proto-responsegetapentries:
-
-ResponseGetApEntries
---------------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-A list of scan entries describing a scanned Access Point
-
-This is sent in response to a :ref:`proto-requestgetapentries`
-
-.. list-table::
- :widths: 10 10 15 40
- :header-rows: 1
-
- * - field
- - typespec
- - value
- - summary
- * - result
-
- - :ref:`proto-enumresultgeneric`
- - 1
-
- - Generic pass/fail/error info
-
- * - scan_id
- - int32
- - 2
-
- - ID associated with this batch of results
-
- * - entries
-
- - :ref:`proto-responsegetapentries_scanentry`
- - 3
-
- - Array containing details about discovered APs
-
-
-
-
-
-
-.. _proto-responselastcapturedmedia:
-
-ResponseLastCapturedMedia
--------------------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-The Last Captured Media
-
-Message is sent in response to a :ref:`proto-requestgetlastcapturedmedia`.
-
-This contains the relative path of the last captured media starting from the `DCIM` directory on the SDCard. Depending
-on the type of media captured, it will return:
-
-- The single media path for single photo/video media
-- The path to the first captured media in the group for grouped media
-
-.. list-table::
- :widths: 10 10 15 40
- :header-rows: 1
-
- * - field
- - typespec
- - value
- - summary
- * - result
-
- - :ref:`proto-enumresultgeneric`
- - 1
-
- - Was the request successful?
-
- * - media
-
- - :ref:`proto-media`
- - 2
-
- - | Last captured media if result is RESULT_SUCCESS. Invalid if result is RESULT_RESOURCE_NOT_AVAILBLE.
-
-
-
-
-
-
-.. _proto-responsestartscanning:
-
-ResponseStartScanning
----------------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-The current scanning state.
-
-This is the initial response to a :ref:`proto-requeststartscan`
-
-.. list-table::
- :widths: 10 10 15 40
- :header-rows: 1
-
- * - field
- - typespec
- - value
- - summary
- * - result
-
- - :ref:`proto-enumresultgeneric`
- - 1
-
- - Generic pass/fail/error info
-
- * - scanning_state
-
- - :ref:`proto-enumscanning`
- - 2
-
- - Scanning state
-
-
-
-
-
-
-.. _proto-responsegetapentries_scanentry:
-
-ResponseGetApEntries::ScanEntry
--------------------------------
-
-
-.. seealso::
-
- `Source Protobuf File `__
-
-
-An individual Scan Entry in a :ref:`proto-responsegetapentries` response
-
-.. note:: When `scan_entry_flags` contains `SCAN_FLAG_CONFIGURED`, it is an indication that this network has already been provisioned.
-
-.. list-table::
- :widths: 10 10 15 40
- :header-rows: 1
-
- * - field
- - typespec
- - value
- - summary
- * - ssid
- - string
- - 1
-
- - AP SSID
-
- * - signal_strength_bars
- - int32
- - 2
-
- - Signal strength (3 bars: >-70 dBm; 2 bars: >-85 dBm; 1 bar: <=-85 dBm)
-
- * - signal_frequency_mhz
- - int32
- - 4
-
- - Signal frequency (MHz)
-
- * - scan_entry_flags
- - int32
- - 5
-
- - Bitmasked value from :ref:`proto-enumscanentryflags`
-
-
-
diff --git a/docs/ble/_sources/protocol/state_management.rst.txt b/docs/ble/_sources/protocol/state_management.rst.txt
deleted file mode 100644
index c15dfff1..00000000
--- a/docs/ble/_sources/protocol/state_management.rst.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-State Management
-****************
-
-Camera Readiness
-================
-
-Depending on the camera's state, it may not be ready to accept specific commands. This ready state is dependent on the
-`System Busy <../features/statuses.html#status_8>`_
-and `Encoding Active <../features/statuses.html#status_10>`_ status flags. For example:
-
-- System Busy flag is set while loading presets, changing settings, formatting sdcard, ...
-- Encoding Active flag is set while capturing photo/video media
-
-If the system is not ready, it should reject an incoming command; however, best practice is to always wait for the
-System Busy and Encode Active flags to be unset before sending messages other than get status/setting queries.
-
-Keep Alive
-==========
-
-Unless changed by the user, GoPro cameras will automatically power off after some time (e.g. 5min, 15min, 30min).
-Therefore, it is necessary to periodically send a `keep alive <../features/control.html#keep_alive>`_ signal to maintain the connection.
-
-Camera Control
-==============
-
-In order to prevent undefined behavior between the camera and a connected app, simultaneous use of the camera and a
-connected app is discouraged. A third party client should use
-`Set Camera Control <../features/control.html#set_camera_control>`_
-to tell the camera that the client wishes to claim control of the camera.
\ No newline at end of file
diff --git a/docs/ble/_static/css/badge_only.css b/docs/ble/_static/css/badge_only.css
index 9c6ea3de..f3f32c0a 100644
--- a/docs/ble/_static/css/badge_only.css
+++ b/docs/ble/_static/css/badge_only.css
@@ -1,4 +1,4 @@
/* badge_only.css/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro). */
-/* This copyright was auto-generated on Fri Feb 23 23:18:32 UTC 2024 */
+/* This copyright was auto-generated on Thu Feb 29 20:44:51 UTC 2024 */
.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}
\ No newline at end of file
diff --git a/docs/ble/_static/css/rtd_sphinx_search.min.css b/docs/ble/_static/css/rtd_sphinx_search.min.css
new file mode 100644
index 00000000..60e45f99
--- /dev/null
+++ b/docs/ble/_static/css/rtd_sphinx_search.min.css
@@ -0,0 +1,4 @@
+/* rtd_sphinx_search.min.css/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro). */
+/* This copyright was auto-generated on Thu Feb 29 20:44:51 UTC 2024 */
+
+@-webkit-keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.search__backdrop,.search__outer__wrapper{position:fixed;top:0;left:0;width:100%;height:100%;z-index:700}.search__backdrop{z-index:500;display:none;background-color:rgba(0,0,0,.502)}.search__outer{margin:auto;position:absolute;top:0;left:0;right:0;bottom:0;z-index:100000;height:80%;width:80%;max-height:1000px;max-width:1500px;padding:10px;overflow-y:scroll;border:1px solid #e0e0e0;line-height:1.875;background-color:#fcfcfc;-webkit-box-shadow:1px 3px 4px rgba(0,0,0,.09);box-shadow:1px 3px 4px rgba(0,0,0,.09);text-align:left}.search__outer::-webkit-scrollbar-track{border-radius:10px;background-color:#fcfcfc}.search__outer::-webkit-scrollbar{width:7px;height:7px;background-color:#fcfcfc}.search__outer::-webkit-scrollbar-thumb{border-radius:10px;background-color:#8f8f8f}.search__cross__img{width:15px;height:15px;margin:12px}.search__cross{position:absolute;top:0;right:0}.search__cross:hover{cursor:pointer}.search__outer__input{width:90%;height:30px;font-size:19px;outline:0;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fcfcfc;border:0;border-bottom:1px solid #757575;background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjEuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNDUxIDQ1MSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDUxIDQ1MTsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTQ0Ny4wNSw0MjhsLTEwOS42LTEwOS42YzI5LjQtMzMuOCw0Ny4yLTc3LjksNDcuMi0xMjYuMUMzODQuNjUsODYuMiwyOTguMzUsMCwxOTIuMzUsMEM4Ni4yNSwwLDAuMDUsODYuMywwLjA1LDE5Mi4zDQoJCXM4Ni4zLDE5Mi4zLDE5Mi4zLDE5Mi4zYzQ4LjIsMCw5Mi4zLTE3LjgsMTI2LjEtNDcuMkw0MjguMDUsNDQ3YzIuNiwyLjYsNi4xLDQsOS41LDRzNi45LTEuMyw5LjUtNA0KCQlDNDUyLjI1LDQ0MS44LDQ1Mi4yNSw0MzMuMiw0NDcuMDUsNDI4eiBNMjYuOTUsMTkyLjNjMC05MS4yLDc0LjItMTY1LjMsMTY1LjMtMTY1LjNjOTEuMiwwLDE2NS4zLDc0LjIsMTY1LjMsMTY1LjMNCgkJcy03NC4xLDE2NS40LTE2NS4zLDE2NS40QzEwMS4xNSwzNTcuNywyNi45NSwyODMuNSwyNi45NSwxOTIuM3oiLz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K);background-repeat:no-repeat;background-position:left;background-size:15px 15px;padding-left:25px}.search__outer__input:focus{outline:0}.search__outer .bar{position:relative;display:block;width:90%;margin-bottom:15px}.search__outer .bar:after,.search__outer .bar:before{content:"";height:2px;width:0;bottom:1px;position:absolute;background:#5264ae;-webkit-transition:.2s ease all;-o-transition:.2s ease all;transition:.2s ease all}.search__outer .bar:before{left:50%}.search__outer .bar:after{right:50%}.search__outer__input:focus~.bar:after,.search__outer__input:focus~.bar:before{width:50%}.search__result__box{padding:0 10px}.search__result__single{margin-top:10px;border-bottom:1px solid #e6e6e6}.outer_div_page_results:hover,.search__result__box .active{background-color:#f5f5f5}.search__error__box{color:#000;min-width:300px;font-weight:700}.outer_div_page_results{margin:5px 0;overflow:auto;padding:3px 5px}.search__result__single a{text-decoration:none;cursor:pointer}.search__result__title{display:inline-block;font-weight:500;margin-bottom:15px;margin-top:0;font-size:15px;color:#6ea0ec;border-bottom:1px solid #6ea0ec}.search__result__subheading{color:#000;font-weight:700;float:left;width:20%;font-size:15px;margin-right:10px;word-break:break-all;overflow-x:hidden}.search__result__content{text-decoration:none;color:#000;font-size:15px;display:block;margin:0;line-height:inherit;float:right;width:calc(80% - 15px);text-align:left}.search__outer span{font-style:normal}.search__outer .search__result__title span{background-color:#e5f6ff;padding-bottom:3px;border-bottom-color:#000}.search__outer .search__result__content span{background-color:#e5f6ff;border-bottom:1px solid #000}.search__result__subheading span{border-bottom:1px solid #000}.br-for-hits{display:block;content:"";margin-top:10px}.rtd_ui_search_subtitle{all:unset;color:inherit;font-size:85%}.rtd__search__credits{margin:auto;position:absolute;top:0;left:0;right:0;bottom:calc(-80% - 20px);width:80%;max-width:1500px;height:30px;overflow:hidden;background:#eee;z-index:100000;border:1px solid #eee;padding:5px 10px;text-align:center;color:#000}.rtd__search__credits a{color:#000;text-decoration:underline}.search__domain_role_name{font-size:80%;letter-spacing:1px}.search__filters{padding:0 10px}.search__filters li,.search__filters ul{display:-webkit-box;display:-ms-flexbox;display:flex}.search__filters ul{list-style:none;padding:0;margin:0}.search__filters li{-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-right:15px}.search__filters label{margin:auto}.search__filters .search__filters__title,.search__filters label{color:#000;font-size:15px}@media (max-width:670px){.rtd__search__credits{height:50px;bottom:calc(-80% - 40px);overflow:hidden}}@media (min-height:1250px){.rtd__search__credits{bottom:calc(-1000px - 30px)}}@media (max-width:630px){.search__result__content,.search__result__subheading{float:none;width:90%}}
\ No newline at end of file
diff --git a/docs/ble/_static/documentation_options.js b/docs/ble/_static/documentation_options.js
index fbecc039..47a8df86 100644
--- a/docs/ble/_static/documentation_options.js
+++ b/docs/ble/_static/documentation_options.js
@@ -1,5 +1,5 @@
/* documentation_options.js/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro). */
-/* This copyright was auto-generated on Fri Feb 23 23:18:31 UTC 2024 */
+/* This copyright was auto-generated on Thu Feb 29 20:44:51 UTC 2024 */
const DOCUMENTATION_OPTIONS = {
VERSION: '0.0.1',
diff --git a/docs/ble/_static/jquery.js b/docs/ble/_static/jquery.js
index 1cdd9832..5fb8288a 100644
--- a/docs/ble/_static/jquery.js
+++ b/docs/ble/_static/jquery.js
@@ -1,5 +1,5 @@
/* jquery.js/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro). */
-/* This copyright was auto-generated on Fri Feb 23 23:18:31 UTC 2024 */
+/* This copyright was auto-generated on Thu Feb 29 20:44:51 UTC 2024 */
/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,""],col:[2,""],tr:[2,""],td:[3,""],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:t}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,l=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return o=e.done,e},e:function(e){l=!0,a=e},f:function(){try{o||null==r.return||r.return()}finally{if(l)throw a}}}}function _slicedToArray(e,t){return _arrayWithHoles(e)||_iterableToArrayLimit(e,t)||_unsupportedIterableToArray(e,t)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(e,t){if(e){if("string"==typeof e)return _arrayLikeToArray(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Map"===(r="Object"===r&&e.constructor?e.constructor.name:r)||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?_arrayLikeToArray(e,t):void 0}}function _arrayLikeToArray(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);rSearching ....",a.appendChild(e);return debounce(function(){updateUrl(),updateSearchBar();var e=t+"?"+new URLSearchParams(r).toString();fetch(e,{method:"GET"}).then(function(e){if(!e.ok)throw new Error;return e.json()}).then(function(e){var t;0\n \n \x3c!--?xml version="1.0" encoding="UTF-8"?--\x3e\n
\n
\n \n \n \n \n