diff --git a/.github/workflows/mirror.yml b/.github/workflows/mirror.yml deleted file mode 100644 index 8f85e154..00000000 --- a/.github/workflows/mirror.yml +++ /dev/null @@ -1,21 +0,0 @@ -# mirror.yml/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro). -# This copyright was auto-generated on Mon Sep 27 19:00:18 UTC 2021 - -name: Mirror internal main to release - -on: - push: - branches: [main] - workflow_dispatch: - -jobs: - mirror: - if: ${{ github.repository != 'gopro/OpenGoPro' }} - name: Mirror Main with release on internal repo - runs-on: ubuntu-latest - steps: - - uses: zofrex/mirror-branch@v1.0.2 - with: - target-branch: release - token: ${{ secrets.PUSH_TO_PROTECTED_BRANCH }} - force: true \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index aae83b18..00000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,70 +0,0 @@ -# release.yml/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro). -# This copyright was auto-generated on Wed Dec 15 21:08:47 UTC 2021 - -name: Release changes to external repo - -on: - push: - branches: - - release - workflow_dispatch: - -jobs: - release: - if: ${{ github.repository != 'gopro/OpenGoPro' }} - runs-on: ubuntu-latest - steps: - - name: checkout release branch - uses: actions/checkout@v3 - with: - ref: release - path: release - token: ${{ secrets.PUSH_TO_PROTECTED_BRANCH }} - fetch-depth: 2 - lfs: true - - - name: checkout Target branch - uses: actions/checkout@v3 - with: - repository: gopro/OpenGoPro - ref: main - path: target - token: ${{ secrets.PUSH_TO_PROTECTED_BRANCH }} - - - name: Copy changes - shell: bash - run: | - shopt -s dotglob - shopt -s extglob - - # Clean target folder (except .git) - pushd target - rm -rf !(.git) > /dev/null 2>&1 || true - popd - - # Get commit message to be used for release - pushd release - git log -1 --pretty=%B > ../message - - # Move entire release folder (except .git) into target - mv !(.git) * ../target > /dev/null 2>&1 || true - - # Remove internal-only files - rm -rf ../target/.internal - rm -f ../target/.gitmodules - popd - - # Stage changed files - cd target - git config user.name github-actions - git config user.email github-actions@github.com - git add . - - # Check if there is actually anything to do (are there staged git changes?) - num_modified=$(git diff --cached --numstat | wc -l) - if [[ $num_modified == 0 ]]; then - echo "Nothing to push" - else - git commit -a -F ../message - git push - fi diff --git a/.github/workflows/repo_sync.yml b/.github/workflows/repo_sync.yml deleted file mode 100644 index 4584976d..00000000 --- a/.github/workflows/repo_sync.yml +++ /dev/null @@ -1,48 +0,0 @@ -# repo_sync.yml/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro). -# This copyright was auto-generated on Wed, Sep 1, 2021 5:05:36 PM - -name: Synchronize with external repo - -on: - schedule: - - cron: '*/15 * * * *' - workflow_dispatch: - -jobs: - repo-sync: - if: ${{ github.repository != 'gopro/OpenGoPro' }} - name: Mirror external main with internal main - runs-on: ubuntu-latest - steps: - - name: Check out Public Repoo - uses: actions/checkout@v3 - with: - persist-credentials: false - lfs: true - - - name: Sync to Internal Repo - shell: bash - run: | - UPSTREAM_REPO="https://github.com/gopro/OpenGoPro" - BRANCH_MAPPING="main:main" - echo "UPSTREAM_REPO=$UPSTREAM_REPO" - echo "BRANCHES=$BRANCH_MAPPING" - - git config --unset-all http."https://github.com/".extraheader || : - - echo "Resetting origin to: https://$GITHUB_ACTOR:${{ secrets.PUSH_TO_PROTECTED_BRANCH }}@github.com/$GITHUB_REPOSITORY" - git remote set-url origin "https://$GITHUB_ACTOR:${{ secrets.PUSH_TO_PROTECTED_BRANCH }}@github.com/$GITHUB_REPOSITORY" - - echo "Adding tmp_upstream $UPSTREAM_REPO" - git remote add tmp_upstream "$UPSTREAM_REPO" - - echo "Fetching tmp_upstream" - git fetch tmp_upstream --quiet - git remote --verbose - - echo "Pushing changes from tmp_upstream to origin" - git push origin "refs/remotes/tmp_upstream/${BRANCH_MAPPING%%:*}:refs/heads/${BRANCH_MAPPING#*:}" --force - - echo "Removing tmp_upstream" - git remote rm tmp_upstream - git remote --verbose diff --git a/.github/workflows/version.yml b/.github/workflows/version.yml deleted file mode 100644 index c5b5aeba..00000000 --- a/.github/workflows/version.yml +++ /dev/null @@ -1,51 +0,0 @@ -# version.yml/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro). -# This copyright was auto-generated on Wed Dec 15 21:08:47 UTC 2021 - -# Update the version, copyrights, make a commit, and tag the version - -name: Make a Tagged Release - -on: - workflow_dispatch: - inputs: - version: - description: 'version' - required: true - -jobs: - version_and_tag: - runs-on: ubuntu-latest - - steps: - - name: Checkout source branch - uses: actions/checkout@v3 - with: - ref: main - - - name: Update version, copyrights, and make tag - shell: bash - run: | - git config core.fileMode false - make version VERSION=${{ github.event.inputs.version }} - - - name: Create commit - shell: bash - run: | - git config core.fileMode false - git config user.name github-actions - git config user.email github-actions@github.com - git commit -am "Set version to $(VERSION) from github actions" - - - name: Push to protected branch - uses: CasperWA/push-protected@v2 - with: - token: ${{ secrets.PUSH_TO_PROTECTED_BRANCH }} - branch: main - force: false - unprotect_reviews: true - - - name: Create tag - shell: bash - run: | - git tag ${{ github.event.inputs.version }} - git push origin ${{ github.event.inputs.version }} diff --git a/.gitignore b/.gitignore index fdf3c187..db3de723 100644 --- a/.gitignore +++ b/.gitignore @@ -4,11 +4,6 @@ /.env **.log -/docs/ble/_sources/ -/docs/ble/.doctrees/ -/docs/ble/.buildinfo -/docs/ble/objects.inv - /test.html /link_results .vscode diff --git a/demos/README.md b/demos/README.md index a4e39575..48c8281c 100644 --- a/demos/README.md +++ b/demos/README.md @@ -1,9 +1,5 @@ This directory contains demos using the Open GoPro API with varying language and frameworks. -## Summary - -For a summary of demos see [here](https://gopro.github.io/OpenGoPro/demos). - ## Contributing 1. Add your demo in the appropriate language subfolder of this directory. Create one if it does not exist. diff --git a/docs/assets/images/global_behaviors.png b/docs/assets/images/global_behaviors.png deleted file mode 100644 index 746ff999..00000000 Binary files a/docs/assets/images/global_behaviors.png and /dev/null differ diff --git a/docs/assets/images/plantuml_all_global_behaviors_fsm.png b/docs/assets/images/plantuml_all_global_behaviors_fsm.png deleted file mode 100644 index 137cb9b6..00000000 Binary files a/docs/assets/images/plantuml_all_global_behaviors_fsm.png and /dev/null differ diff --git a/docs/assets/images/plantuml_ble_cohn_provision.png b/docs/assets/images/plantuml_ble_cohn_provision.png deleted file mode 100644 index 51537958..00000000 Binary files a/docs/assets/images/plantuml_ble_cohn_provision.png and /dev/null differ diff --git a/docs/assets/images/plantuml_ble_connect_ap.png b/docs/assets/images/plantuml_ble_connect_ap.png deleted file mode 100644 index c67f58a4..00000000 Binary files a/docs/assets/images/plantuml_ble_connect_ap.png and /dev/null differ diff --git a/docs/assets/images/plantuml_ble_connect_new_ap.png b/docs/assets/images/plantuml_ble_connect_new_ap.png deleted file mode 100644 index 7e34a350..00000000 Binary files a/docs/assets/images/plantuml_ble_connect_new_ap.png and /dev/null differ diff --git a/docs/assets/images/plantuml_ble_disconnect_ap.png b/docs/assets/images/plantuml_ble_disconnect_ap.png deleted file mode 100644 index baf36527..00000000 Binary files a/docs/assets/images/plantuml_ble_disconnect_ap.png and /dev/null differ diff --git a/docs/assets/images/plantuml_ble_live_streaming.png b/docs/assets/images/plantuml_ble_live_streaming.png deleted file mode 100644 index edf869a2..00000000 Binary files a/docs/assets/images/plantuml_ble_live_streaming.png and /dev/null differ diff --git a/docs/assets/images/plantuml_ble_scan_for_ssids.png b/docs/assets/images/plantuml_ble_scan_for_ssids.png deleted file mode 100644 index 70874308..00000000 Binary files a/docs/assets/images/plantuml_ble_scan_for_ssids.png and /dev/null differ diff --git a/docs/assets/images/plantuml_ble_tlv_vs_protobuf.png b/docs/assets/images/plantuml_ble_tlv_vs_protobuf.png deleted file mode 100644 index b87090b2..00000000 Binary files a/docs/assets/images/plantuml_ble_tlv_vs_protobuf.png and /dev/null differ diff --git a/docs/assets/images/resumeable_ota.png b/docs/assets/images/resumeable_ota.png deleted file mode 100644 index 1e4ea644..00000000 Binary files a/docs/assets/images/resumeable_ota.png and /dev/null differ diff --git a/docs/assets/images/simple_ota.png b/docs/assets/images/simple_ota.png deleted file mode 100644 index b6e6b721..00000000 Binary files a/docs/assets/images/simple_ota.png and /dev/null differ diff --git a/docs/assets/images/webcam.png b/docs/assets/images/webcam.png deleted file mode 100644 index 47506143..00000000 Binary files a/docs/assets/images/webcam.png and /dev/null differ diff --git a/docs/ble/_images/global_behaviors.png b/docs/ble/_images/global_behaviors.png deleted file mode 100644 index 746ff999..00000000 Binary files a/docs/ble/_images/global_behaviors.png and /dev/null differ diff --git a/docs/ble/_images/plantuml_ble_cohn_provision.png b/docs/ble/_images/plantuml_ble_cohn_provision.png deleted file mode 100644 index 51537958..00000000 Binary files a/docs/ble/_images/plantuml_ble_cohn_provision.png and /dev/null differ diff --git a/docs/ble/_images/plantuml_ble_connect_ap.png b/docs/ble/_images/plantuml_ble_connect_ap.png deleted file mode 100644 index c67f58a4..00000000 Binary files a/docs/ble/_images/plantuml_ble_connect_ap.png and /dev/null differ diff --git a/docs/ble/_images/plantuml_ble_connect_new_ap.png b/docs/ble/_images/plantuml_ble_connect_new_ap.png deleted file mode 100644 index 7e34a350..00000000 Binary files a/docs/ble/_images/plantuml_ble_connect_new_ap.png and /dev/null differ diff --git a/docs/ble/_images/plantuml_ble_disconnect_ap.png b/docs/ble/_images/plantuml_ble_disconnect_ap.png deleted file mode 100644 index baf36527..00000000 Binary files a/docs/ble/_images/plantuml_ble_disconnect_ap.png and /dev/null differ diff --git a/docs/ble/_images/plantuml_ble_live_streaming.png b/docs/ble/_images/plantuml_ble_live_streaming.png deleted file mode 100644 index edf869a2..00000000 Binary files a/docs/ble/_images/plantuml_ble_live_streaming.png and /dev/null differ diff --git a/docs/ble/_images/plantuml_ble_scan_for_ssids.png b/docs/ble/_images/plantuml_ble_scan_for_ssids.png deleted file mode 100644 index 70874308..00000000 Binary files a/docs/ble/_images/plantuml_ble_scan_for_ssids.png and /dev/null differ diff --git a/docs/ble/_images/plantuml_ble_tlv_vs_protobuf.png b/docs/ble/_images/plantuml_ble_tlv_vs_protobuf.png deleted file mode 100644 index b87090b2..00000000 Binary files a/docs/ble/_images/plantuml_ble_tlv_vs_protobuf.png and /dev/null differ diff --git a/docs/ble/_static/_sphinx_javascript_frameworks_compat.js b/docs/ble/_static/_sphinx_javascript_frameworks_compat.js deleted file mode 100644 index 81415803..00000000 --- a/docs/ble/_static/_sphinx_javascript_frameworks_compat.js +++ /dev/null @@ -1,123 +0,0 @@ -/* Compatability shim for jQuery and underscores.js. - * - * Copyright Sphinx contributors - * Released under the two clause BSD licence - */ - -/** - * small helper function to urldecode strings - * - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL - */ -jQuery.urldecode = function(x) { - if (!x) { - return x - } - return decodeURIComponent(x.replace(/\+/g, ' ')); -}; - -/** - * small helper function to urlencode strings - */ -jQuery.urlencode = encodeURIComponent; - -/** - * This function returns the parsed url parameters of the - * current request. Multiple values per key are supported, - * it will always return arrays of strings for the value parts. - */ -jQuery.getQueryParameters = function(s) { - if (typeof s === 'undefined') - s = document.location.search; - var parts = s.substr(s.indexOf('?') + 1).split('&'); - var result = {}; - for (var i = 0; i < parts.length; i++) { - var tmp = parts[i].split('=', 2); - var key = jQuery.urldecode(tmp[0]); - var value = jQuery.urldecode(tmp[1]); - if (key in result) - result[key].push(value); - else - result[key] = [value]; - } - return result; -}; - -/** - * highlight a given string on a jquery object by wrapping it in - * span elements with the given class name. - */ -jQuery.fn.highlightText = function(text, className) { - function highlight(node, addItems) { - if (node.nodeType === 3) { - var val = node.nodeValue; - var pos = val.toLowerCase().indexOf(text); - if (pos >= 0 && - !jQuery(node.parentNode).hasClass(className) && - !jQuery(node.parentNode).hasClass("nohighlight")) { - var span; - var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); - if (isInSVG) { - span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - } else { - span = document.createElement("span"); - span.className = className; - } - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - node.parentNode.insertBefore(span, node.parentNode.insertBefore( - document.createTextNode(val.substr(pos + text.length)), - node.nextSibling)); - node.nodeValue = val.substr(0, pos); - if (isInSVG) { - var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); - var bbox = node.parentElement.getBBox(); - rect.x.baseVal.value = bbox.x; - rect.y.baseVal.value = bbox.y; - rect.width.baseVal.value = bbox.width; - rect.height.baseVal.value = bbox.height; - rect.setAttribute('class', className); - addItems.push({ - "parent": node.parentNode, - "target": rect}); - } - } - } - else if (!jQuery(node).is("button, select, textarea")) { - jQuery.each(node.childNodes, function() { - highlight(this, addItems); - }); - } - } - var addItems = []; - var result = this.each(function() { - highlight(this, addItems); - }); - for (var i = 0; i < addItems.length; ++i) { - jQuery(addItems[i].parent).before(addItems[i].target); - } - return result; -}; - -/* - * backward compatibility for jQuery.browser - * This will be supported until firefox bug is fixed. - */ -if (!jQuery.browser) { - jQuery.uaMatch = function(ua) { - ua = ua.toLowerCase(); - - var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || - /(webkit)[ \/]([\w.]+)/.exec(ua) || - /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || - /(msie) ([\w.]+)/.exec(ua) || - ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || - []; - - return { - browser: match[ 1 ] || "", - version: match[ 2 ] || "0" - }; - }; - jQuery.browser = {}; - jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; -} diff --git a/docs/ble/_static/basic.css b/docs/ble/_static/basic.css deleted file mode 100644 index f316efcb..00000000 --- a/docs/ble/_static/basic.css +++ /dev/null @@ -1,925 +0,0 @@ -/* - * basic.css - * ~~~~~~~~~ - * - * Sphinx stylesheet -- basic theme. - * - * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/* -- main layout ----------------------------------------------------------- */ - -div.clearer { - clear: both; -} - -div.section::after { - display: block; - content: ''; - clear: left; -} - -/* -- relbar ---------------------------------------------------------------- */ - -div.related { - width: 100%; - font-size: 90%; -} - -div.related h3 { - display: none; -} - -div.related ul { - margin: 0; - padding: 0 0 0 10px; - list-style: none; -} - -div.related li { - display: inline; -} - -div.related li.right { - float: right; - margin-right: 5px; -} - -/* -- sidebar --------------------------------------------------------------- */ - -div.sphinxsidebarwrapper { - padding: 10px 5px 0 10px; -} - -div.sphinxsidebar { - float: left; - width: 230px; - margin-left: -100%; - font-size: 90%; - word-wrap: break-word; - overflow-wrap : break-word; -} - -div.sphinxsidebar ul { - list-style: none; -} - -div.sphinxsidebar ul ul, -div.sphinxsidebar ul.want-points { - margin-left: 20px; - list-style: square; -} - -div.sphinxsidebar ul ul { - margin-top: 0; - margin-bottom: 0; -} - -div.sphinxsidebar form { - margin-top: 10px; -} - -div.sphinxsidebar input { - border: 1px solid #98dbcc; - font-family: sans-serif; - font-size: 1em; -} - -div.sphinxsidebar #searchbox form.search { - overflow: hidden; -} - -div.sphinxsidebar #searchbox input[type="text"] { - float: left; - width: 80%; - padding: 0.25em; - box-sizing: border-box; -} - -div.sphinxsidebar #searchbox input[type="submit"] { - float: left; - width: 20%; - border-left: none; - padding: 0.25em; - box-sizing: border-box; -} - - -img { - border: 0; - max-width: 100%; -} - -/* -- search page ----------------------------------------------------------- */ - -ul.search { - margin: 10px 0 0 20px; - padding: 0; -} - -ul.search li { - padding: 5px 0 5px 20px; - background-image: url(file.png); - background-repeat: no-repeat; - background-position: 0 7px; -} - -ul.search li a { - font-weight: bold; -} - -ul.search li p.context { - color: #888; - margin: 2px 0 0 30px; - text-align: left; -} - -ul.keywordmatches li.goodmatch a { - font-weight: bold; -} - -/* -- index page ------------------------------------------------------------ */ - -table.contentstable { - width: 90%; - margin-left: auto; - margin-right: auto; -} - -table.contentstable p.biglink { - line-height: 150%; -} - -a.biglink { - font-size: 1.3em; -} - -span.linkdescr { - font-style: italic; - padding-top: 5px; - font-size: 90%; -} - -/* -- general index --------------------------------------------------------- */ - -table.indextable { - width: 100%; -} - -table.indextable td { - text-align: left; - vertical-align: top; -} - -table.indextable ul { - margin-top: 0; - margin-bottom: 0; - list-style-type: none; -} - -table.indextable > tbody > tr > td > ul { - padding-left: 0em; -} - -table.indextable tr.pcap { - height: 10px; -} - -table.indextable tr.cap { - margin-top: 10px; - background-color: #f2f2f2; -} - -img.toggler { - margin-right: 3px; - margin-top: 3px; - cursor: pointer; -} - -div.modindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -div.genindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -/* -- domain module index --------------------------------------------------- */ - -table.modindextable td { - padding: 2px; - border-collapse: collapse; -} - -/* -- general body styles --------------------------------------------------- */ - -div.body { - min-width: 360px; - max-width: 800px; -} - -div.body p, div.body dd, div.body li, div.body blockquote { - -moz-hyphens: auto; - -ms-hyphens: auto; - -webkit-hyphens: auto; - hyphens: auto; -} - -a.headerlink { - visibility: hidden; -} - -a:visited { - color: #551A8B; -} - -h1:hover > a.headerlink, -h2:hover > a.headerlink, -h3:hover > a.headerlink, -h4:hover > a.headerlink, -h5:hover > a.headerlink, -h6:hover > a.headerlink, -dt:hover > a.headerlink, -caption:hover > a.headerlink, -p.caption:hover > a.headerlink, -div.code-block-caption:hover > a.headerlink { - visibility: visible; -} - -div.body p.caption { - text-align: inherit; -} - -div.body td { - text-align: left; -} - -.first { - margin-top: 0 !important; -} - -p.rubric { - margin-top: 30px; - font-weight: bold; -} - -img.align-left, figure.align-left, .figure.align-left, object.align-left { - clear: left; - float: left; - margin-right: 1em; -} - -img.align-right, figure.align-right, .figure.align-right, object.align-right { - clear: right; - float: right; - margin-left: 1em; -} - -img.align-center, figure.align-center, .figure.align-center, object.align-center { - display: block; - margin-left: auto; - margin-right: auto; -} - -img.align-default, figure.align-default, .figure.align-default { - display: block; - margin-left: auto; - margin-right: auto; -} - -.align-left { - text-align: left; -} - -.align-center { - text-align: center; -} - -.align-default { - text-align: center; -} - -.align-right { - text-align: right; -} - -/* -- sidebars -------------------------------------------------------------- */ - -div.sidebar, -aside.sidebar { - margin: 0 0 0.5em 1em; - border: 1px solid #ddb; - padding: 7px; - background-color: #ffe; - width: 40%; - float: right; - clear: right; - overflow-x: auto; -} - -p.sidebar-title { - font-weight: bold; -} - -nav.contents, -aside.topic, -div.admonition, div.topic, blockquote { - clear: left; -} - -/* -- topics ---------------------------------------------------------------- */ - -nav.contents, -aside.topic, -div.topic { - border: 1px solid #ccc; - padding: 7px; - margin: 10px 0 10px 0; -} - -p.topic-title { - font-size: 1.1em; - font-weight: bold; - margin-top: 10px; -} - -/* -- admonitions ----------------------------------------------------------- */ - -div.admonition { - margin-top: 10px; - margin-bottom: 10px; - padding: 7px; -} - -div.admonition dt { - font-weight: bold; -} - -p.admonition-title { - margin: 0px 10px 5px 0px; - font-weight: bold; -} - -div.body p.centered { - text-align: center; - margin-top: 25px; -} - -/* -- content of sidebars/topics/admonitions -------------------------------- */ - -div.sidebar > :last-child, -aside.sidebar > :last-child, -nav.contents > :last-child, -aside.topic > :last-child, -div.topic > :last-child, -div.admonition > :last-child { - margin-bottom: 0; -} - -div.sidebar::after, -aside.sidebar::after, -nav.contents::after, -aside.topic::after, -div.topic::after, -div.admonition::after, -blockquote::after { - display: block; - content: ''; - clear: both; -} - -/* -- tables ---------------------------------------------------------------- */ - -table.docutils { - margin-top: 10px; - margin-bottom: 10px; - border: 0; - border-collapse: collapse; -} - -table.align-center { - margin-left: auto; - margin-right: auto; -} - -table.align-default { - margin-left: auto; - margin-right: auto; -} - -table caption span.caption-number { - font-style: italic; -} - -table caption span.caption-text { -} - -table.docutils td, table.docutils th { - padding: 1px 8px 1px 5px; - border-top: 0; - border-left: 0; - border-right: 0; - border-bottom: 1px solid #aaa; -} - -th { - text-align: left; - padding-right: 5px; -} - -table.citation { - border-left: solid 1px gray; - margin-left: 1px; -} - -table.citation td { - border-bottom: none; -} - -th > :first-child, -td > :first-child { - margin-top: 0px; -} - -th > :last-child, -td > :last-child { - margin-bottom: 0px; -} - -/* -- figures --------------------------------------------------------------- */ - -div.figure, figure { - margin: 0.5em; - padding: 0.5em; -} - -div.figure p.caption, figcaption { - padding: 0.3em; -} - -div.figure p.caption span.caption-number, -figcaption span.caption-number { - font-style: italic; -} - -div.figure p.caption span.caption-text, -figcaption span.caption-text { -} - -/* -- field list styles ----------------------------------------------------- */ - -table.field-list td, table.field-list th { - border: 0 !important; -} - -.field-list ul { - margin: 0; - padding-left: 1em; -} - -.field-list p { - margin: 0; -} - -.field-name { - -moz-hyphens: manual; - -ms-hyphens: manual; - -webkit-hyphens: manual; - hyphens: manual; -} - -/* -- hlist styles ---------------------------------------------------------- */ - -table.hlist { - margin: 1em 0; -} - -table.hlist td { - vertical-align: top; -} - -/* -- object description styles --------------------------------------------- */ - -.sig { - font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; -} - -.sig-name, code.descname { - background-color: transparent; - font-weight: bold; -} - -.sig-name { - font-size: 1.1em; -} - -code.descname { - font-size: 1.2em; -} - -.sig-prename, code.descclassname { - background-color: transparent; -} - -.optional { - font-size: 1.3em; -} - -.sig-paren { - font-size: larger; -} - -.sig-param.n { - font-style: italic; -} - -/* C++ specific styling */ - -.sig-inline.c-texpr, -.sig-inline.cpp-texpr { - font-family: unset; -} - -.sig.c .k, .sig.c .kt, -.sig.cpp .k, .sig.cpp .kt { - color: #0033B3; -} - -.sig.c .m, -.sig.cpp .m { - color: #1750EB; -} - -.sig.c .s, .sig.c .sc, -.sig.cpp .s, .sig.cpp .sc { - color: #067D17; -} - - -/* -- other body styles ----------------------------------------------------- */ - -ol.arabic { - list-style: decimal; -} - -ol.loweralpha { - list-style: lower-alpha; -} - -ol.upperalpha { - list-style: upper-alpha; -} - -ol.lowerroman { - list-style: lower-roman; -} - -ol.upperroman { - list-style: upper-roman; -} - -:not(li) > ol > li:first-child > :first-child, -:not(li) > ul > li:first-child > :first-child { - margin-top: 0px; -} - -:not(li) > ol > li:last-child > :last-child, -:not(li) > ul > li:last-child > :last-child { - margin-bottom: 0px; -} - -ol.simple ol p, -ol.simple ul p, -ul.simple ol p, -ul.simple ul p { - margin-top: 0; -} - -ol.simple > li:not(:first-child) > p, -ul.simple > li:not(:first-child) > p { - margin-top: 0; -} - -ol.simple p, -ul.simple p { - margin-bottom: 0; -} - -aside.footnote > span, -div.citation > span { - float: left; -} -aside.footnote > span:last-of-type, -div.citation > span:last-of-type { - padding-right: 0.5em; -} -aside.footnote > p { - margin-left: 2em; -} -div.citation > p { - margin-left: 4em; -} -aside.footnote > p:last-of-type, -div.citation > p:last-of-type { - margin-bottom: 0em; -} -aside.footnote > p:last-of-type:after, -div.citation > p:last-of-type:after { - content: ""; - clear: both; -} - -dl.field-list { - display: grid; - grid-template-columns: fit-content(30%) auto; -} - -dl.field-list > dt { - font-weight: bold; - word-break: break-word; - padding-left: 0.5em; - padding-right: 5px; -} - -dl.field-list > dd { - padding-left: 0.5em; - margin-top: 0em; - margin-left: 0em; - margin-bottom: 0em; -} - -dl { - margin-bottom: 15px; -} - -dd > :first-child { - margin-top: 0px; -} - -dd ul, dd table { - margin-bottom: 10px; -} - -dd { - margin-top: 3px; - margin-bottom: 10px; - margin-left: 30px; -} - -.sig dd { - margin-top: 0px; - margin-bottom: 0px; -} - -.sig dl { - margin-top: 0px; - margin-bottom: 0px; -} - -dl > dd:last-child, -dl > dd:last-child > :last-child { - margin-bottom: 0; -} - -dt:target, span.highlighted { - background-color: #fbe54e; -} - -rect.highlighted { - fill: #fbe54e; -} - -dl.glossary dt { - font-weight: bold; - font-size: 1.1em; -} - -.versionmodified { - font-style: italic; -} - -.system-message { - background-color: #fda; - padding: 5px; - border: 3px solid red; -} - -.footnote:target { - background-color: #ffa; -} - -.line-block { - display: block; - margin-top: 1em; - margin-bottom: 1em; -} - -.line-block .line-block { - margin-top: 0; - margin-bottom: 0; - margin-left: 1.5em; -} - -.guilabel, .menuselection { - font-family: sans-serif; -} - -.accelerator { - text-decoration: underline; -} - -.classifier { - font-style: oblique; -} - -.classifier:before { - font-style: normal; - margin: 0 0.5em; - content: ":"; - display: inline-block; -} - -abbr, acronym { - border-bottom: dotted 1px; - cursor: help; -} - -.translated { - background-color: rgba(207, 255, 207, 0.2) -} - -.untranslated { - background-color: rgba(255, 207, 207, 0.2) -} - -/* -- code displays --------------------------------------------------------- */ - -pre { - overflow: auto; - overflow-y: hidden; /* fixes display issues on Chrome browsers */ -} - -pre, div[class*="highlight-"] { - clear: both; -} - -span.pre { - -moz-hyphens: none; - -ms-hyphens: none; - -webkit-hyphens: none; - hyphens: none; - white-space: nowrap; -} - -div[class*="highlight-"] { - margin: 1em 0; -} - -td.linenos pre { - border: 0; - background-color: transparent; - color: #aaa; -} - -table.highlighttable { - display: block; -} - -table.highlighttable tbody { - display: block; -} - -table.highlighttable tr { - display: flex; -} - -table.highlighttable td { - margin: 0; - padding: 0; -} - -table.highlighttable td.linenos { - padding-right: 0.5em; -} - -table.highlighttable td.code { - flex: 1; - overflow: hidden; -} - -.highlight .hll { - display: block; -} - -div.highlight pre, -table.highlighttable pre { - margin: 0; -} - -div.code-block-caption + div { - margin-top: 0; -} - -div.code-block-caption { - margin-top: 1em; - padding: 2px 5px; - font-size: small; -} - -div.code-block-caption code { - background-color: transparent; -} - -table.highlighttable td.linenos, -span.linenos, -div.highlight span.gp { /* gp: Generic.Prompt */ - user-select: none; - -webkit-user-select: text; /* Safari fallback only */ - -webkit-user-select: none; /* Chrome/Safari */ - -moz-user-select: none; /* Firefox */ - -ms-user-select: none; /* IE10+ */ -} - -div.code-block-caption span.caption-number { - padding: 0.1em 0.3em; - font-style: italic; -} - -div.code-block-caption span.caption-text { -} - -div.literal-block-wrapper { - margin: 1em 0; -} - -code.xref, a code { - background-color: transparent; - font-weight: bold; -} - -h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { - background-color: transparent; -} - -.viewcode-link { - float: right; -} - -.viewcode-back { - float: right; - font-family: sans-serif; -} - -div.viewcode-block:target { - margin: -1px -10px; - padding: 0 10px; -} - -/* -- math display ---------------------------------------------------------- */ - -img.math { - vertical-align: middle; -} - -div.body div.math p { - text-align: center; -} - -span.eqno { - float: right; -} - -span.eqno a.headerlink { - position: absolute; - z-index: 1; -} - -div.math:hover a.headerlink { - visibility: visible; -} - -/* -- printout stylesheet --------------------------------------------------- */ - -@media print { - div.document, - div.documentwrapper, - div.bodywrapper { - margin: 0 !important; - width: 100%; - } - - div.sphinxsidebar, - div.related, - div.footer, - #top-link { - display: none; - } -} \ No newline at end of file diff --git a/docs/ble/_static/css/badge_only.css b/docs/ble/_static/css/badge_only.css deleted file mode 100644 index 7f92e7fb..00000000 --- a/docs/ble/_static/css/badge_only.css +++ /dev/null @@ -1,4 +0,0 @@ -/* badge_only.css/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro). */ -/* This copyright was auto-generated on Fri Apr 19 17:22:39 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/fonts/Roboto-Slab-Bold.woff b/docs/ble/_static/css/fonts/Roboto-Slab-Bold.woff deleted file mode 100644 index 6cb60000..00000000 Binary files a/docs/ble/_static/css/fonts/Roboto-Slab-Bold.woff and /dev/null differ diff --git a/docs/ble/_static/css/fonts/Roboto-Slab-Bold.woff2 b/docs/ble/_static/css/fonts/Roboto-Slab-Bold.woff2 deleted file mode 100644 index 7059e231..00000000 Binary files a/docs/ble/_static/css/fonts/Roboto-Slab-Bold.woff2 and /dev/null differ diff --git a/docs/ble/_static/css/fonts/Roboto-Slab-Regular.woff b/docs/ble/_static/css/fonts/Roboto-Slab-Regular.woff deleted file mode 100644 index f815f63f..00000000 Binary files a/docs/ble/_static/css/fonts/Roboto-Slab-Regular.woff and /dev/null differ diff --git a/docs/ble/_static/css/fonts/Roboto-Slab-Regular.woff2 b/docs/ble/_static/css/fonts/Roboto-Slab-Regular.woff2 deleted file mode 100644 index f2c76e5b..00000000 Binary files a/docs/ble/_static/css/fonts/Roboto-Slab-Regular.woff2 and /dev/null differ diff --git a/docs/ble/_static/css/fonts/fontawesome-webfont.eot b/docs/ble/_static/css/fonts/fontawesome-webfont.eot deleted file mode 100644 index e9f60ca9..00000000 Binary files a/docs/ble/_static/css/fonts/fontawesome-webfont.eot and /dev/null differ diff --git a/docs/ble/_static/css/fonts/fontawesome-webfont.svg b/docs/ble/_static/css/fonts/fontawesome-webfont.svg deleted file mode 100644 index 855c845e..00000000 --- a/docs/ble/_static/css/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,2671 +0,0 @@ - - - - -Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 - By ,,, -Copyright Dave Gandy 2016. All rights reserved. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/ble/_static/css/fonts/fontawesome-webfont.ttf b/docs/ble/_static/css/fonts/fontawesome-webfont.ttf deleted file mode 100644 index 35acda2f..00000000 Binary files a/docs/ble/_static/css/fonts/fontawesome-webfont.ttf and /dev/null differ diff --git a/docs/ble/_static/css/fonts/fontawesome-webfont.woff b/docs/ble/_static/css/fonts/fontawesome-webfont.woff deleted file mode 100644 index 400014a4..00000000 Binary files a/docs/ble/_static/css/fonts/fontawesome-webfont.woff and /dev/null differ diff --git a/docs/ble/_static/css/fonts/fontawesome-webfont.woff2 b/docs/ble/_static/css/fonts/fontawesome-webfont.woff2 deleted file mode 100644 index 4d13fc60..00000000 Binary files a/docs/ble/_static/css/fonts/fontawesome-webfont.woff2 and /dev/null differ diff --git a/docs/ble/_static/css/fonts/lato-bold-italic.woff b/docs/ble/_static/css/fonts/lato-bold-italic.woff deleted file mode 100644 index 88ad05b9..00000000 Binary files a/docs/ble/_static/css/fonts/lato-bold-italic.woff and /dev/null differ diff --git a/docs/ble/_static/css/fonts/lato-bold-italic.woff2 b/docs/ble/_static/css/fonts/lato-bold-italic.woff2 deleted file mode 100644 index c4e3d804..00000000 Binary files a/docs/ble/_static/css/fonts/lato-bold-italic.woff2 and /dev/null differ diff --git a/docs/ble/_static/css/fonts/lato-bold.woff b/docs/ble/_static/css/fonts/lato-bold.woff deleted file mode 100644 index c6dff51f..00000000 Binary files a/docs/ble/_static/css/fonts/lato-bold.woff and /dev/null differ diff --git a/docs/ble/_static/css/fonts/lato-bold.woff2 b/docs/ble/_static/css/fonts/lato-bold.woff2 deleted file mode 100644 index bb195043..00000000 Binary files a/docs/ble/_static/css/fonts/lato-bold.woff2 and /dev/null differ diff --git a/docs/ble/_static/css/fonts/lato-normal-italic.woff b/docs/ble/_static/css/fonts/lato-normal-italic.woff deleted file mode 100644 index 76114bc0..00000000 Binary files a/docs/ble/_static/css/fonts/lato-normal-italic.woff and /dev/null differ diff --git a/docs/ble/_static/css/fonts/lato-normal-italic.woff2 b/docs/ble/_static/css/fonts/lato-normal-italic.woff2 deleted file mode 100644 index 3404f37e..00000000 Binary files a/docs/ble/_static/css/fonts/lato-normal-italic.woff2 and /dev/null differ diff --git a/docs/ble/_static/css/fonts/lato-normal.woff b/docs/ble/_static/css/fonts/lato-normal.woff deleted file mode 100644 index ae1307ff..00000000 Binary files a/docs/ble/_static/css/fonts/lato-normal.woff and /dev/null differ diff --git a/docs/ble/_static/css/fonts/lato-normal.woff2 b/docs/ble/_static/css/fonts/lato-normal.woff2 deleted file mode 100644 index 3bf98433..00000000 Binary files a/docs/ble/_static/css/fonts/lato-normal.woff2 and /dev/null differ diff --git a/docs/ble/_static/css/theme.css b/docs/ble/_static/css/theme.css deleted file mode 100644 index 19a446a0..00000000 --- a/docs/ble/_static/css/theme.css +++ /dev/null @@ -1,4 +0,0 @@ -html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! - * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) 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#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.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;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{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}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/docs/ble/_static/doctools.js b/docs/ble/_static/doctools.js deleted file mode 100644 index 4d67807d..00000000 --- a/docs/ble/_static/doctools.js +++ /dev/null @@ -1,156 +0,0 @@ -/* - * doctools.js - * ~~~~~~~~~~~ - * - * Base JavaScript utilities for all Sphinx HTML documentation. - * - * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ -"use strict"; - -const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ - "TEXTAREA", - "INPUT", - "SELECT", - "BUTTON", -]); - -const _ready = (callback) => { - if (document.readyState !== "loading") { - callback(); - } else { - document.addEventListener("DOMContentLoaded", callback); - } -}; - -/** - * Small JavaScript module for the documentation. - */ -const Documentation = { - init: () => { - Documentation.initDomainIndexTable(); - Documentation.initOnKeyListeners(); - }, - - /** - * i18n support - */ - TRANSLATIONS: {}, - PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), - LOCALE: "unknown", - - // gettext and ngettext don't access this so that the functions - // can safely bound to a different name (_ = Documentation.gettext) - gettext: (string) => { - const translated = Documentation.TRANSLATIONS[string]; - switch (typeof translated) { - case "undefined": - return string; // no translation - case "string": - return translated; // translation exists - default: - return translated[0]; // (singular, plural) translation tuple exists - } - }, - - ngettext: (singular, plural, n) => { - const translated = Documentation.TRANSLATIONS[singular]; - if (typeof translated !== "undefined") - return translated[Documentation.PLURAL_EXPR(n)]; - return n === 1 ? singular : plural; - }, - - addTranslations: (catalog) => { - Object.assign(Documentation.TRANSLATIONS, catalog.messages); - Documentation.PLURAL_EXPR = new Function( - "n", - `return (${catalog.plural_expr})` - ); - Documentation.LOCALE = catalog.locale; - }, - - /** - * helper function to focus on search bar - */ - focusSearchBar: () => { - document.querySelectorAll("input[name=q]")[0]?.focus(); - }, - - /** - * Initialise the domain index toggle buttons - */ - initDomainIndexTable: () => { - const toggler = (el) => { - const idNumber = el.id.substr(7); - const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); - if (el.src.substr(-9) === "minus.png") { - el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; - toggledRows.forEach((el) => (el.style.display = "none")); - } else { - el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; - toggledRows.forEach((el) => (el.style.display = "")); - } - }; - - const togglerElements = document.querySelectorAll("img.toggler"); - togglerElements.forEach((el) => - el.addEventListener("click", (event) => toggler(event.currentTarget)) - ); - togglerElements.forEach((el) => (el.style.display = "")); - if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); - }, - - initOnKeyListeners: () => { - // only install a listener if it is really needed - if ( - !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && - !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS - ) - return; - - document.addEventListener("keydown", (event) => { - // bail for input elements - if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; - // bail with special keys - if (event.altKey || event.ctrlKey || event.metaKey) return; - - if (!event.shiftKey) { - switch (event.key) { - case "ArrowLeft": - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; - - const prevLink = document.querySelector('link[rel="prev"]'); - if (prevLink && prevLink.href) { - window.location.href = prevLink.href; - event.preventDefault(); - } - break; - case "ArrowRight": - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; - - const nextLink = document.querySelector('link[rel="next"]'); - if (nextLink && nextLink.href) { - window.location.href = nextLink.href; - event.preventDefault(); - } - break; - } - } - - // some keyboard layouts may need Shift to get / - switch (event.key) { - case "/": - if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; - Documentation.focusSearchBar(); - event.preventDefault(); - } - }); - }, -}; - -// quick alias for translations -const _ = Documentation.gettext; - -_ready(Documentation.init); diff --git a/docs/ble/_static/documentation_options.js b/docs/ble/_static/documentation_options.js deleted file mode 100644 index 3485ac95..00000000 --- a/docs/ble/_static/documentation_options.js +++ /dev/null @@ -1,16 +0,0 @@ -/* documentation_options.js/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro). */ -/* This copyright was auto-generated on Fri Apr 19 17:22:39 UTC 2024 */ - -const DOCUMENTATION_OPTIONS = { - VERSION: '0.0.1', - LANGUAGE: 'en', - COLLAPSE_INDEX: false, - BUILDER: 'html', - FILE_SUFFIX: '.html', - LINK_SUFFIX: '.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt', - NAVIGATION_WITH_KEYS: false, - SHOW_SEARCH_SUMMARY: true, - ENABLE_SEARCH_SHORTCUTS: true, -}; \ No newline at end of file diff --git a/docs/ble/_static/file.png b/docs/ble/_static/file.png deleted file mode 100644 index a858a410..00000000 Binary files a/docs/ble/_static/file.png and /dev/null differ diff --git a/docs/ble/_static/jquery.js b/docs/ble/_static/jquery.js deleted file mode 100644 index c18fd355..00000000 --- a/docs/ble/_static/jquery.js +++ /dev/null @@ -1,5 +0,0 @@ -/* jquery.js/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro). */ -/* This copyright was auto-generated on Fri Apr 19 17:22:39 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",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/docs/ble/_static/js/html5shiv.min.js b/docs/ble/_static/js/html5shiv.min.js deleted file mode 100644 index f5e10d99..00000000 --- a/docs/ble/_static/js/html5shiv.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/* html5shiv.min.js/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro). */ -/* This copyright was auto-generated on Fri Apr 19 17:22:39 UTC 2024 */ - -/** -* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed -*/ -!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/docs/ble/_static/js/theme.js b/docs/ble/_static/js/theme.js deleted file mode 100644 index 16bac8dc..00000000 --- a/docs/ble/_static/js/theme.js +++ /dev/null @@ -1,4 +0,0 @@ -/* theme.js/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro). */ -/* This copyright was auto-generated on Fri Apr 19 17:22:39 UTC 2024 */ - -!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("
"),n("table.docutils.footnote").wrap("
"),n("table.docutils.citation").wrap("
"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t0 - var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 - var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 - var s_v = "^(" + C + ")?" + v; // vowel in stem - - this.stemWord = function (w) { - var stem; - var suffix; - var firstch; - var origword = w; - - if (w.length < 3) - return w; - - var re; - var re2; - var re3; - var re4; - - firstch = w.substr(0,1); - if (firstch == "y") - w = firstch.toUpperCase() + w.substr(1); - - // Step 1a - re = /^(.+?)(ss|i)es$/; - re2 = /^(.+?)([^s])s$/; - - if (re.test(w)) - w = w.replace(re,"$1$2"); - else if (re2.test(w)) - w = w.replace(re2,"$1$2"); - - // Step 1b - re = /^(.+?)eed$/; - re2 = /^(.+?)(ed|ing)$/; - if (re.test(w)) { - var fp = re.exec(w); - re = new RegExp(mgr0); - if (re.test(fp[1])) { - re = /.$/; - w = w.replace(re,""); - } - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1]; - re2 = new RegExp(s_v); - if (re2.test(stem)) { - w = stem; - re2 = /(at|bl|iz)$/; - re3 = new RegExp("([^aeiouylsz])\\1$"); - re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re2.test(w)) - w = w + "e"; - else if (re3.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - else if (re4.test(w)) - w = w + "e"; - } - } - - // Step 1c - re = /^(.+?)y$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(s_v); - if (re.test(stem)) - w = stem + "i"; - } - - // Step 2 - re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step2list[suffix]; - } - - // Step 3 - re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step3list[suffix]; - } - - // Step 4 - re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; - re2 = /^(.+?)(s|t)(ion)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - if (re.test(stem)) - w = stem; - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1] + fp[2]; - re2 = new RegExp(mgr1); - if (re2.test(stem)) - w = stem; - } - - // Step 5 - re = /^(.+?)e$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - re2 = new RegExp(meq1); - re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) - w = stem; - } - re = /ll$/; - re2 = new RegExp(mgr1); - if (re.test(w) && re2.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - - // and turn initial Y back to y - if (firstch == "y") - w = firstch.toLowerCase() + w.substr(1); - return w; - } -} - diff --git a/docs/ble/_static/minus.png b/docs/ble/_static/minus.png deleted file mode 100644 index d96755fd..00000000 Binary files a/docs/ble/_static/minus.png and /dev/null differ diff --git a/docs/ble/_static/plus.png b/docs/ble/_static/plus.png deleted file mode 100644 index 7107cec9..00000000 Binary files a/docs/ble/_static/plus.png and /dev/null differ diff --git a/docs/ble/_static/pygments.css b/docs/ble/_static/pygments.css deleted file mode 100644 index eb46cd1e..00000000 --- a/docs/ble/_static/pygments.css +++ /dev/null @@ -1,78 +0,0 @@ -/* pygments.css/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro). */ -/* This copyright was auto-generated on Fri Apr 19 17:22:38 UTC 2024 */ - -pre { line-height: 125%; } -td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } -span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } -td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } -span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } -.highlight .hll { background-color: #ffffcc } -.highlight { background: #f8f8f8; } -.highlight .c { color: #3D7B7B; font-style: italic } /* Comment */ -.highlight .err { border: 1px solid #FF0000 } /* Error */ -.highlight .k { color: #008000; font-weight: bold } /* Keyword */ -.highlight .o { color: #666666 } /* Operator */ -.highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */ -.highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #9C6500 } /* Comment.Preproc */ -.highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */ -.highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */ -.highlight .gd { color: #A00000 } /* Generic.Deleted */ -.highlight .ge { font-style: italic } /* Generic.Emph */ -.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ -.highlight .gr { color: #E40000 } /* Generic.Error */ -.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ -.highlight .gi { color: #008400 } /* Generic.Inserted */ -.highlight .go { color: #717171 } /* Generic.Output */ -.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ -.highlight .gs { font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ -.highlight .gt { color: #0044DD } /* Generic.Traceback */ -.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ -.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ -.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ -.highlight .kp { color: #008000 } /* Keyword.Pseudo */ -.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ -.highlight .kt { color: #B00040 } /* Keyword.Type */ -.highlight .m { color: #666666 } /* Literal.Number */ -.highlight .s { color: #BA2121 } /* Literal.String */ -.highlight .na { color: #687822 } /* Name.Attribute */ -.highlight .nb { color: #008000 } /* Name.Builtin */ -.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ -.highlight .no { color: #880000 } /* Name.Constant */ -.highlight .nd { color: #AA22FF } /* Name.Decorator */ -.highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */ -.highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */ -.highlight .nf { color: #0000FF } /* Name.Function */ -.highlight .nl { color: #767600 } /* Name.Label */ -.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ -.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ -.highlight .nv { color: #19177C } /* Name.Variable */ -.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ -.highlight .w { color: #bbbbbb } /* Text.Whitespace */ -.highlight .mb { color: #666666 } /* Literal.Number.Bin */ -.highlight .mf { color: #666666 } /* Literal.Number.Float */ -.highlight .mh { color: #666666 } /* Literal.Number.Hex */ -.highlight .mi { color: #666666 } /* Literal.Number.Integer */ -.highlight .mo { color: #666666 } /* Literal.Number.Oct */ -.highlight .sa { color: #BA2121 } /* Literal.String.Affix */ -.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ -.highlight .sc { color: #BA2121 } /* Literal.String.Char */ -.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */ -.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ -.highlight .s2 { color: #BA2121 } /* Literal.String.Double */ -.highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */ -.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ -.highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */ -.highlight .sx { color: #008000 } /* Literal.String.Other */ -.highlight .sr { color: #A45A77 } /* Literal.String.Regex */ -.highlight .s1 { color: #BA2121 } /* Literal.String.Single */ -.highlight .ss { color: #19177C } /* Literal.String.Symbol */ -.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ -.highlight .fm { color: #0000FF } /* Name.Function.Magic */ -.highlight .vc { color: #19177C } /* Name.Variable.Class */ -.highlight .vg { color: #19177C } /* Name.Variable.Global */ -.highlight .vi { color: #19177C } /* Name.Variable.Instance */ -.highlight .vm { color: #19177C } /* Name.Variable.Magic */ -.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/docs/ble/_static/searchtools.js b/docs/ble/_static/searchtools.js deleted file mode 100644 index 92da3f8b..00000000 --- a/docs/ble/_static/searchtools.js +++ /dev/null @@ -1,619 +0,0 @@ -/* - * searchtools.js - * ~~~~~~~~~~~~~~~~ - * - * Sphinx JavaScript utilities for the full-text search. - * - * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ -"use strict"; - -/** - * Simple result scoring code. - */ -if (typeof Scorer === "undefined") { - var Scorer = { - // Implement the following function to further tweak the score for each result - // The function takes a result array [docname, title, anchor, descr, score, filename] - // and returns the new score. - /* - score: result => { - const [docname, title, anchor, descr, score, filename] = result - return score - }, - */ - - // query matches the full name of an object - objNameMatch: 11, - // or matches in the last dotted part of the object name - objPartialMatch: 6, - // Additive scores depending on the priority of the object - objPrio: { - 0: 15, // used to be importantResults - 1: 5, // used to be objectResults - 2: -5, // used to be unimportantResults - }, - // Used when the priority is not in the mapping. - objPrioDefault: 0, - - // query found in title - title: 15, - partialTitle: 7, - // query found in terms - term: 5, - partialTerm: 2, - }; -} - -const _removeChildren = (element) => { - while (element && element.lastChild) element.removeChild(element.lastChild); -}; - -/** - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping - */ -const _escapeRegExp = (string) => - string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string - -const _displayItem = (item, searchTerms, highlightTerms) => { - const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; - const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; - const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; - const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; - const contentRoot = document.documentElement.dataset.content_root; - - const [docName, title, anchor, descr, score, _filename] = item; - - let listItem = document.createElement("li"); - let requestUrl; - let linkUrl; - if (docBuilder === "dirhtml") { - // dirhtml builder - let dirname = docName + "/"; - if (dirname.match(/\/index\/$/)) - dirname = dirname.substring(0, dirname.length - 6); - else if (dirname === "index/") dirname = ""; - requestUrl = contentRoot + dirname; - linkUrl = requestUrl; - } else { - // normal html builders - requestUrl = contentRoot + docName + docFileSuffix; - linkUrl = docName + docLinkSuffix; - } - let linkEl = listItem.appendChild(document.createElement("a")); - linkEl.href = linkUrl + anchor; - linkEl.dataset.score = score; - linkEl.innerHTML = title; - if (descr) { - listItem.appendChild(document.createElement("span")).innerHTML = - " (" + descr + ")"; - // highlight search terms in the description - if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js - highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); - } - else if (showSearchSummary) - fetch(requestUrl) - .then((responseData) => responseData.text()) - .then((data) => { - if (data) - listItem.appendChild( - Search.makeSearchSummary(data, searchTerms, anchor) - ); - // highlight search terms in the summary - if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js - highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); - }); - Search.output.appendChild(listItem); -}; -const _finishSearch = (resultCount) => { - Search.stopPulse(); - Search.title.innerText = _("Search Results"); - if (!resultCount) - Search.status.innerText = Documentation.gettext( - "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." - ); - else - Search.status.innerText = _( - "Search finished, found ${resultCount} page(s) matching the search query." - ).replace('${resultCount}', resultCount); -}; -const _displayNextItem = ( - results, - resultCount, - searchTerms, - highlightTerms, -) => { - // results left, load the summary and display it - // this is intended to be dynamic (don't sub resultsCount) - if (results.length) { - _displayItem(results.pop(), searchTerms, highlightTerms); - setTimeout( - () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), - 5 - ); - } - // search finished, update title and status message - else _finishSearch(resultCount); -}; -// Helper function used by query() to order search results. -// Each input is an array of [docname, title, anchor, descr, score, filename]. -// Order the results by score (in opposite order of appearance, since the -// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. -const _orderResultsByScoreThenName = (a, b) => { - const leftScore = a[4]; - const rightScore = b[4]; - if (leftScore === rightScore) { - // same score: sort alphabetically - const leftTitle = a[1].toLowerCase(); - const rightTitle = b[1].toLowerCase(); - if (leftTitle === rightTitle) return 0; - return leftTitle > rightTitle ? -1 : 1; // inverted is intentional - } - return leftScore > rightScore ? 1 : -1; -}; - -/** - * Default splitQuery function. Can be overridden in ``sphinx.search`` with a - * custom function per language. - * - * The regular expression works by splitting the string on consecutive characters - * that are not Unicode letters, numbers, underscores, or emoji characters. - * This is the same as ``\W+`` in Python, preserving the surrogate pair area. - */ -if (typeof splitQuery === "undefined") { - var splitQuery = (query) => query - .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) - .filter(term => term) // remove remaining empty strings -} - -/** - * Search Module - */ -const Search = { - _index: null, - _queued_query: null, - _pulse_status: -1, - - htmlToText: (htmlString, anchor) => { - const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); - for (const removalQuery of [".headerlinks", "script", "style"]) { - htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); - } - if (anchor) { - const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); - if (anchorContent) return anchorContent.textContent; - - console.warn( - `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` - ); - } - - // if anchor not specified or not found, fall back to main content - const docContent = htmlElement.querySelector('[role="main"]'); - if (docContent) return docContent.textContent; - - console.warn( - "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template." - ); - return ""; - }, - - init: () => { - const query = new URLSearchParams(window.location.search).get("q"); - document - .querySelectorAll('input[name="q"]') - .forEach((el) => (el.value = query)); - if (query) Search.performSearch(query); - }, - - loadIndex: (url) => - (document.body.appendChild(document.createElement("script")).src = url), - - setIndex: (index) => { - Search._index = index; - if (Search._queued_query !== null) { - const query = Search._queued_query; - Search._queued_query = null; - Search.query(query); - } - }, - - hasIndex: () => Search._index !== null, - - deferQuery: (query) => (Search._queued_query = query), - - stopPulse: () => (Search._pulse_status = -1), - - startPulse: () => { - if (Search._pulse_status >= 0) return; - - const pulse = () => { - Search._pulse_status = (Search._pulse_status + 1) % 4; - Search.dots.innerText = ".".repeat(Search._pulse_status); - if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); - }; - pulse(); - }, - - /** - * perform a search for something (or wait until index is loaded) - */ - performSearch: (query) => { - // create the required interface elements - const searchText = document.createElement("h2"); - searchText.textContent = _("Searching"); - const searchSummary = document.createElement("p"); - searchSummary.classList.add("search-summary"); - searchSummary.innerText = ""; - const searchList = document.createElement("ul"); - searchList.classList.add("search"); - - const out = document.getElementById("search-results"); - Search.title = out.appendChild(searchText); - Search.dots = Search.title.appendChild(document.createElement("span")); - Search.status = out.appendChild(searchSummary); - Search.output = out.appendChild(searchList); - - const searchProgress = document.getElementById("search-progress"); - // Some themes don't use the search progress node - if (searchProgress) { - searchProgress.innerText = _("Preparing search..."); - } - Search.startPulse(); - - // index already loaded, the browser was quick! - if (Search.hasIndex()) Search.query(query); - else Search.deferQuery(query); - }, - - _parseQuery: (query) => { - // stem the search terms and add them to the correct list - const stemmer = new Stemmer(); - const searchTerms = new Set(); - const excludedTerms = new Set(); - const highlightTerms = new Set(); - const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); - splitQuery(query.trim()).forEach((queryTerm) => { - const queryTermLower = queryTerm.toLowerCase(); - - // maybe skip this "word" - // stopwords array is from language_data.js - if ( - stopwords.indexOf(queryTermLower) !== -1 || - queryTerm.match(/^\d+$/) - ) - return; - - // stem the word - let word = stemmer.stemWord(queryTermLower); - // select the correct list - if (word[0] === "-") excludedTerms.add(word.substr(1)); - else { - searchTerms.add(word); - highlightTerms.add(queryTermLower); - } - }); - - if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js - localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) - } - - // console.debug("SEARCH: searching for:"); - // console.info("required: ", [...searchTerms]); - // console.info("excluded: ", [...excludedTerms]); - - return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; - }, - - /** - * execute search (requires search index to be loaded) - */ - _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { - const filenames = Search._index.filenames; - const docNames = Search._index.docnames; - const titles = Search._index.titles; - const allTitles = Search._index.alltitles; - const indexEntries = Search._index.indexentries; - - // Collect multiple result groups to be sorted separately and then ordered. - // Each is an array of [docname, title, anchor, descr, score, filename]. - const normalResults = []; - const nonMainIndexResults = []; - - _removeChildren(document.getElementById("search-progress")); - - const queryLower = query.toLowerCase().trim(); - for (const [title, foundTitles] of Object.entries(allTitles)) { - if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { - for (const [file, id] of foundTitles) { - let score = Math.round(100 * queryLower.length / title.length) - normalResults.push([ - docNames[file], - titles[file] !== title ? `${titles[file]} > ${title}` : title, - id !== null ? "#" + id : "", - null, - score, - filenames[file], - ]); - } - } - } - - // search for explicit entries in index directives - for (const [entry, foundEntries] of Object.entries(indexEntries)) { - if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { - for (const [file, id, isMain] of foundEntries) { - const score = Math.round(100 * queryLower.length / entry.length); - const result = [ - docNames[file], - titles[file], - id ? "#" + id : "", - null, - score, - filenames[file], - ]; - if (isMain) { - normalResults.push(result); - } else { - nonMainIndexResults.push(result); - } - } - } - } - - // lookup as object - objectTerms.forEach((term) => - normalResults.push(...Search.performObjectSearch(term, objectTerms)) - ); - - // lookup as search terms in fulltext - normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); - - // let the scorer override scores with a custom scoring function - if (Scorer.score) { - normalResults.forEach((item) => (item[4] = Scorer.score(item))); - nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); - } - - // Sort each group of results by score and then alphabetically by name. - normalResults.sort(_orderResultsByScoreThenName); - nonMainIndexResults.sort(_orderResultsByScoreThenName); - - // Combine the result groups in (reverse) order. - // Non-main index entries are typically arbitrary cross-references, - // so display them after other results. - let results = [...nonMainIndexResults, ...normalResults]; - - // remove duplicate search results - // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept - let seen = new Set(); - results = results.reverse().reduce((acc, result) => { - let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); - if (!seen.has(resultStr)) { - acc.push(result); - seen.add(resultStr); - } - return acc; - }, []); - - return results.reverse(); - }, - - query: (query) => { - const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); - const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); - - // for debugging - //Search.lastresults = results.slice(); // a copy - // console.info("search results:", Search.lastresults); - - // print the results - _displayNextItem(results, results.length, searchTerms, highlightTerms); - }, - - /** - * search for object names - */ - performObjectSearch: (object, objectTerms) => { - const filenames = Search._index.filenames; - const docNames = Search._index.docnames; - const objects = Search._index.objects; - const objNames = Search._index.objnames; - const titles = Search._index.titles; - - const results = []; - - const objectSearchCallback = (prefix, match) => { - const name = match[4] - const fullname = (prefix ? prefix + "." : "") + name; - const fullnameLower = fullname.toLowerCase(); - if (fullnameLower.indexOf(object) < 0) return; - - let score = 0; - const parts = fullnameLower.split("."); - - // check for different match types: exact matches of full name or - // "last name" (i.e. last dotted part) - if (fullnameLower === object || parts.slice(-1)[0] === object) - score += Scorer.objNameMatch; - else if (parts.slice(-1)[0].indexOf(object) > -1) - score += Scorer.objPartialMatch; // matches in last name - - const objName = objNames[match[1]][2]; - const title = titles[match[0]]; - - // If more than one term searched for, we require other words to be - // found in the name/title/description - const otherTerms = new Set(objectTerms); - otherTerms.delete(object); - if (otherTerms.size > 0) { - const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); - if ( - [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) - ) - return; - } - - let anchor = match[3]; - if (anchor === "") anchor = fullname; - else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; - - const descr = objName + _(", in ") + title; - - // add custom score for some objects according to scorer - if (Scorer.objPrio.hasOwnProperty(match[2])) - score += Scorer.objPrio[match[2]]; - else score += Scorer.objPrioDefault; - - results.push([ - docNames[match[0]], - fullname, - "#" + anchor, - descr, - score, - filenames[match[0]], - ]); - }; - Object.keys(objects).forEach((prefix) => - objects[prefix].forEach((array) => - objectSearchCallback(prefix, array) - ) - ); - return results; - }, - - /** - * search for full-text terms in the index - */ - performTermsSearch: (searchTerms, excludedTerms) => { - // prepare search - const terms = Search._index.terms; - const titleTerms = Search._index.titleterms; - const filenames = Search._index.filenames; - const docNames = Search._index.docnames; - const titles = Search._index.titles; - - const scoreMap = new Map(); - const fileMap = new Map(); - - // perform the search on the required terms - searchTerms.forEach((word) => { - const files = []; - const arr = [ - { files: terms[word], score: Scorer.term }, - { files: titleTerms[word], score: Scorer.title }, - ]; - // add support for partial matches - if (word.length > 2) { - const escapedWord = _escapeRegExp(word); - if (!terms.hasOwnProperty(word)) { - Object.keys(terms).forEach((term) => { - if (term.match(escapedWord)) - arr.push({ files: terms[term], score: Scorer.partialTerm }); - }); - } - if (!titleTerms.hasOwnProperty(word)) { - Object.keys(titleTerms).forEach((term) => { - if (term.match(escapedWord)) - arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); - }); - } - } - - // no match but word was a required one - if (arr.every((record) => record.files === undefined)) return; - - // found search word in contents - arr.forEach((record) => { - if (record.files === undefined) return; - - let recordFiles = record.files; - if (recordFiles.length === undefined) recordFiles = [recordFiles]; - files.push(...recordFiles); - - // set score for the word in each file - recordFiles.forEach((file) => { - if (!scoreMap.has(file)) scoreMap.set(file, {}); - scoreMap.get(file)[word] = record.score; - }); - }); - - // create the mapping - files.forEach((file) => { - if (!fileMap.has(file)) fileMap.set(file, [word]); - else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); - }); - }); - - // now check if the files don't contain excluded terms - const results = []; - for (const [file, wordList] of fileMap) { - // check if all requirements are matched - - // as search terms with length < 3 are discarded - const filteredTermCount = [...searchTerms].filter( - (term) => term.length > 2 - ).length; - if ( - wordList.length !== searchTerms.size && - wordList.length !== filteredTermCount - ) - continue; - - // ensure that none of the excluded terms is in the search result - if ( - [...excludedTerms].some( - (term) => - terms[term] === file || - titleTerms[term] === file || - (terms[term] || []).includes(file) || - (titleTerms[term] || []).includes(file) - ) - ) - break; - - // select one (max) score for the file. - const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); - // add result to the result list - results.push([ - docNames[file], - titles[file], - "", - null, - score, - filenames[file], - ]); - } - return results; - }, - - /** - * helper function to return a node containing the - * search summary for a given text. keywords is a list - * of stemmed words. - */ - makeSearchSummary: (htmlText, keywords, anchor) => { - const text = Search.htmlToText(htmlText, anchor); - if (text === "") return null; - - const textLower = text.toLowerCase(); - const actualStartPosition = [...keywords] - .map((k) => textLower.indexOf(k.toLowerCase())) - .filter((i) => i > -1) - .slice(-1)[0]; - const startWithContext = Math.max(actualStartPosition - 120, 0); - - const top = startWithContext === 0 ? "" : "..."; - const tail = startWithContext + 240 < text.length ? "..." : ""; - - let summary = document.createElement("p"); - summary.classList.add("context"); - summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; - - return summary; - }, -}; - -_ready(Search.init); diff --git a/docs/ble/_static/sphinx_highlight.js b/docs/ble/_static/sphinx_highlight.js deleted file mode 100644 index dc849f71..00000000 --- a/docs/ble/_static/sphinx_highlight.js +++ /dev/null @@ -1,157 +0,0 @@ -/* sphinx_highlight.js/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro). */ -/* This copyright was auto-generated on Fri Apr 19 17:22:39 UTC 2024 */ - -/* Highlighting utilities for Sphinx HTML documentation. */ -"use strict"; - -const SPHINX_HIGHLIGHT_ENABLED = true - -/** - * highlight a given string on a node by wrapping it in - * span elements with the given class name. - */ -const _highlight = (node, addItems, text, className) => { - if (node.nodeType === Node.TEXT_NODE) { - const val = node.nodeValue; - const parent = node.parentNode; - const pos = val.toLowerCase().indexOf(text); - if ( - pos >= 0 && - !parent.classList.contains(className) && - !parent.classList.contains("nohighlight") - ) { - let span; - - const closestNode = parent.closest("body, svg, foreignObject"); - const isInSVG = closestNode && closestNode.matches("svg"); - if (isInSVG) { - span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - } else { - span = document.createElement("span"); - span.classList.add(className); - } - - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - const rest = document.createTextNode(val.substr(pos + text.length)); - parent.insertBefore( - span, - parent.insertBefore( - rest, - node.nextSibling - ) - ); - node.nodeValue = val.substr(0, pos); - /* There may be more occurrences of search term in this node. So call this - * function recursively on the remaining fragment. - */ - _highlight(rest, addItems, text, className); - - if (isInSVG) { - const rect = document.createElementNS( - "http://www.w3.org/2000/svg", - "rect" - ); - const bbox = parent.getBBox(); - rect.x.baseVal.value = bbox.x; - rect.y.baseVal.value = bbox.y; - rect.width.baseVal.value = bbox.width; - rect.height.baseVal.value = bbox.height; - rect.setAttribute("class", className); - addItems.push({ parent: parent, target: rect }); - } - } - } else if (node.matches && !node.matches("button, select, textarea")) { - node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); - } -}; -const _highlightText = (thisNode, text, className) => { - let addItems = []; - _highlight(thisNode, addItems, text, className); - addItems.forEach((obj) => - obj.parent.insertAdjacentElement("beforebegin", obj.target) - ); -}; - -/** - * Small JavaScript module for the documentation. - */ -const SphinxHighlight = { - - /** - * highlight the search words provided in localstorage in the text - */ - highlightSearchWords: () => { - if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight - - // get and clear terms from localstorage - const url = new URL(window.location); - const highlight = - localStorage.getItem("sphinx_highlight_terms") - || url.searchParams.get("highlight") - || ""; - localStorage.removeItem("sphinx_highlight_terms") - url.searchParams.delete("highlight"); - window.history.replaceState({}, "", url); - - // get individual terms from highlight string - const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); - if (terms.length === 0) return; // nothing to do - - // There should never be more than one element matching "div.body" - const divBody = document.querySelectorAll("div.body"); - const body = divBody.length ? divBody[0] : document.querySelector("body"); - window.setTimeout(() => { - terms.forEach((term) => _highlightText(body, term, "highlighted")); - }, 10); - - const searchBox = document.getElementById("searchbox"); - if (searchBox === null) return; - searchBox.appendChild( - document - .createRange() - .createContextualFragment( - '" - ) - ); - }, - - /** - * helper function to hide the search marks again - */ - hideSearchWords: () => { - document - .querySelectorAll("#searchbox .highlight-link") - .forEach((el) => el.remove()); - document - .querySelectorAll("span.highlighted") - .forEach((el) => el.classList.remove("highlighted")); - localStorage.removeItem("sphinx_highlight_terms") - }, - - initEscapeListener: () => { - // only install a listener if it is really needed - if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; - - document.addEventListener("keydown", (event) => { - // bail for input elements - if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; - // bail with special keys - if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; - if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { - SphinxHighlight.hideSearchWords(); - event.preventDefault(); - } - }); - }, -}; - -_ready(() => { - /* Do not call highlightSearchWords() when we are on the search page. - * It will highlight words from the *previous* search query. - */ - if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); - SphinxHighlight.initEscapeListener(); -}); diff --git a/docs/ble/_static/style.css b/docs/ble/_static/style.css deleted file mode 100644 index b1245420..00000000 --- a/docs/ble/_static/style.css +++ /dev/null @@ -1,30 +0,0 @@ -/* style.css/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro). */ -/* This copyright was auto-generated on Fri Apr 19 17:22:39 UTC 2024 */ - -.wy-nav-content { - max-width: 1100px !important; -} - -.btn-link:visited { - color: #3c6779 !important; -} - -.protobuf { - display: grid !important; - - dd { - img:first-of-type { - padding-left: 1em; - } - } -} - -.tlv-command { - display: grid !important; - - dd { - img:first-of-type { - padding-left: 1em; - } - } -} diff --git a/docs/ble/features/access_points.html b/docs/ble/features/access_points.html deleted file mode 100644 index a66475d2..00000000 --- a/docs/ble/features/access_points.html +++ /dev/null @@ -1,747 +0,0 @@ ---- ---- - - - - - - - - Access Point — Open GoPro BLE API 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - -
  • -
  • -
-
-
-
-
- -
-

Access Point

-

The camera supports connecting to access points in Station Mode (STA). -This is necessary for features such as 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

-
-
-Scan for Access Points
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -https://img.shields.io/badge/HERO9 Black-e6194b -
-
Type:
-

Protobuf

-
-
-../_images/plantuml_ble_scan_for_ssids.png -
-
-Request
-

Start scanning for Access Points

-
-

Note

-

Serialization of this object is zero bytes.

-
-

Response: ResponseStartScanning are sent immediately after the camera receives this command

-

Notifications: NotifStartScanning are sent periodically as scanning state changes. Use to detect scan complete.

-
- -
-
UUID:
-

Network Management Command

-
-
Feature ID:
-
0x02
-
Action ID:
-
0x02
-
Message:
-

RequestStartScan (docs) (source)

-
-
-
-
-Response
-

The current scanning state.

-

This is the initial response to a RequestStartScan

-
- -
-
UUID:
-

Network Management Response

-
-
Feature ID:
-
0x02
-
Action ID:
-
0x82
-
Message:
-

ResponseStartScanning (docs) (source)

-
-
-
-
-Notification
-

Scanning state notification

-

Triggered via RequestStartScan

-
- -
-
UUID:
-

Network Management Response

-
-
Feature ID:
-
0x02
-
Action ID:
-
0x0B
-
Message:
-

NotifStartScanning (docs) (source)

-
-
-
- -
-
-Get AP Scan Results
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -https://img.shields.io/badge/HERO9 Black-e6194b -
-
Type:
-

Protobuf

-
-
-
-
-Request
-

Get a list of Access Points found during a RequestStartScan

-

Response: ResponseGetApEntries

-
- -
-
UUID:
-

Network Management Command

-
-
Feature ID:
-
0x02
-
Action ID:
-
0x03
-
Message:
-

RequestGetApEntries (docs) (source)

-
-
-
-
-Response
-

A list of scan entries describing a scanned Access Point

-

This is sent in response to a RequestGetApEntries

-
- -
-
UUID:
-

Network Management Response

-
-
Feature ID:
-
0x02
-
Action ID:
-
0x83
-
Message:
-

ResponseGetApEntries (docs) (source)

-
-
-
- -
-
-Connect to Provisioned Access Point
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -https://img.shields.io/badge/HERO9 Black-e6194b -
-
Type:
-

Protobuf

-
-
-
-

Warning

-

This operation can only be used on an Access Point that has been previously configured. Therefore it is -first necessary to Scan for Access Points, then Get AP Scan Results to ensure -that the relevant Scan Entry has the -SCAN_FLAG_CONFIGURED bit set.

-
-../_images/plantuml_ble_connect_ap.png -
-
-Request
-

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: ResponseConnect

-

Notification: NotifProvisioningState sent periodically as provisioning state changes

-
- -
-
UUID:
-

Network Management Command

-
-
Feature ID:
-
0x02
-
Action ID:
-
0x04
-
Message:
-

RequestConnect (docs) (source)

-
-
-
-
-Response
-

The status of an attempt to connect to an Access Point

-

Sent as the initial response to RequestConnect

-
- -
-
UUID:
-

Network Management Response

-
-
Feature ID:
-
0x02
-
Action ID:
-
0x84
-
Message:
-

ResponseConnect (docs) (source)

-
-
-
-
-Notification
-

Provision state notification

-

Sent during provisioning triggered via RequestConnect or RequestConnectNew

-
- -
-
UUID:
-

Network Management Response

-
-
Feature ID:
-
0x02
-
Action ID:
-
0x0C
-
Message:
-

NotifProvisioningState (docs) (source)

-
-
-
- -
-
-Connect to a New Access Point
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -https://img.shields.io/badge/HERO9 Black-e6194b -
-
Type:
-

Protobuf

-
-
-
-

Warning

-

This operation can only be used on an Access Point that has not been previously configured. Therefore it -is first necessary to Scan for Access Points, then Get AP Scan Results to -ensure that the relevant Scan Entry does not have the -SCAN_FLAG_CONFIGURED bit set.

-
-../_images/plantuml_ble_connect_new_ap.png -
-
-Request
-

Connect to and authenticate with an Access Point

-

This is only intended to be used if the AP is not previously provisioned.

-

Response: ResponseConnectNew sent immediately

-

Notification: NotifProvisioningState sent periodically as provisioning state changes

-
- -
-
UUID:
-

Network Management Command

-
-
Feature ID:
-
0x02
-
Action ID:
-
0x05
-
Message:
-

RequestConnectNew (docs) (source)

-
-
-
-
-Response
-

The status of an attempt to connect to an Access Point

-

Sent as the initial response to RequestConnectNew

-
- -
-
UUID:
-

Network Management Response

-
-
Feature ID:
-
0x02
-
Action ID:
-
0x85
-
Message:
-

ResponseConnectNew (docs) (source)

-
-
-
-
-Notification
-

Provision state notification

-

Sent during provisioning triggered via RequestConnect or RequestConnectNew

-
- -
-
UUID:
-

Network Management Response

-
-
Feature ID:
-
0x02
-
Action ID:
-
0x0C
-
Message:
-

NotifProvisioningState (docs) (source)

-
-
-
- -
-

Disconnect from Access Point

-

To disconnect from a connected Access Point and return the camera to AP mode, use Set AP Control -to set AP Control On, which disables Station Mode.

-../_images/plantuml_ble_disconnect_ap.png -
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/docs/ble/features/cohn.html b/docs/ble/features/cohn.html deleted file mode 100644 index b13ca282..00000000 --- a/docs/ble/features/cohn.html +++ /dev/null @@ -1,782 +0,0 @@ ---- ---- - - - - - - - - Camera on the Home Network — Open GoPro BLE API 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - -
  • -
  • -
-
-
-
-
- -
-

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:

-
$ 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 COHN Certificate

  2. -
  3. Use Get COHN Certificate to get the created COHN certificate

  4. -
  5. Use Get COHN Status to get the Basic auth credentials

  6. -
  7. Connect the camera to an access point

  8. -
-
-

Tip

-

Depending on the use case, some of these steps can be performed via HTTP

-
-../_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

-
-
-Clear COHN Certificate
-
https://img.shields.io/badge/HERO12 Black-911eb4 -
-
Type:
-

Protobuf

-
-
-
-
-Request
-

Clear the COHN certificate.

-

Returns a ResponseGeneric with the status of the clear

-
- -
-
UUID:
-

Command

-
-
Feature ID:
-
0xF1
-
Action ID:
-
0x66
-
Message:
-

RequestClearCOHNCert (docs) (source)

-
-
-
-
-Response
-

Generic Response used across many response / notification messages

-
- -
-
UUID:
-

Command Response

-
-
Feature ID:
-
0xF1
-
Action ID:
-
0xE6
-
Message:
-

ResponseGeneric (docs) (source)

-
-
-
- -
-
-Create COHN Certificate
-
https://img.shields.io/badge/HERO12 Black-911eb4 -
-
Type:
-

Protobuf

-
-
-
-
-Request
-

Create the Camera On the Home Network SSL/TLS certificate.

-

Returns a ResponseGeneric with the status of the creation

-
- -
-
UUID:
-

Command

-
-
Feature ID:
-
0xF1
-
Action ID:
-
0x67
-
Message:
-

RequestCreateCOHNCert (docs) (source)

-
-
-
-
-Response
-

Generic Response used across many response / notification messages

-
- -
-
UUID:
-

Command Response

-
-
Feature ID:
-
0xF1
-
Action ID:
-
0xE7
-
Message:
-

ResponseGeneric (docs) (source)

-
-
-
- -
-
-Get COHN Certificate
-
https://img.shields.io/badge/HERO12 Black-911eb4 -
-
Type:
-

Protobuf

-
-
-
-
-Request
-

Get the COHN certificate.

-

Returns a ResponseCOHNCert

-
- -
-
UUID:
-

Query

-
-
Feature ID:
-
0xF5
-
Action ID:
-
0x6E
-
Message:
-

RequestCOHNCert (docs) (source)

-
-
-
-
-Response
-

COHN Certificate response triggered by RequestCOHNCert

-
- -
-
UUID:
-

Query Response

-
-
Feature ID:
-
0xF5
-
Action ID:
-
0xEE
-
Message:
-

ResponseCOHNCert (docs) (source)

-
-
-
- -
-
-Get COHN Status
-
https://img.shields.io/badge/HERO12 Black-911eb4 -
-
Type:
-

Protobuf

-
-
-
-
-Request
-

Get the current COHN status.

-

Response: NotifyCOHNStatus

-

Additionally, asynchronous updates can also be registered to return more NotifyCOHNStatus when a value -changes.

-
- -
-
UUID:
-

Query

-
-
Feature ID:
-
0xF5
-
Action ID:
-
0x6F
-
Message:
-

RequestGetCOHNStatus (docs) (source)

-
-
-
-
-Response
-

Current COHN status triggered by a RequestGetCOHNStatus

-
- -
-
UUID:
-

Query Response

-
-
Feature ID:
-
0xF5
-
Action ID:
-
0xEF
-
Message:
-

NotifyCOHNStatus (docs) (source)

-
-
-
-
-Notification
-

Current COHN status triggered by a RequestGetCOHNStatus

-
- -
-
UUID:
-

Query Response

-
-
Feature ID:
-
0xF5
-
Action ID:
-
0xEF
-
Message:
-

NotifyCOHNStatus (docs) (source)

-
-
-
- -
-
-Set COHN Setting
-
https://img.shields.io/badge/HERO12 Black-911eb4 -
-
Type:
-

Protobuf

-
-
-
-
-Request
-

Configure a COHN Setting

-

Returns a ResponseGeneric

-
- -
-
UUID:
-

Command

-
-
Feature ID:
-
0xF1
-
Action ID:
-
0x65
-
Message:
-

RequestSetCOHNSetting (docs) (source)

-
-
-
-
-Response
-

Generic Response used across many response / notification messages

-
- -
-
UUID:
-

Command Response

-
-
Feature ID:
-
0xF1
-
Action ID:
-
0xE5
-
Message:
-

ResponseGeneric (docs) (source)

-
-
-
- -
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/docs/ble/features/control.html b/docs/ble/features/control.html deleted file mode 100644 index 70132e2d..00000000 --- a/docs/ble/features/control.html +++ /dev/null @@ -1,877 +0,0 @@ ---- ---- - - - - - - - - Control — Open GoPro BLE API 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - -
  • -
  • -
-
-
-
-
- -
-

Control

-

This page will detail operations to command and control the GoPro.

-
-

Operations

-
-
-Keep Alive
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -https://img.shields.io/badge/HERO9 Black-e6194b -
-
Type:
-

TLV command

-
-
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 Off 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.

-
-
-Request
-
- -
-
UUID:
-

Setting

-
-
Parameters:
-
    -
  • keep_alive (uint8) - hard-coded data set to 0x42
  • -
-
-
-
-
-Response
-
- -
-
UUID:
-

Settings Response

-
-
-
- -
-
-Set Analytics
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -https://img.shields.io/badge/HERO9 Black-e6194b -
-
Type:
-

TLV command

-
-
ID:
-
0x50
-
-

Configure the client as third-party for analytic tracking.

-
-
-Request
-
- -
-
UUID:
-

Command

-
-
-
-
-Response
-
- -
-
UUID:
-

Command Response

-
-
-
- -
-
-Set AP Control
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -https://img.shields.io/badge/HERO9 Black-e6194b -
-
Type:
-

TLV command

-
-
ID:
-
0x17
-
-

Enable / disable the camera’s WiFi access point.

-
-
-Request
-
- -
-
UUID:
-

Command

-
-
Parameters:
-
    -
  • mode (uint8) - 0 to disable, 1 to enable
  • -
-
-
-
-
-Response
-
- -
-
UUID:
-

Command Response

-
-
-
- -
-
-Set Camera Control
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -
-
Type:
-

Protobuf

-
-
-../_images/global_behaviors.png -
-
-Request
-

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: ResponseGeneric

-
- -
-
UUID:
-

Command

-
-
Feature ID:
-
0xF1
-
Action ID:
-
0x69
-
Message:
-

RequestSetCameraControlStatus (docs) (source)

-
-
-
-
-Response
-

Generic Response used across many response / notification messages

-
- -
-
UUID:
-

Command Response

-
-
Feature ID:
-
0xF1
-
Action ID:
-
0xE9
-
Message:
-

ResponseGeneric (docs) (source)

-
-
-
- -
-
-Set Date Time
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -https://img.shields.io/badge/HERO9 Black-e6194b -
-
Type:
-

TLV command

-
-
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

-
-
-Request
-
- -
-
UUID:
-

Command

-
-
Parameters:
-
    -
  • date_time (7 byte date_time defined above) - Date time to set
  • -
-
-
-
-
-Response
-
- -
-
UUID:
-

Command Response

-
-
-
- -
-
-Set Local Date Time
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -
-
Type:
-

TLV command

-
-
ID:
-
0x0F
-
-

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

-
-
-Request
-
- -
-
UUID:
-

Command

-
-
Parameters:
-
    -
  • date_time (10 byte date_time defined above) - Date time to set
  • -
-
-
-
-
-Response
-
- -
-
UUID:
-

Command Response

-
-
-
- -
-
-Set Shutter
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -https://img.shields.io/badge/HERO9 Black-e6194b -
-
Type:
-

TLV command

-
-
ID:
-
0x01
-
-

Set Shutter On / Off

-
-
-Request
-
- -
-
UUID:
-

Command

-
-
Parameters:
-
    -
  • mode (uint8) - 0 for off, 1 for on
  • -
-
-
-
-
-Response
-
- -
-
UUID:
-

Command Response

-
-
-
- -
-
-Set Turbo Transfer
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -https://img.shields.io/badge/HERO9 Black-e6194b -
-
Type:
-

Protobuf

-
-
-
-
-Request
-

Enable/disable display of “Transferring Media” UI

-

Response: ResponseGeneric

-
- -
-
UUID:
-

Command

-
-
Feature ID:
-
0xF1
-
Action ID:
-
0x6B
-
Message:
-

RequestSetTurboActive (docs) (source)

-
-
-
-
-Response
-

Generic Response used across many response / notification messages

-
- -
-
UUID:
-

Command Response

-
-
Feature ID:
-
0xF1
-
Action ID:
-
0xEB
-
Message:
-

ResponseGeneric (docs) (source)

-
-
-
- -
-
-Sleep
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -https://img.shields.io/badge/HERO9 Black-e6194b -
-
Type:
-

TLV command

-
-
ID:
-
0x05
-
-

Put the camera to sleep.

-
-

Note

-

The camera is still be connectable via BLE in sleep.

-
-
-
-Request
-
- -
-
UUID:
-

Command

-
-
-
-
-Response
-
- -
-
UUID:
-

Command Response

-
-
-
- -
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/docs/ble/features/hilights.html b/docs/ble/features/hilights.html deleted file mode 100644 index 3c948490..00000000 --- a/docs/ble/features/hilights.html +++ /dev/null @@ -1,481 +0,0 @@ ---- ---- - - - - - - - - Hilights — Open GoPro BLE API 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - -
  • -
  • -
-
-
-
-
- -
-

Hilights

-
-

Operations

-
-
-Hilight Moment
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -https://img.shields.io/badge/HERO9 Black-e6194b -
-
Type:
-

TLV command

-
-
ID:
-
0x18
-
-

Add a hilight while recording. This can only be used during encoding.

-
-
-Request
-
- -
-
UUID:
-

Command

-
-
-
-
-Response
-
- -
-
UUID:
-

Command Response

-
-
-
- -
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/docs/ble/features/live_streaming.html b/docs/ble/features/live_streaming.html deleted file mode 100644 index 7b0aed89..00000000 --- a/docs/ble/features/live_streaming.html +++ /dev/null @@ -1,593 +0,0 @@ ---- ---- - - - - - - - - Live Streaming — Open GoPro BLE API 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - -
  • -
  • -
-
-
-
-
- -
-

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 Station Mode and connect it to an access point

  2. -
  3. Use Set Livestream Mode to configure livestreaming.

  4. -
  5. Poll for Livestream Status until the camera indicates it is ready

  6. -
  7. Set the shutter to begin live streaming

  8. -
  9. Unset the shutter to stop live streaming

  10. -
-../_images/plantuml_ble_live_streaming.png -
-

Operations

-
-
-Set Livestream Mode
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -https://img.shields.io/badge/HERO9 Black-e6194b -
-
Type:
-

Protobuf

-
-
-
-

Note

-

The current Livestream Mode can be queried via Get Livestream Status

-
-
-
-Request
-

Configure Live Streaming

-

Response: ResponseGeneric

-
- -
-
UUID:
-

Command

-
-
Feature ID:
-
0xF1
-
Action ID:
-
0x79
-
Message:
-

RequestSetLiveStreamMode (docs) (source)

-
-
-
-
-Response
-

Generic Response used across many response / notification messages

-
- -
-
UUID:
-

Command Response

-
-
Feature ID:
-
0xF1
-
Action ID:
-
0xF9
-
Message:
-

ResponseGeneric (docs) (source)

-
-
-
- -
-
-Get Livestream Status
-
https://img.shields.io/badge/HERO12 Black-911eb4 -
-
Type:
-

Protobuf

-
-
-
-
-Request
-

Get the current livestream status (and optionally register for future status changes)

-

Response: NotifyLiveStreamStatus

-

Notification: NotifyLiveStreamStatus

-
- -
-
UUID:
-

Command

-
-
Feature ID:
-
0xF5
-
Action ID:
-
0x74
-
Message:
-

RequestGetLiveStreamStatus (docs) (source)

-
-
-
-
-Response
-

Live Stream status

-

Sent either:

-
-
-
-
- -
-
UUID:
-

Command Response

-
-
Feature ID:
-
0xF5
-
Action ID:
-
0xF4
-
Message:
-

NotifyLiveStreamStatus (docs) (source)

-
-
-
-
-Notification
-

Live Stream status

-

Sent either:

-
-
-
-
- -
-
UUID:
-

Command Response

-
-
Feature ID:
-
0xF5
-
Action ID:
-
0xF5
-
Message:
-

NotifyLiveStreamStatus (docs) (source)

-
-
-
- -
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/docs/ble/features/presets.html b/docs/ble/features/presets.html deleted file mode 100644 index 3eb3e9e9..00000000 --- a/docs/ble/features/presets.html +++ /dev/null @@ -1,749 +0,0 @@ ---- ---- - - - - - - - - Presets — Open GoPro BLE API 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - -
  • -
  • -
-
-
-
-
- -
-

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

-
-
-

Preset Modified Status

-

Status 98 returns the camera’s Preset Modified Status value.

-

The value of this status is set to zero when the client sends a Get Preset Status message to the camera.

-

The value of this status is set to a non-zero value when:

-
    -
  • Preset settings submenu is exited in the camera UI (whether any settings were changed or not)

  • -
  • A new preset is created

  • -
  • A preset is deleted

  • -
  • Preset ordering is changed within a preset group

  • -
  • A preset is reset to factory defaults

  • -
-
-
-

Operations

-
-
-Get Available Presets
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -https://img.shields.io/badge/HERO9 Black-e6194b -
-
Type:
-

Protobuf

-
-
-
-
-Request
-

Get the set of currently available presets and optionally register to be notified when it changes.

-

Response: NotifyPresetStatus sent immediately

-

Notification: NotifyPresetStatus sent periodically as preset status changes, if registered.

-

The preset status changes when:

-
    -
  • A client changes one of a preset’s captioned settings via the API

  • -
  • The user exits from a preset’s settings UI on the camera (e.g. long-press the preset pill and then press the back arrow)

  • -
  • The user creates/deletes/reorders a preset within a group

  • -
-
- -
-
UUID:
-

Query

-
-
Feature ID:
-
0xF5
-
Action ID:
-
0x72
-
Message:
-

RequestGetPresetStatus (docs) (source)

-
-
-
-
-Response
-

Current Preset status

-

Sent either:

- -
- -
-
UUID:
-

Query Response

-
-
Feature ID:
-
0xF5
-
Action ID:
-
0xF2
-
Message:
-

NotifyPresetStatus (docs) (source)

-
-
-
-
-Notification
-

Current Preset status

-

Sent either:

- -
- -
-
UUID:
-

Query Response

-
-
Feature ID:
-
0xF5
-
Action ID:
-
0xF3
-
Message:
-

NotifyPresetStatus (docs) (source)

-
-
-
- -
-
-Load Preset
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -https://img.shields.io/badge/HERO9 Black-e6194b -
-
Type:
-

TLV command

-
-
ID:
-
0x40
-
-

Load preset by ID. The ID must be found from Get Available Presets

-
-
-Request
-
- -
-
UUID:
-

Command

-
-
Parameters:
-
    -
  • preset (uint32) - preset ID
  • -
-
-
-
-
-Response
-
- -
-
UUID:
-

Command Response

-
-
-
- -
-
-Load Preset Group
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -https://img.shields.io/badge/HERO9 Black-e6194b -
-
Type:
-

TLV command

-
-
ID:
-
0x3E
-
-

The available group ID values can be found in EnumPresetGroup

-
-
-Request
-
- -
-
UUID:
-

Command

-
-
Parameters:
-
    -
  • preset (uint32) - preset group ID
  • -
-
-
-
-
-Response
-
- -
-
UUID:
-

Command Response

-
-
-
- -
-
-Update Custom Preset
-
https://img.shields.io/badge/HERO12 Black-911eb4 -
-
Type:
-

Protobuf

-
-
-
-
-
-Request
-

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

    • -
    -
    -
  2. -
-

and / or

-
    -
  1. 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

    • -
    -
    -
  2. -
-

Returns a ResponseGeneric with the status of the preset update request.

-
- -
-
UUID:
-

Command

-
-
Feature ID:
-
0xF1
-
Action ID:
-
0x64
-
Message:
-

RequestCustomPresetUpdate (docs) (source)

-
-
-
-
-Response
-

Generic Response used across many response / notification messages

-
- -
-
UUID:
-

Command Response

-
-
Feature ID:
-
0xF1
-
Action ID:
-
0xE4
-
Message:
-

ResponseGeneric (docs) (source)

-
-
-
-
- -
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/docs/ble/features/query.html b/docs/ble/features/query.html deleted file mode 100644 index 9bf7ff6e..00000000 --- a/docs/ble/features/query.html +++ /dev/null @@ -1,1192 +0,0 @@ ---- ---- - - - - - - - - Query — Open GoPro BLE API 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - -
  • -
  • -
-
-
-
-
- -
-

Query

-

This section describes operations to query various GoPro state / information.

-
-

Operations

-
-
-Get Date Time
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -https://img.shields.io/badge/HERO9 Black-e6194b -
-
Type:
-

TLV command

-
-
ID:
-
0x0E
-
-

Get the current date and time (without daylight savings times and timezone information).

-
-
-Request
-
- -
-
UUID:
-

Command

-
-
-
-
-Response
-
- -
-
UUID:
-

Command Response

-
-
Parameters:
-
    -
  • 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
  • -
-
-
-
- -
-
-Get Hardware Info
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -https://img.shields.io/badge/HERO9 Black-e6194b -
-
Type:
-

TLV command

-
-
ID:
-
0x3C
-
-

Get information about the camera and firmware.

-

Note that the model numbers are found under Supported Cameras

-
-
-Request
-
- -
-
UUID:
-

Command

-
-
-
-
-Response
-
- -
-
UUID:
-

Command Response

-
-
Parameters:
-
    -
  • 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
  • -
-
-
-
- -
-
-Get Local Date Time
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -
-
Type:
-

TLV command

-
-
ID:
-
0x10
-
-

Get the current date and time with daylight savings and timezone information.

-
-
-Request
-
- -
-
UUID:
-

Command

-
-
-
-
-Response
-
- -
-
UUID:
-

Command Response

-
-
Parameters:
-
    -
  • 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
  • -
-
-
-
- -
-
-Get Last Captured Media
-
https://img.shields.io/badge/HERO12 Black-911eb4 -
-
Type:
-

Protobuf

-
-
-
-
-Request
-

Get the last captured media filename

-

Returns a ResponseLastCapturedMedia

-
- -
-
UUID:
-

Query

-
-
Feature ID:
-
0xF5
-
Action ID:
-
0x6D
-
Message:
-

RequestGetLastCapturedMedia (docs) (source)

-
-
-
-
-Response
-

The Last Captured Media

-

Message is sent in response to a 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

  • -
-
- -
-
UUID:
-

Query Response

-
-
Feature ID:
-
0xF5
-
Action ID:
-
0xED
-
Message:
-

ResponseLastCapturedMedia (docs) (source)

-
-
-
- -
-
-Get Open GoPro Version
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -https://img.shields.io/badge/HERO9 Black-e6194b -
-
Type:
-

TLV command

-
-
ID:
-
0x51
-
-

Get the current version of the Open GoPro API.

-
-
-Request
-
- -
-
UUID:
-

Command

-
-
-
-
-Response
-
- -
-
UUID:
-

Command Response

-
-
Parameters:
-
    -
  • 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
  • -
-
-
-
- -
-
-Get Setting Values
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -https://img.shields.io/badge/HERO9 Black-e6194b -
-
Type:
-

TLV query

-
-
-

Get the current value associated with one or more settings.

-
-

Note

-

If the element ID array is empty, all settings will be queried

-
-
-
-Request
-

The element ID array is an array of uint8 Setting IDs to query.

-
- -
-
UUID:
-

Query

-
-
ID:
-
0x12
-
-
-
-Response
-

The fields of the results array are:

-
    -
  • ID: Setting ID

  • -
  • value: Setting value defined via the individual Setting documentation

  • -
-
- -
-
UUID:
-

Query Response

-
-
ID:
-
0x12
-
-
- -
-
-Get Status Values
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -https://img.shields.io/badge/HERO9 Black-e6194b -
-
Type:
-

TLV query

-
-
-

Get the current value of one or more camera statuses.

-
-

Note

-

If the element ID array is empty, all statuses will be queried

-
-
-
-Request
-

The element ID array is an array of uint8 Status IDs to query.

-
- -
-
UUID:
-

Query

-
-
ID:
-
0x13
-
-
-
-Response
-

The fields of the results array are:

-
    -
  • ID: Status ID

  • -
  • value: Status value defined via the individual Status documentation

  • -
-
- -
-
UUID:
-

Query Response

-
-
ID:
-
0x13
-
-
- -
-
-Get Setting Capabilities
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -https://img.shields.io/badge/HERO9 Black-e6194b -
-
Type:
-

TLV query

-
-
-

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.

-
-
-
-Request
-

The element ID array is an array of uint8 Setting IDs to query.

-
- -
-
UUID:
-

Query

-
-
ID:
-
0x32
-
-
-
-Response
-

The fields of the results array are:

-
    -
  • ID: Setting ID

  • -
  • value: Setting value defined via the individual Setting documentation

  • -
-
- -
-
UUID:
-

Query Response

-
-
ID:
-
0x32
-
-
- -
-
-Register for Setting Value Updates
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -https://img.shields.io/badge/HERO9 Black-e6194b -
-
Type:
-

TLV query

-
-
-

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.

-
-
-
-Request
-

The element ID array is an array of uint8 Setting IDs to register for.

-
- -
-
UUID:
-

Query

-
-
ID:
-
0x52
-
-
-
-Response
-

The fields of the results array are:

-
    -
  • ID: Setting ID

  • -
  • value: Setting value defined via the individual Setting documentation

  • -
-
- -
-
UUID:
-

Query Response

-
-
ID:
-
0x52
-
-
-
-Notification
-

The fields of the results array are:

-
    -
  • ID: Setting ID

  • -
  • value: Setting value defined via the individual Setting documentation

  • -
-
- -
-
UUID:
-

Query Response

-
-
ID:
-
0x92
-
-
- -
-
-Register for Status Value Updates
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -https://img.shields.io/badge/HERO9 Black-e6194b -
-
Type:
-

TLV query

-
-
-

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.

-
-
-
-Request
-

The element ID array is an array of uint8 Status IDs to register for.

-
- -
-
UUID:
-

Query

-
-
ID:
-
0x53
-
-
-
-Response
-

The fields of the results array are:

-
    -
  • ID: Status ID

  • -
  • value: Status value defined via the individual Status documentation

  • -
-
- -
-
UUID:
-

Query Response

-
-
ID:
-
0x53
-
-
-
-Notification
-

The fields of the results array are:

-
    -
  • ID: Status ID

  • -
  • value: Status value defined via the individual Status documentation

  • -
-
- -
-
UUID:
-

Query Response

-
-
ID:
-
0x93
-
-
- -
-
-Register for Setting Capability Updates
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -https://img.shields.io/badge/HERO9 Black-e6194b -
-
Type:
-

TLV query

-
-
-

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.

-
-
-
-Request
-

The element ID array is an array of uint8 Setting IDs to register for.

-
- -
-
UUID:
-

Query

-
-
ID:
-
0x62
-
-
-
-Response
-

The fields of the results array are:

-
    -
  • ID: Setting ID

  • -
  • value: Setting value defined via the individual Setting documentation

  • -
-
- -
-
UUID:
-

Query Response

-
-
ID:
-
0x62
-
-
-
-Notification
-

The fields of the results array are:

-
    -
  • ID: Setting ID

  • -
  • value: Setting value defined via the individual Setting documentation

  • -
-
- -
-
UUID:
-

Query Response

-
-
ID:
-
0xA2
-
-
- -
-
-Unregister for Setting Value Updates
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -https://img.shields.io/badge/HERO9 Black-e6194b -
-
Type:
-

TLV query

-
-
-

Cancel ongoing setting value updates.

-
-

Note

-

If the element ID array is empty, all settings will be unregistered for.

-
-
-
-Request
-

The element ID array is an array of uint8 Setting IDs to unregister for.

-
- -
-
UUID:
-

Query

-
-
ID:
-
0x72
-
-
-
-Response
-
- -
-
UUID:
-

Query Response

-
-
ID:
-
0x72
-
-
- -
-
-Unregister for Status Value Updates
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -https://img.shields.io/badge/HERO9 Black-e6194b -
-
Type:
-

TLV query

-
-
-

Cancel ongoing status value updates.

-
-

Note

-

If the element ID array is empty, all Statuses will be unregistered for.

-
-
-
-Request
-

The element ID array is an array of uint8 Status IDs to unregister for.

-
- -
-
UUID:
-

Query

-
-
ID:
-
0x73
-
-
-
-Response
-
- -
-
UUID:
-

Query Response

-
-
ID:
-
0x73
-
-
- -
-
-Unregister for Setting Capability Updates
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -https://img.shields.io/badge/HERO9 Black-e6194b -
-
Type:
-

TLV query

-
-
-

Cancel ongoing setting capability updates.

-
-

Note

-

If the element array is empty, all settings will be unregistered for.

-
-
-
-Request
-

The element ID array is an array of uint8 Setting IDs to unregister for.

-
- -
-
UUID:
-

Query

-
-
ID:
-
0x82
-
-
-
-Response
-
- -
-
UUID:
-

Query Response

-
-
ID:
-
0x82
-
-
- -
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/docs/ble/features/settings.html b/docs/ble/features/settings.html deleted file mode 100644 index cf92151b..00000000 --- a/docs/ble/features/settings.html +++ /dev/null @@ -1,2351 +0,0 @@ ---- ---- - - - - - - - - Settings — Open GoPro BLE API 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - -
  • -
  • -
-
-
-
-
- -
-

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

-
-
-Set Setting
-
https://img.shields.io/badge/HERO12 Black-911eb4 -https://img.shields.io/badge/HERO11 Black Mini-f58231 -https://img.shields.io/badge/HERO11 Black-ffe119 -https://img.shields.io/badge/HERO10 Black-3cb44b -https://img.shields.io/badge/HERO9 Black-e6194b -
-
Type:
-

TLV command

-
-
ID:
-
SettingID
-
-

Set an individual Setting ID to a given value.

-

The superset of per-setting values can be found in the Setting ID documentation. Alternatively, -the currently supported setting values can be dynamically queried via Get Setting Capabilities

-
-
-Request
-
- -
-
UUID:
-

Setting

-
-
Parameters:
-
    -
  • value_length (uint8) - length of value
  • -
  • value (variable length and type) - value to set, of length value_length
  • -
-
-
-
-
-Response
-
- -
-
UUID:
-

Settings Response

-
-
-
- -
-
-

Setting IDs

-
-

Resolution (2)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

1

4K

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

4

2.7K

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

6

2.7K 4:3

https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

7

1440

https://img.shields.io/badge/HERO9Black-e6194b -

9

1080

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

18

4K 4:3

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

24

5K

https://img.shields.io/badge/HERO9Black-e6194b -

25

5K 4:3

https://img.shields.io/badge/HERO10Black-3cb44b -

26

5.3K 8:7

https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -

27

5.3K 4:3

https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -

28

4K 8:7

https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -

100

5.3K

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -

107

5.3K

https://img.shields.io/badge/HERO12Black-911eb4 -

108

4K

https://img.shields.io/badge/HERO12Black-911eb4 -

109

4K

https://img.shields.io/badge/HERO12Black-911eb4 -

110

1080

https://img.shields.io/badge/HERO12Black-911eb4 -

111

2.7K

https://img.shields.io/badge/HERO12Black-911eb4 -
-
-
-

Frames Per Second (3)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

0

240

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

1

120

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

2

100

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

5

60

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

6

50

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

8

30

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

9

25

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

10

24

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

13

200

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-
-

FOV (43)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

0

Wide

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

2

Narrow

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

3

Superview

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

4

Linear

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-
-

Auto Off (59)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

0

Never

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

1

1 Min

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -

4

5 Min

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

6

15 Min

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

7

30 Min

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

11

8 Seconds

https://img.shields.io/badge/HERO11BlackMini-f58231 -

12

30 Seconds

https://img.shields.io/badge/HERO11BlackMini-f58231 -
-
-
-

GPS (83)

-https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

0

OFF

https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

1

ON

https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-
-

Aspect Ratio (108)

-https://img.shields.io/badge/HERO12Black-911eb4 - - - - - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

0

4:3

https://img.shields.io/badge/HERO12Black-911eb4 -

1

16:9

https://img.shields.io/badge/HERO12Black-911eb4 -

3

8:7

https://img.shields.io/badge/HERO12Black-911eb4 -

4

9:16

https://img.shields.io/badge/HERO12Black-911eb4 -
-
-
-

Lens (121)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

0

Wide

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

2

Narrow

https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

3

Superview

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

4

Linear

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

7

Max SuperView

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

8

Linear + Horizon Leveling

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

9

HyperView

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -

10

Linear + Horizon Lock

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -

11

Max HyperView

https://img.shields.io/badge/HERO12Black-911eb4 -
-
-
-

Lens (122)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

19

Narrow

https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

100

Max SuperView

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

101

Wide

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

102

Linear

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-
-

Lens (123)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

19

Narrow

https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

100

Max SuperView

https://img.shields.io/badge/HERO10Black-3cb44b -

101

Wide

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

102

Linear

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-
-

Format (128)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

13

Video

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

20

Photo

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

21

Photo

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

26

Video

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-
-

Anti-Flicker (134)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

2

60Hz

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

3

50Hz

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-
-

Hypersmooth (135)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

0

Off

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

1

On

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO9Black-e6194b -

2

High

https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

3

Boost

https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

4

Auto Boost

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -

100

Standard

https://img.shields.io/badge/HERO10Black-3cb44b -
-
-
-

Horizon Leveling (150)

-https://img.shields.io/badge/HERO11Black-ffe119 - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

0

Off

https://img.shields.io/badge/HERO11Black-ffe119 -

2

Locked

https://img.shields.io/badge/HERO11Black-ffe119 -
-
-
-

Horizon Leveling (151)

-https://img.shields.io/badge/HERO11Black-ffe119 - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

0

Off

https://img.shields.io/badge/HERO11Black-ffe119 -

2

Locked

https://img.shields.io/badge/HERO11Black-ffe119 -
-
-
-

Max Lens Mod Enable (162)

-https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

0

OFF

https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

1

ON

https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-
-

HindSight (167)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

2

15 Seconds

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

3

30 Seconds

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

4

Off

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-
-

Interval (171)

-https://img.shields.io/badge/HERO12Black-911eb4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

0

Off

https://img.shields.io/badge/HERO12Black-911eb4 -

2

0.5s

https://img.shields.io/badge/HERO12Black-911eb4 -

3

1s

https://img.shields.io/badge/HERO12Black-911eb4 -

4

2s

https://img.shields.io/badge/HERO12Black-911eb4 -

5

5s

https://img.shields.io/badge/HERO12Black-911eb4 -

6

10s

https://img.shields.io/badge/HERO12Black-911eb4 -

7

30s

https://img.shields.io/badge/HERO12Black-911eb4 -

8

60s

https://img.shields.io/badge/HERO12Black-911eb4 -

9

120s

https://img.shields.io/badge/HERO12Black-911eb4 -

10

3s

https://img.shields.io/badge/HERO12Black-911eb4 -
-
-
-

Duration (172)

-https://img.shields.io/badge/HERO12Black-911eb4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

0

Off

https://img.shields.io/badge/HERO12Black-911eb4 -

1

15 Seconds

https://img.shields.io/badge/HERO12Black-911eb4 -

2

30 Seconds

https://img.shields.io/badge/HERO12Black-911eb4 -

3

1 Minute

https://img.shields.io/badge/HERO12Black-911eb4 -

4

5 Minutes

https://img.shields.io/badge/HERO12Black-911eb4 -

5

15 Minutes

https://img.shields.io/badge/HERO12Black-911eb4 -

6

30 Minutes

https://img.shields.io/badge/HERO12Black-911eb4 -

7

1 Hour

https://img.shields.io/badge/HERO12Black-911eb4 -

8

2 Hours

https://img.shields.io/badge/HERO12Black-911eb4 -

9

3 Hours

https://img.shields.io/badge/HERO12Black-911eb4 -
-
-
-

Video Performance Modes (173)

-https://img.shields.io/badge/HERO10Black-3cb44b - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

0

Maximum Video Performance

https://img.shields.io/badge/HERO10Black-3cb44b -

1

Extended Battery

https://img.shields.io/badge/HERO10Black-3cb44b -

2

Tripod / Stationary Video

https://img.shields.io/badge/HERO10Black-3cb44b -
-
-
-

Controls (175)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

0

Easy

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 -

1

Pro

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 -
-
-
-

Speed (176)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

0

8x Ultra Slo-Mo

https://img.shields.io/badge/HERO11Black-ffe119 -

1

4x Super Slo-Mo

https://img.shields.io/badge/HERO11Black-ffe119 -

2

2x Slo-Mo

https://img.shields.io/badge/HERO11Black-ffe119 -

3

1x Speed / Low Light

https://img.shields.io/badge/HERO11Black-ffe119 -

4

4x Super Slo-Mo

https://img.shields.io/badge/HERO11Black-ffe119 -

5

2x Slo-Mo

https://img.shields.io/badge/HERO11Black-ffe119 -

6

1x Speed / Low Light

https://img.shields.io/badge/HERO11Black-ffe119 -

7

8x Ultra Slo-Mo

https://img.shields.io/badge/HERO11Black-ffe119 -

8

4x Super Slo-Mo

https://img.shields.io/badge/HERO11Black-ffe119 -

9

2x Slo-Mo

https://img.shields.io/badge/HERO11Black-ffe119 -

10

1x Speed / Low Light

https://img.shields.io/badge/HERO11Black-ffe119 -

11

4x Super Slo-Mo

https://img.shields.io/badge/HERO11Black-ffe119 -

12

2x Slo-Mo

https://img.shields.io/badge/HERO11Black-ffe119 -

13

1x Speed / Low Light

https://img.shields.io/badge/HERO11Black-ffe119 -

14

8x Ultra Slo-Mo

https://img.shields.io/badge/HERO11Black-ffe119 -

15

8x Ultra Slo-Mo

https://img.shields.io/badge/HERO11Black-ffe119 -

16

8x Ultra Slo-Mo

https://img.shields.io/badge/HERO11Black-ffe119 -

17

4x Super Slo-Mo

https://img.shields.io/badge/HERO11Black-ffe119 -

18

2x Slo-Mo

https://img.shields.io/badge/HERO11Black-ffe119 -

19

1x Speed / Low Light

https://img.shields.io/badge/HERO11Black-ffe119 -

20

8x Ultra Slo-Mo

https://img.shields.io/badge/HERO11Black-ffe119 -

21

4x Super Slo-Mo

https://img.shields.io/badge/HERO11Black-ffe119 -

22

2x Slo-Mo

https://img.shields.io/badge/HERO11Black-ffe119 -

23

1x Speed / Low Light

https://img.shields.io/badge/HERO11Black-ffe119 -

24

2x Slo-Mo

https://img.shields.io/badge/HERO11Black-ffe119 -

25

4x Super Slo-Mo

https://img.shields.io/badge/HERO11Black-ffe119 -

26

2x Slo-Mo

https://img.shields.io/badge/HERO11Black-ffe119 -

27

4x Super Slo-Mo

https://img.shields.io/badge/HERO11Black-ffe119 -

100

8X Ultra Slo-Mo

https://img.shields.io/badge/HERO12Black-911eb4 -

101

4X Super Slo-Mo

https://img.shields.io/badge/HERO12Black-911eb4 -

102

2X Slo-Mo

https://img.shields.io/badge/HERO12Black-911eb4 -

103

1X Speed / Low Light

https://img.shields.io/badge/HERO12Black-911eb4 -

104

8X Ultra Slo-Mo

https://img.shields.io/badge/HERO12Black-911eb4 -

105

4X Super Slo-Mo

https://img.shields.io/badge/HERO12Black-911eb4 -

106

2X Slo-Mo

https://img.shields.io/badge/HERO12Black-911eb4 -

107

1X Speed / Low Light

https://img.shields.io/badge/HERO12Black-911eb4 -

108

8X Ultra Slo-Mo

https://img.shields.io/badge/HERO12Black-911eb4 -

109

4X Super Slo-Mo

https://img.shields.io/badge/HERO12Black-911eb4 -

110

2X Slo-Mo

https://img.shields.io/badge/HERO12Black-911eb4 -

111

1X Speed / Low Light

https://img.shields.io/badge/HERO12Black-911eb4 -

112

8X Ultra Slo-Mo

https://img.shields.io/badge/HERO12Black-911eb4 -

113

4X Super Slo-Mo

https://img.shields.io/badge/HERO12Black-911eb4 -

114

2X Slo-Mo

https://img.shields.io/badge/HERO12Black-911eb4 -

115

1X Speed / Low Light

https://img.shields.io/badge/HERO12Black-911eb4 -

116

2X Slo-Mo

https://img.shields.io/badge/HERO12Black-911eb4 -

117

2X Slo-Mo

https://img.shields.io/badge/HERO12Black-911eb4 -

118

1X Speed / Low Light

https://img.shields.io/badge/HERO12Black-911eb4 -

119

1X Speed / Low Light

https://img.shields.io/badge/HERO12Black-911eb4 -

120

2X Slo-Mo

https://img.shields.io/badge/HERO12Black-911eb4 -

121

2X Slo-Mo

https://img.shields.io/badge/HERO12Black-911eb4 -

122

1X Speed / Low Light

https://img.shields.io/badge/HERO12Black-911eb4 -

123

1X Speed / Low Light

https://img.shields.io/badge/HERO12Black-911eb4 -

124

2X Slo-Mo

https://img.shields.io/badge/HERO12Black-911eb4 -

125

2X Slo-Mo

https://img.shields.io/badge/HERO12Black-911eb4 -

126

1X Speed / Low Light

https://img.shields.io/badge/HERO12Black-911eb4 -

127

1X Speed / Low Light

https://img.shields.io/badge/HERO12Black-911eb4 -

128

1X Speed / Low Light

https://img.shields.io/badge/HERO12Black-911eb4 -

129

1X Speed / Low Light

https://img.shields.io/badge/HERO12Black-911eb4 -

130

2X Slo-Mo

https://img.shields.io/badge/HERO12Black-911eb4 -

131

2X Slo-Mo

https://img.shields.io/badge/HERO12Black-911eb4 -

132

2X Slo-Mo

https://img.shields.io/badge/HERO12Black-911eb4 -

133

2X Slo-Mo

https://img.shields.io/badge/HERO12Black-911eb4 -

134

1X Speed / Low Light

https://img.shields.io/badge/HERO12Black-911eb4 -

135

1X Speed / Low Light

https://img.shields.io/badge/HERO12Black-911eb4 -

136

1X Speed / Low Light

https://img.shields.io/badge/HERO12Black-911eb4 -

137

1X Speed / Low Light

https://img.shields.io/badge/HERO12Black-911eb4 -
-
-
-

Night Photo (177)

-https://img.shields.io/badge/HERO11Black-ffe119 - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

0

Off

https://img.shields.io/badge/HERO11Black-ffe119 -

1

On

https://img.shields.io/badge/HERO11Black-ffe119 -
-
-
-

Wi-fi Band (178)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

0

2.4GHz

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -

1

5GHz

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -
-
-
-

Trail Length (179)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

1

Short

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -

2

Long

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -

3

Max

https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -
-
-
-

Video Mode (180)

-https://img.shields.io/badge/HERO11Black-ffe119 - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

0

Highest Quality

https://img.shields.io/badge/HERO11Black-ffe119 -

101

Extended Battery

https://img.shields.io/badge/HERO11Black-ffe119 -

102

Longest Battery

https://img.shields.io/badge/HERO11Black-ffe119 -
-
-
-

Bit Rate (182)

-https://img.shields.io/badge/HERO12Black-911eb4 - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

0

Standard

https://img.shields.io/badge/HERO12Black-911eb4 -

1

High

https://img.shields.io/badge/HERO12Black-911eb4 -
-
-
-

Bit Depth (183)

-https://img.shields.io/badge/HERO12Black-911eb4 - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

0

8-Bit

https://img.shields.io/badge/HERO12Black-911eb4 -

2

10-Bit

https://img.shields.io/badge/HERO12Black-911eb4 -
-
-
-

Profiles (184)

-https://img.shields.io/badge/HERO12Black-911eb4 - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

0

Standard

https://img.shields.io/badge/HERO12Black-911eb4 -

1

HDR

https://img.shields.io/badge/HERO12Black-911eb4 -

2

Log

https://img.shields.io/badge/HERO12Black-911eb4 -
-
-
-

Video Mode (186)

-https://img.shields.io/badge/HERO12Black-911eb4 - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

0

Highest Quality

https://img.shields.io/badge/HERO12Black-911eb4 -

1

Standard Quality

https://img.shields.io/badge/HERO12Black-911eb4 -

2

Basic Quality

https://img.shields.io/badge/HERO12Black-911eb4 -
-
-
-

Lapse Mode (187)

-https://img.shields.io/badge/HERO12Black-911eb4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

0

TimeWarp

https://img.shields.io/badge/HERO12Black-911eb4 -

1

Star Trails

https://img.shields.io/badge/HERO12Black-911eb4 -

2

Light Painting

https://img.shields.io/badge/HERO12Black-911eb4 -

3

Vehicle Lights

https://img.shields.io/badge/HERO12Black-911eb4 -

4

Max TimeWarp

https://img.shields.io/badge/HERO12Black-911eb4 -

5

Max Star Trails

https://img.shields.io/badge/HERO12Black-911eb4 -

6

Max Light Painting

https://img.shields.io/badge/HERO12Black-911eb4 -

7

Max Vehicle Lights

https://img.shields.io/badge/HERO12Black-911eb4 -
-
-
-

Max Lens Mod (189)

-https://img.shields.io/badge/HERO12Black-911eb4 - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

0

None

https://img.shields.io/badge/HERO12Black-911eb4 -

1

Max Lens 1.0

https://img.shields.io/badge/HERO12Black-911eb4 -

2

Max Lens 2.0

https://img.shields.io/badge/HERO12Black-911eb4 -
-
-
-

Max Lens Mod Enable (190)

-https://img.shields.io/badge/HERO12Black-911eb4 - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

0

Off

https://img.shields.io/badge/HERO12Black-911eb4 -

1

On

https://img.shields.io/badge/HERO12Black-911eb4 -
-
-
-

Photo Mode (191)

-https://img.shields.io/badge/HERO12Black-911eb4 - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

0

Super Photo

https://img.shields.io/badge/HERO12Black-911eb4 -

1

Night Photo

https://img.shields.io/badge/HERO12Black-911eb4 -
-
-
-

Aspect Ratio (192)

-https://img.shields.io/badge/HERO12Black-911eb4 - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

0

4:3

https://img.shields.io/badge/HERO12Black-911eb4 -

1

16:9

https://img.shields.io/badge/HERO12Black-911eb4 -

3

8:7

https://img.shields.io/badge/HERO12Black-911eb4 -
-
-
-

Framing (193)

-https://img.shields.io/badge/HERO12Black-911eb4 - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

Supported Cameras

0

Widescreen

https://img.shields.io/badge/HERO12Black-911eb4 -

1

Vertical

https://img.shields.io/badge/HERO12Black-911eb4 -

2

Full Frame

https://img.shields.io/badge/HERO12Black-911eb4 -
-
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/docs/ble/features/statuses.html b/docs/ble/features/statuses.html deleted file mode 100644 index d97a369e..00000000 --- a/docs/ble/features/statuses.html +++ /dev/null @@ -1,1913 +0,0 @@ ---- ---- - - - - - - - - Statuses — Open GoPro BLE API 0.0.1 documentation - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - -
  • -
  • -
-
-
-
-
- -
-

Statuses

-

This section will describe each status and its supported values. See the Query section for operations to query -status values.

-
-

Status IDs

-
-

Is the system’s internal battery present? (1)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - -

ID

Option Name

0

False

1

True

-
-
-

Rough approximation of internal battery level in bars (or charging) (2)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

0

Zero

1

One

2

Two

3

Three

4

Charging

-
-
-

Is the system currently overheating? (6)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - -

ID

Option Name

0

False

1

True

-
-
-

Is the camera busy? (8)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - -

ID

Option Name

0

False

1

True

-
-
-

Is Quick Capture feature enabled? (9)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - -

ID

Option Name

0

False

1

True

-
-
-

Is the system currently encoding? (10)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - -

ID

Option Name

0

False

1

True

-
-
-

Is LCD lock active? (11)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - -

ID

Option Name

0

False

1

True

-
-
-

When encoding video, this is the duration (seconds) of the video so far; 0 otherwise (13)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-

Are Wireless Connections enabled? (17)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - -

ID

Option Name

0

False

1

True

-
-
-

The pairing state of the camera (19)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

0

Never Started

1

Started

2

Aborted

3

Cancelled

4

Completed

-
-
-

The last type of pairing in which the camera was engaged (20)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

0

Not Pairing

1

Pairing App

2

Pairing Remote Control

3

Pairing Bluetooth Device

-
-
-

Time since boot (milliseconds) of last successful pairing complete action (21)

-https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-

State of current scan for WiFi Access Points (22)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

0

Never started

1

Started

2

Aborted

3

Canceled

4

Completed

-
-
-

Time since boot (milliseconds) that the WiFi Access Point scan completed (23)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-

WiFi AP provisioning state (24)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

0

Never started

1

Started

2

Aborted

3

Canceled

4

Completed

-
-
-

Wireless remote control version (26)

-https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-

Is a wireless remote control connected? (27)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - -

ID

Option Name

0

False

1

True

-
-
-

Wireless Pairing State. Each bit contains state information (see WirelessPairingStateFlags) (28)

-https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-

SSID of the AP the camera is currently connected to. On BLE connection, value is big-endian byte-encoded int32 (29)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

This is a string value.

-
-
-

The camera’s WiFi SSID. On BLE connection, value is big-endian byte-encoded int32 (30)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

This is a string value.

-
-
-

The number of wireless devices connected to the camera (31)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-

Is Preview Stream enabled? (32)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - -

ID

Option Name

0

False

1

True

-
-
-

Primary Storage Status (33)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

-1

Unknown

0

OK

1

SD Card Full

2

SD Card Removed

3

SD Card Format Error

4

SD Card Busy

8

SD Card Swapped

-
-
-

How many photos can be taken with current settings before sdcard is full (34)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-

How many minutes of video can be captured with current settings before sdcard is full (35)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-

Total number of photos on sdcard (38)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-

Total number of videos on sdcard (39)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-

The current status of Over The Air (OTA) update (41)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

0

Idle

1

Downloading

2

Verifying

3

Download Failed

4

Verify Failed

5

Ready

6

GoPro App: Downloading

7

GoPro App: Verifying

8

GoPro App: Download Failed

9

GoPro App: Verify Failed

10

GoPro App: Ready

-
-
-

Is there a pending request to cancel a firmware update download? (42)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - -

ID

Option Name

0

False

1

True

-
-
-

Is locate camera feature active? (45)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - -

ID

Option Name

0

False

1

True

-
-
-

The current timelapse interval countdown value (e.g. 5…4…3…2…1…) (49)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-

Remaining space on the sdcard in Kilobytes (54)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-

Is preview stream supported in current recording/mode/secondary-stream? (55)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - -

ID

Option Name

0

False

1

True

-
-
-

WiFi signal strength in bars (56)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-

The number of hilights in currently-encoding video (value is set to 0 when encoding stops) (58)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-

Time since boot (milliseconds) of most recent hilight in encoding video (set to 0 when encoding stops) (59)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-

The minimum time between camera status updates (milliseconds). Best practice is to not poll for status more often than this (60)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-

Liveview Exposure Select Mode (65)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

0

Disabled

1

Auto

2

ISO Lock

3

Hemisphere

-
-
-

Liveview Exposure Select: y-coordinate (percent) (66)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

This is a percent value from 0-100.

-
-
-

Liveview Exposure Select: y-coordinate (percent) (67)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

This is a percent value from 0-100.

-
-
-

Does the camera currently have a GPS lock? (68)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - -

ID

Option Name

0

False

1

True

-
-
-

Is AP mode enabled? (69)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - -

ID

Option Name

0

False

1

True

-
-
-

Internal battery level (percent) (70)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

This is a percent value from 0-100.

-
-
-

Microphone Accessory status (74)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - - - - -

ID

Option Name

0

Accessory not connected

1

Accessory connected

2

Accessory connected and a microphone is plugged into the accessory

-
-
-

Digital Zoom level (percent) (75)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -

This is a percent value from 0-100.

-
-
-

Wireless Band (76)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - -

ID

Option Name

0

2.4 GHz

1

5 GHz

-
-
-

Is Digital Zoom feature available? (77)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - -

ID

Option Name

0

False

1

True

-
- -
-

Is the camera currently in First Time Use (FTU) UI flow? (79)

-https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - -

ID

Option Name

0

False

1

True

-
-
-

Is 5GHz wireless band available? (81)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - -

ID

Option Name

0

False

1

True

-
-
-

Is the system fully booted and ready to accept commands? (82)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - -

ID

Option Name

0

False

1

True

-
-
-

Is the internal battery charged sufficiently to start Over The Air (OTA) update? (83)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - -

ID

Option Name

0

False

1

True

-
-
-

Is the camera getting too cold to continue recording? (85)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - -

ID

Option Name

0

False

1

True

-
-
-

Rotational orientation of the camera (86)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

0

0 degrees (upright)

1

180 degrees (upside down)

2

90 degrees (laying on right side)

3

270 degrees (laying on left side)

-
-
-

Is this camera model capable of zooming while encoding? (88)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - -

ID

Option Name

0

False

1

True

-
-
-

Current Flatmode ID (89)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-

Current Video Preset (ID) (93)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-

Current Photo Preset (ID) (94)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-

Current Time Lapse Preset (ID) (95)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-

Current Preset Group (ID) (corresponds to ui_mode_groups in settings.json) (96)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-

Current Preset (ID) (97)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-

Preset Modified Status, which contains an event ID and a Preset (Group) ID (98)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-

The number of Live Bursts can be captured with current settings before sdcard is full (99)

-https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-

Total number of Live Bursts on sdcard (100)

-https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-

Is Capture Delay currently active (i.e. counting down)? (101)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - -

ID

Option Name

0

False

1

True

-
-
-

Media Mod state (102)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - - - - -

ID

Option Name

0

Media Mod microphone removed

2

Media Mod microphone only

3

Media Mod microphone with external microphone

-
-
-

Time Warp Speed (103)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

0

15x

1

30x

2

60x

3

150x

4

300x

5

900x

6

1800x

7

2x

8

5x

9

10x

10

Auto

11

1x (realtime)

12

1/2x (slow-motion)

-
-
-

Is the system’s Linux core active? (104)

-https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - -

ID

Option Name

0

False

1

True

-
-
-

Camera lens type (reflects changes to lens settings such as 162, 189, 194, …) (105)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - - - - -

ID

Option Name

0

Default

1

Max Lens

2

Max Lens 2.0

-
-
-

Is Video Hindsight Capture Active? (106)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - -

ID

Option Name

0

False

1

True

-
-
-

Scheduled Capture Preset ID (107)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b -
-
-

Is Scheduled Capture set? (108)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - -

ID

Option Name

0

False

1

True

-
-
-

Display Mod Status (bitmasked) (110)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

ID

Option Name

0

000 = Display Mod: 0, HDMI: 0, Display Mod Connected: False

1

001 = Display Mod: 0, HDMI: 0, Display Mod Connected: True

2

010 = Display Mod: 0, HDMI: 1, Display Mod Connected: False

3

011 = Display Mod: 0, HDMI: 1, Display Mod Connected: True

4

100 = Display Mod: 1, HDMI: 0, Display Mod Connected: False

5

101 = Display Mod: 1, HDMI: 0, Display Mod Connected: True

6

110 = Display Mod: 1, HDMI: 1, Display Mod Connected: False

7

111 = Display Mod: 1, HDMI: 1, Display Mod Connected: True

-
-
-

Does sdcard meet specified minimum write speed? (111)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b - - - - - - - - - - - - - - -

ID

Option Name

0

False

1

True

-
-
-

Number of sdcard write speed errors since device booted (112)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -
-
-

Is Turbo Transfer active? (113)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b -https://img.shields.io/badge/HERO9Black-e6194b - - - - - - - - - - - - - - -

ID

Option Name

0

False

1

True

-
-
-

Camera control status ID (114)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b - - - - - - - - - - - - - - - - - -

ID

Option Name

0

Camera Idle: No one is attempting to change camera settings

1

Camera Control: Camera is in a menu or changing settings. To intervene, app must request control

2

Camera External Control: An outside entity (app) has control and is in a menu or modifying settings

-
-
-

Is the camera connected to a PC via USB? (115)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b - - - - - - - - - - - - - - -

ID

Option Name

0

False

1

True

-
-
-

Camera control over USB state (116)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -https://img.shields.io/badge/HERO10Black-3cb44b - - - - - - - - - - - - - - -

ID

Option Name

0

Disabled

1

Enabled

-
-
-

Total SD card capacity in Kilobytes (117)

-https://img.shields.io/badge/HERO12Black-911eb4 -https://img.shields.io/badge/HERO11BlackMini-f58231 -https://img.shields.io/badge/HERO11Black-ffe119 -
-
-

Photo interval capture count (118)

-https://img.shields.io/badge/HERO12Black-911eb4 -
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/docs/ble/genindex.html b/docs/ble/genindex.html deleted file mode 100644 index 57f77985..00000000 --- a/docs/ble/genindex.html +++ /dev/null @@ -1,437 +0,0 @@ ---- ---- - - - - - - - Index — Open GoPro BLE API 0.0.1 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - -
  • -
  • -
-
-
-
-
- - -

Index

- -
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/docs/ble/index.html b/docs/ble/index.html deleted file mode 100644 index 3b8fadce..00000000 --- a/docs/ble/index.html +++ /dev/null @@ -1,539 +0,0 @@ ---- ---- - - - - - - - - Welcome to Open GoPro BLE API’s documentation! — Open GoPro BLE API 0.0.1 documentation - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - -
  • -
  • -
-
-
-
-
- -
-

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 minimum 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:

- -

Then see any of the subsequent feature sections to perform desired functionality:

- -
-

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.

  • -
-
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/docs/ble/operation-operation_index.html b/docs/ble/operation-operation_index.html deleted file mode 100644 index 119b8a55..00000000 --- a/docs/ble/operation-operation_index.html +++ /dev/null @@ -1,1534 +0,0 @@ ---- ---- - - - - - - - operation index — Open GoPro BLE API 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - -
  • -
  • -
-
-
-
-
- - -

operation index

- -
- c | - e | - g | - h | - k | - l | - m | - n | - p | - r | - s | - u -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 
- c
- connect to provisioned access point (features/access_points) - Operation
- connect to a new access point (features/access_points) - Operation
- clear cohn certificate (features/cohn) - Operation
- create cohn certificate (features/cohn) - Operation
 
- e
- EnumCOHNStatus (protocol/protobuf) - Proto
- EnumCOHNNetworkState (protocol/protobuf) - Proto
- EnumLens (protocol/protobuf) - Proto
- EnumLiveStreamError (protocol/protobuf) - Proto
- EnumLiveStreamStatus (protocol/protobuf) - Proto
- EnumRegisterLiveStreamStatus (protocol/protobuf) - Proto
- EnumWindowSize (protocol/protobuf) - Proto
- EnumProvisioning (protocol/protobuf) - Proto
- EnumScanning (protocol/protobuf) - Proto
- EnumScanEntryFlags (protocol/protobuf) - Proto
- EnumFlatMode (protocol/protobuf) - Proto
- EnumPresetGroup (protocol/protobuf) - Proto
- EnumPresetGroupIcon (protocol/protobuf) - Proto
- EnumPresetIcon (protocol/protobuf) - Proto
- EnumPresetTitle (protocol/protobuf) - Proto
- EnumRegisterPresetStatus (protocol/protobuf) - Proto
- EnumResultGeneric (protocol/protobuf) - Proto
- EnumCameraControlStatus (protocol/protobuf) - Proto
 
- g
- get ap scan results (features/access_points) - Operation
- get cohn certificate (features/cohn) - Operation
- get cohn status (features/cohn) - Operation
- get livestream status (features/live_streaming) - Operation
- get available presets (features/presets) - Operation
- get date time (features/query) - Operation
- get hardware info (features/query) - Operation
- get local date time (features/query) - Operation
- get last captured media (features/query) - Operation
- get open gopro version (features/query) - Operation
- get setting values (features/query) - Operation
- get status values (features/query) - Operation
- get setting capabilities (features/query) - Operation
 
- h
- hilight moment (features/hilights) - Operation
 
- k
- keep alive (features/control) - Operation
 
- l
- load preset (features/presets) - Operation
- load preset group (features/presets) - Operation
 
- m
- Media (protocol/protobuf) - Proto
 
- n
- NotifyCOHNStatus (protocol/protobuf) - Proto
- NotifyLiveStreamStatus (protocol/protobuf) - Proto
- NotifProvisioningState (protocol/protobuf) - Proto
- NotifStartScanning (protocol/protobuf) - Proto
- NotifyPresetStatus (protocol/protobuf) - Proto
 
- p
- Preset (protocol/protobuf) - Proto
- PresetGroup (protocol/protobuf) - Proto
- PresetSetting (protocol/protobuf) - Proto
 
- r
- register for setting value updates (features/query) - Operation
- register for status value updates (features/query) - Operation
- register for setting capability updates (features/query) - Operation
- RequestGetCOHNStatus (protocol/protobuf) - Proto
- RequestCreateCOHNCert (protocol/protobuf) - Proto
- RequestClearCOHNCert (protocol/protobuf) - Proto
- RequestCOHNCert (protocol/protobuf) - Proto
- ResponseCOHNCert (protocol/protobuf) - Proto
- RequestSetCOHNSetting (protocol/protobuf) - Proto
- RequestGetLiveStreamStatus (protocol/protobuf) - Proto
- RequestSetLiveStreamMode (protocol/protobuf) - Proto
- RequestGetLastCapturedMedia (protocol/protobuf) - Proto
- ResponseLastCapturedMedia (protocol/protobuf) - Proto
- RequestConnect (protocol/protobuf) - Proto
- RequestConnectNew (protocol/protobuf) - Proto
- RequestGetApEntries (protocol/protobuf) - Proto
- RequestReleaseNetwork (protocol/protobuf) - Proto
- RequestStartScan (protocol/protobuf) - Proto
- ResponseConnect (protocol/protobuf) - Proto
- ResponseConnectNew (protocol/protobuf) - Proto
- ResponseGetApEntries (protocol/protobuf) - Proto
- ResponseStartScanning (protocol/protobuf) - Proto
- RequestCustomPresetUpdate (protocol/protobuf) - Proto
- RequestGetPresetStatus (protocol/protobuf) - Proto
- ResponseGeneric (protocol/protobuf) - Proto
- RequestSetCameraControlStatus (protocol/protobuf) - Proto
- RequestSetTurboActive (protocol/protobuf) - Proto
 
- s
- Setting 83 (GPS) (features/settings) - Setting
- Setting 122 (Lens) (features/settings) - Setting
- Setting 134 (Anti-Flicker) (features/settings) - Setting
- Setting 172 (Duration) (features/settings) - Setting
- Setting 177 (Enable Night Photo) (features/settings) - Setting
- Setting 150 (Horizon Leveling) (features/settings) - Setting
- Setting 151 (Horizon Leveling) (features/settings) - Setting
- Setting 190 (Max Lens Mod Enable) (features/settings) - Setting
- Setting 3 (Frames Per Second) (features/settings) - Setting
- Setting 128 (Media Format) (features/settings) - Setting
- Setting 121 (Lens) (features/settings) - Setting
- Setting 180 (Video Mode) (features/settings) - Setting
- Setting 178 (Wireless Band) (features/settings) - Setting
- Setting 187 (Lapse Mode) (features/settings) - Setting
- Setting 123 (Time Lapse Digital Lenses) (features/settings) - Setting
- Setting 173 (Video Performance Mode) (features/settings) - Setting
- Setting 186 (Video Mode) (features/settings) - Setting
- Setting 135 (Hypersmooth) (features/settings) - Setting
- Setting 182 (Bit Rate) (features/settings) - Setting
- Setting 184 (Profiles) (features/settings) - Setting
- Setting 183 (Bit Depth) (features/settings) - Setting
- Setting 43 (Webcam Digital Lenses) (features/settings) - Setting
- Setting 189 (Max Lens Mod) (features/settings) - Setting
- Setting 179 (Trail Length) (features/settings) - Setting
- Setting 171 (Interval) (features/settings) - Setting
- Setting 162 (Max Lens) (features/settings) - Setting
- Setting 175 (Controls) (features/settings) - Setting
- Setting 193 (Framing) (features/settings) - Setting
- Setting 2 (Resolution) (features/settings) - Setting
- Setting 176 (Easy Mode Speed) (features/settings) - Setting
- Setting 108 (Aspect Ratio) (features/settings) - Setting
- Setting 167 (HindSight) (features/settings) - Setting
- Setting 59 (Auto Power Down) (features/settings) - Setting
- Setting 191 (Photo Mode) (features/settings) - Setting
- Setting 192 (Aspect Ratio) (features/settings) - Setting
- Status 114 (Camera control status ID) (features/statuses) - Status
- Status 93 (Current Video Preset (ID)) (features/statuses) - Status
- Status 41 (The current status of Over The Air (OTA) update) (features/statuses) - Status
- Status 1 (Is the system's internal battery present?) (features/statuses) - Status
- Status 106 (Is Video Hindsight Capture Active?) (features/statuses) - Status
- Status 39 (Total number of videos on sdcard) (features/statuses) - Status
- Status 116 (Camera control over USB state) (features/statuses) - Status
- Status 99 (The number of Live Bursts can be captured with current settings before sdcard is full) (features/statuses) - Status
- Status 112 (Number of sdcard write speed errors since device booted) (features/statuses) - Status
- Status 102 (Media Mod state) (features/statuses) - Status
- Status 9 (Is Quick Capture feature enabled?) (features/statuses) - Status
- Status 82 (Is the system fully booted and ready to accept commands?) (features/statuses) - Status
- Status 38 (Total number of photos on sdcard) (features/statuses) - Status
- Status 56 (WiFi signal strength in bars) (features/statuses) - Status
- Status 8 (Is the camera busy?) (features/statuses) - Status
- Status 68 (Does the camera currently have a GPS lock?) (features/statuses) - Status
- Status 117 (Total SD card capacity in Kilobytes) (features/statuses) - Status
- Status 97 (Current Preset (ID)) (features/statuses) - Status
- Status 107 (Scheduled Capture Preset ID) (features/statuses) - Status
- Status 2 (Rough approximation of internal battery level in bars (or charging)) (features/statuses) - Status
- Status 10 (Is the system currently encoding?) (features/statuses) - Status
- Status 67 (Liveview Exposure Select: y-coordinate (percent)) (features/statuses) - Status
- Status 6 (Is the system currently overheating?) (features/statuses) - Status
- Status 118 (Photo interval capture count) (features/statuses) - Status
- Status 94 (Current Photo Preset (ID)) (features/statuses) - Status
- Status 55 (Is preview stream supported in current recording/mode/secondary-stream?) (features/statuses) - Status
- Status 110 (Display Mod Status (bitmasked)) (features/statuses) - Status
- Status 20 (The last type of pairing in which the camera was engaged) (features/statuses) - Status
- Status 59 (Time since boot (milliseconds) of most recent hilight in encoding video (set to 0 when encoding stops)) (features/statuses) - Status
- Status 23 (Time since boot (milliseconds) that the WiFi Access Point scan completed) (features/statuses) - Status
- Status 17 (Are Wireless Connections enabled?) (features/statuses) - Status
- Status 24 (WiFi AP provisioning state) (features/statuses) - Status
- Status 85 (Is the camera getting too cold to continue recording?) (features/statuses) - Status
- Status 34 (How many photos can be taken with current settings before sdcard is full) (features/statuses) - Status
- Status 54 (Remaining space on the sdcard in Kilobytes) (features/statuses) - Status
- Status 115 (Is the camera connected to a PC via USB?) (features/statuses) - Status
- Status 113 (Is Turbo Transfer active?) (features/statuses) - Status
- Status 88 (Is this camera model capable of zooming while encoding?) (features/statuses) - Status
- Status 77 (Is Digital Zoom feature available?) (features/statuses) - Status
- Status 49 (The current timelapse interval countdown value (e.g. 5...4...3...2...1...)) (features/statuses) - Status
- Status 31 (The number of wireless devices connected to the camera) (features/statuses) - Status
- Status 19 (The pairing state of the camera) (features/statuses) - Status
- Status 42 (Is there a pending request to cancel a firmware update download?) (features/statuses) - Status
- Status 81 (Is 5GHz wireless band available?) (features/statuses) - Status
- Status 86 (Rotational orientation of the camera) (features/statuses) - Status
- Status 69 (Is AP mode enabled?) (features/statuses) - Status
- Status 105 (Camera lens type (reflects changes to lens settings such as 162, 189, 194, ...)) (features/statuses) - Status
- Status 29 (SSID of the AP the camera is currently connected to. On BLE connection, value is big-endian byte-encoded int32) (features/statuses) - Status
- Status 100 (Total number of Live Bursts on sdcard) (features/statuses) - Status
- Status 111 (Does sdcard meet specified minimum write speed?) (features/statuses) - Status
- Status 13 (When encoding video, this is the duration (seconds) of the video so far; 0 otherwise) (features/statuses) - Status
- Status 30 (The camera's WiFi SSID. On BLE connection, value is big-endian byte-encoded int32) (features/statuses) - Status
- Status 96 (Current Preset Group (ID) (corresponds to ui_mode_groups in settings.json)) (features/statuses) - Status
- Status 21 (Time since boot (milliseconds) of last successful pairing complete action) (features/statuses) - Status
- Status 89 (Current Flatmode ID) (features/statuses) - Status
- Status 65 (Liveview Exposure Select Mode) (features/statuses) - Status
- Status 58 (The number of hilights in currently-encoding video (value is set to 0 when encoding stops)) (features/statuses) - Status
- Status 66 (Liveview Exposure Select: y-coordinate (percent)) (features/statuses) - Status
- Status 22 (State of current scan for WiFi Access Points) (features/statuses) - Status
- Status 79 (Is the camera currently in First Time Use (FTU) UI flow?) (features/statuses) - Status
- Status 75 (Digital Zoom level (percent)) (features/statuses) - Status
- Status 70 (Internal battery level (percent)) (features/statuses) - Status
- Status 78 (Are current video settings mobile friendly? (related to video compression and frame rate)) (features/statuses) - Status
- Status 101 (Is Capture Delay currently active (i.e. counting down)?) (features/statuses) - Status
- Status 103 (Time Warp Speed) (features/statuses) - Status
- Status 28 (Wireless Pairing State. Each bit contains state information (see WirelessPairingStateFlags)) (features/statuses) - Status
- Status 104 (Is the system's Linux core active?) (features/statuses) - Status
- Status 33 (Primary Storage Status) (features/statuses) - Status
- Status 27 (Is a wireless remote control connected?) (features/statuses) - Status
- Status 45 (Is locate camera feature active?) (features/statuses) - Status
- Status 74 (Microphone Accessory status) (features/statuses) - Status
- Status 11 (Is LCD lock active?) (features/statuses) - Status
- Status 83 (Is the internal battery charged sufficiently to start Over The Air (OTA) update?) (features/statuses) - Status
- Status 32 (Is Preview Stream enabled?) (features/statuses) - Status
- Status 26 (Wireless remote control version) (features/statuses) - Status
- Status 95 (Current Time Lapse Preset (ID)) (features/statuses) - Status
- Status 76 (Wireless Band) (features/statuses) - Status
- Status 98 (Preset Modified Status, which contains an event ID and a Preset (Group) ID) (features/statuses) - Status
- Status 35 (How many minutes of video can be captured with current settings before sdcard is full) (features/statuses) - Status
- Status 108 (Is Scheduled Capture set?) (features/statuses) - Status
- Status 60 (The minimum time between camera status updates (milliseconds). Best practice is to not poll for status more often than this) (features/statuses) - Status
- scan for access points (features/access_points) - Operation
- set cohn setting (features/cohn) - Operation
- set analytics (features/control) - Operation
- set ap control (features/control) - Operation
- set camera control (features/control) - Operation
- set date time (features/control) - Operation
- set local date time (features/control) - Operation
- set shutter (features/control) - Operation
- set turbo transfer (features/control) - Operation
- sleep (features/control) - Operation
- set livestream mode (features/live_streaming) - Operation
- set setting (features/settings) - Operation
- ScanEntry (protocol/protobuf) - Proto
 
- u
- update custom preset (features/presets) - Operation
- unregister for setting value updates (features/query) - Operation
- unregister for status value updates (features/query) - Operation
- unregister for setting capability updates (features/query) - Operation
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/docs/ble/protocol.html b/docs/ble/protocol.html deleted file mode 100644 index 63cce320..00000000 --- a/docs/ble/protocol.html +++ /dev/null @@ -1,482 +0,0 @@ ---- ---- - - - - - - - - Protocol — Open GoPro BLE API 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - -
  • -
  • -
-
-
-
-
- -
-

Protocol

-

Read through the following sections in order to initialize and configure Open GoPro BLE communication.

- -

The following sections are used for reference for the various feature operations.

- - -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/docs/ble/protocol/ble_setup.html b/docs/ble/protocol/ble_setup.html deleted file mode 100644 index ca6ef7ee..00000000 --- a/docs/ble/protocol/ble_setup.html +++ /dev/null @@ -1,562 +0,0 @@ ---- ---- - - - - - - - - BLE Setup — Open GoPro BLE API 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

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:

-
    -
  1. Ensure the camera is connectable and in pairing mode

  2. -
  3. Scan to discover advertisements from GoPro peripheral devices (which can be narrowed by -limiting to peripherals that advertise service 0xFEA6)

  4. -
  5. Connect to a discovered peripheral device

  6. -
  7. Finish pairing with the peripheral device

  8. -
  9. Discover all advertised services and characteristics

  10. -
  11. Subscribe to notifications from all characteristics that have the notify flag set

  12. -
-
-

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.

-
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/docs/ble/protocol/data_protocol.html b/docs/ble/protocol/data_protocol.html deleted file mode 100644 index c3ec8390..00000000 --- a/docs/ble/protocol/data_protocol.html +++ /dev/null @@ -1,832 +0,0 @@ ---- ---- - - - - - - - - Data Protocol — Open GoPro BLE API 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

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:

-
    -
  1. Accumulate and depacketize BLE packets to extract the message payload

  2. -
  3. Decipher the message’s ID and payload type

  4. -
  5. Depending on the payload type, use the per-message documentation -(identified by the message’s ID) to parse the message

  6. -
-
-

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:

-
Camera sends response message from UUID U (string) with payload P (array of bytes)
-// Is it a Protobuf response?
-for each row in the 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 Protobuf Message
-        Match Feature ID P[0] and Action ID P[1] to a Protobuf message in the Protobuf IDs table
-        Use matched 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 Command Table with Command scheme
-}
-else if U == GP-0074 (Settings) {
-    Parse using Setting ID mapping with Command scheme
-}
-else if U == GP-0076 (Query) {
-    Parse message payload using Query Table with Query scheme
-}
-

Alternatively this is described in flowchart form here:

-../_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:

- -
-

Note

-

The byte table examples in this section do not contain the 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:

- -

They are summarized in the commands table and individually documented throughout -the relevant feature section.

-

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 Command ID -will define the length and value options for each of its parameters.

-

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

-

where the possible Command Statuses are:

- - - - - - - - - - - - - - - - - - - - -

Command

Status Description

0

Success

1

Error

2

Invalid Parameter

3-255

Reserved

-

The individual command documentation specified by the message’s -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 characteristics, -respectively. They are summarized in the queries table and individually documented -in Query.

-

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 Query ID -will define the elements that comprise the element ID array.

-

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 -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 -action / feature id is used to serialize / deserialize the payload.

-
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/docs/ble/protocol/id_tables.html b/docs/ble/protocol/id_tables.html deleted file mode 100644 index 6ee80f34..00000000 --- a/docs/ble/protocol/id_tables.html +++ /dev/null @@ -1,1122 +0,0 @@ ---- ---- - - - - - - - - ID Tables — Open GoPro BLE API 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

ID Tables

-
-

Command IDs

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

ID

Command

0x01

Set Shutter

0x05

Sleep

0x0D

Set Date Time

0x0E

Get Date Time

0x0F

Set Local Date Time

0x10

Get Local Date Time

0x17

Set AP Control

0x18

Hilight Moment

0x3C

Get Hardware Info

0x3E

Load Preset Group

0x40

Load Preset

0x50

Set Analytics

0x51

Get Open GoPro Version

0x5B

Keep Alive

SettingID

Set Setting

-
-
-

Query IDs

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Query ID

Query

0x12

Get Setting Values

0x13

Get Status Values

0x32

Get Setting Capabilities

0x52

Register for Setting Value Updates

0x53

Register for Status Value Updates

0x62

Register for Setting Capability Updates

0x72

Unregister for Setting Value Updates

0x73

Unregister for Status Value Updates

0x82

Unregister for Setting Capability Updates

0x92

Asynchronous setting value Notification

0x93

Asynchronous status value Notification

0xA2

Asynchronous setting capability Notification

-
-
-

Protobuf IDs

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Feature ID

Action ID

Operation Element

Protobuf Message

0x02

0x02

"Scan for Access Points" Request

RequestStartScan

0x02

0x03

"Get AP Scan Results" Request

RequestGetApEntries

0x02

0x04

"Connect to Provisioned Access Point" Request

RequestConnect

0x02

0x05

"Connect to a New Access Point" Request

RequestConnectNew

0x02

0x0B

"Scan for Access Points" Notification

NotifStartScanning

0x02

0x0C

"Connect to Provisioned Access Point" Notification

NotifProvisioningState

0x02

0x0C

"Connect to a New Access Point" Notification

NotifProvisioningState

0x02

0x82

"Scan for Access Points" Response

ResponseStartScanning

0x02

0x83

"Get AP Scan Results" Response

ResponseGetApEntries

0x02

0x84

"Connect to Provisioned Access Point" Response

ResponseConnect

0x02

0x85

"Connect to a New Access Point" Response

ResponseConnectNew

0xF1

0x64

"Update Custom Preset" Request

RequestCustomPresetUpdate

0xF1

0x65

"Set COHN Setting" Request

RequestSetCOHNSetting

0xF1

0x66

"Clear COHN Certificate" Request

RequestClearCOHNCert

0xF1

0x67

"Create COHN Certificate" Request

RequestCreateCOHNCert

0xF1

0x69

"Set Camera Control" Request

RequestSetCameraControlStatus

0xF1

0x6B

"Set Turbo Transfer" Request

RequestSetTurboActive

0xF1

0x79

"Set Livestream Mode" Request

RequestSetLiveStreamMode

0xF1

0xE4

"Update Custom Preset" Response

ResponseGeneric

0xF1

0xE5

"Set COHN Setting" Response

ResponseGeneric

0xF1

0xE6

"Clear COHN Certificate" Response

ResponseGeneric

0xF1

0xE7

"Create COHN Certificate" Response

ResponseGeneric

0xF1

0xE9

"Set Camera Control" Response

ResponseGeneric

0xF1

0xEB

"Set Turbo Transfer" Response

ResponseGeneric

0xF1

0xF9

"Set Livestream Mode" Response

ResponseGeneric

0xF5

0x6D

"Get Last Captured Media" Request

RequestGetLastCapturedMedia

0xF5

0x6E

"Get COHN Certificate" Request

RequestCOHNCert

0xF5

0x6F

"Get COHN Status" Request

RequestGetCOHNStatus

0xF5

0x72

"Get Available Presets" Request

RequestGetPresetStatus

0xF5

0x74

"Get Livestream Status" Request

RequestGetLiveStreamStatus

0xF5

0xED

"Get Last Captured Media" Response

ResponseLastCapturedMedia

0xF5

0xEE

"Get COHN Certificate" Response

ResponseCOHNCert

0xF5

0xEF

"Get COHN Status" Response

NotifyCOHNStatus

0xF5

0xEF

"Get COHN Status" Notification

NotifyCOHNStatus

0xF5

0xF2

"Get Available Presets" Response

NotifyPresetStatus

0xF5

0xF3

"Get Available Presets" Notification

NotifyPresetStatus

0xF5

0xF4

"Get Livestream Status" Response

NotifyLiveStreamStatus

0xF5

0xF5

"Get Livestream Status" Notification

NotifyLiveStreamStatus

-
-
-

Setting IDs

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

ID

Setting

2

Resolution

3

Frames Per Second

43

Webcam Digital Lenses

59

Auto Power Down

83

GPS

108

Aspect Ratio

121

Lens

122

Lens

123

Time Lapse Digital Lenses

128

Media Format

134

Anti-Flicker

135

Hypersmooth

150

Horizon Leveling

151

Horizon Leveling

162

Max Lens

167

HindSight

171

Interval

172

Duration

173

Video Performance Mode

175

Controls

176

Easy Mode Speed

177

Enable Night Photo

178

Wireless Band

179

Trail Length

180

Video Mode

182

Bit Rate

183

Bit Depth

184

Profiles

186

Video Mode

187

Lapse Mode

189

Max Lens Mod

190

Max Lens Mod Enable

191

Photo Mode

192

Aspect Ratio

193

Framing

-
-
-

Status IDs

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

ID

Status

1

Is the system's internal battery present?

2

Rough approximation of internal battery level in bars (or charging)

6

Is the system currently overheating?

8

Is the camera busy?

9

Is Quick Capture feature enabled?

10

Is the system currently encoding?

11

Is LCD lock active?

13

When encoding video, this is the duration (seconds) of the video so far; 0 otherwise

17

Are Wireless Connections enabled?

19

The pairing state of the camera

20

The last type of pairing in which the camera was engaged

21

Time since boot (milliseconds) of last successful pairing complete action

22

State of current scan for WiFi Access Points

23

Time since boot (milliseconds) that the WiFi Access Point scan completed

24

WiFi AP provisioning state

26

Wireless remote control version

27

Is a wireless remote control connected?

28

Wireless Pairing State. Each bit contains state information (see WirelessPairingStateFlags)

29

SSID of the AP the camera is currently connected to. On BLE connection, value is big-endian byte-encoded int32

30

The camera's WiFi SSID. On BLE connection, value is big-endian byte-encoded int32

31

The number of wireless devices connected to the camera

32

Is Preview Stream enabled?

33

Primary Storage Status

34

How many photos can be taken with current settings before sdcard is full

35

How many minutes of video can be captured with current settings before sdcard is full

38

Total number of photos on sdcard

39

Total number of videos on sdcard

41

The current status of Over The Air (OTA) update

42

Is there a pending request to cancel a firmware update download?

45

Is locate camera feature active?

49

The current timelapse interval countdown value (e.g. 5...4...3...2...1...)

54

Remaining space on the sdcard in Kilobytes

55

Is preview stream supported in current recording/mode/secondary-stream?

56

WiFi signal strength in bars

58

The number of hilights in currently-encoding video (value is set to 0 when encoding stops)

59

Time since boot (milliseconds) of most recent hilight in encoding video (set to 0 when encoding stops)

60

The minimum time between camera status updates (milliseconds). Best practice is to not poll for status more often than this

65

Liveview Exposure Select Mode

66

Liveview Exposure Select: y-coordinate (percent)

67

Liveview Exposure Select: y-coordinate (percent)

68

Does the camera currently have a GPS lock?

69

Is AP mode enabled?

70

Internal battery level (percent)

74

Microphone Accessory status

75

Digital Zoom level (percent)

76

Wireless Band

77

Is Digital Zoom feature available?

78

Are current video settings mobile friendly? (related to video compression and frame rate)

79

Is the camera currently in First Time Use (FTU) UI flow?

81

Is 5GHz wireless band available?

82

Is the system fully booted and ready to accept commands?

83

Is the internal battery charged sufficiently to start Over The Air (OTA) update?

85

Is the camera getting too cold to continue recording?

86

Rotational orientation of the camera

88

Is this camera model capable of zooming while encoding?

89

Current Flatmode ID

93

Current Video Preset (ID)

94

Current Photo Preset (ID)

95

Current Time Lapse Preset (ID)

96

Current Preset Group (ID) (corresponds to ui_mode_groups in settings.json)

97

Current Preset (ID)

98

Preset Modified Status, which contains an event ID and a Preset (Group) ID

99

The number of Live Bursts can be captured with current settings before sdcard is full

100

Total number of Live Bursts on sdcard

101

Is Capture Delay currently active (i.e. counting down)?

102

Media Mod state

103

Time Warp Speed

104

Is the system's Linux core active?

105

Camera lens type (reflects changes to lens settings such as 162, 189, 194, ...)

106

Is Video Hindsight Capture Active?

107

Scheduled Capture Preset ID

108

Is Scheduled Capture set?

110

Display Mod Status (bitmasked)

111

Does sdcard meet specified minimum write speed?

112

Number of sdcard write speed errors since device booted

113

Is Turbo Transfer active?

114

Camera control status ID

115

Is the camera connected to a PC via USB?

116

Camera control over USB state

117

Total SD card capacity in Kilobytes

118

Photo interval capture count

-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/docs/ble/protocol/protobuf.html b/docs/ble/protocol/protobuf.html deleted file mode 100644 index 71073e13..00000000 --- a/docs/ble/protocol/protobuf.html +++ /dev/null @@ -1,3181 +0,0 @@ ---- ---- - - - - - - - - Protobuf Documentation — Open GoPro BLE API 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - - -
  • -
  • -
-
-
-
-
- -
-

Protobuf Documentation

-
-

Enums

-
-

EnumCOHNNetworkState

-
-

See also

-

Source Protobuf File

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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

-
-
-

EnumCOHNStatus

-
-

See also

-

Source Protobuf File

-
- ----- - - - - - - - - - - - - - - - - -

name

value

summary

COHN_UNPROVISIONED

0

COHN_PROVISIONED

1

-
-
-

EnumCameraControlStatus

-
-

See also

-

Source Protobuf File

-
- ----- - - - - - - - - - - - - - - - - - - - - -

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

-
-
-

EnumFlatMode

-
-

See also

-

Source Protobuf File

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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

FLAT_MODE_VIDEO_BURST_SLOMO

32

-
-
-

EnumLens

-
-

See also

-

Source Protobuf File

-
- ----- - - - - - - - - - - - - - - - - - - - - -

name

value

summary

LENS_WIDE

0

LENS_SUPERVIEW

3

LENS_LINEAR

4

-
-
-

EnumLiveStreamError

-
-

See also

-

Source Protobuf File

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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

-
-
-

EnumLiveStreamStatus

-
-

See also

-

Source Protobuf File

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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.

LIVE_STREAM_STATE_UNAVAILABLE

7

Live stream setup is unavailable due to camera lens configuration

-
-
-

EnumPresetGroup

-
-

See also

-

Source Protobuf File

-
- ----- - - - - - - - - - - - - - - - - - - - - -

name

value

summary

PRESET_GROUP_ID_VIDEO

1000

PRESET_GROUP_ID_PHOTO

1001

PRESET_GROUP_ID_TIMELAPSE

1002

-
-
-

EnumPresetGroupIcon

-
-

See also

-

Source Protobuf File

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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

-
-
-

EnumPresetIcon

-
-

See also

-

Source Protobuf File

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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

-
-
-

EnumPresetTitle

-
-

See also

-

Source Protobuf File

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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

-
-
-

EnumProvisioning

-
-

See also

-

Source Protobuf File

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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

-
-
-

EnumRegisterLiveStreamStatus

-
-

See also

-

Source Protobuf File

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - -

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

-
-
-

EnumRegisterPresetStatus

-
-

See also

-

Source Protobuf File

-
- ----- - - - - - - - - - - - - - - - - -

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

-
-
-

EnumResultGeneric

-
-

See also

-

Source Protobuf File

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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

-
-
-

EnumScanEntryFlags

-
-

See also

-

Source Protobuf File

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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

-
-
-

EnumScanning

-
-

See also

-

Source Protobuf File

-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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

-
-
-

EnumWindowSize

-
-

See also

-

Source Protobuf File

-
- ----- - - - - - - - - - - - - - - - - - - - - -

name

value

summary

WINDOW_SIZE_480

4

WINDOW_SIZE_720

7

WINDOW_SIZE_1080

12

-
-
-
-

Media

-
-

See also

-

Source Protobuf File

-
-

A common model to represent a media file

- ------ - - - - - - - - - - - - - - - - - - - -

field

typespec

value

summary

folder

string

1

Directory in which the media is contained

file

string

2

Filename of media

-
-
-

NotifProvisioningState

-
-

See also

-

Source Protobuf File

-
-

Provision state notification

-

Sent during provisioning triggered via RequestConnect or RequestConnectNew

- ------ - - - - - - - - - - - - - - -

field

typespec

value

summary

provisioning_state

EnumProvisioning

1

Provisioning / connection state

-
-
-

NotifStartScanning

-
-

See also

-

Source Protobuf File

-
-

Scanning state notification

-

Triggered via RequestStartScan

- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

field

typespec

value

summary

scanning_state

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

-
-
-

NotifyCOHNStatus

-
-

See also

-

Source Protobuf File

-
-

Current COHN status triggered by a RequestGetCOHNStatus

- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

field

typespec

value

summary

status

EnumCOHNStatus

1

Current COHN status

state

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

-
-
-

NotifyLiveStreamStatus

-
-

See also

-

Source Protobuf File

-
-

Live Stream status

-

Sent either:

-
-
-
- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

field

typespec

value

summary

live_stream_status

EnumLiveStreamStatus

1

Live stream status

live_stream_error

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

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

EnumLens

11

Set of currently supported FOV options

-
-
-

NotifyPresetStatus

-
-

See also

-

Source Protobuf File

-
-

Current Preset status

-

Sent either:

- - ------ - - - - - - - - - - - - - - -

field

typespec

value

summary

preset_group_array

PresetGroup

1

List of currently available Preset Groups

-
-
-

Preset

-
-

See also

-

Source Protobuf File

-
-

An individual preset.

- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

field

typespec

value

summary

id

int32

1

Preset ID

mode

EnumFlatMode

2

Preset flatmode ID

title_id

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

EnumPresetIcon

6

Preset Icon ID

setting_array

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 RequestCustomPresetUpdate

-
-
-

PresetGroup

-
-

See also

-

Source Protobuf File

-
-

Preset Group meta information and contained Presets

- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

field

typespec

value

summary

id

EnumPresetGroup

1

Preset Group ID

preset_array

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

EnumPresetGroupIcon

4

The icon to display for this preset group

-
-
-

PresetSetting

-
-

See also

-

Source Protobuf File

-
-

Setting representation that comprises a Preset

- ------ - - - - - - - - - - - - - - - - - - - - - - - - -

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?

-
-
-

RequestCOHNCert

-
-

See also

-

Source Protobuf File

-
-

Get the COHN certificate.

-

Returns a ResponseCOHNCert

-
-
-

RequestClearCOHNCert

-
-

See also

-

Source Protobuf File

-
-

Clear the COHN certificate.

-

Returns a ResponseGeneric with the status of the clear

-
-
-

RequestConnect

-
-

See also

-

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: ResponseConnect

-

Notification: NotifProvisioningState sent periodically as provisioning state changes

- ------ - - - - - - - - - - - - - - -

field

typespec

value

summary

ssid

string

1

AP SSID

-
-
-

RequestConnectNew

-
-

See also

-

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: ResponseConnectNew sent immediately

-

Notification: NotifProvisioningState sent periodically as provisioning state changes

- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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

-
-
-

RequestCreateCOHNCert

-
-

See also

-

Source Protobuf File

-
-

Create the Camera On the Home Network SSL/TLS certificate.

-

Returns a ResponseGeneric with the status of the creation

- ------ - - - - - - - - - - - - - - -

field

typespec

value

summary

override

bool

1

Override current provisioning and create new cert

-
-
-

RequestCustomPresetUpdate

-
-

See also

-

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

    • -
    -
    -
  2. -
-

and / or

-
    -
  1. 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

    • -
    -
    -
  2. -
-

Returns a ResponseGeneric with the status of the preset update request.

- ------ - - - - - - - - - - - - - - - - - - - - - - - - -

field

typespec

value

summary

title_id

EnumPresetTitle

1

-
Preset Title ID
-

-
The range of acceptable custom title ID’s can be found in the initial NotifyPresetStatus response
- -
-

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

EnumPresetIcon

3

-
Preset Icon ID
-

-
The range of acceptable custom icon ID’s can be found in the initial NotifyPresetStatus response to
- -
-
-
-
-

RequestGetApEntries

-
-

See also

-

Source Protobuf File

-
-

Get a list of Access Points found during a RequestStartScan

-

Response: ResponseGetApEntries

- ------ - - - - - - - - - - - - - - - - - - - - - - - - -

field

typespec

value

summary

start_index

int32

1

Used for paging. 0 <= start_index < ResponseGetApEntries .total_entries

max_entries

int32

2

Used for paging. Value must be < ResponseGetApEntries .total_entries

scan_id

int32

3

ID corresponding to a set of scan results (i.e. ResponseGetApEntries .scan_id)

-
-
-

RequestGetCOHNStatus

-
-

See also

-

Source Protobuf File

-
-

Get the current COHN status.

-

Response: NotifyCOHNStatus

-

Additionally, asynchronous updates can also be registered to return more NotifyCOHNStatus when a value -changes.

- ------ - - - - - - - - - - - - - - -

field

typespec

value

summary

register_cohn_status

bool

1

1 to register, 0 to unregister

-
-
-

RequestGetLastCapturedMedia

-
-

See also

-

Source Protobuf File

-
-

Get the last captured media filename

-

Returns a ResponseLastCapturedMedia

-
-
-

RequestGetLiveStreamStatus

-
-

See also

-

Source Protobuf File

-
-

Get the current livestream status (and optionally register for future status changes)

-

Response: NotifyLiveStreamStatus

-

Notification: NotifyLiveStreamStatus

- ------ - - - - - - - - - - - - - - - - - - - -

field

typespec

value

summary

register_live_stream_status

EnumRegisterLiveStreamStatus

1

Array of live stream statuses to be notified about

unregister_live_stream_status

EnumRegisterLiveStreamStatus

2

Array of live stream statuses to stop being notified about

-
-
-

RequestGetPresetStatus

-
-

See also

-

Source Protobuf File

-
-

Get the set of currently available presets and optionally register to be notified when it changes.

-

Response: NotifyPresetStatus sent immediately

-

Notification: NotifyPresetStatus sent periodically as preset status changes, if registered.

-

The preset status changes when:

-
    -
  • A client changes one of a preset’s captioned settings via the API

  • -
  • The user exits from a preset’s settings UI on the camera (e.g. long-press the preset pill and then press the back arrow)

  • -
  • The user creates/deletes/reorders a preset within a group

  • -
- ------ - - - - - - - - - - - - - - - - - - - -

field

typespec

value

summary

register_preset_status

EnumRegisterPresetStatus

1

Array of Preset statuses to be notified about

unregister_preset_status

EnumRegisterPresetStatus

2

Array of Preset statuses to stop being notified about

-
-
-

RequestReleaseNetwork

-
-

See also

-

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: ResponseGeneric

-
-
-

RequestSetCOHNSetting

-
-

See also

-

Source Protobuf File

-
-

Configure a COHN Setting

-

Returns a ResponseGeneric

- ------ - - - - - - - - - - - - - - -

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.
-
-
-
-
-

RequestSetCameraControlStatus

-
-

See also

-

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: ResponseGeneric

- ------ - - - - - - - - - - - - - - -

field

typespec

value

summary

camera_control_status

EnumCameraControlStatus

1

Declare who is taking control of the camera

-
-
-

RequestSetLiveStreamMode

-
-

See also

-

Source Protobuf File

-
-

Configure Live Streaming

-

Response: ResponseGeneric

- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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

EnumWindowSize

3

-
Resolution to use for live stream
-

-
The set of supported resolutions is only available from the live_stream_window_size_supported_array in 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

EnumLens

10

-
Lens to use for live stream
-

-
The set of supported lenses is only available from the live_stream_lens_supported_array in NotifyLiveStreamStatus)
-
-
-
-
-

RequestSetTurboActive

-
-

See also

-

Source Protobuf File

-
-

Enable/disable display of “Transferring Media” UI

-

Response: ResponseGeneric

- ------ - - - - - - - - - - - - - - -

field

typespec

value

summary

active

bool

1

Enable or disable Turbo Transfer feature

-
-
-

RequestStartScan

-
-

See also

-

Source Protobuf File

-
-

Start scanning for Access Points

-
-

Note

-

Serialization of this object is zero bytes.

-
-

Response: ResponseStartScanning are sent immediately after the camera receives this command

-

Notifications: NotifStartScanning are sent periodically as scanning state changes. Use to detect scan complete.

-
-
-

ResponseCOHNCert

-
-

See also

-

Source Protobuf File

-
-

COHN Certificate response triggered by RequestCOHNCert

- ------ - - - - - - - - - - - - - - - - - - - -

field

typespec

value

summary

result

EnumResultGeneric

1

Was request successful?

cert

string

2

Root CA cert (ASCII text)

-
-
-

ResponseConnect

-
-

See also

-

Source Protobuf File

-
-

The status of an attempt to connect to an Access Point

-

Sent as the initial response to RequestConnect

- ------ - - - - - - - - - - - - - - - - - - - - - - - - -

field

typespec

value

summary

result

EnumResultGeneric

1

Generic pass/fail/error info

provisioning_state

EnumProvisioning

2

Provisioning/connection state

timeout_seconds

int32

3

Network connection timeout (seconds)

-
-
-

ResponseConnectNew

-
-

See also

-

Source Protobuf File

-
-

The status of an attempt to connect to an Access Point

-

Sent as the initial response to RequestConnectNew

- ------ - - - - - - - - - - - - - - - - - - - - - - - - -

field

typespec

value

summary

result

EnumResultGeneric

1

Status of Connect New request

provisioning_state

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
-
-
-
-
-

ResponseGeneric

-
-

See also

-

Source Protobuf File

-
-

Generic Response used across many response / notification messages

- ------ - - - - - - - - - - - - - - -

field

typespec

value

summary

result

EnumResultGeneric

1

Generic pass/fail/error info

-
-
-

ResponseGetApEntries

-
-

See also

-

Source Protobuf File

-
-

A list of scan entries describing a scanned Access Point

-

This is sent in response to a RequestGetApEntries

- ------ - - - - - - - - - - - - - - - - - - - - - - - - -

field

typespec

value

summary

result

EnumResultGeneric

1

Generic pass/fail/error info

scan_id

int32

2

ID associated with this batch of results

entries

ResponseGetApEntries::ScanEntry

3

Array containing details about discovered APs

-
-
-

ResponseLastCapturedMedia

-
-

See also

-

Source Protobuf File

-
-

The Last Captured Media

-

Message is sent in response to a 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

  • -
- ------ - - - - - - - - - - - - - - - - - - - -

field

typespec

value

summary

result

EnumResultGeneric

1

Was the request successful?

media

Media

2

-
Last captured media if result is RESULT_SUCCESS. Invalid if result is RESULT_RESOURCE_NOT_AVAILBLE.
-
-
-
-
-

ResponseStartScanning

-
-

See also

-

Source Protobuf File

-
-

The current scanning state.

-

This is the initial response to a RequestStartScan

- ------ - - - - - - - - - - - - - - - - - - - -

field

typespec

value

summary

result

EnumResultGeneric

1

Generic pass/fail/error info

scanning_state

EnumScanning

2

Scanning state

-
-
-

ResponseGetApEntries::ScanEntry

-
-

See also

-

Source Protobuf File

-
-

An individual Scan Entry in a ResponseGetApEntries response

-
-

Note

-

When scan_entry_flags contains SCAN_FLAG_CONFIGURED, it is an indication that this network has already been provisioned.

-
- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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 EnumScanEntryFlags

-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/docs/ble/protocol/state_management.html b/docs/ble/protocol/state_management.html deleted file mode 100644 index 034a8d21..00000000 --- a/docs/ble/protocol/state_management.html +++ /dev/null @@ -1,463 +0,0 @@ ---- ---- - - - - - - - - State Management — Open GoPro BLE API 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

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 and Encoding Active 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 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 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/search.html b/docs/ble/search.html deleted file mode 100644 index 355307a0..00000000 --- a/docs/ble/search.html +++ /dev/null @@ -1,452 +0,0 @@ ---- ---- - - - - - - - Search — Open GoPro BLE API 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - -
  • -
  • -
-
-
-
-
- - - - -
- -
- -
-
- -
-
-
-
- - - - - - - - - \ No newline at end of file diff --git a/docs/ble/searchindex.js b/docs/ble/searchindex.js deleted file mode 100644 index 10f2a49f..00000000 --- a/docs/ble/searchindex.js +++ /dev/null @@ -1,4 +0,0 @@ -/* searchindex.js/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro). */ -/* This copyright was auto-generated on Fri Apr 19 17:22:39 UTC 2024 */ - -Search.setIndex({"alltitles": {"Access Point": [[0, "access-point"]], "Advertisements": [[11, "advertisements"]], "Anti-Flicker (134)": [[7, "anti-flicker-134"]], "Are Wireless Connections enabled? (17)": [[8, "are-wireless-connections-enabled-17"]], "Are current video settings mobile friendly? (related to video compression and frame rate) (78)": [[8, "are-current-video-settings-mobile-friendly-related-to-video-compression-and-frame-rate-78"]], "Aspect Ratio (108)": [[7, "aspect-ratio-108"]], "Aspect Ratio (192)": [[7, "aspect-ratio-192"]], "Auto Off (59)": [[7, "auto-off-59"]], "BLE Characteristics": [[11, "ble-characteristics"]], "BLE Setup": [[11, "ble-setup"]], "Bit Depth (183)": [[7, "bit-depth-183"]], "Bit Rate (182)": [[7, "bit-rate-182"]], "Camera Capabilities": [[7, "camera-capabilities"]], "Camera Control": [[15, "camera-control"]], "Camera Readiness": [[15, "camera-readiness"]], "Camera control over USB state (116)": [[8, "camera-control-over-usb-state-116"]], "Camera control status ID (114)": [[8, "camera-control-status-id-114"]], "Camera lens type (reflects changes to lens settings such as 162, 189, 194, \u2026) (105)": [[8, "camera-lens-type-reflects-changes-to-lens-settings-such-as-162-189-194-105"]], "Camera on the Home Network": [[1, "camera-on-the-home-network"]], "Certificates": [[1, "certificates"]], "Command IDs": [[13, "command-ids"]], "Commands": [[12, "commands"]], "Configure GATT Characteristics": [[11, "configure-gatt-characteristics"]], "Continuation Packets": [[12, "continuation-packets"]], "Control": [[2, "control"]], "Controls (175)": [[7, "controls-175"]], "Current Flatmode ID (89)": [[8, "current-flatmode-id-89"]], "Current Photo Preset (ID) (94)": [[8, "current-photo-preset-id-94"]], "Current Preset (ID) (97)": [[8, "current-preset-id-97"]], "Current Preset Group (ID) (corresponds to ui_mode_groups in settings.json) (96)": [[8, "current-preset-group-id-corresponds-to-ui-mode-groups-in-settings-json-96"]], "Current Time Lapse Preset (ID) (95)": [[8, "current-time-lapse-preset-id-95"]], "Current Video Preset (ID) (93)": [[8, "current-video-preset-id-93"]], "Data Protocol": [[12, "data-protocol"]], "Decipher Message Payload Type": [[12, "decipher-message-payload-type"]], "Digital Zoom level (percent) (75)": [[8, "digital-zoom-level-percent-75"]], "Disconnect from Access Point": [[0, "disconnect-from-access-point"]], "Display Mod Status (bitmasked) (110)": [[8, "display-mod-status-bitmasked-110"]], "Does sdcard meet specified minimum write speed? (111)": [[8, "does-sdcard-meet-specified-minimum-write-speed-111"]], "Does the camera currently have a GPS lock? (68)": [[8, "does-the-camera-currently-have-a-gps-lock-68"]], "Duration (172)": [[7, "duration-172"]], "EnumCOHNNetworkState": [[14, "enumcohnnetworkstate"]], "EnumCOHNStatus": [[14, "enumcohnstatus"]], "EnumCameraControlStatus": [[14, "enumcameracontrolstatus"]], "EnumFlatMode": [[14, "enumflatmode"]], "EnumLens": [[14, "enumlens"]], "EnumLiveStreamError": [[14, "enumlivestreamerror"]], "EnumLiveStreamStatus": [[14, "enumlivestreamstatus"]], "EnumPresetGroup": [[14, "enumpresetgroup"]], "EnumPresetGroupIcon": [[14, "enumpresetgroupicon"]], "EnumPresetIcon": [[14, "enumpreseticon"]], "EnumPresetTitle": [[14, "enumpresettitle"]], "EnumProvisioning": [[14, "enumprovisioning"]], "EnumRegisterLiveStreamStatus": [[14, "enumregisterlivestreamstatus"]], "EnumRegisterPresetStatus": [[14, "enumregisterpresetstatus"]], "EnumResultGeneric": [[14, "enumresultgeneric"]], "EnumScanEntryFlags": [[14, "enumscanentryflags"]], "EnumScanning": [[14, "enumscanning"]], "EnumWindowSize": [[14, "enumwindowsize"]], "Enums": [[14, "enums"]], "Extended (13-bit) Packets": [[12, "extended-13-bit-packets"]], "Extended (16-bit) Packets": [[12, "extended-16-bit-packets"]], "FOV (43)": [[7, "fov-43"]], "Finish Pairing": [[11, "finish-pairing"]], "Format (128)": [[7, "format-128"]], "Frames Per Second (3)": [[7, "frames-per-second-3"]], "Framing (193)": [[7, "framing-193"]], "GPS (83)": [[7, "gps-83"]], "General": [[9, "general"]], "General (5-bit) Packets": [[12, "general-5-bit-packets"]], "Getting Started": [[9, "getting-started"]], "Hilights": [[3, "hilights"]], "HindSight (167)": [[7, "hindsight-167"]], "Horizon Leveling (150)": [[7, "horizon-leveling-150"]], "Horizon Leveling (151)": [[7, "horizon-leveling-151"]], "How many minutes of video can be captured with current settings before sdcard is full (35)": [[8, "how-many-minutes-of-video-can-be-captured-with-current-settings-before-sdcard-is-full-35"]], "How many photos can be taken with current settings before sdcard is full (34)": [[8, "how-many-photos-can-be-taken-with-current-settings-before-sdcard-is-full-34"]], "Hypersmooth (135)": [[7, "hypersmooth-135"]], "ID Tables": [[13, "id-tables"]], "Internal battery level (percent) (70)": [[8, "internal-battery-level-percent-70"]], "Interval (171)": [[7, "interval-171"]], "Is 5GHz wireless band available? (81)": [[8, "is-5ghz-wireless-band-available-81"]], "Is AP mode enabled? (69)": [[8, "is-ap-mode-enabled-69"]], "Is Capture Delay currently active (i.e. counting down)? (101)": [[8, "is-capture-delay-currently-active-i-e-counting-down-101"]], "Is Digital Zoom feature available? (77)": [[8, "is-digital-zoom-feature-available-77"]], "Is LCD lock active? (11)": [[8, "is-lcd-lock-active-11"]], "Is Preview Stream enabled? (32)": [[8, "is-preview-stream-enabled-32"]], "Is Quick Capture feature enabled? (9)": [[8, "is-quick-capture-feature-enabled-9"]], "Is Scheduled Capture set? (108)": [[8, "is-scheduled-capture-set-108"]], "Is Turbo Transfer active? (113)": [[8, "is-turbo-transfer-active-113"]], "Is Video Hindsight Capture Active? (106)": [[8, "is-video-hindsight-capture-active-106"]], "Is a wireless remote control connected? (27)": [[8, "is-a-wireless-remote-control-connected-27"]], "Is locate camera feature active? (45)": [[8, "is-locate-camera-feature-active-45"]], "Is preview stream supported in current recording/mode/secondary-stream? (55)": [[8, "is-preview-stream-supported-in-current-recording-mode-secondary-stream-55"]], "Is the camera busy? (8)": [[8, "is-the-camera-busy-8"]], "Is the camera connected to a PC via USB? (115)": [[8, "is-the-camera-connected-to-a-pc-via-usb-115"]], "Is the camera currently in First Time Use (FTU) UI flow? (79)": [[8, "is-the-camera-currently-in-first-time-use-ftu-ui-flow-79"]], "Is the camera getting too cold to continue recording? (85)": [[8, "is-the-camera-getting-too-cold-to-continue-recording-85"]], "Is the internal battery charged sufficiently to start Over The Air (OTA) update? (83)": [[8, "is-the-internal-battery-charged-sufficiently-to-start-over-the-air-ota-update-83"]], "Is the system currently encoding? (10)": [[8, "is-the-system-currently-encoding-10"]], "Is the system currently overheating? (6)": [[8, "is-the-system-currently-overheating-6"]], "Is the system fully booted and ready to accept commands? (82)": [[8, "is-the-system-fully-booted-and-ready-to-accept-commands-82"]], "Is the system\u2019s Linux core active? (104)": [[8, "is-the-system-s-linux-core-active-104"]], "Is the system\u2019s internal battery present? (1)": [[8, "is-the-system-s-internal-battery-present-1"]], "Is there a pending request to cancel a firmware update download? (42)": [[8, "is-there-a-pending-request-to-cancel-a-firmware-update-download-42"]], "Is this camera model capable of zooming while encoding? (88)": [[8, "is-this-camera-model-capable-of-zooming-while-encoding-88"]], "JSON": [[7, "json"]], "Keep Alive": [[15, "keep-alive"]], "Lapse Mode (187)": [[7, "lapse-mode-187"]], "Lens (121)": [[7, "lens-121"]], "Lens (122)": [[7, "lens-122"]], "Lens (123)": [[7, "lens-123"]], "Limitations": [[9, "limitations"]], "Live Streaming": [[4, "live-streaming"]], "Liveview Exposure Select Mode (65)": [[8, "liveview-exposure-select-mode-65"]], "Liveview Exposure Select: y-coordinate (percent) (66)": [[8, "liveview-exposure-select-y-coordinate-percent-66"]], "Liveview Exposure Select: y-coordinate (percent) (67)": [[8, "liveview-exposure-select-y-coordinate-percent-67"]], "Max Lens Mod (189)": [[7, "max-lens-mod-189"]], "Max Lens Mod Enable (162)": [[7, "max-lens-mod-enable-162"]], "Max Lens Mod Enable (190)": [[7, "max-lens-mod-enable-190"]], "Media": [[14, "media"]], "Media Mod state (102)": [[8, "media-mod-state-102"]], "Message Payload": [[12, "message-payload"]], "Microphone Accessory status (74)": [[8, "microphone-accessory-status-74"]], "Night Photo (177)": [[7, "night-photo-177"]], "NotifProvisioningState": [[14, "notifprovisioningstate"]], "NotifStartScanning": [[14, "notifstartscanning"]], "NotifyCOHNStatus": [[14, "notifycohnstatus"]], "NotifyLiveStreamStatus": [[14, "notifylivestreamstatus"]], "NotifyPresetStatus": [[14, "notifypresetstatus"]], "Number of sdcard write speed errors since device booted (112)": [[8, "number-of-sdcard-write-speed-errors-since-device-booted-112"]], "Operations": [[0, "operations"], [1, "operations"], [2, "operations"], [3, "operations"], [4, "operations"], [5, "operations"], [6, "operations"], [7, "operations"]], "Packet Headers": [[12, "packet-headers"]], "Packetization": [[12, "packetization"]], "Pairing Mode": [[11, "pairing-mode"]], "Photo Mode (191)": [[7, "photo-mode-191"]], "Photo interval capture count (118)": [[8, "photo-interval-capture-count-118"]], "Preset": [[14, "preset"]], "Preset Groups": [[5, "preset-groups"]], "Preset Modified Status": [[5, "preset-modified-status"]], "Preset Modified Status, which contains an event ID and a Preset (Group) ID (98)": [[8, "preset-modified-status-which-contains-an-event-id-and-a-preset-group-id-98"]], "PresetGroup": [[14, "presetgroup"]], "PresetSetting": [[14, "presetsetting"]], "Presets": [[5, "presets"]], "Primary Storage Status (33)": [[8, "primary-storage-status-33"]], "Profiles (184)": [[7, "profiles-184"]], "Protobuf": [[12, "protobuf"]], "Protobuf Documentation": [[14, "protobuf-documentation"]], "Protobuf IDs": [[13, "protobuf-ids"]], "Protocol": [[10, "protocol"]], "Provisioning Procedure": [[1, "provisioning-procedure"]], "Queries": [[12, "queries"]], "Query": [[6, "query"]], "Query IDs": [[13, "query-ids"]], "Remaining space on the sdcard in Kilobytes (54)": [[8, "remaining-space-on-the-sdcard-in-kilobytes-54"]], "RequestCOHNCert": [[14, "requestcohncert"]], "RequestClearCOHNCert": [[14, "requestclearcohncert"]], "RequestConnect": [[14, "requestconnect"]], "RequestConnectNew": [[14, "requestconnectnew"]], "RequestCreateCOHNCert": [[14, "requestcreatecohncert"]], "RequestCustomPresetUpdate": [[14, "requestcustompresetupdate"]], "RequestGetApEntries": [[14, "requestgetapentries"]], "RequestGetCOHNStatus": [[14, "requestgetcohnstatus"]], "RequestGetLastCapturedMedia": [[14, "requestgetlastcapturedmedia"]], "RequestGetLiveStreamStatus": [[14, "requestgetlivestreamstatus"]], "RequestGetPresetStatus": [[14, "requestgetpresetstatus"]], "RequestReleaseNetwork": [[14, "requestreleasenetwork"]], "RequestSetCOHNSetting": [[14, "requestsetcohnsetting"]], "RequestSetCameraControlStatus": [[14, "requestsetcameracontrolstatus"]], "RequestSetLiveStreamMode": [[14, "requestsetlivestreammode"]], "RequestSetTurboActive": [[14, "requestsetturboactive"]], "RequestStartScan": [[14, "requeststartscan"]], "Resolution (2)": [[7, "resolution-2"]], "ResponseCOHNCert": [[14, "responsecohncert"]], "ResponseConnect": [[14, "responseconnect"]], "ResponseConnectNew": [[14, "responseconnectnew"]], "ResponseGeneric": [[14, "responsegeneric"]], "ResponseGetApEntries": [[14, "responsegetapentries"]], "ResponseGetApEntries::ScanEntry": [[14, "responsegetapentries-scanentry"]], "ResponseLastCapturedMedia": [[14, "responselastcapturedmedia"]], "ResponseStartScanning": [[14, "responsestartscanning"]], "Rotational orientation of the camera (86)": [[8, "rotational-orientation-of-the-camera-86"]], "Rough approximation of internal battery level in bars (or charging) (2)": [[8, "rough-approximation-of-internal-battery-level-in-bars-or-charging-2"]], "SSID of the AP the camera is currently connected to. On BLE connection, value is big-endian byte-encoded int32 (29)": [[8, "ssid-of-the-ap-the-camera-is-currently-connected-to-on-ble-connection-value-is-big-endian-byte-encoded-int32-29"]], "Scheduled Capture Preset ID (107)": [[8, "scheduled-capture-preset-id-107"]], "Send Messages": [[11, "send-messages"]], "Setting IDs": [[7, "setting-ids"], [13, "setting-ids"]], "Settings": [[7, "settings"]], "Speed (176)": [[7, "speed-176"]], "State Management": [[15, "state-management"]], "State of current scan for WiFi Access Points (22)": [[8, "state-of-current-scan-for-wifi-access-points-22"]], "Status IDs": [[8, "status-ids"], [13, "status-ids"]], "Statuses": [[8, "statuses"]], "Supported Cameras": [[9, "supported-cameras"]], "The camera\u2019s WiFi SSID. On BLE connection, value is big-endian byte-encoded int32 (30)": [[8, "the-camera-s-wifi-ssid-on-ble-connection-value-is-big-endian-byte-encoded-int32-30"]], "The current status of Over The Air (OTA) update (41)": [[8, "the-current-status-of-over-the-air-ota-update-41"]], "The current timelapse interval countdown value (e.g. 5\u20264\u20263\u20262\u20261\u2026) (49)": [[8, "the-current-timelapse-interval-countdown-value-e-g-5-4-3-2-1-49"]], "The last type of pairing in which the camera was engaged (20)": [[8, "the-last-type-of-pairing-in-which-the-camera-was-engaged-20"]], "The minimum time between camera status updates (milliseconds). Best practice is to not poll for status more often than this (60)": [[8, "the-minimum-time-between-camera-status-updates-milliseconds-best-practice-is-to-not-poll-for-status-more-often-than-this-60"]], "The number of Live Bursts can be captured with current settings before sdcard is full (99)": [[8, "the-number-of-live-bursts-can-be-captured-with-current-settings-before-sdcard-is-full-99"]], "The number of hilights in currently-encoding video (value is set to 0 when encoding stops) (58)": [[8, "the-number-of-hilights-in-currently-encoding-video-value-is-set-to-0-when-encoding-stops-58"]], "The number of wireless devices connected to the camera (31)": [[8, "the-number-of-wireless-devices-connected-to-the-camera-31"]], "The pairing state of the camera (19)": [[8, "the-pairing-state-of-the-camera-19"]], "Time Warp Speed (103)": [[8, "time-warp-speed-103"]], "Time since boot (milliseconds) of last successful pairing complete action (21)": [[8, "time-since-boot-milliseconds-of-last-successful-pairing-complete-action-21"]], "Time since boot (milliseconds) of most recent hilight in encoding video (set to 0 when encoding stops) (59)": [[8, "time-since-boot-milliseconds-of-most-recent-hilight-in-encoding-video-set-to-0-when-encoding-stops-59"]], "Time since boot (milliseconds) that the WiFi Access Point scan completed (23)": [[8, "time-since-boot-milliseconds-that-the-wifi-access-point-scan-completed-23"]], "Total SD card capacity in Kilobytes (117)": [[8, "total-sd-card-capacity-in-kilobytes-117"]], "Total number of Live Bursts on sdcard (100)": [[8, "total-number-of-live-bursts-on-sdcard-100"]], "Total number of photos on sdcard (38)": [[8, "total-number-of-photos-on-sdcard-38"]], "Total number of videos on sdcard (39)": [[8, "total-number-of-videos-on-sdcard-39"]], "Trail Length (179)": [[7, "trail-length-179"]], "Type Length Value": [[12, "type-length-value"]], "Verifying Certificate": [[1, "verifying-certificate"]], "Video Mode (180)": [[7, "video-mode-180"]], "Video Mode (186)": [[7, "video-mode-186"]], "Video Performance Modes (173)": [[7, "video-performance-modes-173"]], "View Certificate Details": [[1, "view-certificate-details"]], "Welcome to Open GoPro BLE API\u2019s documentation!": [[9, "welcome-to-open-gopro-ble-api-s-documentation"]], "When encoding video, this is the duration (seconds) of the video so far; 0 otherwise (13)": [[8, "when-encoding-video-this-is-the-duration-seconds-of-the-video-so-far-0-otherwise-13"]], "Wi-fi Band (178)": [[7, "wi-fi-band-178"]], "WiFi AP provisioning state (24)": [[8, "wifi-ap-provisioning-state-24"]], "WiFi signal strength in bars (56)": [[8, "wifi-signal-strength-in-bars-56"]], "Wireless Band (76)": [[8, "wireless-band-76"]], "Wireless Pairing State. Each bit contains state information (see WirelessPairingStateFlags) (28)": [[8, "wireless-pairing-state-each-bit-contains-state-information-see-wirelesspairingstateflags-28"]], "Wireless remote control version (26)": [[8, "wireless-remote-control-version-26"]], "XLSX": [[7, "xlsx"]]}, "docnames": ["features/access_points", "features/cohn", "features/control", "features/hilights", "features/live_streaming", "features/presets", "features/query", "features/settings", "features/statuses", "index", "protocol", "protocol/ble_setup", "protocol/data_protocol", "protocol/id_tables", "protocol/protobuf", "protocol/state_management"], "envversion": {"sphinx": 61, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2}, "filenames": ["features/access_points.rst", "features/cohn.rst", "features/control.rst", "features/hilights.rst", "features/live_streaming.rst", "features/presets.rst", "features/query.rst", "features/settings.rst", "features/statuses.rst", "index.rst", "protocol.rst", "protocol/ble_setup.rst", "protocol/data_protocol.rst", "protocol/id_tables.rst", "protocol/protobuf.rst", "protocol/state_management.rst"], "indexentries": {}, "objects": {"": [[14, 0, 0, "enumcohnnetworkstate", "EnumCOHNNetworkState"], [14, 0, 0, "enumcohnstatus", "EnumCOHNStatus"], [14, 0, 0, "enumcameracontrolstatus", "EnumCameraControlStatus"], [14, 0, 0, "enumflatmode", "EnumFlatMode"], [14, 0, 0, "enumlens", "EnumLens"], [14, 0, 0, "enumlivestreamerror", "EnumLiveStreamError"], [14, 0, 0, "enumlivestreamstatus", "EnumLiveStreamStatus"], [14, 0, 0, "enumpresetgroup", "EnumPresetGroup"], [14, 0, 0, "enumpresetgroupicon", "EnumPresetGroupIcon"], [14, 0, 0, "enumpreseticon", "EnumPresetIcon"], [14, 0, 0, "enumpresettitle", "EnumPresetTitle"], [14, 0, 0, "enumprovisioning", "EnumProvisioning"], [14, 0, 0, "enumregisterlivestreamstatus", "EnumRegisterLiveStreamStatus"], [14, 0, 0, "enumregisterpresetstatus", "EnumRegisterPresetStatus"], [14, 0, 0, "enumresultgeneric", "EnumResultGeneric"], [14, 0, 0, "enumscanentryflags", "EnumScanEntryFlags"], [14, 0, 0, "enumscanning", "EnumScanning"], [14, 0, 0, "enumwindowsize", "EnumWindowSize"], [14, 0, 0, "media", "Media"], [14, 0, 0, "notifprovisioningstate", "NotifProvisioningState"], [14, 0, 0, "notifstartscanning", "NotifStartScanning"], [14, 0, 0, "notifycohnstatus", "NotifyCOHNStatus"], [14, 0, 0, "notifylivestreamstatus", "NotifyLiveStreamStatus"], [14, 0, 0, "notifypresetstatus", "NotifyPresetStatus"], [14, 0, 0, "preset", "Preset"], [14, 0, 0, "presetgroup", "PresetGroup"], [14, 0, 0, "presetsetting", "PresetSetting"], [14, 0, 0, "requestcohncert", "RequestCOHNCert"], [14, 0, 0, "requestclearcohncert", "RequestClearCOHNCert"], [14, 0, 0, "requestconnect", "RequestConnect"], [14, 0, 0, "requestconnectnew", "RequestConnectNew"], [14, 0, 0, "requestcreatecohncert", "RequestCreateCOHNCert"], [14, 0, 0, "requestcustompresetupdate", "RequestCustomPresetUpdate"], [14, 0, 0, "requestgetapentries", "RequestGetApEntries"], [14, 0, 0, "requestgetcohnstatus", "RequestGetCOHNStatus"], [14, 0, 0, "requestgetlastcapturedmedia", "RequestGetLastCapturedMedia"], [14, 0, 0, "requestgetlivestreamstatus", "RequestGetLiveStreamStatus"], [14, 0, 0, "requestgetpresetstatus", "RequestGetPresetStatus"], [14, 0, 0, "requestreleasenetwork", "RequestReleaseNetwork"], [14, 0, 0, "requestsetcohnsetting", "RequestSetCOHNSetting"], [14, 0, 0, "requestsetcameracontrolstatus", "RequestSetCameraControlStatus"], [14, 0, 0, "requestsetlivestreammode", "RequestSetLiveStreamMode"], [14, 0, 0, "requestsetturboactive", "RequestSetTurboActive"], [14, 0, 0, "requeststartscan", "RequestStartScan"], [14, 0, 0, "responsecohncert", "ResponseCOHNCert"], [14, 0, 0, "responseconnect", "ResponseConnect"], [14, 0, 0, "responseconnectnew", "ResponseConnectNew"], [14, 0, 0, "responsegeneric", "ResponseGeneric"], [14, 0, 0, "responsegetapentries", "ResponseGetApEntries"], [14, 0, 0, "responselastcapturedmedia", "ResponseLastCapturedMedia"], [14, 0, 0, "responsestartscanning", "ResponseStartScanning"], [14, 0, 0, "scanentry", "ScanEntry"], [1, 1, 0, "clear-cohn-certificate", "clear cohn certificate"], [0, 1, 0, "connect-to-a-new-access-point", "connect to a new access point"], [0, 1, 0, "connect-to-provisioned-access-point", "connect to provisioned access point"], [1, 1, 0, "create-cohn-certificate", "create cohn certificate"], [0, 1, 0, "get-ap-scan-results", "get ap scan results"], [5, 1, 0, "get-available-presets", "get available presets"], [1, 1, 0, "get-cohn-certificate", "get cohn certificate"], [1, 1, 0, "get-cohn-status", "get cohn status"], [6, 1, 0, "get-date-time", "get date time"], [6, 1, 0, "get-hardware-info", "get hardware info"], [6, 1, 0, "get-last-captured-media", "get last captured media"], [4, 1, 0, "get-livestream-status", "get livestream status"], [6, 1, 0, "get-local-date-time", "get local date time"], [6, 1, 0, "get-open-gopro-version", "get open gopro version"], [6, 1, 0, "get-setting-capabilities", "get setting capabilities"], [6, 1, 0, "get-setting-values", "get setting values"], [6, 1, 0, "get-status-values", "get status values"], [3, 1, 0, "hilight-moment", "hilight moment"], [2, 1, 0, "keep-alive", "keep alive"], [5, 1, 0, "load-preset", "load preset"], [5, 1, 0, "load-preset-group", "load preset group"], [6, 1, 0, "register-for-setting-capability-updates", "register for setting capability updates"], [6, 1, 0, "register-for-setting-value-updates", "register for setting value updates"], [6, 1, 0, "register-for-status-value-updates", "register for status value updates"], [0, 1, 0, "scan-for-access-points", "scan for access points"], [2, 1, 0, "set-analytics", "set analytics"], [2, 1, 0, "set-ap-control", "set ap control"], [2, 1, 0, "set-camera-control", "set camera control"], [1, 1, 0, "set-cohn-setting", "set cohn setting"], [2, 1, 0, "set-date-time", "set date time"], [4, 1, 0, "set-livestream-mode", "set livestream mode"], [2, 1, 0, "set-local-date-time", "set local date time"], [7, 1, 0, "set-setting", "set setting"], [2, 1, 0, "set-shutter", "set shutter"], [2, 1, 0, "set-turbo-transfer", "set turbo transfer"], [2, 1, 0, "sleep", "sleep"], [6, 1, 0, "unregister-for-setting-capability-updates", "unregister for setting capability updates"], [6, 1, 0, "unregister-for-setting-value-updates", "unregister for setting value updates"], [6, 1, 0, "unregister-for-status-value-updates", "unregister for status value updates"], [5, 1, 0, "update-custom-preset", "update custom preset"], [7, 2, 0, "setting-108", "Setting 108 (Aspect Ratio)"], [7, 2, 0, "setting-121", "Setting 121 (Lens)"], [7, 2, 0, "setting-122", "Setting 122 (Lens)"], [7, 2, 0, "setting-123", "Setting 123 (Time Lapse Digital Lenses)"], [7, 2, 0, "setting-128", "Setting 128 (Media Format)"], [7, 2, 0, "setting-134", "Setting 134 (Anti-Flicker)"], [7, 2, 0, "setting-135", "Setting 135 (Hypersmooth)"], [7, 2, 0, "setting-150", "Setting 150 (Horizon Leveling)"], [7, 2, 0, "setting-151", "Setting 151 (Horizon Leveling)"], [7, 2, 0, "setting-162", "Setting 162 (Max Lens)"], [7, 2, 0, "setting-167", "Setting 167 (HindSight)"], [7, 2, 0, "setting-171", "Setting 171 (Interval)"], [7, 2, 0, "setting-172", "Setting 172 (Duration)"], [7, 2, 0, "setting-173", "Setting 173 (Video Performance Mode)"], [7, 2, 0, "setting-175", "Setting 175 (Controls)"], [7, 2, 0, "setting-176", "Setting 176 (Easy Mode Speed)"], [7, 2, 0, "setting-177", "Setting 177 (Enable Night Photo)"], [7, 2, 0, "setting-178", "Setting 178 (Wireless Band)"], [7, 2, 0, "setting-179", "Setting 179 (Trail Length)"], [7, 2, 0, "setting-180", "Setting 180 (Video Mode)"], [7, 2, 0, "setting-182", "Setting 182 (Bit Rate)"], [7, 2, 0, "setting-183", "Setting 183 (Bit Depth)"], [7, 2, 0, "setting-184", "Setting 184 (Profiles)"], [7, 2, 0, "setting-186", "Setting 186 (Video Mode)"], [7, 2, 0, "setting-187", "Setting 187 (Lapse Mode)"], [7, 2, 0, "setting-189", "Setting 189 (Max Lens Mod)"], [7, 2, 0, "setting-190", "Setting 190 (Max Lens Mod Enable)"], [7, 2, 0, "setting-191", "Setting 191 (Photo Mode)"], [7, 2, 0, "setting-192", "Setting 192 (Aspect Ratio)"], [7, 2, 0, "setting-193", "Setting 193 (Framing)"], [7, 2, 0, "setting-2", "Setting 2 (Resolution)"], [7, 2, 0, "setting-3", "Setting 3 (Frames Per Second)"], [7, 2, 0, "setting-43", "Setting 43 (Webcam Digital Lenses)"], [7, 2, 0, "setting-59", "Setting 59 (Auto Power Down)"], [7, 2, 0, "setting-83", "Setting 83 (GPS)"], [8, 3, 0, "status-1", "Status 1 (Is the system's internal battery present?)"], [8, 3, 0, "status-10", "Status 10 (Is the system currently encoding?)"], [8, 3, 0, "status-100", "Status 100 (Total number of Live Bursts on sdcard)"], [8, 3, 0, "status-102", "Status 102 (Media Mod state)"], [8, 3, 0, "status-103", "Status 103 (Time Warp Speed)"], [8, 3, 0, "status-104", "Status 104 (Is the system's Linux core active?)"], [8, 3, 0, "status-106", "Status 106 (Is Video Hindsight Capture Active?)"], [8, 3, 0, "status-107", "Status 107 (Scheduled Capture Preset ID)"], [8, 3, 0, "status-108", "Status 108 (Is Scheduled Capture set?)"], [8, 3, 0, "status-11", "Status 11 (Is LCD lock active?)"], [8, 3, 0, "status-110", "Status 110 (Display Mod Status (bitmasked))"], [8, 3, 0, "status-111", "Status 111 (Does sdcard meet specified minimum write speed?)"], [8, 3, 0, "status-112", "Status 112 (Number of sdcard write speed errors since device booted)"], [8, 3, 0, "status-113", "Status 113 (Is Turbo Transfer active?)"], [8, 3, 0, "status-114", "Status 114 (Camera control status ID)"], [8, 3, 0, "status-115", "Status 115 (Is the camera connected to a PC via USB?)"], [8, 3, 0, "status-116", "Status 116 (Camera control over USB state)"], [8, 3, 0, "status-117", "Status 117 (Total SD card capacity in Kilobytes)"], [8, 3, 0, "status-118", "Status 118 (Photo interval capture count)"], [8, 3, 0, "status-13", "Status 13 (When encoding video, this is the duration (seconds) of the video so far; 0 otherwise)"], [8, 3, 0, "status-17", "Status 17 (Are Wireless Connections enabled?)"], [8, 3, 0, "status-19", "Status 19 (The pairing state of the camera)"], [8, 3, 0, "status-2", "Status 2 (Rough approximation of internal battery level in bars (or charging))"], [8, 3, 0, "status-20", "Status 20 (The last type of pairing in which the camera was engaged)"], [8, 3, 0, "status-21", "Status 21 (Time since boot (milliseconds) of last successful pairing complete action)"], [8, 3, 0, "status-22", "Status 22 (State of current scan for WiFi Access Points)"], [8, 3, 0, "status-23", "Status 23 (Time since boot (milliseconds) that the WiFi Access Point scan completed)"], [8, 3, 0, "status-24", "Status 24 (WiFi AP provisioning state)"], [8, 3, 0, "status-26", "Status 26 (Wireless remote control version)"], [8, 3, 0, "status-27", "Status 27 (Is a wireless remote control connected?)"], [8, 3, 0, "status-31", "Status 31 (The number of wireless devices connected to the camera)"], [8, 3, 0, "status-32", "Status 32 (Is Preview Stream enabled?)"], [8, 3, 0, "status-33", "Status 33 (Primary Storage Status)"], [8, 3, 0, "status-34", "Status 34 (How many photos can be taken with current settings before sdcard is full)"], [8, 3, 0, "status-35", "Status 35 (How many minutes of video can be captured with current settings before sdcard is full)"], [8, 3, 0, "status-38", "Status 38 (Total number of photos on sdcard)"], [8, 3, 0, "status-39", "Status 39 (Total number of videos on sdcard)"], [8, 3, 0, "status-41", "Status 41 (The current status of Over The Air (OTA) update)"], [8, 3, 0, "status-42", "Status 42 (Is there a pending request to cancel a firmware update download?)"], [8, 3, 0, "status-45", "Status 45 (Is locate camera feature active?)"], [8, 3, 0, "status-54", "Status 54 (Remaining space on the sdcard in Kilobytes)"], [8, 3, 0, "status-55", "Status 55 (Is preview stream supported in current recording/mode/secondary-stream?)"], [8, 3, 0, "status-56", "Status 56 (WiFi signal strength in bars)"], [8, 3, 0, "status-58", "Status 58 (The number of hilights in currently-encoding video (value is set to 0 when encoding stops))"], [8, 3, 0, "status-59", "Status 59 (Time since boot (milliseconds) of most recent hilight in encoding video (set to 0 when encoding stops))"], [8, 3, 0, "status-6", "Status 6 (Is the system currently overheating?)"], [8, 3, 0, "status-65", "Status 65 (Liveview Exposure Select Mode)"], [8, 3, 0, "status-66", "Status 66 (Liveview Exposure Select: y-coordinate (percent))"], [8, 3, 0, "status-67", "Status 67 (Liveview Exposure Select: y-coordinate (percent))"], [8, 3, 0, "status-68", "Status 68 (Does the camera currently have a GPS lock?)"], [8, 3, 0, "status-69", "Status 69 (Is AP mode enabled?)"], [8, 3, 0, "status-70", "Status 70 (Internal battery level (percent))"], [8, 3, 0, "status-74", "Status 74 (Microphone Accessory status)"], [8, 3, 0, "status-75", "Status 75 (Digital Zoom level (percent))"], [8, 3, 0, "status-76", "Status 76 (Wireless Band)"], [8, 3, 0, "status-77", "Status 77 (Is Digital Zoom feature available?)"], [8, 3, 0, "status-78", "Status 78 (Are current video settings mobile friendly? (related to video compression and frame rate))"], [8, 3, 0, "status-79", "Status 79 (Is the camera currently in First Time Use (FTU) UI flow?)"], [8, 3, 0, "status-8", "Status 8 (Is the camera busy?)"], [8, 3, 0, "status-81", "Status 81 (Is 5GHz wireless band available?)"], [8, 3, 0, "status-82", "Status 82 (Is the system fully booted and ready to accept commands?)"], [8, 3, 0, "status-83", "Status 83 (Is the internal battery charged sufficiently to start Over The Air (OTA) update?)"], [8, 3, 0, "status-85", "Status 85 (Is the camera getting too cold to continue recording?)"], [8, 3, 0, "status-86", "Status 86 (Rotational orientation of the camera)"], [8, 3, 0, "status-88", "Status 88 (Is this camera model capable of zooming while encoding?)"], [8, 3, 0, "status-89", "Status 89 (Current Flatmode ID)"], [8, 3, 0, "status-9", "Status 9 (Is Quick Capture feature enabled?)"], [8, 3, 0, "status-93", "Status 93 (Current Video Preset (ID))"], [8, 3, 0, "status-94", "Status 94 (Current Photo Preset (ID))"], [8, 3, 0, "status-95", "Status 95 (Current Time Lapse Preset (ID))"], [8, 3, 0, "status-97", "Status 97 (Current Preset (ID))"], [8, 3, 0, "status-98", "Status 98 (Preset Modified Status, which contains an event ID and a Preset (Group) ID)"], [8, 3, 0, "status-99", "Status 99 (The number of Live Bursts can be captured with current settings before sdcard is full)"]], "Status 101 (Is Capture Delay currently active (i.e": [[8, 3, 0, "status-101", " counting down)?)"]], "Status 105 (Camera lens type (reflects changes to lens settings such as 162, 189, 194, ..": [[8, 3, 0, "status-105", "))"]], "Status 28 (Wireless Pairing State": [[8, 3, 0, "status-28", " Each bit contains state information (see WirelessPairingStateFlags))"]], "Status 29 (SSID of the AP the camera is currently connected to": [[8, 3, 0, "status-29", " On BLE connection, value is big-endian byte-encoded int32)"]], "Status 30 (The camera's WiFi SSID": [[8, 3, 0, "status-30", " On BLE connection, value is big-endian byte-encoded int32)"]], "Status 49 (The current timelapse interval countdown value (e.g. 5...4...3...2...1..": [[8, 3, 0, "status-49", "))"]], "Status 60 (The minimum time between camera status updates (milliseconds)": [[8, 3, 0, "status-60", " Best practice is to not poll for status more often than this)"]], "Status 96 (Current Preset Group (ID) (corresponds to ui_mode_groups in settings": [[8, 3, 0, "status-96", "json))"]]}, "objnames": {"0": ["operation", "Proto", "Proto"], "1": ["operation", "Operation", "Operation"], "2": ["operation", "Setting", "Setting"], "3": ["operation", "Status", "Status"]}, "objtypes": {"0": "operation:Proto", "1": "operation:Operation", "2": "operation:Setting", "3": "operation:Status"}, "terms": {"": [1, 2, 4, 5, 6, 7, 11, 12, 13, 14, 15], "0": [2, 6, 7, 12, 13, 14], "00": [2, 9, 12], "000": 8, "0001": 11, "0002": 11, "0002a5d5c51b": 11, "0003": 11, "0004": 11, "0005": 11, "001": 8, "0072": [11, 12], "0073": 11, "0074": [11, 12], "0075": 11, "0076": [11, 12], "0077": 11, "0090": 11, "0091": 11, "0092": 11, "01": [2, 6, 9, 12], "010": 8, "011": 8, "02": 2, "03": [2, 9], "04": 2, "05": 2, "07": 2, "0x0": 12, "0x01": [2, 13], "0x02": [0, 13], "0x03": [0, 13], "0x04": [0, 13], "0x05": [0, 2, 13], "0x0b": [0, 13], "0x0c": [0, 13], "0x0d": [2, 13], "0x0e": [6, 13], "0x0f": [2, 13], "0x10": [6, 13], "0x12": [6, 13], "0x13": [6, 13], "0x17": [2, 13], "0x18": [3, 13], "0x32": [6, 13], "0x3c": [6, 13], "0x3e": [5, 13], "0x40": [5, 13], "0x42": 2, "0x50": [2, 13], "0x51": [6, 13], "0x52": [6, 13], "0x53": [6, 13], "0x5b": [2, 13], "0x62": [6, 13], "0x64": [5, 13], "0x65": [1, 13], "0x66": [1, 13], "0x67": [1, 13], "0x69": [2, 13], "0x6b": [2, 13], "0x6d": [6, 13], "0x6e": [1, 13], "0x6f": [1, 13], "0x72": [5, 6, 13], "0x73": [6, 13], "0x74": [4, 13], "0x79": [4, 13], "0x82": [0, 6, 13], "0x83": [0, 13], "0x84": [0, 13], "0x85": [0, 13], "0x92": [6, 13], "0x93": [6, 13], "0xa2": [6, 13], "0xe4": [5, 13], "0xe5": [1, 13], "0xe6": [1, 13], "0xe7": [1, 13], "0xe9": [2, 13], "0xeb": [2, 13], "0xed": [6, 13], "0xee": [1, 13], "0xef": [1, 13], "0xf": 12, "0xf1": [1, 2, 4, 5, 13], "0xf2": [5, 13], "0xf3": [5, 13], "0xf4": [4, 13], "0xf5": [1, 4, 5, 6, 13], "0xf9": [4, 13], "0xfea6": 11, "1": [1, 2, 6, 7, 12, 13, 14], "10": [2, 7, 9, 12, 13, 14], "100": [7, 13], "1000": 14, "1001": 14, "1002": 14, "101": [7, 13], "102": [7, 13], "103": [7, 13], "104": [7, 13], "105": [7, 13], "106": [7, 13], "107": [7, 13], "108": 13, "1080": 7, "109": 7, "10x": 8, "11": [6, 7, 13, 14], "110": [7, 13], "111": [7, 13], "112": [7, 13], "113": [7, 13], "114": [2, 7, 13, 14], "115": [7, 13], "116": [7, 13], "117": [7, 13], "118": [7, 13], "119": 7, "11e3": 11, "12": [2, 6, 7, 8, 14], "120": 7, "121": 13, "122": 13, "123": 13, "124": 7, "125": 7, "126": 7, "127": 7, "128": [11, 13], "129": 7, "13": [7, 13, 14], "130": 7, "131": 7, "132": 7, "133": 7, "134": 13, "135": 13, "136": 7, "137": 7, "14": [7, 14], "1440": 7, "15": [7, 14], "150": 13, "150x": 8, "151": 13, "15min": 15, "15x": 8, "16": [7, 14], "162": [5, 13], "167": 13, "17": [7, 13, 14], "171": 13, "172": 13, "173": [5, 13], "175": [5, 13], "176": 13, "177": [5, 13], "178": 13, "179": 13, "18": [7, 14], "180": [5, 8, 13], "1800x": 8, "182": 13, "183": 13, "184": 13, "186": [5, 13], "187": [5, 13], "189": [5, 13], "19": [7, 13, 14], "190": [5, 13], "191": [5, 13], "192": 13, "193": 13, "194": 13, "1f": 2, "1x": [7, 8], "2": [12, 13, 14], "20": [7, 12, 13, 14], "200": 7, "2023": 2, "21": [7, 13, 14], "22": [7, 13, 14], "23": [2, 6, 7, 13, 14], "24": [7, 13, 14], "240": 7, "240fp": 7, "25": [7, 14], "255": 12, "26": [7, 13, 14], "2674f7f65f78": 6, "27": [7, 13, 14], "270": 8, "28": [7, 13, 14], "29": [13, 14], "2x": [7, 8], "3": [2, 12, 13, 14], "30": [7, 13, 14], "300x": 8, "30min": 15, "30x": 8, "31": [2, 6, 12, 13, 14], "32": [13, 14], "33": [13, 14], "34": [13, 14], "35": [13, 14], "36": 14, "37": 14, "38": [13, 14], "39": [13, 14], "3k": 7, "4": [7, 12, 13, 14], "40": 14, "41": [13, 14], "42": [13, 14], "43": 13, "45": 13, "49": 13, "4ghz": 7, "4k": 7, "4x": 7, "5": [7, 13, 14], "50": 7, "50hz": 7, "54": 13, "55": [9, 13], "56": [6, 13], "57": 9, "58": [9, 13, 14], "59": [2, 6, 13, 14], "5ghz": [7, 13], "5k": 7, "5min": 15, "5x": 8, "6": [6, 7, 12, 13, 14], "60": [7, 9, 13, 14], "60hz": 7, "60x": 8, "61": 14, "62": [9, 14], "63": [2, 14], "64": 14, "65": [13, 14], "66": [13, 14], "67": [13, 14], "68": [13, 14], "69": [13, 14], "7": [2, 7, 8, 12, 14], "70": [9, 13, 14], "71": 14, "72": 14, "73": 14, "74": [13, 14], "75": [13, 14], "76": [13, 14], "77": [13, 14], "78": [13, 14], "79": [13, 14], "7k": 7, "8": [7, 11, 13, 14], "81": 13, "8191": 12, "8192": 12, "82": [13, 14], "83": [13, 14], "85": [13, 14], "86": 13, "88": [2, 13], "89": 13, "8x": 7, "9": [7, 13, 14], "90": 8, "900x": 8, "9046": 11, "93": [13, 14], "94": [5, 13, 14], "95": 13, "96": 13, "97": 13, "98": [5, 13], "99": [6, 13], "A": [0, 1, 5, 7, 12, 14, 15], "As": [4, 14], "At": 1, "For": [1, 2, 4, 7, 9, 11, 12, 15], "If": [2, 6, 7, 11, 12, 14, 15], "In": [1, 2, 7, 11, 12, 15], "It": 12, "NOT": 14, "No": [8, 14], "Not": [8, 14], "ON": [7, 11], "On": [0, 1, 2, 7, 13, 14], "One": 8, "The": [0, 1, 2, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14], "Then": 9, "There": 12, "These": 7, "To": [0, 5, 8, 12], "aa8d": 11, "abil": 4, "abort": 8, "about": [1, 2, 4, 6, 14], "abov": [2, 6, 7, 9], "accept": [4, 13, 14, 15], "access": [1, 2, 4, 9, 11, 13, 14], "accessori": 13, "accommod": 12, "accomplish": [4, 12], "accordingli": [2, 14], "accumul": 12, "across": [1, 2, 4, 5, 14], "act": 1, "action": [0, 1, 2, 4, 5, 6, 12, 13], "activ": [5, 9, 13, 14, 15], "adapt": 14, "add": [3, 14], "addit": [4, 14], "addition": [1, 9, 14], "address": [1, 14], "adher": 7, "advertis": [2, 10, 14], "affect": 5, "after": [0, 2, 11, 12, 14, 15], "again": 11, "air": 13, "aliv": [2, 10, 13], "all": [1, 2, 6, 11, 12], "allow": [1, 11], "alreadi": 14, "also": [1, 14], "altern": [7, 11, 12], "alwai": [5, 7, 9, 12, 14, 15], "an": [0, 1, 4, 6, 7, 9, 11, 12, 13, 14, 15], "analyt": [2, 13], "ani": [2, 4, 5, 9, 14], "anoth": 7, "anti": 13, "ap": [0, 2, 11, 13, 14], "ap_mac_address": 6, "ap_mac_address_length": 6, "ap_ssid": 6, "ap_ssid_length": 6, "api": [5, 6, 14], "app": [2, 8, 14, 15], "appear": 14, "appropri": 12, "approxim": 13, "ar": [0, 1, 5, 6, 7, 9, 10, 11, 12, 13, 14], "arrai": [6, 12, 14], "arrow": [5, 14], "ascii": 14, "aspect": 13, "associ": [6, 9, 14], "assum": 9, "asynchron": [1, 4, 5, 11, 13, 14], "attain": 7, "attemp": 14, "attempt": [0, 8, 14], "auth": [1, 14], "authent": [0, 14], "author": 1, "auto": [2, 8, 13], "automat": [2, 14, 15], "avail": [0, 5, 9, 13, 14], "avoid": 12, "b5f9xxxx": 11, "back": [5, 14], "bad": 14, "band": 13, "bandwidth": 12, "bar": [13, 14], "base": 9, "basic": [1, 7, 9, 14], "batch": 14, "batteri": [2, 7, 13], "becaus": [7, 14], "been": [0, 12, 14], "befor": [11, 12, 13, 14, 15], "begin": 4, "behavior": [2, 14, 15], "being": 14, "below": [5, 7, 9, 11, 12], "best": [2, 11, 13, 15], "between": [9, 13, 14, 15], "big": [12, 13], "bit": [0, 11, 13], "bitmask": [13, 14], "bitrat": 14, "black": [1, 6, 7, 9], "blacklist": 7, "ble": [2, 10, 12, 13], "bluetooth": [8, 9], "bool": 14, "boost": 7, "boot": [11, 13], "both": 2, "buffer": 12, "build": 11, "burst": 13, "busi": [13, 15], "button": [2, 14], "byte": [0, 2, 6, 12, 13, 14], "c1234567812345": 6, "ca": [1, 14], "cach": 11, "cafil": 1, "camera": [0, 2, 4, 5, 6, 10, 11, 12, 13, 14], "camera_control": 14, "camera_control_statu": 14, "camera_external_control": 14, "camera_idl": 14, "can": [0, 1, 2, 3, 4, 5, 7, 9, 11, 12, 13, 14], "can_add_preset": 14, "cancel": [6, 13], "capabl": [1, 6, 9, 13], "capac": 13, "caption": [5, 14], "captur": [6, 13, 14, 15], "card": [13, 14], "case": [1, 5, 9, 14], "caus": [2, 11, 14], "cert": [1, 14], "certif": [13, 14], "chain": 1, "chang": [0, 1, 4, 5, 6, 7, 9, 13, 14, 15], "charact": 14, "characterist": [10, 12], "charg": 13, "claim": [2, 14, 15], "clear": [1, 13, 14], "click": 1, "client": [1, 2, 5, 11, 14, 15], "close": 14, "code": [2, 9], "cohn": [1, 13, 14], "cohn_act": 14, "cohn_provis": 14, "cohn_state_connectingtonetwork": 14, "cohn_state_error": 14, "cohn_state_exit": 14, "cohn_state_idl": 14, "cohn_state_init": 14, "cohn_state_invalid": 14, "cohn_state_networkconnect": 14, "cohn_state_networkdisconnect": 14, "cohn_unprovis": 14, "cold": 13, "collect": 5, "combin": 2, "command": [0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 14, 15], "common": 14, "commonli": 14, "commun": [1, 9, 10, 11], "complet": [0, 9, 13, 14], "compress": 13, "compris": [7, 12, 14], "configur": [0, 1, 2, 4, 10, 14], "connect": [0, 1, 2, 4, 11, 13, 14, 15], "consid": 12, "construct": 7, "contain": [1, 6, 7, 12, 13, 14], "contextu": [2, 14], "continu": 13, "control": [0, 1, 5, 9, 10, 11, 13, 14], "coordin": 13, "core": [9, 13], "correspond": [11, 13, 14], "count": [13, 14], "countdown": 13, "counter": 12, "creat": [1, 5, 13, 14], "creation": [1, 14], "credenti": 1, "crt": 1, "current": [0, 1, 2, 4, 5, 6, 7, 9, 12, 13, 14], "custom": [5, 13, 14], "custom1": 14, "custom2": 14, "custom3": 14, "custom_nam": [5, 14], "dai": [2, 6], "data": [2, 6, 9, 10, 11], "date": [2, 6, 13], "date_tim": 2, "daylight": [2, 6], "dbm": 14, "dcim": [6, 14], "deciph": 10, "declar": 14, "default": [5, 8, 14], "defin": [2, 6, 7, 12, 14], "degre": 8, "delai": 13, "delet": [5, 14], "demo": 9, "demonstr": 9, "depacket": 12, "depend": [1, 5, 6, 7, 12, 14, 15], "deprec": 6, "deprecated_length": 6, "depth": 13, "describ": [0, 6, 8, 9, 12, 14], "descript": [11, 12], "deseri": 12, "desir": [9, 14], "detail": [2, 4, 7, 14], "detect": [0, 14], "determin": 12, "devic": [11, 13], "dhcp": 1, "differ": [5, 12], "digit": [9, 13], "directori": [6, 14], "disabl": [0, 2, 8, 14], "disconnect": 14, "discourag": 15, "discov": [11, 14], "discover": 11, "displai": [2, 13, 14], "dn": 14, "dns_primari": 14, "dns_secondari": 14, "do": [0, 11, 12, 14], "doc": [0, 1, 2, 4, 5, 6], "document": [6, 7, 10, 12], "doe": [0, 1, 11, 13, 14], "done": 11, "down": [2, 13], "download": [1, 13], "drop": 14, "dst": 2, "due": 14, "durat": 13, "dure": [0, 3, 11, 14], "dynam": [7, 11], "e": [1, 2, 5, 6, 13, 14, 15], "e7": 2, "each": [7, 11, 12, 13], "easi": [7, 13], "either": [4, 5, 12, 14], "element": [6, 12, 13], "els": 12, "empti": 6, "enabl": [2, 5, 11, 13, 14], "encod": [3, 9, 13, 14, 15], "endian": [12, 13], "energi": 9, "engag": 13, "english": 14, "enough": 14, "ensur": [0, 11], "entiti": [2, 8, 14], "entri": [0, 14], "enumpresetgroup": 5, "error": [12, 13, 14], "establish": 2, "event": 13, "everi": [2, 7], "exampl": [2, 7, 9, 11, 12, 15], "exit": [2, 5, 12, 14], "expir": 1, "exposur": 13, "extend": 7, "extern": [2, 8, 14], "extract": 12, "f": 12, "facebook": 4, "factori": [5, 11, 14], "fail": [5, 7, 8, 14], "failur": 7, "fals": [8, 14], "far": 13, "fea6": 11, "featur": [0, 1, 2, 4, 5, 6, 9, 10, 11, 12, 13, 14], "fewer": 12, "ff": 2, "field": [6, 14], "file": [1, 7, 14], "filenam": [6, 14], "find": 5, "finish": [10, 14], "firmwar": [6, 7, 9, 13], "firmware_vers": 6, "firmware_version_length": 6, "first": [0, 1, 6, 7, 9, 11, 12, 13, 14], "flag": [11, 15], "flat_mode_broadcast_broadcast": 14, "flat_mode_broadcast_record": 14, "flat_mode_idl": 14, "flat_mode_live_burst": 14, "flat_mode_loop": 14, "flat_mode_night_lapse_photo": 14, "flat_mode_night_lapse_video": 14, "flat_mode_photo": 14, "flat_mode_photo_burst": 14, "flat_mode_photo_night": 14, "flat_mode_photo_singl": 14, "flat_mode_playback": 14, "flat_mode_setup": 14, "flat_mode_slomo": 14, "flat_mode_time_lapse_photo": 14, "flat_mode_time_lapse_video": 14, "flat_mode_time_warp_video": 14, "flat_mode_unknown": 14, "flat_mode_video": 14, "flat_mode_video_burst_slomo": 14, "flat_mode_video_light_paint": 14, "flat_mode_video_light_trail": 14, "flat_mode_video_star_trail": 14, "flatmod": [13, 14], "flicker": 13, "flow": 13, "flowchart": 12, "folder": 14, "follow": [1, 4, 7, 10, 11, 12, 14], "form": 12, "format": [8, 9, 12, 13, 14, 15], "found": [0, 5, 6, 7, 14], "fov": [9, 14], "fp": 7, "frame": 13, "french": 14, "frequenc": 14, "friendli": 13, "from": [2, 5, 6, 7, 8, 11, 12, 14], "ftu": 13, "full": [7, 13, 14], "fulli": 13, "function": [1, 9], "futur": [4, 14], "g": [1, 5, 13, 14, 15], "gatewai": 14, "gatt": [10, 12], "gener": [1, 2, 4, 5, 14], "german": 14, "get": [0, 1, 4, 5, 6, 7, 13, 14, 15], "ghz": 8, "given": [7, 14], "global": [2, 14], "go": 2, "googl": 12, "gopro": [1, 2, 6, 8, 10, 11, 12, 13, 15], "goprorootca": 1, "gp": [11, 12, 13], "gp12345678": 6, "group": [6, 13, 14], "guarante": 7, "h21": 9, "h22": 9, "h23": [6, 9], "ha": [0, 1, 8, 12, 14], "had": 12, "handl": 2, "handshak": 14, "hard": 2, "hardwar": [6, 13], "have": [0, 1, 11, 12, 13], "hd9": 9, "hdmi": 8, "hdr": 7, "header": [1, 14], "hemispher": 8, "here": [7, 12], "hero": 7, "hero10": [1, 9], "hero11": [1, 9], "hero12": [1, 6, 9], "hero9": [1, 9], "high": [1, 7], "highest": 7, "hilight": [9, 13], "hindsight": [9, 13], "home": [9, 14], "honor": 14, "horizon": 13, "hour": [2, 6, 7, 11], "how": [4, 9, 12, 13], "howev": 15, "http": [0, 1, 14], "hypersmooth": 13, "hyperview": 7, "hz": 7, "i": [0, 1, 2, 4, 5, 6, 7, 9, 11, 12, 13, 14, 15], "icon": [5, 14], "icon_id": [5, 14], "id": [0, 1, 2, 3, 4, 5, 6, 9, 10, 12, 14], "identifi": 12, "idl": [2, 8, 14], "immedi": [0, 2, 5, 14], "inadvert": 2, "includ": [12, 14], "inclus": 14, "incom": 15, "incorrect": 14, "indic": [4, 11, 14], "indirectli": 1, "individu": [6, 7, 12, 14], "info": [6, 13, 14], "inform": [2, 6, 7, 11, 13, 14], "initi": [0, 4, 5, 6, 10, 14], "instal": 1, "instruct": 1, "int": 12, "int16": [2, 6], "int32": [13, 14], "intend": [0, 14], "interact": [2, 14], "intern": 13, "internet": [0, 14], "interv": 13, "interven": 8, "invalid": [12, 14], "ip": [1, 14], "ipaddress": 14, "is_capt": 14, "is_dst": [2, 6], "is_fix": 14, "is_modifi": 14, "iso": 8, "italian": 14, "its": [8, 12], "json": 13, "kbp": 14, "keep": [2, 10, 13], "keep_al": 2, "kilobyt": 13, "lai": 8, "languag": [9, 14], "laps": [5, 13], "larger": 12, "last": [6, 13, 14], "lcd": [2, 13], "leas": 1, "left": 8, "len": [5, 13, 14], "length": [6, 13], "lens": [9, 13, 14], "lens_linear": 14, "lens_superview": 14, "lens_wid": 14, "less": 12, "level": [1, 12, 13, 14], "life": 2, "lifespan": 1, "light": 7, "limit": [11, 12], "linear": 7, "linux": [13, 14], "list": [0, 7, 9, 14], "live": [0, 9, 13, 14], "live_stream_bitr": 14, "live_stream_encod": 14, "live_stream_encode_support": 14, "live_stream_error": 14, "live_stream_error_camera_block": 14, "live_stream_error_createstream": 14, "live_stream_error_inputstream": 14, "live_stream_error_internet": 14, "live_stream_error_network": 14, "live_stream_error_non": 14, "live_stream_error_osnetwork": 14, "live_stream_error_outofmemori": 14, "live_stream_error_sd_card_ful": 14, "live_stream_error_sd_card_remov": 14, "live_stream_error_selectednetworktimeout": 14, "live_stream_error_ssl_handshak": 14, "live_stream_error_unknown": 14, "live_stream_lens_support": 14, "live_stream_lens_supported_arrai": 14, "live_stream_max_lens_unsupport": 14, "live_stream_maximum_stream_bitr": 14, "live_stream_minimum_stream_bitr": 14, "live_stream_state_complete_stay_on": 14, "live_stream_state_config": 14, "live_stream_state_failed_stay_on": 14, "live_stream_state_idl": 14, "live_stream_state_readi": 14, "live_stream_state_reconnect": 14, "live_stream_state_stream": 14, "live_stream_state_unavail": 14, "live_stream_statu": 14, "live_stream_window_size_supported_arrai": 14, "livestream": [4, 13, 14], "liveview": 13, "load": [2, 5, 13, 15], "local": [1, 2, 6, 13, 14], "locat": 13, "lock": [7, 13], "log": 7, "logic": 2, "long": [5, 7, 14], "longer": 12, "longest": 7, "look": 1, "low": [7, 9, 14], "mac": 14, "macaddress": 14, "maco": 1, "mai": [7, 14, 15], "maintain": 15, "major": 6, "major_length": 6, "manag": [0, 9, 10, 11], "mani": [1, 2, 4, 5, 13, 14], "map": 12, "market": 9, "mask": 14, "match": 12, "max": [5, 8, 13, 14], "max_entri": 14, "maxim": [2, 12], "maximum": [7, 14], "maximum_bitr": 14, "mean": [7, 14], "media": [2, 4, 6, 13, 15], "meet": 13, "memori": 14, "menu": [2, 8, 14], "messag": [0, 1, 2, 4, 5, 6, 9, 10, 13, 14, 15], "meta": 14, "mhz": 14, "microphon": 13, "millisecond": 13, "min": 7, "mini": [1, 9], "minim": 9, "minimum": [9, 13, 14], "minimum_bitr": 14, "minor": 6, "minor_length": 6, "minut": [2, 6, 7, 13], "mo": 7, "mobil": 13, "mod": [5, 13], "mode": [0, 2, 4, 5, 9, 10, 13, 14], "model": [6, 9, 13, 14], "model_nam": 6, "model_name_length": 6, "model_numb": 6, "model_number_length": 6, "modifi": [13, 14], "moment": [3, 13], "month": [2, 6], "more": [1, 6, 7, 11, 12, 13, 14], "most": [1, 2, 9, 13, 14], "motion": 8, "mous": 1, "multipl": 12, "must": [1, 5, 8, 11, 12, 14], "mutabl": 14, "n": 12, "name": [5, 7, 8, 9, 14], "narrow": [7, 11], "nearli": 1, "necessari": [0, 7, 11, 12, 15], "need": [0, 1, 9, 11], "network": [0, 9, 11, 14], "never": [7, 8], "new": [0, 1, 5, 11, 13, 14], "next": 7, "night": [5, 13], "non": [5, 14], "none": 7, "noout": 1, "nope": 12, "note": [6, 12], "notif": [0, 1, 2, 4, 5, 6, 11, 13, 14], "notifi": [5, 11, 14], "notifprovisioningst": [0, 13], "notifstartscan": [0, 13], "notifycohnstatu": [1, 13], "notifylivestreamstatu": [4, 13], "notifypresetstatu": [5, 13], "number": [6, 13, 14], "obei": 14, "object": [0, 7, 12, 14], "occur": 14, "off": [2, 15], "offset": [2, 6], "often": [7, 13], "ok": [1, 8], "onc": [1, 11, 12], "one": [5, 6, 7, 8, 12, 14], "ongo": 6, "onli": [0, 3, 5, 6, 7, 8, 12, 14], "onto": 12, "open": [1, 6, 10, 12, 13], "openssl": 1, "oper": [8, 10, 13, 14], "option": [4, 5, 6, 7, 8, 12, 14], "order": [1, 2, 5, 7, 10, 11, 12, 15], "organ": 5, "orient": 13, "ota": 13, "other": [4, 15], "otherwis": [2, 12, 13], "out": 14, "outlin": 7, "outsid": [8, 14], "over": [1, 13], "overh": 13, "overrid": 14, "overview": 11, "p": 12, "packet": 10, "page": [2, 14], "paint": 7, "pair": [10, 12, 13], "paramet": [2, 5, 6, 7, 12], "pars": [11, 12], "part": [2, 6, 14], "parti": [2, 14, 15], "pass": [5, 14], "password": [1, 11, 14], "path": [1, 6, 14], "payload": [6, 10], "pc": 13, "pem": 14, "pend": 13, "per": [12, 13], "percent": 13, "perform": [1, 5, 9, 13, 14], "period": [0, 5, 14, 15], "peripher": 11, "permiss": 11, "pertain": 9, "photo": [5, 6, 9, 13, 14, 15], "physic": [2, 14], "pill": [5, 14], "platform": 4, "plug": 8, "point": [1, 2, 4, 9, 11, 13, 14], "poll": [4, 13], "portugues": 14, "possibl": 12, "power": [2, 11, 13, 15], "practic": [2, 11, 13, 15], "prepend": 12, "present": [7, 13], "preset": [2, 7, 9, 13, 15], "preset_arrai": 14, "preset_group_arrai": 14, "preset_group_endurance_video_icon_id": 14, "preset_group_id_photo": 14, "preset_group_id_timelaps": 14, "preset_group_id_video": 14, "preset_group_long_bat_video_icon_id": 14, "preset_group_max_photo_icon_id": 14, "preset_group_max_timelapse_icon_id": 14, "preset_group_max_video_icon_id": 14, "preset_group_photo_icon_id": 14, "preset_group_timelapse_icon_id": 14, "preset_group_video_icon_id": 14, "preset_icon_act": 14, "preset_icon_activity_endur": 14, "preset_icon_air": 14, "preset_icon_bas": 14, "preset_icon_basic_quality_video": 14, "preset_icon_bik": 14, "preset_icon_bit": 14, "preset_icon_burst": 14, "preset_icon_burst_2": 14, "preset_icon_c": 14, "preset_icon_chesti": 14, "preset_icon_cinemat": 14, "preset_icon_cinematic_endur": 14, "preset_icon_custom": 14, "preset_icon_ep": 14, "preset_icon_follow_cam": 14, "preset_icon_full_fram": 14, "preset_icon_helmet": 14, "preset_icon_highest_quality_video": 14, "preset_icon_indoor": 14, "preset_icon_light_paint": 14, "preset_icon_light_trail": 14, "preset_icon_live_burst": 14, "preset_icon_loop": 14, "preset_icon_motor": 14, "preset_icon_mount": 14, "preset_icon_nightlaps": 14, "preset_icon_nightlapse_photo": 14, "preset_icon_outdoor": 14, "preset_icon_panorama": 14, "preset_icon_photo": 14, "preset_icon_photo_2": 14, "preset_icon_photo_night": 14, "preset_icon_pov": 14, "preset_icon_selfi": 14, "preset_icon_shaki": 14, "preset_icon_simple_night_photo": 14, "preset_icon_simple_super_photo": 14, "preset_icon_sk": 14, "preset_icon_slomo_endur": 14, "preset_icon_snail": 14, "preset_icon_snow": 14, "preset_icon_standard_endur": 14, "preset_icon_standard_quality_video": 14, "preset_icon_star": 14, "preset_icon_star_trail": 14, "preset_icon_stationary_1": 14, "preset_icon_stationary_2": 14, "preset_icon_stationary_3": 14, "preset_icon_stationary_4": 14, "preset_icon_surf": 14, "preset_icon_timelaps": 14, "preset_icon_timelapse_2": 14, "preset_icon_timelapse_photo": 14, "preset_icon_timewarp": 14, "preset_icon_timewarp_2": 14, "preset_icon_trail": 14, "preset_icon_travel": 14, "preset_icon_ultra_slo_mo": 14, "preset_icon_video": 14, "preset_icon_video_2": 14, "preset_icon_wat": 14, "preset_title_act": 14, "preset_title_activity_endur": 14, "preset_title_air": 14, "preset_title_bas": 14, "preset_title_basic_quality_video": 14, "preset_title_bik": 14, "preset_title_bit": 14, "preset_title_burst": 14, "preset_title_c": 14, "preset_title_chesti": 14, "preset_title_cinemat": 14, "preset_title_cinematic_endur": 14, "preset_title_custom": 14, "preset_title_ep": 14, "preset_title_extended_batteri": 14, "preset_title_follow_cam": 14, "preset_title_full_fram": 14, "preset_title_helmet": 14, "preset_title_highest_qu": 14, "preset_title_highest_quality_video": 14, "preset_title_indoor": 14, "preset_title_light_paint": 14, "preset_title_light_trail": 14, "preset_title_live_burst": 14, "preset_title_longest_batteri": 14, "preset_title_loop": 14, "preset_title_motor": 14, "preset_title_mount": 14, "preset_title_night": 14, "preset_title_night_laps": 14, "preset_title_outdoor": 14, "preset_title_panorama": 14, "preset_title_photo": 14, "preset_title_photo_2": 14, "preset_title_pov": 14, "preset_title_selfi": 14, "preset_title_shaki": 14, "preset_title_simple_night_photo": 14, "preset_title_simple_super_photo": 14, "preset_title_simple_time_warp": 14, "preset_title_simple_video": 14, "preset_title_simple_video_endur": 14, "preset_title_sk": 14, "preset_title_slomo": 14, "preset_title_slomo_endur": 14, "preset_title_snow": 14, "preset_title_standard": 14, "preset_title_standard_endur": 14, "preset_title_standard_quality_video": 14, "preset_title_star": 14, "preset_title_star_trail": 14, "preset_title_stationary_1": 14, "preset_title_stationary_2": 14, "preset_title_stationary_3": 14, "preset_title_stationary_4": 14, "preset_title_surf": 14, "preset_title_time_laps": 14, "preset_title_time_warp": 14, "preset_title_time_warp_2": 14, "preset_title_trail": 14, "preset_title_travel": 14, "preset_title_ultra_slo_mo": 14, "preset_title_user_defined_custom_nam": [5, 14], "preset_title_video": 14, "preset_title_wat": 14, "press": [2, 5, 14], "prevent": [2, 15], "preview": 13, "previous": [0, 7, 14], "primari": [13, 14], "pro": 7, "procedur": [11, 12], "process": [1, 11], "profil": 13, "program": 9, "programmat": 2, "properti": [1, 14], "protobuf": [0, 1, 2, 4, 5, 6, 9, 10], "protocol": [9, 11], "provid": 1, "provis": [0, 13, 14], "provisioning_aborted_by_system": 14, "provisioning_cancelled_by_us": 14, "provisioning_error_eula_block": 14, "provisioning_error_failed_to_associ": 14, "provisioning_error_no_internet": 14, "provisioning_error_password_auth": 14, "provisioning_error_unsupported_typ": 14, "provisioning_never_start": 14, "provisioning_st": 14, "provisioning_start": 14, "provisioning_success_new_ap": 14, "provisioning_success_old_ap": 14, "provisioning_unknown": 14, "pseudocod": 12, "public": 9, "purpos": 1, "put": [2, 4, 11], "qualiti": 7, "queri": [1, 4, 5, 7, 8, 9, 10, 11, 15], "quick": [1, 13], "rang": 14, "rate": 13, "ratio": 13, "re": [7, 11, 14], "reach": 2, "read": [9, 10, 11], "readi": [4, 10, 13, 14], "realtim": 8, "receiv": [0, 6, 9, 11, 12, 14], "recent": [9, 13], "reclaim": [2, 14], "reconnect": 14, "record": [3, 13], "refer": 10, "reflect": 13, "regist": [1, 4, 5, 6, 13, 14], "register_cohn_statu": 14, "register_live_stream_statu": 14, "register_live_stream_status_bitr": 14, "register_live_stream_status_error": 14, "register_live_stream_status_mod": 14, "register_live_stream_status_statu": 14, "register_preset_statu": 14, "register_preset_status_preset": 14, "register_preset_status_preset_group_arrai": 14, "regularli": 2, "reject": [7, 9, 14, 15], "rel": [6, 14], "relat": 13, "releas": 7, "relev": [0, 9, 11, 12], "remain": 13, "remot": 13, "remov": [8, 14], "reorder": [5, 14], "replac": 1, "report": 6, "repres": [7, 14], "represent": 14, "request": [0, 1, 2, 3, 4, 5, 6, 7, 9, 12, 13, 14], "requestclearcohncert": [1, 13], "requestcohncert": [1, 13], "requestconnect": [0, 13], "requestconnectnew": [0, 13], "requestcreatecohncert": [1, 13], "requestcustompresetupd": [5, 13], "requestgetapentri": [0, 13], "requestgetcohnstatu": [1, 13], "requestgetlastcapturedmedia": [6, 13], "requestgetlivestreamstatu": [4, 13], "requestgetpresetstatu": [5, 13], "requestsetcameracontrolstatu": [2, 13], "requestsetcohnset": [1, 13], "requestsetlivestreammod": [4, 13], "requestsetturboact": [2, 13], "requeststartscan": [0, 13], "requir": [1, 11, 14], "reserv": [6, 12], "reset": [1, 2, 5, 11, 12], "resolut": [13, 14], "respect": 12, "respond": 12, "respons": [0, 1, 2, 3, 4, 5, 6, 7, 11, 12, 13, 14], "response_length": 6, "responsecohncert": [1, 13], "responseconnect": [0, 13], "responseconnectnew": [0, 13], "responsegener": [1, 2, 4, 5, 13], "responsegetapentri": [0, 13], "responselastcapturedmedia": [6, 13], "responsestartscan": [0, 13], "result": [0, 6, 7, 9, 12, 13, 14], "result_argument_invalid": 14, "result_argument_out_of_bound": 14, "result_ill_form": 14, "result_not_support": 14, "result_resource_not_avail": 14, "result_resource_not_availbl": 14, "result_success": 14, "result_unknown": 14, "return": [0, 1, 2, 5, 6, 14], "right": [1, 8], "room": 14, "root": [1, 14], "rotat": 13, "rough": 13, "router": 1, "row": [7, 12], "rtmp": [4, 14], "rule": 7, "russian": 14, "saturdai": 6, "save": [2, 6, 14], "scan": [0, 11, 13, 14], "scan_entry_flag": 14, "scan_flag_associ": 14, "scan_flag_authent": 14, "scan_flag_best_ssid": 14, "scan_flag_configur": [0, 14], "scan_flag_open": 14, "scan_flag_unsupported_typ": 14, "scan_id": 14, "scanning_aborted_by_system": 14, "scanning_cancelled_by_us": 14, "scanning_never_start": 14, "scanning_st": 14, "scanning_start": 14, "scanning_success": 14, "scanning_unknown": 14, "schedul": 13, "schema": 7, "scheme": 12, "screen": [2, 14], "sd": [13, 14], "sdcard": [6, 13, 14, 15], "second": [2, 6, 13, 14], "secondari": [13, 14], "section": [6, 8, 9, 10, 11, 12], "secur": 1, "see": [1, 4, 6, 7, 9, 11, 12, 13], "select": 13, "send": [2, 5, 9, 12, 14, 15], "sent": [0, 4, 5, 6, 11, 12, 14], "serial": [0, 2, 12, 14], "serial_numb": 6, "serial_number_length": 6, "server": 14, "servic": 11, "set": [0, 1, 2, 4, 5, 6, 9, 10, 11, 12, 14, 15], "setting_arrai": 14, "settingid": [7, 13], "setup": [9, 10, 14], "short": 7, "shorthand": 11, "should": [9, 11, 15], "shutter": [2, 4, 13], "side": 8, "sign": 1, "signal": [13, 14, 15], "signal_frequency_mhz": 14, "signal_strength_bar": 14, "simultan": 15, "sinc": 13, "singl": [6, 12, 14], "site": 4, "size": 12, "sleep": [2, 11, 13], "slo": 7, "slow": 8, "so": [11, 13], "social": 4, "some": [0, 1, 2, 12, 15], "sourc": [0, 1, 2, 4, 5, 6, 14], "space": 13, "spanish": 14, "special": 14, "specif": [1, 15], "specifi": [5, 12, 13, 14], "speed": 13, "split": 12, "spreadsheet": 7, "ssid": [11, 13, 14], "ssl": [1, 14], "sta": [0, 14], "stack": 14, "standard": 7, "star": 7, "start": [0, 2, 4, 6, 12, 13, 14], "start_index": 14, "starting_bitr": 14, "startup": 14, "state": [0, 5, 6, 7, 9, 10, 11, 12, 13, 14], "static": 14, "static_ip": 14, "station": [0, 4, 14], "stationari": 7, "statu": [0, 1, 2, 4, 6, 10, 12, 14, 15], "status": [6, 9, 12, 14], "step": [1, 11], "still": 2, "stop": [4, 13, 14], "storag": 13, "store": 11, "stream": [0, 9, 13, 14], "streamer": 14, "strength": [13, 14], "string": [6, 8, 12, 14], "structur": 12, "submenu": 5, "subnet": 14, "subscrib": 11, "subscript": 11, "subsequ": [9, 11, 12], "success": [12, 13, 14], "suffici": 13, "summar": 12, "summari": 14, "sundai": 6, "super": 7, "superset": 7, "superview": 7, "support": [0, 1, 2, 4, 6, 7, 11, 13, 14], "suppos": 7, "swap": 8, "swedish": 14, "synchron": [4, 5, 14], "system": [1, 13, 14, 15], "tabl": [5, 9, 10, 11, 12], "take": 14, "taken": 13, "tap": 2, "task": 14, "tell": [2, 14, 15], "terminologi": 12, "text": [1, 14], "than": [12, 13, 15], "thei": 12, "therebi": 5, "therefor": [0, 15], "thi": [0, 1, 2, 3, 5, 6, 7, 9, 11, 12, 13, 14, 15], "thing": 1, "third": [2, 14, 15], "those": 6, "three": 8, "through": [1, 9, 10], "throughout": 12, "time": [2, 6, 11, 13, 14, 15], "timelaps": 13, "timeout": 14, "timeout_second": 14, "timer": 2, "timewarp": 7, "timezon": [2, 6], "titl": [5, 14], "title_id": [5, 14], "title_numb": 14, "tl": [1, 14], "tlv": [2, 3, 5, 6, 7, 12], "too": 13, "top": 12, "total": [13, 14], "total_configured_ssid": 14, "total_entri": 14, "track": 2, "trail": 13, "transfer": [2, 13, 14], "tri": 7, "trigger": [0, 1, 14], "triplet": 12, "tripod": 7, "true": 8, "trust": 1, "try": 9, "turbo": [2, 13, 14], "tutori": [9, 12], "twitch": 4, "two": [1, 8, 11, 12], "type": [0, 1, 2, 3, 4, 5, 6, 7, 10, 13, 14], "typespec": 14, "u": 12, "ubuntu": 1, "ui": [2, 5, 11, 13, 14], "ui_mode_group": 13, "uint16": [2, 6], "uint32": 5, "uint8": [2, 6, 7], "ultra": 7, "un": 2, "unavail": 14, "undefin": [9, 15], "under": 6, "understand": 9, "unknown": [8, 14], "unless": [12, 15], "unregist": [6, 13, 14], "unregister_live_stream_statu": 14, "unregister_preset_statu": 14, "unset": [4, 15], "unsign": 6, "until": 4, "up": 11, "updat": [1, 2, 5, 6, 9, 13, 14], "upon": 11, "upright": 8, "upsid": 8, "url": [4, 14], "us": [0, 1, 2, 3, 4, 5, 9, 10, 12, 13, 14, 15], "usb": 13, "user": [2, 5, 7, 9, 14, 15], "user_defin": 14, "usernam": [1, 14], "usual": [7, 14], "utc": [2, 6], "utf": 14, "util": 1, "uuid": [0, 1, 2, 3, 4, 5, 6, 7, 11, 12], "v01": 9, "v4": 12, "valid": [1, 7, 11, 14], "valu": [1, 2, 5, 6, 7, 9, 13, 14], "value_length": 7, "variabl": [7, 12], "variou": [6, 9, 10], "vehicl": 7, "verifi": 8, "version": [6, 7, 9, 12, 13], "vertic": 7, "via": [0, 1, 2, 4, 5, 6, 7, 9, 11, 13, 14], "video": [5, 6, 9, 13, 14, 15], "wa": [7, 11, 13, 14], "wai": 11, "wait": [11, 14, 15], "wake": 11, "walk": 9, "warp": 13, "webcam": 13, "weekdai": 6, "well": 9, "were": 5, "when": [1, 2, 5, 6, 12, 13, 14], "whenev": 6, "where": [0, 9, 12], "whether": [2, 5, 11, 12, 14], "which": [0, 1, 2, 5, 11, 13, 14], "while": [0, 3, 9, 11, 13, 14, 15], "whitelist": 7, "who": 14, "wide": 7, "widescreen": 7, "wifi": [2, 11, 13, 14], "window": 1, "window_s": 14, "window_size_1080": 14, "window_size_480": 14, "window_size_720": 14, "wireless": 13, "wirelesspairingstateflag": 13, "wish": [2, 14, 15], "within": [5, 14], "without": [1, 2, 6], "work": [7, 12], "worksheet": 7, "write": [11, 13], "x509": 1, "xxxx": 11, "y": 13, "ye": 6, "year": [1, 2, 6], "yet": 14, "youtub": 4, "zero": [0, 2, 5, 8, 14], "zone": 14, "zoom": 13}, "titles": ["Access Point", "Camera on the Home Network", "Control", "Hilights", "Live Streaming", "Presets", "Query", "Settings", "Statuses", "Welcome to Open GoPro BLE API\u2019s documentation!", "Protocol", "BLE Setup", "Data Protocol", "ID Tables", "Protobuf Documentation", "State Management"], "titleterms": {"": [8, 9], "0": 8, "1": 8, "10": 8, "100": 8, "101": 8, "102": 8, "103": 8, "104": 8, "105": 8, "106": 8, "107": 8, "108": [7, 8], "11": 8, "110": 8, "111": 8, "112": 8, "113": 8, "114": 8, "115": 8, "116": 8, "117": 8, "118": 8, "121": 7, "122": 7, "123": 7, "128": 7, "13": [8, 12], "134": 7, "135": 7, "150": 7, "151": 7, "16": 12, "162": [7, 8], "167": 7, "17": 8, "171": 7, "172": 7, "173": 7, "175": 7, "176": 7, "177": 7, "178": 7, "179": 7, "180": 7, "182": 7, "183": 7, "184": 7, "186": 7, "187": 7, "189": [7, 8], "19": 8, "190": 7, "191": 7, "192": 7, "193": 7, "194": 8, "2": [7, 8], "20": 8, "21": 8, "22": 8, "23": 8, "24": 8, "26": 8, "27": 8, "28": 8, "29": 8, "3": [7, 8], "30": 8, "31": 8, "32": 8, "33": 8, "34": 8, "35": 8, "38": 8, "39": 8, "4": 8, "41": 8, "42": 8, "43": 7, "45": 8, "49": 8, "5": [8, 12], "54": 8, "55": 8, "56": 8, "58": 8, "59": [7, 8], "5ghz": 8, "6": 8, "60": 8, "65": 8, "66": 8, "67": 8, "68": 8, "69": 8, "70": 8, "74": 8, "75": 8, "76": 8, "77": 8, "78": 8, "79": 8, "8": 8, "81": 8, "82": 8, "83": [7, 8], "85": 8, "86": 8, "88": 8, "89": 8, "9": 8, "93": 8, "94": 8, "95": 8, "96": 8, "97": 8, "98": 8, "99": 8, "On": 8, "The": 8, "accept": 8, "access": [0, 8], "accessori": 8, "action": 8, "activ": 8, "advertis": 11, "air": 8, "aliv": 15, "an": 8, "anti": 7, "ap": 8, "api": 9, "approxim": 8, "ar": 8, "aspect": 7, "auto": 7, "avail": 8, "band": [7, 8], "bar": 8, "batteri": 8, "befor": 8, "best": 8, "between": 8, "big": 8, "bit": [7, 8, 12], "bitmask": 8, "ble": [8, 9, 11], "boot": 8, "burst": 8, "busi": 8, "byte": 8, "camera": [1, 7, 8, 9, 15], "can": 8, "cancel": 8, "capabl": [7, 8], "capac": 8, "captur": 8, "card": 8, "certif": 1, "chang": 8, "characterist": 11, "charg": 8, "cold": 8, "command": [8, 12, 13], "complet": 8, "compress": 8, "configur": 11, "connect": 8, "contain": 8, "continu": [8, 12], "control": [2, 7, 8, 15], "coordin": 8, "core": 8, "correspond": 8, "count": 8, "countdown": 8, "current": 8, "data": 12, "deciph": 12, "delai": 8, "depth": 7, "detail": 1, "devic": 8, "digit": 8, "disconnect": 0, "displai": 8, "document": [9, 14], "doe": 8, "down": 8, "download": 8, "durat": [7, 8], "e": 8, "each": 8, "enabl": [7, 8], "encod": 8, "endian": 8, "engag": 8, "enum": 14, "enumcameracontrolstatu": 14, "enumcohnnetworkst": 14, "enumcohnstatu": 14, "enumflatmod": 14, "enumlen": 14, "enumlivestreamerror": 14, "enumlivestreamstatu": 14, "enumpresetgroup": 14, "enumpresetgroupicon": 14, "enumpreseticon": 14, "enumpresettitl": 14, "enumprovis": 14, "enumregisterlivestreamstatu": 14, "enumregisterpresetstatu": 14, "enumresultgener": 14, "enumscan": 14, "enumscanentryflag": 14, "enumwindows": 14, "error": 8, "event": 8, "exposur": 8, "extend": 12, "far": 8, "featur": 8, "fi": 7, "finish": 11, "firmwar": 8, "first": 8, "flatmod": 8, "flicker": 7, "flow": 8, "format": 7, "fov": 7, "frame": [7, 8], "friendli": 8, "from": 0, "ftu": 8, "full": 8, "fulli": 8, "g": 8, "gatt": 11, "gener": [9, 12], "get": [8, 9], "gopro": 9, "gp": [7, 8], "group": [5, 8], "have": 8, "header": 12, "hilight": [3, 8], "hindsight": [7, 8], "home": 1, "horizon": 7, "how": 8, "hypersmooth": 7, "i": 8, "id": [7, 8, 13], "inform": 8, "int32": 8, "intern": 8, "interv": [7, 8], "json": [7, 8], "keep": 15, "kilobyt": 8, "laps": [7, 8], "last": 8, "lcd": 8, "len": [7, 8], "length": [7, 12], "level": [7, 8], "limit": 9, "linux": 8, "live": [4, 8], "liveview": 8, "locat": 8, "lock": 8, "manag": 15, "mani": 8, "max": 7, "media": [8, 14], "meet": 8, "messag": [11, 12], "microphon": 8, "millisecond": 8, "minimum": 8, "minut": 8, "mobil": 8, "mod": [7, 8], "mode": [7, 8, 11], "model": 8, "modifi": [5, 8], "more": 8, "most": 8, "network": 1, "night": 7, "notifprovisioningst": 14, "notifstartscan": 14, "notifycohnstatu": 14, "notifylivestreamstatu": 14, "notifypresetstatu": 14, "number": 8, "off": 7, "often": 8, "open": 9, "oper": [0, 1, 2, 3, 4, 5, 6, 7], "orient": 8, "ota": 8, "otherwis": 8, "over": 8, "overh": 8, "packet": 12, "pair": [8, 11], "payload": 12, "pc": 8, "pend": 8, "per": 7, "percent": 8, "perform": 7, "photo": [7, 8], "point": [0, 8], "poll": 8, "practic": 8, "present": 8, "preset": [5, 8, 14], "presetgroup": 14, "presetset": 14, "preview": 8, "primari": 8, "procedur": 1, "profil": 7, "protobuf": [12, 13, 14], "protocol": [10, 12], "provis": [1, 8], "queri": [6, 12, 13], "quick": 8, "rate": [7, 8], "ratio": 7, "readi": [8, 15], "recent": 8, "record": 8, "reflect": 8, "relat": 8, "remain": 8, "remot": 8, "request": 8, "requestclearcohncert": 14, "requestcohncert": 14, "requestconnect": 14, "requestconnectnew": 14, "requestcreatecohncert": 14, "requestcustompresetupd": 14, "requestgetapentri": 14, "requestgetcohnstatu": 14, "requestgetlastcapturedmedia": 14, "requestgetlivestreamstatu": 14, "requestgetpresetstatu": 14, "requestreleasenetwork": 14, "requestsetcameracontrolstatu": 14, "requestsetcohnset": 14, "requestsetlivestreammod": 14, "requestsetturboact": 14, "requeststartscan": 14, "resolut": 7, "responsecohncert": 14, "responseconnect": 14, "responseconnectnew": 14, "responsegener": 14, "responsegetapentri": 14, "responselastcapturedmedia": 14, "responsestartscan": 14, "rotat": 8, "rough": 8, "scan": 8, "scanentri": 14, "schedul": 8, "sd": 8, "sdcard": 8, "second": [7, 8], "secondari": 8, "see": 8, "select": 8, "send": 11, "set": [7, 8, 13], "setup": 11, "signal": 8, "sinc": 8, "so": 8, "space": 8, "specifi": 8, "speed": [7, 8], "ssid": 8, "start": [8, 9], "state": [8, 15], "statu": [5, 8, 13], "status": 8, "stop": 8, "storag": 8, "stream": [4, 8], "strength": 8, "success": 8, "suffici": 8, "support": [8, 9], "system": 8, "tabl": 13, "taken": 8, "than": 8, "thi": 8, "time": 8, "timelaps": 8, "too": 8, "total": 8, "trail": 7, "transfer": 8, "turbo": 8, "type": [8, 12], "ui": 8, "ui_mode_group": 8, "updat": 8, "us": 8, "usb": 8, "valu": [8, 12], "verifi": 1, "version": 8, "via": 8, "video": [7, 8], "view": 1, "wa": 8, "warp": 8, "welcom": 9, "when": 8, "which": 8, "while": 8, "wi": 7, "wifi": 8, "wireless": 8, "wirelesspairingstateflag": 8, "write": 8, "xlsx": 7, "y": 8, "zoom": 8}}) \ No newline at end of file diff --git a/docs/http.html b/docs/http.html deleted file mode 100644 index b7b418d0..00000000 --- a/docs/http.html +++ /dev/null @@ -1,23754 +0,0 @@ ---- ---- - - - - - OpenGoPro HTTP API - - - - - - - - - -

OpenGoPro HTTP API (2.0)

Download OpenAPI specification:Download

The GoPro API allows developers to create apps and utilities that interact with and control a GoPro camera.

-

Overview

The GoPro API allows you to control and query the camera to:

-
    -
  • Capture photo/video media
  • -
  • Get media list
  • -
  • Change settings
  • -
  • Get and set the date/time
  • -
  • Get camera status
  • -
  • Get media metadata (file size, width, height, duration, tags, etc)
  • -
  • and more!
  • -
-

Supported Cameras

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Model IDModel CodeMarketing NameMinimal Firmware Version
62H23.01HERO12 Blackv01.10.00
60H22.03HERO11 Black Miniv01.10.00
58H22.01HERO11 Blackv01.10.00
57H21.01HERO10 Blackv01.10.00
55HD9.01HERO9 Blackv01.70.00
-
-

While the version listed above are minimum 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.

-
-

Setup

Connection

-

WiFi

-

Connection to the camera via WiFi requires that the camera's WiFi Access Point be enabled. This can be done by -connecting to the camera via Bluetooth Low Energy and sending a command to -enable AP Mode.

-

USB

-

Open GoPro systems that utilize USB must support the Network Control Model (NCM) protocol. Connecting via USB -requires the following steps:

-
    -
  1. Physically connect the camera's USB-C port to your system
  2. -
  3. Send HTTP command to enable wired USB control
  4. -
-

Authentication

-

WiFi

-

Once the WiFi Access Point has been turned on, authentication with the camera simply requires connecting with the -correct SSID and password. This information can be obtained in two ways:

- -

USB

-

No authentication is necessary.

-

Socket Address

-

WiFi

-

The socket address for WiFi connections is 10.5.5.9:8080.

-

USB

-

The socket address for USB connections is 172.2X.1YZ.51:8080 where XYZ are the last three digits of the camera's -serial number.

-

The camera's serial number can be obtained in any of the following ways:

-
    -
  • Reading the sticker inside the camera's battery enclosure
  • -
  • Camera UI: Preferences >> About >> Camera Info
  • -
  • Bluetooth Low Energy: By reading directly from Hardware Info
  • -
-

For example, if the camera's serial number is C0000123456789, the IP address for USB connections would be -172.27.189.51.

-

Alternatively, the IP address can be discovered via mDNS as the camera registers the _gopro-web service.

-

General Usage

Commands

-

Using the Open GoPro API, a client can perform various command, control, and query operations.

-

Depending on the camera's state, it may not be ready to accept specific commands. -This ready state is dependent on the System Busy and the Encoding Active 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 camera status queries. -For details regarding camera state, see the Get State Operation

-

Keep Alive

-

It is necessary to periodically send a 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 the Set Camera Control Status -command to tell the camera that the client wishes to claim control of the camera.

-

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.
  • -
-

Analytics

Query / Configure Analytics

-

Set Client as Third Party

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url http://10.5.5.9:8080/gopro/camera/analytics/set_client_info

Response samples

Content type
application/json
{ }

COHN

The Camera On the Home Network (COHN) 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.

-

The following cameras support COHN:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CameraSupported
HERO
HERO12 Black
HERO11 Black Mini
HERO11 Black
HERO10 Black
HERO9 Black
-

Provisioning COHN

In order to use the COHN capability, the camera must first be provisioned for COHN. -For instructions on how to do this, see the Open GoPro BLE spec.

-

Send Messages via HTTPS

Once the camera is provisioned, the client can issue commands and set settings -via HTTPS using the COHN certificate and Basic authorization (username/password) credentials obtained during -provisioning or subsequently by querying for COHN status.

-

HTTPS Headers

All HTTPS messages must contain Basic access authentication -headers, using the username and password from the COHN status obtained during or after provisioning.

-

Configure COHN Settings

HERO12 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-
Request Body schema: application/json
cohn_active
integer
Enum: 0 1

1 to enable, 0 to disable

-

When cohn_active == 1, STA Mode connection will be dropped and camera will not -automatically re-connect for COHN.

-

Responses

Response Schema: application/json
object

Request samples

Content type
application/json
{
  • "cohn_active": 0
}

Response samples

Content type
application/json
{ }

Create the COHN SSL/TLS certificates

HERO12 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

This creates the Camera On the Home Network SSL/TLS certs certs. -The created certificate(s) can be obtained via Get COHN Certificate and -used for SSL/TLS communications

-
Request Body schema: application/json
override
integer
Enum: 0 1

If 1, replace existing Root CA cert with a newly-generated one.

-

Responses

Response Schema: application/json
object

Request samples

Content type
application/json
{
  • "override": 0
}

Response samples

Content type
application/json
{ }

Delete COHN Certificates

HERO12 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

Responses

Response Schema: application/json
object

Request samples

curl --request POST \
-  --url http://10.5.5.9:8080/gopro/cohn/cert/clear

Response samples

Content type
application/json
{ }

Get COHN Certificate

HERO12 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

Responses

Response Schema: text/plain
string

Request samples

curl --request POST \
-  --url http://10.5.5.9:8080/GoProRootCA.crt

Response samples

Content type
text/plain
-----BEGIN CERTIFICATE-----
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
------END CERTIFICATE----
-

Get COHN Status

HERO12 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

Responses

Response Schema: application/json
enabled
integer
Enum: 0 1

Is COHN currently enabled?

-
ipaddress
string
Example: "123.45.67.890"

Camera's IP address on the local network

-
macaddress
string

MAC address of the wifi adapter

-
password
string

Password used for http basic auth header

-
ssid
string

Currently connected SSID

-
state
integer (EnumCOHNNetworkState)
Enum: 0 1 2 5 27 28 29 30
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDNameSummary
0COHN_STATE_Init
1COHN_STATE_Error
2COHN_STATE_Exit
5COHN_STATE_Idle
27COHN_STATE_NetworkConnected
28COHN_STATE_NetworkDisconnected
29COHN_STATE_ConnectingToNetwork
30COHN_STATE_Invalid
-
status
integer (EnumCOHNStatus)
Enum: 0 1
- - - - - - - - - - - - - - - - - -
IDNameSummary
0COHN_UNPROVISIONED
1COHN_PROVISIONED
-
username
string

Username used for http basic auth header

-

Request samples

curl --request POST \
-  --url http://10.5.5.9:8080/gopro/cohn/status

Response samples

Content type
application/json
{
  • "enabled": 0,
  • "ipaddress": "123.45.67.890",
  • "macaddress": "string",
  • "password": "string",
  • "ssid": "string",
  • "state": 0,
  • "status": 0,
  • "username": "string"
}

Control

Command and control of the camera

-

Configure Turbo Transfer

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

Some cameras support Turbo Transfer mode, which allows media to be downloaded over WiFi more rapidly.

-

This special mode should only be used during media offload.

-

It is recommended that the user check for and, if necessary, disable Turbo Transfer on connection.

-

Note that Disabling / enabling turbo mode willa lso enable / disable the transferring media camera UI.

-
query Parameters
p
required
integer
Enum: 0 1

0 to disable, 1 to enable

-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/media/turbo_transfer?p=0'

Response samples

Content type
application/json
{ }

Enable Wired camera control over USB

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-
query Parameters
p
required
integer
Enum: 0 1

If 1, enable wired usb control; If 0, disable usb control

-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/control/wired_usb?p=0'

Response samples

Content type
application/json
{ }

Keep Alive

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

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 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.

-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url http://10.5.5.9:8080/gopro/camera/keep_alive

Response samples

Content type
application/json
{ }

Set Camera Control Status

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

This command is used to tell the camera that a client (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.

-

Note:

-
    -
  • 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.
  • -
-

See the below diagram for a state diagram of Camera Control:

-

global behaviors state diagram

-
query Parameters
p
required
integer
Enum: 0 1 2
- - - - - - - - - - - - - - - - - - - - - - -
IDNameSummary
0CAMERA_IDLE
1CAMERA_CONTROLCan only be set by camera, not by app or third party
2CAMERA_EXTERNAL_CONTROL
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/control/set_ui_controller?p=0'

Response samples

Content type
application/json
{ }

Set Date / Time

HERO12 Black -HERO11 Black Mini - HERO11 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-
query Parameters
date
required
string
Example: date=2023_12_31

current date in format YYYY_MM_DD

-
time
required
string
Example: time=21_12_13

current time in format HH_MM_SS in 24 hour format

-
tzone
required
integer
Example: tzone=-480

Timezone offset in minutes. See here for a -listing of all UTC offsets.

-

Not supported on:

-
    -
  • Hero 10 Black
  • -
  • Hero 9 Black
  • -
-
dst
required
integer
Enum: 0 1

Is daylight savings time active?

-

Not supported on:

-
    -
  • Hero 10 Black
  • -
  • Hero 9 Black
  • -
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/set_date_time?date=2023_12_31&time=21_12_13&tzone=-480&dst=0'

Response samples

Content type
application/json
{ }

Set Digital Zoom

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-
query Parameters
percent
required
integer [ 0 .. 100 ]
Example: percent=50

Zoom Level (0-100)

-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/digital_zoom?percent=50'

Response samples

Content type
application/json
{ }

Set Shutter

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-
path Parameters
mode
required
string
Enum: "start" "stop"
Example: start

Start / stop encoding.

-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url http://10.5.5.9:8080/gopro/camera/shutter/start

Response samples

Content type
application/json
{ }

Hilights

The HiLight Tags -feature allows the user to tag moments of interest either during video capture or on existing media.

-

Once HiLight tags have been added, they can be queried via Media Info

-

Hilight a Media File

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

Add a hilight / tag to an existing photo or media file.

-
query Parameters
path
required
string
Example: path=100GOPRO/GOPR0002.MP4

The path to a file on the camera to HiLight

-
ms
integer
Example: ms=1

The offset from the beginning of a video file, in milliseconds

-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/media/hilight/file?path=100GOPRO/GOPR0002.MP4&ms=1'

Response samples

Content type
application/json
{ }

Hilight While Recording

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

Add hilight at current time while recording video

-

This can only be used during recording.

-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url http://10.5.5.9:8080/gopro/media/hilight/moment

Response samples

Content type
application/json
{ }

Remove Hilight

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

Remove an existing hilight from a photo or video file.

-
query Parameters
path
required
string
Example: path=100GOPRO/GOPR0002.MP4

The path to a file on the camera to remove a HiLight from

-
ms
integer
Example: ms=1

The offset from the beginning of a video file, in milliseconds

-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/media/hilight/remove?path=100GOPRO/GOPR0002.MP4&ms=1'

Response samples

Content type
application/json
{ }

Media

This section describes the operations to query basic details about media captured on the sdcard.

-

Chapters

All GoPro cameras break longer videos into chapters. -GoPro cameras currently limit file sizes on sdcards to 4GB for both FAT32 and exFAT file systems. -This limitation is most commonly seen when recording longer (10+ minute) videos. -In practice, the camera will split video media into chapters named Gqccmmmm.MP4 (and ones for THM/LRV) such that:

-
    -
  • q: Quality Level (X: Extreme, H: High, M: Medium, L: Low)
  • -
  • cc: Chapter Number (01-99)
  • -
  • mmmm: Media ID (0001-9999)
  • -
-

When media becomes chaptered, the camera increments subsequent Chapter Numbers while leaving the Media ID unchanged. -For example, if the user records a long High-quality video that results in 4 chapters, the files on the sdcard may -look like the following:

-
-rwxrwxrwx@ 1 gopro  123456789  4006413091 Jan  1 00:00 GH010078.MP4
--rwxrwxrwx@ 1 gopro  123456789       17663 Jan  1 00:00 GH010078.THM
--rwxrwxrwx@ 1 gopro  123456789  4006001541 Jan  1 00:00 GH020078.MP4
--rwxrwxrwx@ 1 gopro  123456789       17357 Jan  1 00:00 GH020078.THM
--rwxrwxrwx@ 1 gopro  123456789  4006041985 Jan  1 00:00 GH030078.MP4
--rwxrwxrwx@ 1 gopro  123456789       17204 Jan  1 00:00 GH030078.THM
--rwxrwxrwx@ 1 gopro  123456789   756706872 Jan  1 00:00 GH040078.MP4
--rwxrwxrwx@ 1 gopro  123456789       17420 Jan  1 00:00 GH040078.THM
--rwxrwxrwx@ 1 gopro  123456789   184526939 Jan  1 00:00 GL010078.LRV
--rwxrwxrwx@ 1 gopro  123456789   184519787 Jan  1 00:00 GL020078.LRV
--rwxrwxrwx@ 1 gopro  123456789   184517614 Jan  1 00:00 GL030078.LRV
--rwxrwxrwx@ 1 gopro  123456789    34877660 Jan  1 00:00 GL040078.LRV
-
-

Delete All Files

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url http://10.5.5.9:8080/gp/gpControl/command/storage/delete/all

Response samples

Content type
application/json
{ }

Delete Grouped Media Item

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

Delete an entire group of media files such as in a burst, timelapse, or chaptered video. This API should -not be used to delete single files. Instead use Delete Single File

-
query Parameters
p
required
string
Example: p=105GOPRO/G0016880.JPG

The path to the group on the camera to delete. This path must be the first file in the group.

-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gp/gpControl/command/storage/delete/group?p=105GOPRO/G0016880.JPG'

Response samples

Content type
application/json
{ }

Delete Single Media File

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

When operating on a file that is part of a group, only the individual file will be deleted. To delete -the entire group, use Delete Grouped Media Item

-
query Parameters
p
required
string
Example: p=105GOPRO/GOPR6879.JPG

path to media file to delete

-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/media/delete/file?p=105GOPRO/GOPR6879.JPG'

Response samples

Content type
application/json
{ }

Download a Media File

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

Note that this is the same endpoint for all media (photos, video, etc.).

-
path Parameters
directory
required
string
Example: 100GOPRO

Case sensitive directory that media resides in

-
filename
required
string
Examples:
  • GOPR0001.JPG - Sample photo file
  • GH010397.MP4 - Sample video file

Case sensitive media filename

-

Responses

Response Schema: application/octet-stream
string <binary>

Request samples

curl --request GET \
-  --url http://10.5.5.9:8080/videos/DCIM/100GOPRO/%7Bfilename%7D

Get Last Captured Media

HERO12 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

This will return the complete path of the last captured media. Depending on the type of media captured, it will return:

-
    -
  • single photo / video: The single media path
  • -
  • any grouped media: The path to the first captured media in the group
  • -
-

Responses

Response Schema: application/json
file
string
Example: "GOPR0002.JPG"

Filename of media

-
folder
string
Example: "100GOPRO"

Directory in which the media is contained in

-

Request samples

curl --request GET \
-  --url http://10.5.5.9:8080/gopro/media/last_captured

Response samples

Content type
application/json
{
  • "file": "GOPR0002.JPG",
  • "folder": "100GOPRO"
}

Get Media File GPMF

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

None

-
query Parameters
path
required
string
Example: path=100GOPRO/GOPR0002.JPG

media file name

-

Responses

Response Schema: application/octet-stream
string <binary>

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/media/gpmf?path=100GOPRO/GOPR0002.JPG'

Get Media File Info

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-
query Parameters
path
required
string
Example: path=100GOPRO/GOPR0002.JPG

media file name

-

Responses

Response Schema: application/json
Any of
ct
required
integer
Enum: 0 1 2 3 4 5 6 8 9 10 11 12

Media content type

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDMode
Video0
Looping1
Chaptered Video2
Time Lapse3
Single Photo4
Burst Photo5
Time Lapse Photo6
Night Lapse Photo8
Night Photo9
Continuous Photo10
Raw Photo11
Live Burst12
-
cre
required
integer
Example: "1692992748"

Creation time in seconds since epoch

-
s
required
integer
Example: "1234567890"

File size in bytes

-
gumi
required
string
Example: "12345678998765443211234567899875"

Globally Unique Media ID

-
h
required
integer
Example: "1080"

Height of media in pixels

-
w
required
integer
Example: "1920"

Width of media in pixels

-
hc
required
integer [ 0 .. 99 ]

Number of hilights in media

-
eis
required
integer
Enum: 0 1

1 if stabilized, 0 otherwise

-
mp
required
integer
Enum: 0 1

1 if metadata is present, 0 otherwise

-
rot
required
string

Deprecated

-
tr
required
integer
Enum: 0 1

1 if file is transcoded, 0 otherwise

-
us
required
integer
Enum: 0 1

Has the file been uploaded? 0 if no, 1 if yes

-
ao
required
string
Enum: "auto" "wind" "stereo" "off"
Example: "auto"

Audio option

-
profile
required
integer [ 0 .. 255 ]

Advanced Video Codec Level

-
avc_profile
required
integer [ 0 .. 255 ]
Example: "0"

Advanced Video Code Profile

-
cl
required
integer
Enum: 0 1

1 if clipped, 0 otherwise

-
dur
required
integer
Example: "42"

Video duration in seconds

-
fps
required
integer
Example: "1001"

Video frame rate numerator

-
fps_denom
required
integer
Example: "30000"

Video frame rate denominator

-
ls
required
integer [ -1 .. 1234567890 ]

Low Resolution Video file size in bytes. -1 if there is no LRV file

-
pta
required
integer
Enum: 0 1

1 if protune audio is present, 0 otherwise

-
subsample
required
integer
Enum: 0 1

1 if subsampled from other video, 0 otherwise

-
fov
string

Field of View

-
hi
Array of integers
Example: "1500,4700"

List of hilights in ms offset from start of video

-
lc
integer
Enum: 0 1

Lens configuration ==> 0 for front, 1 for rear

-
mos
Array of strings
Items Enum: "app" "pc" "other"
Example: "app,pc"

List of offload states

-
prjn
integer
Enum: 0 1 2 3 4 5 6 7 8

Lens projection

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDMode
EAC0
ERP1
EAC, split horizontally in the middle for 2 output2
ERP, cropped for panorama3
Bypass stitch algorithm, side by side circles4
Stitch is disabled, stitch algorithm is enabled for offline stitch5
Stitch is disabled6
Bypass stitch algorithm for EAC split7
Hemisheric8
-
progr
integer
Enum: 0 1

Is video progressive? 1 if progressive, 0 if interlaced

-

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/media/info?path=100GOPRO/GOPR0002.JPG'

Response samples

Content type
application/json
Example
{
  • "ao": "auto",
  • "avc_profile": 0,
  • "cl": 0,
  • "cre": 1692992748,
  • "ct": 0,
  • "dur": 42,
  • "eis": 0,
  • "fov": "string",
  • "fps": 1001,
  • "fps_denom": 30000,
  • "gumi": "12345678998765443211234567899875",
  • "h": 1080,
  • "hc": 99,
  • "hi": [
    ],
  • "lc": 0,
  • "ls": -1,
  • "mos": [
    ],
  • "mp": 0,
  • "prjn": 0,
  • "profile": 255,
  • "progr": 0,
  • "pta": 0,
  • "rot": "string",
  • "s": 1234567890,
  • "subsample": 0,
  • "tr": 0,
  • "us": 0,
  • "w": 1920
}

Get Media File Screennail

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

A screennail is a low-res preview image that is higher resolution than a thumbnail.

-
query Parameters
path
required
string
Example: path=100GOPRO/GOPR0002.JPG

media file name

-

Responses

Response Schema: application/octet-stream
string <binary>

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/media/screennail?path=100GOPRO/GOPR0002.JPG'

Get Media File Telemetry

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

Get Media File Telemetry track data

-
query Parameters
path
required
string
Example: path=100GOPRO/GOPR0002.JPG

media file name

-

Responses

Response Schema: application/octet-stream
string <binary>

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/media/telemetry?path=100GOPRO/GOPR0002.JPG'

Get Media File Thumbnail

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-
query Parameters
path
required
string
Example: path=100GOPRO/GOPR0002.JPG

media file name

-

Responses

Response Schema: application/octet-stream
string <binary>

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/media/thumbnail?path=100GOPRO/GOPR0002.JPG'

Get Media List

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

To minimize the size of the JSON transmitted by the camera, grouped media items such as Burst Photos, -Time Lapse Photos, Night Lapse Photos, etc are represented with a single item in the media list with additional keys -that allow the user to extrapolate individual filenames for each member of the group.

-

Filenames for group media items have the form "GXXXYYYY.ZZZ" -where XXX is the group ID, YYY is the group member ID and ZZZ is the file extension.

-

For example, take the media list below, which contains a Time Lapse Photo group media item:

-
{
-    "id": "2530266050123724003",
-    "media": [
-        {
-            "d": "100GOPRO",
-            "fs" : [
-                {
-                    "b": "8",
-                    "cre": "1613669353",
-                    "g": "1",
-                    "l": "396",
-                    "m": ["75", "139"],
-                    "mod": "1613669353",
-                    "n": "G0010008.JPG",
-                    "s": "773977407",
-                    "t": "t"
-                }
-            ]
-        }
-    ]
-}
-
-

The first filename in the group is G0010008.JP (key: n).

-

The ID of the first group member in this case is 008 (key: b).

-

The ID of the last group member in this case is 396 (key: l).

-

The IDs of deleted members in this case are 75 and 139 (key: m)

-

Given this information, the user can extrapolate that the group currently contains

-
G0010008.JPG, G0010009.JPG, G0010010.JPG,
-...,
-G0010074.JPG, G0010076.JPG,
-...,
-G0010138.JPG, G0010140.JPG,
-...,
-G0010394.JPG, G0010395.JPG. G0010396.JPG
-
-

Responses

Response Schema: application/json
id
required
string
Example: "1554375628411872255"

media list identifier

-
required
Array of objects
Array
d
required
string
Example: "100GOPRO"

directory that the media files reside in

-
required
Array of SingleMediaListItem (object) or GroupedMediaListItem (object)

list of files

-
Array
Any of
n
required
string
Example: "GOPR0001.JPG"

Media filename

-
cre
required
integer
Example: "1696600109"

Creation time in seconds since epoch

-
mod
required
integer
Example: "1696600109"

Time file was last modified in seconds since epoch

-
s
required
integer
Example: "2806303"

Size of media in bytes

-
glrv
integer
Example: "817767"

Low resolution video size

-
ls
integer
Example: "-1"

Low resolution file size. -1 if there is no LRV file

-

Request samples

curl --request GET \
-  --url http://10.5.5.9:8080/gopro/media/list

Response samples

Content type
application/json
{
  • "id": "1554375628411872255",
  • "media": [
    ]
}

Models

Common data models used across operations

-

GroupedMediaListItem

n
required
string
Example: "G0010011.MP4"

Media filename

-
cre
required
integer
Example: "1696600109"

Creation time in seconds since epoch

-
mod
required
integer
Example: "1696600109"

Time file was last modified in seconds since epoch

-
g
required
integer
Example: "1"

Group Identifier

-
s
required
integer
Example: "5"

Number of files in the group

-
b
required
integer
Example: "1"

ID of first member in the group

-
l
required
integer
Example: "6"

ID of last member in the group

-
m
required
Array of integers
Example: "1,2"

File ID's that are missing or deleted

-
t
required
string
Enum: "b" "c" "n" "t"

Group Type (b -> burst, c -> continuous shot, n -> night lapse, t -> time lapse)

-
glrv
integer
Example: "817767"

Low resolution video size

-
id
string

Media list session identifier

-
ls
integer
Example: "-1"

Low resolution file size. -1 if there is no LRV file

-
{
  • "b": 1,
  • "cre": 1696600109,
  • "g": 1,
  • "glrv": 817767,
  • "id": "string",
  • "l": 6,
  • "ls": -1,
  • "m": [
    ],
  • "mod": 1696600109,
  • "n": "G0010011.MP4",
  • "s": 5,
  • "t": "b"
}

MediaList

id
required
string
Example: "1554375628411872255"

media list identifier

-
required
Array of objects
Array
d
required
string
Example: "100GOPRO"

directory that the media files reside in

-
required
Array of SingleMediaListItem (object) or GroupedMediaListItem (object)

list of files

-
Array
Any of
n
required
string
Example: "GOPR0001.JPG"

Media filename

-
cre
required
integer
Example: "1696600109"

Creation time in seconds since epoch

-
mod
required
integer
Example: "1696600109"

Time file was last modified in seconds since epoch

-
s
required
integer
Example: "2806303"

Size of media in bytes

-
glrv
integer
Example: "817767"

Low resolution video size

-
ls
integer
Example: "-1"

Low resolution file size. -1 if there is no LRV file

-
{
  • "id": "1554375628411872255",
  • "media": [
    ]
}

PhotoMetadata

ct
required
integer
Enum: 0 1 2 3 4 5 6 8 9 10 11 12

Media content type

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDMode
Video0
Looping1
Chaptered Video2
Time Lapse3
Single Photo4
Burst Photo5
Time Lapse Photo6
Night Lapse Photo8
Night Photo9
Continuous Photo10
Raw Photo11
Live Burst12
-
cre
required
integer
Example: "1692992748"

Creation time in seconds since epoch

-
s
required
integer
Example: "1234567890"

File size in bytes

-
gumi
required
string
Example: "12345678998765443211234567899875"

Globally Unique Media ID

-
h
required
integer
Example: "1080"

Height of media in pixels

-
w
required
integer
Example: "1920"

Width of media in pixels

-
hc
required
integer [ 0 .. 99 ]

Number of hilights in media

-
eis
required
integer
Enum: 0 1

1 if stabilized, 0 otherwise

-
mp
required
integer
Enum: 0 1

1 if metadata is present, 0 otherwise

-
rot
required
string

Deprecated

-
tr
required
integer
Enum: 0 1

1 if file is transcoded, 0 otherwise

-
us
required
integer
Enum: 0 1

Has the file been uploaded? 0 if no, 1 if yes

-
fov
string

Field of View

-
hdr
integer
Enum: 0 1

1 if photo taken with high dynamic range, 0 otherwise

-
lc
integer
Enum: 0 1

Lens configuration ==> 0 for front, 1 for rear

-
mos
Array of strings
Items Enum: "app" "pc" "other"
Example: "app,pc"

List of offload states

-
prjn
integer
Enum: 0 1 2 3 4 5 6 7 8

Lens projection

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDMode
EAC0
ERP1
EAC, split horizontally in the middle for 2 output2
ERP, cropped for panorama3
Bypass stitch algorithm, side by side circles4
Stitch is disabled, stitch algorithm is enabled for offline stitch5
Stitch is disabled6
Bypass stitch algorithm for EAC split7
Hemisheric8
-
raw
integer
Enum: 0 1

1 if photo has raw version, 0 otherwise

-
wdr
integer
Enum: 0 1

1 if photo taken with wide dynamic range, 0 otherwise

-
{
  • "cre": 1692992748,
  • "ct": 0,
  • "eis": 0,
  • "fov": "string",
  • "gumi": "12345678998765443211234567899875",
  • "h": 1080,
  • "hc": 99,
  • "hdr": 0,
  • "lc": 0,
  • "mos": [
    ],
  • "mp": 0,
  • "prjn": 0,
  • "raw": 0,
  • "rot": "string",
  • "s": 1234567890,
  • "tr": 0,
  • "us": 0,
  • "w": 1920,
  • "wdr": 0
}

Preset

icon
integer (EnumPresetIcon)
Enum: 0 1 2 3 4 5 6 7 8 9 10 11 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 58 59 60 61 62 63 64 65 66 67 70 71 73 74 75 76 77 78 79 1000 1001
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDNameSummary
0PRESET_ICON_VIDEO
1PRESET_ICON_ACTIVITY
2PRESET_ICON_CINEMATIC
3PRESET_ICON_PHOTO
4PRESET_ICON_LIVE_BURST
5PRESET_ICON_BURST
6PRESET_ICON_PHOTO_NIGHT
7PRESET_ICON_TIMEWARP
8PRESET_ICON_TIMELAPSE
9PRESET_ICON_NIGHTLAPSE
10PRESET_ICON_SNAIL
11PRESET_ICON_VIDEO_2
13PRESET_ICON_PHOTO_2
14PRESET_ICON_PANORAMA
15PRESET_ICON_BURST_2
16PRESET_ICON_TIMEWARP_2
17PRESET_ICON_TIMELAPSE_2
18PRESET_ICON_CUSTOM
19PRESET_ICON_AIR
20PRESET_ICON_BIKE
21PRESET_ICON_EPIC
22PRESET_ICON_INDOOR
23PRESET_ICON_MOTOR
24PRESET_ICON_MOUNTED
25PRESET_ICON_OUTDOOR
26PRESET_ICON_POV
27PRESET_ICON_SELFIE
28PRESET_ICON_SKATE
29PRESET_ICON_SNOW
30PRESET_ICON_TRAIL
31PRESET_ICON_TRAVEL
32PRESET_ICON_WATER
33PRESET_ICON_LOOPING
34PRESET_ICON_STARS
35PRESET_ICON_ACTION
36PRESET_ICON_FOLLOW_CAM
37PRESET_ICON_SURF
38PRESET_ICON_CITY
39PRESET_ICON_SHAKY
40PRESET_ICON_CHESTY
41PRESET_ICON_HELMET
42PRESET_ICON_BITE
58PRESET_ICON_BASIC
59PRESET_ICON_ULTRA_SLO_MO
60PRESET_ICON_STANDARD_ENDURANCE
61PRESET_ICON_ACTIVITY_ENDURANCE
62PRESET_ICON_CINEMATIC_ENDURANCE
63PRESET_ICON_SLOMO_ENDURANCE
64PRESET_ICON_STATIONARY_1
65PRESET_ICON_STATIONARY_2
66PRESET_ICON_STATIONARY_3
67PRESET_ICON_STATIONARY_4
70PRESET_ICON_SIMPLE_SUPER_PHOTO
71PRESET_ICON_SIMPLE_NIGHT_PHOTO
73PRESET_ICON_HIGHEST_QUALITY_VIDEO
74PRESET_ICON_STANDARD_QUALITY_VIDEO
75PRESET_ICON_BASIC_QUALITY_VIDEO
76PRESET_ICON_STAR_TRAIL
77PRESET_ICON_LIGHT_PAINTING
78PRESET_ICON_LIGHT_TRAIL
79PRESET_ICON_FULL_FRAME
1000PRESET_ICON_TIMELAPSE_PHOTO
1001PRESET_ICON_NIGHTLAPSE_PHOTO
-
id
integer <int32>

Unique preset identifier

-
isFixed
boolean

Is this preset mutable?

-
isModified
boolean

Has the preset been modified from the factory defaults?

-
mode
integer (EnumFlatMode)
Enum: -1 4 5 12 13 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDNameSummary
-1FLAT_MODE_UNKNOWN
4FLAT_MODE_PLAYBACK
5FLAT_MODE_SETUP
12FLAT_MODE_VIDEO
13FLAT_MODE_TIME_LAPSE_VIDEO
15FLAT_MODE_LOOPING
16FLAT_MODE_PHOTO_SINGLE
17FLAT_MODE_PHOTO
18FLAT_MODE_PHOTO_NIGHT
19FLAT_MODE_PHOTO_BURST
20FLAT_MODE_TIME_LAPSE_PHOTO
21FLAT_MODE_NIGHT_LAPSE_PHOTO
22FLAT_MODE_BROADCAST_RECORD
23FLAT_MODE_BROADCAST_BROADCAST
24FLAT_MODE_TIME_WARP_VIDEO
25FLAT_MODE_LIVE_BURST
26FLAT_MODE_NIGHT_LAPSE_VIDEO
27FLAT_MODE_SLOMO
28FLAT_MODE_IDLE
29FLAT_MODE_VIDEO_STAR_TRAIL
30FLAT_MODE_VIDEO_LIGHT_PAINTING
31FLAT_MODE_VIDEO_LIGHT_TRAIL
32FLAT_MODE_VIDEO_BURST_SLOMO
-
Array of objects (PresetSetting)
Array
id
integer <int32>

Setting identifier

-
isCaption
boolean

Does this setting appear on the Preset "pill" in the camera UI?

-
value
integer <int32>

Setting value

-
titleId
integer (EnumPresetTitle)
Enum: 0 1 2 3 4 5 6 7 8 9 10 11 13 14 16 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 82 83 93 94
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDNameSummary
0PRESET_TITLE_ACTIVITY
1PRESET_TITLE_STANDARD
2PRESET_TITLE_CINEMATIC
3PRESET_TITLE_PHOTO
4PRESET_TITLE_LIVE_BURST
5PRESET_TITLE_BURST
6PRESET_TITLE_NIGHT
7PRESET_TITLE_TIME_WARP
8PRESET_TITLE_TIME_LAPSE
9PRESET_TITLE_NIGHT_LAPSE
10PRESET_TITLE_VIDEO
11PRESET_TITLE_SLOMO
13PRESET_TITLE_PHOTO_2
14PRESET_TITLE_PANORAMA
16PRESET_TITLE_TIME_WARP_2
18PRESET_TITLE_CUSTOM
19PRESET_TITLE_AIR
20PRESET_TITLE_BIKE
21PRESET_TITLE_EPIC
22PRESET_TITLE_INDOOR
23PRESET_TITLE_MOTOR
24PRESET_TITLE_MOUNTED
25PRESET_TITLE_OUTDOOR
26PRESET_TITLE_POV
27PRESET_TITLE_SELFIE
28PRESET_TITLE_SKATE
29PRESET_TITLE_SNOW
30PRESET_TITLE_TRAIL
31PRESET_TITLE_TRAVEL
32PRESET_TITLE_WATER
33PRESET_TITLE_LOOPING
34PRESET_TITLE_STARS
35PRESET_TITLE_ACTION
36PRESET_TITLE_FOLLOW_CAM
37PRESET_TITLE_SURF
38PRESET_TITLE_CITY
39PRESET_TITLE_SHAKY
40PRESET_TITLE_CHESTY
41PRESET_TITLE_HELMET
42PRESET_TITLE_BITE
58PRESET_TITLE_BASIC
59PRESET_TITLE_ULTRA_SLO_MO
60PRESET_TITLE_STANDARD_ENDURANCE
61PRESET_TITLE_ACTIVITY_ENDURANCE
62PRESET_TITLE_CINEMATIC_ENDURANCE
63PRESET_TITLE_SLOMO_ENDURANCE
64PRESET_TITLE_STATIONARY_1
65PRESET_TITLE_STATIONARY_2
66PRESET_TITLE_STATIONARY_3
67PRESET_TITLE_STATIONARY_4
68PRESET_TITLE_SIMPLE_VIDEO
69PRESET_TITLE_SIMPLE_TIME_WARP
70PRESET_TITLE_SIMPLE_SUPER_PHOTO
71PRESET_TITLE_SIMPLE_NIGHT_PHOTO
72PRESET_TITLE_SIMPLE_VIDEO_ENDURANCE
73PRESET_TITLE_HIGHEST_QUALITY
74PRESET_TITLE_EXTENDED_BATTERY
75PRESET_TITLE_LONGEST_BATTERY
76PRESET_TITLE_STAR_TRAIL
77PRESET_TITLE_LIGHT_PAINTING
78PRESET_TITLE_LIGHT_TRAIL
79PRESET_TITLE_FULL_FRAME
82PRESET_TITLE_STANDARD_QUALITY_VIDEO
83PRESET_TITLE_BASIC_QUALITY_VIDEO
93PRESET_TITLE_HIGHEST_QUALITY_VIDEO
94PRESET_TITLE_USER_DEFINED_CUSTOM_NAME
-
titleNumber
integer <int32>

Preset title number

-
userDefined
boolean

Is this preset user defined?

-
{
  • "icon": 0,
  • "id": 0,
  • "isFixed": true,
  • "isModified": true,
  • "mode": -1,
  • "settingArray": [
    ],
  • "titleId": 0,
  • "titleNumber": 0,
  • "userDefined": true
}

PresetGroup

canAddPreset
boolean

Is there room in the group to add additional Presets?

-
icon
integer (EnumPresetGroupIcon)
Enum: 0 1 2 3 4 5 6 7
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDNameSummary
0PRESET_GROUP_VIDEO_ICON_ID
1PRESET_GROUP_PHOTO_ICON_ID
2PRESET_GROUP_TIMELAPSE_ICON_ID
3PRESET_GROUP_LONG_BAT_VIDEO_ICON_ID
4PRESET_GROUP_ENDURANCE_VIDEO_ICON_ID
5PRESET_GROUP_MAX_VIDEO_ICON_ID
6PRESET_GROUP_MAX_PHOTO_ICON_ID
7PRESET_GROUP_MAX_TIMELAPSE_ICON_ID
-
id
integer (EnumPresetGroup)
Enum: 1000 1001 1002
- - - - - - - - - - - - - - - - - - - - - - -
IDNameSummary
1000PRESET_GROUP_ID_VIDEO
1001PRESET_GROUP_ID_PHOTO
1002PRESET_GROUP_ID_TIMELAPSE
-
Array of objects (Preset)

Array of Presets contained in this Preset Group

-
Array
icon
integer (EnumPresetIcon)
Enum: 0 1 2 3 4 5 6 7 8 9 10 11 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 58 59 60 61 62 63 64 65 66 67 70 71 73 74 75 76 77 78 79 1000 1001
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDNameSummary
0PRESET_ICON_VIDEO
1PRESET_ICON_ACTIVITY
2PRESET_ICON_CINEMATIC
3PRESET_ICON_PHOTO
4PRESET_ICON_LIVE_BURST
5PRESET_ICON_BURST
6PRESET_ICON_PHOTO_NIGHT
7PRESET_ICON_TIMEWARP
8PRESET_ICON_TIMELAPSE
9PRESET_ICON_NIGHTLAPSE
10PRESET_ICON_SNAIL
11PRESET_ICON_VIDEO_2
13PRESET_ICON_PHOTO_2
14PRESET_ICON_PANORAMA
15PRESET_ICON_BURST_2
16PRESET_ICON_TIMEWARP_2
17PRESET_ICON_TIMELAPSE_2
18PRESET_ICON_CUSTOM
19PRESET_ICON_AIR
20PRESET_ICON_BIKE
21PRESET_ICON_EPIC
22PRESET_ICON_INDOOR
23PRESET_ICON_MOTOR
24PRESET_ICON_MOUNTED
25PRESET_ICON_OUTDOOR
26PRESET_ICON_POV
27PRESET_ICON_SELFIE
28PRESET_ICON_SKATE
29PRESET_ICON_SNOW
30PRESET_ICON_TRAIL
31PRESET_ICON_TRAVEL
32PRESET_ICON_WATER
33PRESET_ICON_LOOPING
34PRESET_ICON_STARS
35PRESET_ICON_ACTION
36PRESET_ICON_FOLLOW_CAM
37PRESET_ICON_SURF
38PRESET_ICON_CITY
39PRESET_ICON_SHAKY
40PRESET_ICON_CHESTY
41PRESET_ICON_HELMET
42PRESET_ICON_BITE
58PRESET_ICON_BASIC
59PRESET_ICON_ULTRA_SLO_MO
60PRESET_ICON_STANDARD_ENDURANCE
61PRESET_ICON_ACTIVITY_ENDURANCE
62PRESET_ICON_CINEMATIC_ENDURANCE
63PRESET_ICON_SLOMO_ENDURANCE
64PRESET_ICON_STATIONARY_1
65PRESET_ICON_STATIONARY_2
66PRESET_ICON_STATIONARY_3
67PRESET_ICON_STATIONARY_4
70PRESET_ICON_SIMPLE_SUPER_PHOTO
71PRESET_ICON_SIMPLE_NIGHT_PHOTO
73PRESET_ICON_HIGHEST_QUALITY_VIDEO
74PRESET_ICON_STANDARD_QUALITY_VIDEO
75PRESET_ICON_BASIC_QUALITY_VIDEO
76PRESET_ICON_STAR_TRAIL
77PRESET_ICON_LIGHT_PAINTING
78PRESET_ICON_LIGHT_TRAIL
79PRESET_ICON_FULL_FRAME
1000PRESET_ICON_TIMELAPSE_PHOTO
1001PRESET_ICON_NIGHTLAPSE_PHOTO
-
id
integer <int32>

Unique preset identifier

-
isFixed
boolean

Is this preset mutable?

-
isModified
boolean

Has the preset been modified from the factory defaults?

-
mode
integer (EnumFlatMode)
Enum: -1 4 5 12 13 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDNameSummary
-1FLAT_MODE_UNKNOWN
4FLAT_MODE_PLAYBACK
5FLAT_MODE_SETUP
12FLAT_MODE_VIDEO
13FLAT_MODE_TIME_LAPSE_VIDEO
15FLAT_MODE_LOOPING
16FLAT_MODE_PHOTO_SINGLE
17FLAT_MODE_PHOTO
18FLAT_MODE_PHOTO_NIGHT
19FLAT_MODE_PHOTO_BURST
20FLAT_MODE_TIME_LAPSE_PHOTO
21FLAT_MODE_NIGHT_LAPSE_PHOTO
22FLAT_MODE_BROADCAST_RECORD
23FLAT_MODE_BROADCAST_BROADCAST
24FLAT_MODE_TIME_WARP_VIDEO
25FLAT_MODE_LIVE_BURST
26FLAT_MODE_NIGHT_LAPSE_VIDEO
27FLAT_MODE_SLOMO
28FLAT_MODE_IDLE
29FLAT_MODE_VIDEO_STAR_TRAIL
30FLAT_MODE_VIDEO_LIGHT_PAINTING
31FLAT_MODE_VIDEO_LIGHT_TRAIL
32FLAT_MODE_VIDEO_BURST_SLOMO
-
Array of objects (PresetSetting)
Array
id
integer <int32>

Setting identifier

-
isCaption
boolean

Does this setting appear on the Preset "pill" in the camera UI?

-
value
integer <int32>

Setting value

-
titleId
integer (EnumPresetTitle)
Enum: 0 1 2 3 4 5 6 7 8 9 10 11 13 14 16 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 82 83 93 94
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDNameSummary
0PRESET_TITLE_ACTIVITY
1PRESET_TITLE_STANDARD
2PRESET_TITLE_CINEMATIC
3PRESET_TITLE_PHOTO
4PRESET_TITLE_LIVE_BURST
5PRESET_TITLE_BURST
6PRESET_TITLE_NIGHT
7PRESET_TITLE_TIME_WARP
8PRESET_TITLE_TIME_LAPSE
9PRESET_TITLE_NIGHT_LAPSE
10PRESET_TITLE_VIDEO
11PRESET_TITLE_SLOMO
13PRESET_TITLE_PHOTO_2
14PRESET_TITLE_PANORAMA
16PRESET_TITLE_TIME_WARP_2
18PRESET_TITLE_CUSTOM
19PRESET_TITLE_AIR
20PRESET_TITLE_BIKE
21PRESET_TITLE_EPIC
22PRESET_TITLE_INDOOR
23PRESET_TITLE_MOTOR
24PRESET_TITLE_MOUNTED
25PRESET_TITLE_OUTDOOR
26PRESET_TITLE_POV
27PRESET_TITLE_SELFIE
28PRESET_TITLE_SKATE
29PRESET_TITLE_SNOW
30PRESET_TITLE_TRAIL
31PRESET_TITLE_TRAVEL
32PRESET_TITLE_WATER
33PRESET_TITLE_LOOPING
34PRESET_TITLE_STARS
35PRESET_TITLE_ACTION
36PRESET_TITLE_FOLLOW_CAM
37PRESET_TITLE_SURF
38PRESET_TITLE_CITY
39PRESET_TITLE_SHAKY
40PRESET_TITLE_CHESTY
41PRESET_TITLE_HELMET
42PRESET_TITLE_BITE
58PRESET_TITLE_BASIC
59PRESET_TITLE_ULTRA_SLO_MO
60PRESET_TITLE_STANDARD_ENDURANCE
61PRESET_TITLE_ACTIVITY_ENDURANCE
62PRESET_TITLE_CINEMATIC_ENDURANCE
63PRESET_TITLE_SLOMO_ENDURANCE
64PRESET_TITLE_STATIONARY_1
65PRESET_TITLE_STATIONARY_2
66PRESET_TITLE_STATIONARY_3
67PRESET_TITLE_STATIONARY_4
68PRESET_TITLE_SIMPLE_VIDEO
69PRESET_TITLE_SIMPLE_TIME_WARP
70PRESET_TITLE_SIMPLE_SUPER_PHOTO
71PRESET_TITLE_SIMPLE_NIGHT_PHOTO
72PRESET_TITLE_SIMPLE_VIDEO_ENDURANCE
73PRESET_TITLE_HIGHEST_QUALITY
74PRESET_TITLE_EXTENDED_BATTERY
75PRESET_TITLE_LONGEST_BATTERY
76PRESET_TITLE_STAR_TRAIL
77PRESET_TITLE_LIGHT_PAINTING
78PRESET_TITLE_LIGHT_TRAIL
79PRESET_TITLE_FULL_FRAME
82PRESET_TITLE_STANDARD_QUALITY_VIDEO
83PRESET_TITLE_BASIC_QUALITY_VIDEO
93PRESET_TITLE_HIGHEST_QUALITY_VIDEO
94PRESET_TITLE_USER_DEFINED_CUSTOM_NAME
-
titleNumber
integer <int32>

Preset title number

-
userDefined
boolean

Is this preset user defined?

-
{
  • "canAddPreset": true,
  • "icon": 0,
  • "id": 1000,
  • "presetArray": [
    ]
}

PresetSetting

id
integer <int32>

Setting identifier

-
isCaption
boolean

Does this setting appear on the Preset "pill" in the camera UI?

-
value
integer <int32>

Setting value

-
{
  • "id": 0,
  • "isCaption": true,
  • "value": 0
}

SingleMediaListItem

n
required
string
Example: "GOPR0001.JPG"

Media filename

-
cre
required
integer
Example: "1696600109"

Creation time in seconds since epoch

-
mod
required
integer
Example: "1696600109"

Time file was last modified in seconds since epoch

-
s
required
integer
Example: "2806303"

Size of media in bytes

-
glrv
integer
Example: "817767"

Low resolution video size

-
ls
integer
Example: "-1"

Low resolution file size. -1 if there is no LRV file

-
{
  • "cre": 1696600109,
  • "glrv": 817767,
  • "ls": -1,
  • "mod": 1696600109,
  • "n": "GOPR0001.JPG",
  • "s": 2806303
}

State

object

All currently known setting values indexed by setting ID

-
2
integer
Enum: 1 4 6 7 9 18 24 25 26 27 28 100 107 108 109 110 111

Resolution

-

HERO12 Black -HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
14KHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
42.7KHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
62.7K 4:3HERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
71440HERO9 Black
91080HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
184K 4:3HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
245KHERO9 Black
255K 4:3HERO10 Black
265.3K 8:7HERO11 Black MiniHERO11 Black
275.3K 4:3HERO11 Black MiniHERO11 Black
284K 8:7HERO11 Black MiniHERO11 Black
1005.3KHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 Black
1075.3KHERO12 Black
1084KHERO12 Black
1094KHERO12 Black
1101080HERO12 Black
1112.7KHERO12 Black
-
3
integer
Enum: 0 1 2 5 6 8 9 10 13

Frames Per Second

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0240HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
1120HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
2100HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
560HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
650HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
830HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
925HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
1024HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
13200HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
-
43
integer
Enum: 0 2 3 4

Webcam Digital Lenses

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0WideHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
2NarrowHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
3SuperviewHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
4LinearHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
-
59
integer
Enum: 0 1 4 6 7 11 12

Auto Power Down

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0NeverHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
11 MinHERO12 BlackHERO11 Black MiniHERO11 Black
45 MinHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
615 MinHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
730 MinHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
118 SecondsHERO11 Black Mini
1230 SecondsHERO11 Black Mini
-
83
integer
Enum: 0 1

GPS

-

HERO11 Black -HERO10 Black - HERO9 Black

- - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0OffHERO11 BlackHERO10 BlackHERO9 Black
1OnHERO11 BlackHERO10 BlackHERO9 Black
-
108
integer
Enum: 0 1 3 4

Aspect Ratio

-

HERO12 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
04:3HERO12 Black
116:9HERO12 Black
38:7HERO12 Black
49:16HERO12 Black
-
121
integer
Enum: 0 2 3 4 7 8 9 10 11

Lens

-

HERO12 Black -HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0WideHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
2NarrowHERO10 BlackHERO9 Black
3SuperviewHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
4LinearHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
7Max SuperViewHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
8Linear + Horizon LevelingHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
9HyperViewHERO12 BlackHERO11 Black MiniHERO11 Black
10Linear + Horizon LockHERO12 BlackHERO11 Black MiniHERO11 Black
11Max HyperViewHERO12 Black
-
122
integer
Enum: 19 100 101 102

Lens

-

HERO12 Black -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
19NarrowHERO10 BlackHERO9 Black
100Max SuperViewHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
101WideHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
102LinearHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
-
123
integer
Enum: 19 100 101 102

Time Lapse Digital Lenses

-

HERO12 Black - HERO11 Black -HERO10 Black - HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
19NarrowHERO10 BlackHERO9 Black
100Max SuperViewHERO10 Black
101WideHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
102LinearHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
-
128
integer
Enum: 13 20 21 26

Media Format

-

HERO12 Black -HERO11 Black -HERO10 Black - HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
13Time Lapse VideoHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
20Time Lapse PhotoHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
21Night Lapse PhotoHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
26Night Lapse VideoHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
-
134
integer
Enum: 2 3

Anti-Flicker

-

HERO12 Black -HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
260HzHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
350HzHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
-
135
integer
Enum: 0 1 2 3 4 100

Hypersmooth

-

HERO12 Black -HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0OffHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
1LowHERO12 BlackHERO11 Black MiniHERO11 BlackHERO9 Black
2HighHERO10 BlackHERO9 Black
3BoostHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
4Auto BoostHERO12 BlackHERO11 Black MiniHERO11 Black
100StandardHERO10 Black
-
150
integer
Enum: 0 2

Horizon Leveling

-

HERO11 Black

- - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0OffHERO11 Black
2LockedHERO11 Black
-
151
integer
Enum: 0 2

Horizon Leveling

-

HERO11 Black

- - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0OffHERO11 Black
2LockedHERO11 Black
-
162
integer
Enum: 0 1

Max Lens

-

HERO11 Black -HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0OffHERO11 BlackHERO10 BlackHERO9 Black
1OnHERO11 BlackHERO10 BlackHERO9 Black
-
167
integer
Enum: 2 3 4

HindSight

-

HERO12 Black -HERO11 Black -HERO10 Black - HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
215 SecondsHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
330 SecondsHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
4OffHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
-
171
integer
Enum: 0 2 3 4 5 6 7 8 9 10

Interval

-

HERO12 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0OffHERO12 Black
20.5sHERO12 Black
31sHERO12 Black
42sHERO12 Black
55sHERO12 Black
610sHERO12 Black
730sHERO12 Black
860sHERO12 Black
9120sHERO12 Black
103sHERO12 Black
-
172
integer
Enum: 0 1 2 3 4 5 6 7 8 9

Duration

-

HERO12 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0OffHERO12 Black
115 SecondsHERO12 Black
230 SecondsHERO12 Black
31 MinuteHERO12 Black
45 MinutesHERO12 Black
515 MinutesHERO12 Black
630 MinutesHERO12 Black
71 HourHERO12 Black
82 HoursHERO12 Black
93 HoursHERO12 Black
-
173
integer
Enum: 0 1 2

Video Performance Mode

-

HERO10 Black

- - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0Maximum Video PerformanceHERO10 Black
1Extended BatteryHERO10 Black
2Tripod / Stationary VideoHERO10 Black
-
175
integer
Enum: 0 1

Controls

-

HERO12 Black -HERO11 Black

- - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0EasyHERO12 BlackHERO11 Black
1ProHERO12 BlackHERO11 Black
-
176
integer
Enum: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137

Easy Mode Speed

-

HERO12 Black - HERO11 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
08X Ultra Slo-MoHERO11 Black
14X Super Slo-MoHERO11 Black
22X Slo-MoHERO11 Black
31X Speed (Low Light)HERO11 Black
44X Super Slo-Mo (Ext. Batt.)HERO11 Black
52X Slo-Mo (Ext. Batt.)HERO11 Black
61X Speed (Ext. Batt.) (Low Light)HERO11 Black
78X Ultra Slo-Mo (50Hz)HERO11 Black
84X Super Slo-Mo (50Hz)HERO11 Black
92X Slo-Mo (50Hz)HERO11 Black
101X Speed (50Hz) (Low Light)HERO11 Black
114X Super Slo-Mo (50Hz) (Ext. Batt.)HERO11 Black
122X Slo-Mo (50Hz) (Ext. Batt.)HERO11 Black
131X Speed (50Hz) (Ext. Batt.) (Low Light)HERO11 Black
148X Ultra Slo-Mo (Ext. Batt.)HERO11 Black
158X Ultra Slo-Mo (50Hz) (Ext. Batt.)HERO11 Black
168X Ultra Slo-Mo (Long. Batt.)HERO11 Black
174X Super Slo-Mo (Long. Batt.)HERO11 Black
182X Slo-Mo (Long. Batt.)HERO11 Black
191X Speed (Long. Batt.) (Low Light)HERO11 Black
208X Ultra Slo-Mo (50Hz) (Long. Batt.)HERO11 Black
214X Super Slo-Mo (50Hz) (Long. Batt.)HERO11 Black
222X Slo-Mo (50Hz) (Long. Batt.)HERO11 Black
231X Speed (50Hz) (Long. Batt.) (Low Light)HERO11 Black
242X Slo-Mo (4K)HERO11 Black
254X Super Slo-Mo (2.7K)HERO11 Black
262X Slo-Mo (4K) (50Hz)HERO11 Black
274X Super Slo-Mo (2.7K) (50Hz)HERO11 Black
1008X Ultra Slo-Mo (V2)HERO12 Black
1014X Super Slo-Mo (V2)HERO12 Black
1022X Slo-Mo (V2)HERO12 Black
1031X Speed (Low Light) (V2)HERO12 Black
1048X Ultra Slo-Mo (50Hz) (V2)HERO12 Black
1054X Super Slo-Mo (50Hz) (V2)HERO12 Black
1062X Slo-Mo (50Hz) (V2)HERO12 Black
1071X Speed (50Hz) (Low Light) (V2)HERO12 Black
1088X Ultra Slo-Mo (Long. Batt.) (V2)HERO12 Black
1094X Super Slo-Mo (Long. Batt.) (V2)HERO12 Black
1102X Slo-Mo (Long. Batt.) (V2)HERO12 Black
1111X Speed (Long. Batt.) (Low Light) (V2)HERO12 Black
1128X Ultra Slo-Mo (50Hz) (Long. Batt.) (V2)HERO12 Black
1134X Super Slo-Mo (50Hz) (Long. Batt.) (V2)HERO12 Black
1142X Slo-Mo (50Hz) (Long. Batt.) (V2)HERO12 Black
1151X Speed (50Hz) (Long. Batt.) (Low Light) (V2)HERO12 Black
1162X Slo-Mo (4K) (V2)HERO12 Black
1172X Slo-Mo (4K) (50Hz) (V2)HERO12 Black
1181X Speed (Low Light) (V2) (Vertical)HERO12 Black
1191X Speed (50Hz) (Low Light) (V2) (Vertical)HERO12 Black
1202X Slo-Mo (V2) (Vertical)HERO12 Black
1212X Slo-Mo (50Hz) (V2) (Vertical)HERO12 Black
1221X Speed (Full Frame) (Low Light) (V2)HERO12 Black
1231X Speed (50Hz) (Full Frame) (Low Light) (V2)HERO12 Black
1242X Slo-Mo (Full Frame) (V2)HERO12 Black
1252X Slo-Mo (50Hz) (Full Frame) (V2)HERO12 Black
1261X Speed (4K) (Low Light) (V2)HERO12 Black
1271X Speed (4K) (50Hz) (Low Light) (V2)HERO12 Black
1281X Speed (2.7K) (Low Light) (V2)HERO12 Black
1291X Speed (2.7K) (50Hz) (Low Light) (V2)HERO12 Black
1302X Slo-Mo (2.7K) (V2)HERO12 Black
1312X Slo-Mo (2.7K) (50Hz) (V2)HERO12 Black
1322X Slo-Mo (Long. Batt.) (V2) (Vertical)HERO12 Black
1332X Slo-Mo (50Hz) (Long. Batt.) (V2) (Vertical)HERO12 Black
1341X Speed (Long. Batt.) (Low Light) (V2) (Vertical)HERO12 Black
1351X Speed (50Hz) (Long. Batt.) (Low Light) (V2) (Vertical)HERO12 Black
1361X Speed (4K) (Full Frame) (Low Light) (V2)HERO12 Black
1371X Speed (4K) (50Hz) (Full Frame) (Low Light) (V2)HERO12 Black
-
177
integer
Enum: 0 1

Enable Night Photo

-

HERO11 Black

- - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0OffHERO11 Black
1OnHERO11 Black
-
178
integer
Enum: 0 1

Wireless Band

-

HERO12 Black -HERO11 Black Mini -HERO11 Black

- - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
02.4GHzHERO12 BlackHERO11 Black MiniHERO11 Black
15GHzHERO12 BlackHERO11 Black MiniHERO11 Black
-
179
integer
Enum: 1 2 3

Trail Length

-

HERO12 Black -HERO11 Black Mini -HERO11 Black

- - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
1ShortHERO12 BlackHERO11 Black MiniHERO11 Black
2LongHERO12 BlackHERO11 Black MiniHERO11 Black
3MaxHERO12 BlackHERO11 Black MiniHERO11 Black
-
180
integer
Enum: 0 101 102

Video Mode

-

HERO11 Black

- - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0Highest QualityHERO11 Black
101Extended Battery (Green Icon)HERO11 Black
102Longest Battery (Green Icon)HERO11 Black
-
182
integer
Enum: 0 1

Bit Rate

-

HERO12 Black

- - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0StandardHERO12 Black
1HighHERO12 Black
-
183
integer
Enum: 0 2

Bit Depth

-

HERO12 Black

- - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
08-BitHERO12 Black
210-BitHERO12 Black
-
184
integer
Enum: 0 1 2

Profiles

-

HERO12 Black

- - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0StandardHERO12 Black
1HDRHERO12 Black
2LogHERO12 Black
-
186
integer
Enum: 0 1 2

Video Mode

-

HERO12 Black

- - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0Highest QualityHERO12 Black
1Standard QualityHERO12 Black
2Basic QualityHERO12 Black
-
187
integer
Enum: 0 1 2 3 4 5 6 7

Lapse Mode

-

HERO12 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0TimeWarpHERO12 Black
1Star TrailsHERO12 Black
2Light PaintingHERO12 Black
3Vehicle LightsHERO12 Black
4Max TimeWarpHERO12 Black
5Max Star TrailsHERO12 Black
6Max Light PaintingHERO12 Black
7Max Vehicle LightsHERO12 Black
-
189
integer
Enum: 0 1 2

Max Lens Mod

-

HERO12 Black

- - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0NoneHERO12 Black
1Max Lens 1.0HERO12 Black
2Max Lens 2.0HERO12 Black
-
190
integer
Enum: 0 1

Max Lens Mod Enable

-

HERO12 Black

- - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0OffHERO12 Black
1OnHERO12 Black
-
191
integer
Enum: 0 1

Photo Mode

-

HERO12 Black

- - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0Super PhotoHERO12 Black
1Night PhotoHERO12 Black
-
192
integer
Enum: 0 1 3

Aspect Ratio

-

HERO12 Black

- - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
04:3HERO12 Black
116:9HERO12 Black
38:7HERO12 Black
-
193
integer
Enum: 0 1 2

Framing

-

HERO12 Black

- - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0WidescreenHERO12 Black
1VerticalHERO12 Black
2Full FrameHERO12 Black
-
object

All currently known status values indexed by status ID

-
1
integer
Enum: 0 1

Is the system's internal battery present?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
2
integer
Enum: 0 1 2 3 4

Rough approximation of internal battery level in bars (or charging)

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaning
0Zero
1One
2Two
3Three
4Charging
-
6
integer
Enum: 0 1

Is the system currently overheating?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
8
integer
Enum: 0 1

Is the camera busy?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
9
integer
Enum: 0 1

Is Quick Capture feature enabled?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
10
integer
Enum: 0 1

Is the system currently encoding?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
11
integer
Enum: 0 1

Is LCD lock active?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
13
integer

When encoding video, this is the duration (seconds) of the video so far; 0 otherwise

-

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-
17
integer
Enum: 0 1

Are Wireless Connections enabled?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
19
integer
Enum: 0 1 2 3 4

The pairing state of the camera

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaning
0Never Started
1Started
2Aborted
3Cancelled
4Completed
-
20
integer
Enum: 0 1 2 3

The last type of pairing in which the camera was engaged

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaning
0Not Pairing
1Pairing App
2Pairing Remote Control
3Pairing Bluetooth Device
-
21
integer

Time since boot (milliseconds) of last successful pairing complete action

-

HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
22
integer
Enum: 0 1 2 3 4

State of current scan for WiFi Access Points

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaning
0Never started
1Started
2Aborted
3Canceled
4Completed
-
23
integer

Time since boot (milliseconds) that the WiFi Access Point scan completed

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
24
integer
Enum: 0 1 2 3 4

WiFi AP provisioning state

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaning
0Never started
1Started
2Aborted
3Canceled
4Completed
-
26
integer

Wireless remote control version

-

HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-
27
integer
Enum: 0 1

Is a wireless remote control connected?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
28
integer

Wireless Pairing State. Each bit contains state information (see WirelessPairingStateFlags)

-

HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
29
string

SSID of the AP the camera is currently connected to. On BLE connection, value is big-endian byte-encoded int32

-

HERO12 Black -HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
30
string

The camera's WiFi SSID. On BLE connection, value is big-endian byte-encoded int32

-

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-
31
integer

The number of wireless devices connected to the camera

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
32
integer
Enum: 0 1

Is Preview Stream enabled?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
33
integer
Enum: -1 0 1 2 3 4 8

Primary Storage Status

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaning
-1Unknown
0OK
1SD Card Full
2SD Card Removed
3SD Card Format Error
4SD Card Busy
8SD Card Swapped
-
34
integer

How many photos can be taken with current settings before sdcard is full

-

HERO12 Black - HERO11 Black -HERO10 Black - HERO9 Black

-
35
integer

How many minutes of video can be captured with current settings before sdcard is full

-

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-
38
integer

Total number of photos on sdcard

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
39
integer

Total number of videos on sdcard

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
41
integer
Enum: 0 1 2 3 4 5 6 7 8 9 10

The current status of Over The Air (OTA) update

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaning
0Idle
1Downloading
2Verifying
3Download Failed
4Verify Failed
5Ready
6GoPro App: Downloading
7GoPro App: Verifying
8GoPro App: Download Failed
9GoPro App: Verify Failed
10GoPro App: Ready
-
42
integer
Enum: 0 1

Is there a pending request to cancel a firmware update download?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
45
integer
Enum: 0 1

Is locate camera feature active?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
49
integer

The current timelapse interval countdown value (e.g. 5...4...3...2...1...)

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
54
integer

Remaining space on the sdcard in Kilobytes

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
55
integer
Enum: 0 1

Is preview stream supported in current recording/mode/secondary-stream?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
56
integer

WiFi signal strength in bars

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
58
integer

The number of hilights in currently-encoding video (value is set to 0 when encoding stops)

-

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-
59
integer

Time since boot (milliseconds) of most recent hilight in encoding video (set to 0 when encoding stops)

-

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-
60
integer

The minimum time between camera status updates (milliseconds). Best practice is to not poll for status more often than this

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
65
integer
Enum: 0 1 2 3

Liveview Exposure Select Mode

-

HERO12 Black - HERO11 Black -HERO10 Black - HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaning
0Disabled
1Auto
2ISO Lock
3Hemisphere
-
66
integer [ 0 .. 100 ]

Liveview Exposure Select: y-coordinate (percent)

-

HERO12 Black - HERO11 Black -HERO10 Black - HERO9 Black

-
67
integer [ 0 .. 100 ]

Liveview Exposure Select: y-coordinate (percent)

-

HERO12 Black - HERO11 Black -HERO10 Black - HERO9 Black

-
68
integer
Enum: 0 1

Does the camera currently have a GPS lock?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
69
integer
Enum: 0 1

Is AP mode enabled?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
70
integer [ 0 .. 100 ]

Internal battery level (percent)

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
74
integer
Enum: 0 1 2

Microphone Accessory status

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - -
ValueMeaning
0Accessory not connected
1Accessory connected
2Accessory connected and a microphone is plugged into the accessory
-
75
integer [ 0 .. 100 ]

Digital Zoom level (percent)

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
76
integer
Enum: 0 1

Wireless Band

-

HERO12 Black -HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - -
ValueMeaning
02.4 GHz
15 GHz
-
77
integer
Enum: 0 1

Is Digital Zoom feature available?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
78
integer
Enum: 0 1

Are current video settings mobile friendly? (related to video compression and frame rate)

-

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-
79
integer
Enum: 0 1

Is the camera currently in First Time Use (FTU) UI flow?

-

HERO10 Black - HERO9 Black

-
81
integer
Enum: 0 1

Is 5GHz wireless band available?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
82
integer
Enum: 0 1

Is the system fully booted and ready to accept commands?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
83
integer
Enum: 0 1

Is the internal battery charged sufficiently to start Over The Air (OTA) update?

-

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-
85
integer
Enum: 0 1

Is the camera getting too cold to continue recording?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
86
integer
Enum: 0 1 2 3

Rotational orientation of the camera

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaning
00 degrees (upright)
1180 degrees (upside down)
290 degrees (laying on right side)
3270 degrees (laying on left side)
-
88
integer
Enum: 0 1

Is this camera model capable of zooming while encoding?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
89
integer

Current Flatmode ID

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
93
integer

Current Video Preset (ID)

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
94
integer

Current Photo Preset (ID)

-

HERO12 Black - HERO11 Black -HERO10 Black - HERO9 Black

-
95
integer

Current Time Lapse Preset (ID)

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
96
integer

Current Preset Group (ID) (corresponds to ui_mode_groups in settings.json)

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
97
integer

Current Preset (ID)

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
98
integer

Preset Modified Status, which contains an event ID and a Preset (Group) ID

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
99
integer

The number of Live Bursts can be captured with current settings before sdcard is full

-

HERO11 Black -HERO10 Black - HERO9 Black

-
100
integer

Total number of Live Bursts on sdcard

-

HERO11 Black - HERO10 Black -HERO9 Black

-
101
integer
Enum: 0 1

Is Capture Delay currently active (i.e. counting down)?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
102
integer
Enum: 0 2 3

Media Mod state

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - -
ValueMeaning
0Media Mod microphone removed
2Media Mod microphone only
3Media Mod microphone with external microphone
-
103
integer
Enum: 0 1 2 3 4 5 6 7 8 9 10 11 12

Time Warp Speed

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaning
015x
130x
260x
3150x
4300x
5900x
61800x
72x
85x
910x
10Auto
111x (realtime)
121/2x (slow-motion)
-
104
integer
Enum: 0 1

Is the system's Linux core active?

-

HERO10 Black - HERO9 Black

-
105
integer
Enum: 0 1 2

Camera lens type (reflects changes to lens settings such as 162, 189, 194, ...)

-

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

- - - - - - - - - - - - - - - - - - - -
ValueMeaning
0Default
1Max Lens
2Max Lens 2.0
-
106
integer
Enum: 0 1

Is Video Hindsight Capture Active?

-

HERO12 Black - HERO11 Black -HERO10 Black - HERO9 Black

-
107
integer

Scheduled Capture Preset ID

-

HERO12 Black - HERO11 Black -HERO10 Black - HERO9 Black

-
108
integer
Enum: 0 1

Is Scheduled Capture set?

-

HERO12 Black - HERO11 Black -HERO10 Black - HERO9 Black

-
110
integer
Enum: 0 1 2 3 4 5 6 7

Display Mod Status (bitmasked)

-

HERO12 Black - HERO11 Black -HERO10 Black - HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaning
0000 = Display Mod: 0, HDMI: 0, Display Mod Connected: False
1001 = Display Mod: 0, HDMI: 0, Display Mod Connected: True
2010 = Display Mod: 0, HDMI: 1, Display Mod Connected: False
3011 = Display Mod: 0, HDMI: 1, Display Mod Connected: True
4100 = Display Mod: 1, HDMI: 0, Display Mod Connected: False
5101 = Display Mod: 1, HDMI: 0, Display Mod Connected: True
6110 = Display Mod: 1, HDMI: 1, Display Mod Connected: False
7111 = Display Mod: 1, HDMI: 1, Display Mod Connected: True
-
111
integer
Enum: 0 1

Does sdcard meet specified minimum write speed?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black

-
112
integer

Number of sdcard write speed errors since device booted

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black

-
113
integer
Enum: 0 1

Is Turbo Transfer active?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
114
integer
Enum: 0 1 2

Camera control status ID

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black

- - - - - - - - - - - - - - - - - - - -
ValueMeaning
0Camera Idle: No one is attempting to change camera settings
1Camera Control: Camera is in a menu or changing settings. To intervene, app must request control
2Camera External Control: An outside entity (app) has control and is in a menu or modifying settings
-
115
integer
Enum: 0 1

Is the camera connected to a PC via USB?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black

-
116
integer
Enum: 0 1

Camera control over USB state

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black

- - - - - - - - - - - - - - - -
ValueMeaning
0Disabled
1Enabled
-
117
integer

Total SD card capacity in Kilobytes

-

HERO12 Black - HERO11 Black Mini -HERO11 Black

-
118
integer

Photo interval capture count

-

HERO12 Black

-
{
  • "settings": {
    },
  • "status": {
    }
}

VideoMetadata

ct
required
integer
Enum: 0 1 2 3 4 5 6 8 9 10 11 12

Media content type

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDMode
Video0
Looping1
Chaptered Video2
Time Lapse3
Single Photo4
Burst Photo5
Time Lapse Photo6
Night Lapse Photo8
Night Photo9
Continuous Photo10
Raw Photo11
Live Burst12
-
cre
required
integer
Example: "1692992748"

Creation time in seconds since epoch

-
s
required
integer
Example: "1234567890"

File size in bytes

-
gumi
required
string
Example: "12345678998765443211234567899875"

Globally Unique Media ID

-
h
required
integer
Example: "1080"

Height of media in pixels

-
w
required
integer
Example: "1920"

Width of media in pixels

-
hc
required
integer [ 0 .. 99 ]

Number of hilights in media

-
eis
required
integer
Enum: 0 1

1 if stabilized, 0 otherwise

-
mp
required
integer
Enum: 0 1

1 if metadata is present, 0 otherwise

-
rot
required
string

Deprecated

-
tr
required
integer
Enum: 0 1

1 if file is transcoded, 0 otherwise

-
us
required
integer
Enum: 0 1

Has the file been uploaded? 0 if no, 1 if yes

-
ao
required
string
Enum: "auto" "wind" "stereo" "off"
Example: "auto"

Audio option

-
profile
required
integer [ 0 .. 255 ]

Advanced Video Codec Level

-
avc_profile
required
integer [ 0 .. 255 ]
Example: "0"

Advanced Video Code Profile

-
cl
required
integer
Enum: 0 1

1 if clipped, 0 otherwise

-
dur
required
integer
Example: "42"

Video duration in seconds

-
fps
required
integer
Example: "1001"

Video frame rate numerator

-
fps_denom
required
integer
Example: "30000"

Video frame rate denominator

-
ls
required
integer [ -1 .. 1234567890 ]

Low Resolution Video file size in bytes. -1 if there is no LRV file

-
pta
required
integer
Enum: 0 1

1 if protune audio is present, 0 otherwise

-
subsample
required
integer
Enum: 0 1

1 if subsampled from other video, 0 otherwise

-
fov
string

Field of View

-
hi
Array of integers
Example: "1500,4700"

List of hilights in ms offset from start of video

-
lc
integer
Enum: 0 1

Lens configuration ==> 0 for front, 1 for rear

-
mos
Array of strings
Items Enum: "app" "pc" "other"
Example: "app,pc"

List of offload states

-
prjn
integer
Enum: 0 1 2 3 4 5 6 7 8

Lens projection

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDMode
EAC0
ERP1
EAC, split horizontally in the middle for 2 output2
ERP, cropped for panorama3
Bypass stitch algorithm, side by side circles4
Stitch is disabled, stitch algorithm is enabled for offline stitch5
Stitch is disabled6
Bypass stitch algorithm for EAC split7
Hemisheric8
-
progr
integer
Enum: 0 1

Is video progressive? 1 if progressive, 0 if interlaced

-
{
  • "ao": "auto",
  • "avc_profile": 0,
  • "cl": 0,
  • "cre": 1692992748,
  • "ct": 0,
  • "dur": 42,
  • "eis": 0,
  • "fov": "string",
  • "fps": 1001,
  • "fps_denom": 30000,
  • "gumi": "12345678998765443211234567899875",
  • "h": 1080,
  • "hc": 99,
  • "hi": [
    ],
  • "lc": 0,
  • "ls": -1,
  • "mos": [
    ],
  • "mp": 0,
  • "prjn": 0,
  • "profile": 255,
  • "progr": 0,
  • "pta": 0,
  • "rot": "string",
  • "s": 1234567890,
  • "subsample": 0,
  • "tr": 0,
  • "us": 0,
  • "w": 1920
}

OTA

The Over The Air (OTA) update feature allows the user to update the camera's firmware via HTTP connection. There are -two ways to perform OTA updates: Simple OTA Update and Resumable OTA Update.

-

Firmware update files can be obtained from GoPro's update page or programmatically -using the firmware catalog.

-
-

In order to complete the firmware update process, the camera will reboot one or more times. This will cause any -existing HTTP connections to be lost.

-
-

Simple OTA Update

The simple OTA update process is done by sending an entire update file to the camera in a single HTTP/POST. Details can -be found in the diagram below.

-

simple ota state diagram

-

Resumable OTA Update

The resumable OTA update process involves uploading chunks (or all) of a file, marking the file complete and then telling -the camera to begin the update process. Chunks are stored until they are explicitly deleted, allowing the client to stop -and resume as needed. Details can be found in the diagram below.

-

simple ota state diagram

-

Resumable OTA Update

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

Perform Resumable OTA Update

-

To send a portion of the OTA image as per the requestBody specification, do not use the request parameter.

-
query Parameters
request
string
Enum: "delete" "showui" "start" "progress" "cancelled"
Example: request=progress

Optional request parameter to control / query OTA functionality.

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParameterBehavior
deleteDelete any old / cached OTA data
showuiDisplay the update OSD on the camera UI
startStart updating firmware with received OTA image
progressGet the current firmware update progress
cancelledshow canceled/failed ui on the camera
-
Request Body schema: multipart/form-data

OTA image chunk used when executed with no request parameter

-
file
string <binary>

Binary file

-
offset
integer

Offset (in bytes) into the file data to start reading from

-
sha1
string

SHA of the complete firmware upload zip file

-

Responses

Response Schema: application/json
bytes_complete
integer
complete
boolean
message
string
sha1
string
status
integer (OtaStatus)
Enum: 0 1 2 3 4 5 6 7 8 9 10 11 12

OTA Status

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDStatusDescription
0OKNo errors occurred
1Unknown RequestServer did not recognize the request
2Bad ParamsParameter values not recognized
3SHA1 Send MismatchSHA1 for chunk did not match SHA1 of previous chunk(s)
4SHA1 Calculated MismatchCalculated SHA1 did not match user-specified SHA1
5HTTP Boundary ErrorHTTP Post was malformed
6HTTP Post ErrorUnexpected HTTP / Post Content Type
7Server BusyHTTP server is busy
8Offset MismatchAttempt to upload chunk with offset that did not align with previous chunk
9Bad Post DataServer failed to parse POST data
10File IncompleteTried to start update before server finished validating .zip file
11Update in progressFirmware update is in progress
12Insufficient SpaceInsufficient space on the sdcard to hold decompressed update file
-

Request samples

curl --request POST \
-  --url 'http://10.5.5.9:8080/gp/gpSoftUpdate?request=progress' \
-  --header 'content-type: multipart/form-data'

Response samples

Content type
application/json
{
  • "bytes_complete": 0,
  • "complete": true,
  • "message": "string",
  • "sha1": "string",
  • "status": 0
}

Simple OTA Update

HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-
Request Body schema: multipart/form-data
DirectToSD
integer

Always set to 1

-
file
string <binary>

Binary file

-
sha1
string

SHA of the complete firmware upload zip file

-
update
integer

Always set to 1

-

Responses

Response Schema: application/json
status
integer (OtaStatus)
Enum: 0 1 2 3 4 5 6 7 8 9 10 11 12

OTA Status

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDStatusDescription
0OKNo errors occurred
1Unknown RequestServer did not recognize the request
2Bad ParamsParameter values not recognized
3SHA1 Send MismatchSHA1 for chunk did not match SHA1 of previous chunk(s)
4SHA1 Calculated MismatchCalculated SHA1 did not match user-specified SHA1
5HTTP Boundary ErrorHTTP Post was malformed
6HTTP Post ErrorUnexpected HTTP / Post Content Type
7Server BusyHTTP server is busy
8Offset MismatchAttempt to upload chunk with offset that did not align with previous chunk
9Bad Post DataServer failed to parse POST data
10File IncompleteTried to start update before server finished validating .zip file
11Update in progressFirmware update is in progress
12Insufficient SpaceInsufficient space on the sdcard to hold decompressed update file
-

Request samples

curl --request POST \
-  --url http://10.5.5.9:8080/gp/gpUpdate \
-  --header 'content-type: multipart/form-data'

Response samples

Content type
application/json
{
  • "status": 0
}

Presets

Presets

The camera organizes many modes of operation into Presets.

-
-

Note: The Preset ID is required to load a Preset via Load Preset.

-
-

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:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDSetting
162Max Lens
173Video Performance Mode
175Controls
177Enable Night Photo
180Video Mode
186Video Mode
187Lapse Mode
189Max Lens Mod
190Max Lens Mod Enable
191Photo Mode
-

Preset Groups

Presets are organized into Preset Groups.

-

To find the currently available Presets / Preset Groups, use Get Preset Status.

-

Get Available Presets

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

Get the currently available Preset Groups and Presets, the set of which -depends on the current camera settings.

-

Responses

Response Schema: application/json
Array of objects

A list of ranges of icon ID's available for custom presets.

-
Array
length
integer
Example: "10"

number of items in the range

-
start
integer
Example: "0"

start index of range

-
Array of objects

A list of ranges of title ID's available for custom presets.

-
Array
length
integer
Example: "25"

number of items in the range

-
start
integer
Example: "18"

start index of range

-
Array of objects (PresetGroup)

Array of Preset Groups

-
Array
canAddPreset
boolean

Is there room in the group to add additional Presets?

-
icon
integer (EnumPresetGroupIcon)
Enum: 0 1 2 3 4 5 6 7
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDNameSummary
0PRESET_GROUP_VIDEO_ICON_ID
1PRESET_GROUP_PHOTO_ICON_ID
2PRESET_GROUP_TIMELAPSE_ICON_ID
3PRESET_GROUP_LONG_BAT_VIDEO_ICON_ID
4PRESET_GROUP_ENDURANCE_VIDEO_ICON_ID
5PRESET_GROUP_MAX_VIDEO_ICON_ID
6PRESET_GROUP_MAX_PHOTO_ICON_ID
7PRESET_GROUP_MAX_TIMELAPSE_ICON_ID
-
id
integer (EnumPresetGroup)
Enum: 1000 1001 1002
- - - - - - - - - - - - - - - - - - - - - - -
IDNameSummary
1000PRESET_GROUP_ID_VIDEO
1001PRESET_GROUP_ID_PHOTO
1002PRESET_GROUP_ID_TIMELAPSE
-
Array of objects (Preset)

Array of Presets contained in this Preset Group

-
Array
icon
integer (EnumPresetIcon)
Enum: 0 1 2 3 4 5 6 7 8 9 10 11 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 58 59 60 61 62 63 64 65 66 67 70 71 73 74 75 76 77 78 79 1000 1001
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDNameSummary
0PRESET_ICON_VIDEO
1PRESET_ICON_ACTIVITY
2PRESET_ICON_CINEMATIC
3PRESET_ICON_PHOTO
4PRESET_ICON_LIVE_BURST
5PRESET_ICON_BURST
6PRESET_ICON_PHOTO_NIGHT
7PRESET_ICON_TIMEWARP
8PRESET_ICON_TIMELAPSE
9PRESET_ICON_NIGHTLAPSE
10PRESET_ICON_SNAIL
11PRESET_ICON_VIDEO_2
13PRESET_ICON_PHOTO_2
14PRESET_ICON_PANORAMA
15PRESET_ICON_BURST_2
16PRESET_ICON_TIMEWARP_2
17PRESET_ICON_TIMELAPSE_2
18PRESET_ICON_CUSTOM
19PRESET_ICON_AIR
20PRESET_ICON_BIKE
21PRESET_ICON_EPIC
22PRESET_ICON_INDOOR
23PRESET_ICON_MOTOR
24PRESET_ICON_MOUNTED
25PRESET_ICON_OUTDOOR
26PRESET_ICON_POV
27PRESET_ICON_SELFIE
28PRESET_ICON_SKATE
29PRESET_ICON_SNOW
30PRESET_ICON_TRAIL
31PRESET_ICON_TRAVEL
32PRESET_ICON_WATER
33PRESET_ICON_LOOPING
34PRESET_ICON_STARS
35PRESET_ICON_ACTION
36PRESET_ICON_FOLLOW_CAM
37PRESET_ICON_SURF
38PRESET_ICON_CITY
39PRESET_ICON_SHAKY
40PRESET_ICON_CHESTY
41PRESET_ICON_HELMET
42PRESET_ICON_BITE
58PRESET_ICON_BASIC
59PRESET_ICON_ULTRA_SLO_MO
60PRESET_ICON_STANDARD_ENDURANCE
61PRESET_ICON_ACTIVITY_ENDURANCE
62PRESET_ICON_CINEMATIC_ENDURANCE
63PRESET_ICON_SLOMO_ENDURANCE
64PRESET_ICON_STATIONARY_1
65PRESET_ICON_STATIONARY_2
66PRESET_ICON_STATIONARY_3
67PRESET_ICON_STATIONARY_4
70PRESET_ICON_SIMPLE_SUPER_PHOTO
71PRESET_ICON_SIMPLE_NIGHT_PHOTO
73PRESET_ICON_HIGHEST_QUALITY_VIDEO
74PRESET_ICON_STANDARD_QUALITY_VIDEO
75PRESET_ICON_BASIC_QUALITY_VIDEO
76PRESET_ICON_STAR_TRAIL
77PRESET_ICON_LIGHT_PAINTING
78PRESET_ICON_LIGHT_TRAIL
79PRESET_ICON_FULL_FRAME
1000PRESET_ICON_TIMELAPSE_PHOTO
1001PRESET_ICON_NIGHTLAPSE_PHOTO
-
id
integer <int32>

Unique preset identifier

-
isFixed
boolean

Is this preset mutable?

-
isModified
boolean

Has the preset been modified from the factory defaults?

-
mode
integer (EnumFlatMode)
Enum: -1 4 5 12 13 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDNameSummary
-1FLAT_MODE_UNKNOWN
4FLAT_MODE_PLAYBACK
5FLAT_MODE_SETUP
12FLAT_MODE_VIDEO
13FLAT_MODE_TIME_LAPSE_VIDEO
15FLAT_MODE_LOOPING
16FLAT_MODE_PHOTO_SINGLE
17FLAT_MODE_PHOTO
18FLAT_MODE_PHOTO_NIGHT
19FLAT_MODE_PHOTO_BURST
20FLAT_MODE_TIME_LAPSE_PHOTO
21FLAT_MODE_NIGHT_LAPSE_PHOTO
22FLAT_MODE_BROADCAST_RECORD
23FLAT_MODE_BROADCAST_BROADCAST
24FLAT_MODE_TIME_WARP_VIDEO
25FLAT_MODE_LIVE_BURST
26FLAT_MODE_NIGHT_LAPSE_VIDEO
27FLAT_MODE_SLOMO
28FLAT_MODE_IDLE
29FLAT_MODE_VIDEO_STAR_TRAIL
30FLAT_MODE_VIDEO_LIGHT_PAINTING
31FLAT_MODE_VIDEO_LIGHT_TRAIL
32FLAT_MODE_VIDEO_BURST_SLOMO
-
Array of objects (PresetSetting)
Array
id
integer <int32>

Setting identifier

-
isCaption
boolean

Does this setting appear on the Preset "pill" in the camera UI?

-
value
integer <int32>

Setting value

-
titleId
integer (EnumPresetTitle)
Enum: 0 1 2 3 4 5 6 7 8 9 10 11 13 14 16 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 82 83 93 94
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDNameSummary
0PRESET_TITLE_ACTIVITY
1PRESET_TITLE_STANDARD
2PRESET_TITLE_CINEMATIC
3PRESET_TITLE_PHOTO
4PRESET_TITLE_LIVE_BURST
5PRESET_TITLE_BURST
6PRESET_TITLE_NIGHT
7PRESET_TITLE_TIME_WARP
8PRESET_TITLE_TIME_LAPSE
9PRESET_TITLE_NIGHT_LAPSE
10PRESET_TITLE_VIDEO
11PRESET_TITLE_SLOMO
13PRESET_TITLE_PHOTO_2
14PRESET_TITLE_PANORAMA
16PRESET_TITLE_TIME_WARP_2
18PRESET_TITLE_CUSTOM
19PRESET_TITLE_AIR
20PRESET_TITLE_BIKE
21PRESET_TITLE_EPIC
22PRESET_TITLE_INDOOR
23PRESET_TITLE_MOTOR
24PRESET_TITLE_MOUNTED
25PRESET_TITLE_OUTDOOR
26PRESET_TITLE_POV
27PRESET_TITLE_SELFIE
28PRESET_TITLE_SKATE
29PRESET_TITLE_SNOW
30PRESET_TITLE_TRAIL
31PRESET_TITLE_TRAVEL
32PRESET_TITLE_WATER
33PRESET_TITLE_LOOPING
34PRESET_TITLE_STARS
35PRESET_TITLE_ACTION
36PRESET_TITLE_FOLLOW_CAM
37PRESET_TITLE_SURF
38PRESET_TITLE_CITY
39PRESET_TITLE_SHAKY
40PRESET_TITLE_CHESTY
41PRESET_TITLE_HELMET
42PRESET_TITLE_BITE
58PRESET_TITLE_BASIC
59PRESET_TITLE_ULTRA_SLO_MO
60PRESET_TITLE_STANDARD_ENDURANCE
61PRESET_TITLE_ACTIVITY_ENDURANCE
62PRESET_TITLE_CINEMATIC_ENDURANCE
63PRESET_TITLE_SLOMO_ENDURANCE
64PRESET_TITLE_STATIONARY_1
65PRESET_TITLE_STATIONARY_2
66PRESET_TITLE_STATIONARY_3
67PRESET_TITLE_STATIONARY_4
68PRESET_TITLE_SIMPLE_VIDEO
69PRESET_TITLE_SIMPLE_TIME_WARP
70PRESET_TITLE_SIMPLE_SUPER_PHOTO
71PRESET_TITLE_SIMPLE_NIGHT_PHOTO
72PRESET_TITLE_SIMPLE_VIDEO_ENDURANCE
73PRESET_TITLE_HIGHEST_QUALITY
74PRESET_TITLE_EXTENDED_BATTERY
75PRESET_TITLE_LONGEST_BATTERY
76PRESET_TITLE_STAR_TRAIL
77PRESET_TITLE_LIGHT_PAINTING
78PRESET_TITLE_LIGHT_TRAIL
79PRESET_TITLE_FULL_FRAME
82PRESET_TITLE_STANDARD_QUALITY_VIDEO
83PRESET_TITLE_BASIC_QUALITY_VIDEO
93PRESET_TITLE_HIGHEST_QUALITY_VIDEO
94PRESET_TITLE_USER_DEFINED_CUSTOM_NAME
-
titleNumber
integer <int32>

Preset title number

-
userDefined
boolean

Is this preset user defined?

-

Request samples

curl --request GET \
-  --url http://10.5.5.9:8080/gopro/camera/presets/get

Response samples

Content type
application/json
{
  • "customIconIds": [
    ],
  • "customTitleIds": [
    ],
  • "presetGroupArray": [
    ]
}

Load Preset by ID

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

Preset ID's are not constant and must be retrieved via Get Preset Status

-
query Parameters
id
required
integer

Preset to load

-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/presets/load?id=0'

Response samples

Content type
application/json
{ }

Load Preset Group by ID

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-
query Parameters
id
required
integer
Enum: 1000 1001 1002
Example: id=1000
- - - - - - - - - - - - - - - - - - - - - - -
IDNameSummary
1000PRESET_GROUP_ID_VIDEO
1001PRESET_GROUP_ID_PHOTO
1002PRESET_GROUP_ID_TIMELAPSE
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/presets/set_group?id=1000'

Response samples

Content type
application/json
{ }

Update Custom Preset

HERO12 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

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
    • -
    -
  2. -
-

and / or

-
    -
  1. 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
    • -
    -
  2. -
-

Note! The range of acceptable custom title_id's and icon_id's can be found in the -Get Preset Status response

-
Request Body schema: application/json
required
custom_name
string

UTF-8 encoded target custom preset name which obeys the following:

-
    -
  • 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
integer (EnumPresetIcon)
Enum: 0 1 2 3 4 5 6 7 8 9 10 11 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 58 59 60 61 62 63 64 65 66 67 70 71 73 74 75 76 77 78 79 1000 1001
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDNameSummary
0PRESET_ICON_VIDEO
1PRESET_ICON_ACTIVITY
2PRESET_ICON_CINEMATIC
3PRESET_ICON_PHOTO
4PRESET_ICON_LIVE_BURST
5PRESET_ICON_BURST
6PRESET_ICON_PHOTO_NIGHT
7PRESET_ICON_TIMEWARP
8PRESET_ICON_TIMELAPSE
9PRESET_ICON_NIGHTLAPSE
10PRESET_ICON_SNAIL
11PRESET_ICON_VIDEO_2
13PRESET_ICON_PHOTO_2
14PRESET_ICON_PANORAMA
15PRESET_ICON_BURST_2
16PRESET_ICON_TIMEWARP_2
17PRESET_ICON_TIMELAPSE_2
18PRESET_ICON_CUSTOM
19PRESET_ICON_AIR
20PRESET_ICON_BIKE
21PRESET_ICON_EPIC
22PRESET_ICON_INDOOR
23PRESET_ICON_MOTOR
24PRESET_ICON_MOUNTED
25PRESET_ICON_OUTDOOR
26PRESET_ICON_POV
27PRESET_ICON_SELFIE
28PRESET_ICON_SKATE
29PRESET_ICON_SNOW
30PRESET_ICON_TRAIL
31PRESET_ICON_TRAVEL
32PRESET_ICON_WATER
33PRESET_ICON_LOOPING
34PRESET_ICON_STARS
35PRESET_ICON_ACTION
36PRESET_ICON_FOLLOW_CAM
37PRESET_ICON_SURF
38PRESET_ICON_CITY
39PRESET_ICON_SHAKY
40PRESET_ICON_CHESTY
41PRESET_ICON_HELMET
42PRESET_ICON_BITE
58PRESET_ICON_BASIC
59PRESET_ICON_ULTRA_SLO_MO
60PRESET_ICON_STANDARD_ENDURANCE
61PRESET_ICON_ACTIVITY_ENDURANCE
62PRESET_ICON_CINEMATIC_ENDURANCE
63PRESET_ICON_SLOMO_ENDURANCE
64PRESET_ICON_STATIONARY_1
65PRESET_ICON_STATIONARY_2
66PRESET_ICON_STATIONARY_3
67PRESET_ICON_STATIONARY_4
70PRESET_ICON_SIMPLE_SUPER_PHOTO
71PRESET_ICON_SIMPLE_NIGHT_PHOTO
73PRESET_ICON_HIGHEST_QUALITY_VIDEO
74PRESET_ICON_STANDARD_QUALITY_VIDEO
75PRESET_ICON_BASIC_QUALITY_VIDEO
76PRESET_ICON_STAR_TRAIL
77PRESET_ICON_LIGHT_PAINTING
78PRESET_ICON_LIGHT_TRAIL
79PRESET_ICON_FULL_FRAME
1000PRESET_ICON_TIMELAPSE_PHOTO
1001PRESET_ICON_NIGHTLAPSE_PHOTO
-
title_id
integer (EnumPresetTitle)
Enum: 0 1 2 3 4 5 6 7 8 9 10 11 13 14 16 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 82 83 93 94
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDNameSummary
0PRESET_TITLE_ACTIVITY
1PRESET_TITLE_STANDARD
2PRESET_TITLE_CINEMATIC
3PRESET_TITLE_PHOTO
4PRESET_TITLE_LIVE_BURST
5PRESET_TITLE_BURST
6PRESET_TITLE_NIGHT
7PRESET_TITLE_TIME_WARP
8PRESET_TITLE_TIME_LAPSE
9PRESET_TITLE_NIGHT_LAPSE
10PRESET_TITLE_VIDEO
11PRESET_TITLE_SLOMO
13PRESET_TITLE_PHOTO_2
14PRESET_TITLE_PANORAMA
16PRESET_TITLE_TIME_WARP_2
18PRESET_TITLE_CUSTOM
19PRESET_TITLE_AIR
20PRESET_TITLE_BIKE
21PRESET_TITLE_EPIC
22PRESET_TITLE_INDOOR
23PRESET_TITLE_MOTOR
24PRESET_TITLE_MOUNTED
25PRESET_TITLE_OUTDOOR
26PRESET_TITLE_POV
27PRESET_TITLE_SELFIE
28PRESET_TITLE_SKATE
29PRESET_TITLE_SNOW
30PRESET_TITLE_TRAIL
31PRESET_TITLE_TRAVEL
32PRESET_TITLE_WATER
33PRESET_TITLE_LOOPING
34PRESET_TITLE_STARS
35PRESET_TITLE_ACTION
36PRESET_TITLE_FOLLOW_CAM
37PRESET_TITLE_SURF
38PRESET_TITLE_CITY
39PRESET_TITLE_SHAKY
40PRESET_TITLE_CHESTY
41PRESET_TITLE_HELMET
42PRESET_TITLE_BITE
58PRESET_TITLE_BASIC
59PRESET_TITLE_ULTRA_SLO_MO
60PRESET_TITLE_STANDARD_ENDURANCE
61PRESET_TITLE_ACTIVITY_ENDURANCE
62PRESET_TITLE_CINEMATIC_ENDURANCE
63PRESET_TITLE_SLOMO_ENDURANCE
64PRESET_TITLE_STATIONARY_1
65PRESET_TITLE_STATIONARY_2
66PRESET_TITLE_STATIONARY_3
67PRESET_TITLE_STATIONARY_4
68PRESET_TITLE_SIMPLE_VIDEO
69PRESET_TITLE_SIMPLE_TIME_WARP
70PRESET_TITLE_SIMPLE_SUPER_PHOTO
71PRESET_TITLE_SIMPLE_NIGHT_PHOTO
72PRESET_TITLE_SIMPLE_VIDEO_ENDURANCE
73PRESET_TITLE_HIGHEST_QUALITY
74PRESET_TITLE_EXTENDED_BATTERY
75PRESET_TITLE_LONGEST_BATTERY
76PRESET_TITLE_STAR_TRAIL
77PRESET_TITLE_LIGHT_PAINTING
78PRESET_TITLE_LIGHT_TRAIL
79PRESET_TITLE_FULL_FRAME
82PRESET_TITLE_STANDARD_QUALITY_VIDEO
83PRESET_TITLE_BASIC_QUALITY_VIDEO
93PRESET_TITLE_HIGHEST_QUALITY_VIDEO
94PRESET_TITLE_USER_DEFINED_CUSTOM_NAME
-

Responses

Response Schema: application/json
object

Request samples

Content type
application/json
{
  • "custom_name": "string",
  • "icon_id": 0,
  • "title_id": 0
}

Response samples

Content type
application/json
{ }

Preview Stream

When the preview stream is started, the camera starts up a UDP client and begins writing MPEG Transport -Stream data to the client on port 8554. In order to stream this data, the client must implement a UDP -connection that binds to the same port and decode the data.

-

Start Preview Stream

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-
query Parameters
port
integer
Example: port=8556

Port to use for Preview Stream.

-

Not supported on:

-
    -
  • Hero 11 Black Mini
  • -
  • Hero 11 Black
  • -
  • Hero 10 Black
  • -
  • Hero 9 Black
  • -
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/stream/start?port=8556'

Response samples

Content type
application/json
{ }

Stop Preview Stream

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url http://10.5.5.9:8080/gopro/camera/stream/stop

Response samples

Content type
application/json
{ }

Query

Get information about the camera

-

Get Camera State

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

Get all camera settings and statuses.

-

Responses

Response Schema: application/json
object

All currently known setting values indexed by setting ID

-
2
integer
Enum: 1 4 6 7 9 18 24 25 26 27 28 100 107 108 109 110 111

Resolution

-

HERO12 Black -HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
14KHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
42.7KHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
62.7K 4:3HERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
71440HERO9 Black
91080HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
184K 4:3HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
245KHERO9 Black
255K 4:3HERO10 Black
265.3K 8:7HERO11 Black MiniHERO11 Black
275.3K 4:3HERO11 Black MiniHERO11 Black
284K 8:7HERO11 Black MiniHERO11 Black
1005.3KHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 Black
1075.3KHERO12 Black
1084KHERO12 Black
1094KHERO12 Black
1101080HERO12 Black
1112.7KHERO12 Black
-
3
integer
Enum: 0 1 2 5 6 8 9 10 13

Frames Per Second

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0240HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
1120HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
2100HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
560HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
650HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
830HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
925HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
1024HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
13200HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
-
43
integer
Enum: 0 2 3 4

Webcam Digital Lenses

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0WideHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
2NarrowHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
3SuperviewHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
4LinearHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
-
59
integer
Enum: 0 1 4 6 7 11 12

Auto Power Down

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0NeverHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
11 MinHERO12 BlackHERO11 Black MiniHERO11 Black
45 MinHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
615 MinHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
730 MinHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
118 SecondsHERO11 Black Mini
1230 SecondsHERO11 Black Mini
-
83
integer
Enum: 0 1

GPS

-

HERO11 Black -HERO10 Black - HERO9 Black

- - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0OffHERO11 BlackHERO10 BlackHERO9 Black
1OnHERO11 BlackHERO10 BlackHERO9 Black
-
108
integer
Enum: 0 1 3 4

Aspect Ratio

-

HERO12 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
04:3HERO12 Black
116:9HERO12 Black
38:7HERO12 Black
49:16HERO12 Black
-
121
integer
Enum: 0 2 3 4 7 8 9 10 11

Lens

-

HERO12 Black -HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0WideHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
2NarrowHERO10 BlackHERO9 Black
3SuperviewHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
4LinearHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
7Max SuperViewHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
8Linear + Horizon LevelingHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
9HyperViewHERO12 BlackHERO11 Black MiniHERO11 Black
10Linear + Horizon LockHERO12 BlackHERO11 Black MiniHERO11 Black
11Max HyperViewHERO12 Black
-
122
integer
Enum: 19 100 101 102

Lens

-

HERO12 Black -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
19NarrowHERO10 BlackHERO9 Black
100Max SuperViewHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
101WideHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
102LinearHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
-
123
integer
Enum: 19 100 101 102

Time Lapse Digital Lenses

-

HERO12 Black - HERO11 Black -HERO10 Black - HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
19NarrowHERO10 BlackHERO9 Black
100Max SuperViewHERO10 Black
101WideHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
102LinearHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
-
128
integer
Enum: 13 20 21 26

Media Format

-

HERO12 Black -HERO11 Black -HERO10 Black - HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
13Time Lapse VideoHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
20Time Lapse PhotoHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
21Night Lapse PhotoHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
26Night Lapse VideoHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
-
134
integer
Enum: 2 3

Anti-Flicker

-

HERO12 Black -HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
260HzHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
350HzHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
-
135
integer
Enum: 0 1 2 3 4 100

Hypersmooth

-

HERO12 Black -HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0OffHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
1LowHERO12 BlackHERO11 Black MiniHERO11 BlackHERO9 Black
2HighHERO10 BlackHERO9 Black
3BoostHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
4Auto BoostHERO12 BlackHERO11 Black MiniHERO11 Black
100StandardHERO10 Black
-
150
integer
Enum: 0 2

Horizon Leveling

-

HERO11 Black

- - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0OffHERO11 Black
2LockedHERO11 Black
-
151
integer
Enum: 0 2

Horizon Leveling

-

HERO11 Black

- - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0OffHERO11 Black
2LockedHERO11 Black
-
162
integer
Enum: 0 1

Max Lens

-

HERO11 Black -HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0OffHERO11 BlackHERO10 BlackHERO9 Black
1OnHERO11 BlackHERO10 BlackHERO9 Black
-
167
integer
Enum: 2 3 4

HindSight

-

HERO12 Black -HERO11 Black -HERO10 Black - HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
215 SecondsHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
330 SecondsHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
4OffHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
-
171
integer
Enum: 0 2 3 4 5 6 7 8 9 10

Interval

-

HERO12 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0OffHERO12 Black
20.5sHERO12 Black
31sHERO12 Black
42sHERO12 Black
55sHERO12 Black
610sHERO12 Black
730sHERO12 Black
860sHERO12 Black
9120sHERO12 Black
103sHERO12 Black
-
172
integer
Enum: 0 1 2 3 4 5 6 7 8 9

Duration

-

HERO12 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0OffHERO12 Black
115 SecondsHERO12 Black
230 SecondsHERO12 Black
31 MinuteHERO12 Black
45 MinutesHERO12 Black
515 MinutesHERO12 Black
630 MinutesHERO12 Black
71 HourHERO12 Black
82 HoursHERO12 Black
93 HoursHERO12 Black
-
173
integer
Enum: 0 1 2

Video Performance Mode

-

HERO10 Black

- - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0Maximum Video PerformanceHERO10 Black
1Extended BatteryHERO10 Black
2Tripod / Stationary VideoHERO10 Black
-
175
integer
Enum: 0 1

Controls

-

HERO12 Black -HERO11 Black

- - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0EasyHERO12 BlackHERO11 Black
1ProHERO12 BlackHERO11 Black
-
176
integer
Enum: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137

Easy Mode Speed

-

HERO12 Black - HERO11 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
08X Ultra Slo-MoHERO11 Black
14X Super Slo-MoHERO11 Black
22X Slo-MoHERO11 Black
31X Speed (Low Light)HERO11 Black
44X Super Slo-Mo (Ext. Batt.)HERO11 Black
52X Slo-Mo (Ext. Batt.)HERO11 Black
61X Speed (Ext. Batt.) (Low Light)HERO11 Black
78X Ultra Slo-Mo (50Hz)HERO11 Black
84X Super Slo-Mo (50Hz)HERO11 Black
92X Slo-Mo (50Hz)HERO11 Black
101X Speed (50Hz) (Low Light)HERO11 Black
114X Super Slo-Mo (50Hz) (Ext. Batt.)HERO11 Black
122X Slo-Mo (50Hz) (Ext. Batt.)HERO11 Black
131X Speed (50Hz) (Ext. Batt.) (Low Light)HERO11 Black
148X Ultra Slo-Mo (Ext. Batt.)HERO11 Black
158X Ultra Slo-Mo (50Hz) (Ext. Batt.)HERO11 Black
168X Ultra Slo-Mo (Long. Batt.)HERO11 Black
174X Super Slo-Mo (Long. Batt.)HERO11 Black
182X Slo-Mo (Long. Batt.)HERO11 Black
191X Speed (Long. Batt.) (Low Light)HERO11 Black
208X Ultra Slo-Mo (50Hz) (Long. Batt.)HERO11 Black
214X Super Slo-Mo (50Hz) (Long. Batt.)HERO11 Black
222X Slo-Mo (50Hz) (Long. Batt.)HERO11 Black
231X Speed (50Hz) (Long. Batt.) (Low Light)HERO11 Black
242X Slo-Mo (4K)HERO11 Black
254X Super Slo-Mo (2.7K)HERO11 Black
262X Slo-Mo (4K) (50Hz)HERO11 Black
274X Super Slo-Mo (2.7K) (50Hz)HERO11 Black
1008X Ultra Slo-Mo (V2)HERO12 Black
1014X Super Slo-Mo (V2)HERO12 Black
1022X Slo-Mo (V2)HERO12 Black
1031X Speed (Low Light) (V2)HERO12 Black
1048X Ultra Slo-Mo (50Hz) (V2)HERO12 Black
1054X Super Slo-Mo (50Hz) (V2)HERO12 Black
1062X Slo-Mo (50Hz) (V2)HERO12 Black
1071X Speed (50Hz) (Low Light) (V2)HERO12 Black
1088X Ultra Slo-Mo (Long. Batt.) (V2)HERO12 Black
1094X Super Slo-Mo (Long. Batt.) (V2)HERO12 Black
1102X Slo-Mo (Long. Batt.) (V2)HERO12 Black
1111X Speed (Long. Batt.) (Low Light) (V2)HERO12 Black
1128X Ultra Slo-Mo (50Hz) (Long. Batt.) (V2)HERO12 Black
1134X Super Slo-Mo (50Hz) (Long. Batt.) (V2)HERO12 Black
1142X Slo-Mo (50Hz) (Long. Batt.) (V2)HERO12 Black
1151X Speed (50Hz) (Long. Batt.) (Low Light) (V2)HERO12 Black
1162X Slo-Mo (4K) (V2)HERO12 Black
1172X Slo-Mo (4K) (50Hz) (V2)HERO12 Black
1181X Speed (Low Light) (V2) (Vertical)HERO12 Black
1191X Speed (50Hz) (Low Light) (V2) (Vertical)HERO12 Black
1202X Slo-Mo (V2) (Vertical)HERO12 Black
1212X Slo-Mo (50Hz) (V2) (Vertical)HERO12 Black
1221X Speed (Full Frame) (Low Light) (V2)HERO12 Black
1231X Speed (50Hz) (Full Frame) (Low Light) (V2)HERO12 Black
1242X Slo-Mo (Full Frame) (V2)HERO12 Black
1252X Slo-Mo (50Hz) (Full Frame) (V2)HERO12 Black
1261X Speed (4K) (Low Light) (V2)HERO12 Black
1271X Speed (4K) (50Hz) (Low Light) (V2)HERO12 Black
1281X Speed (2.7K) (Low Light) (V2)HERO12 Black
1291X Speed (2.7K) (50Hz) (Low Light) (V2)HERO12 Black
1302X Slo-Mo (2.7K) (V2)HERO12 Black
1312X Slo-Mo (2.7K) (50Hz) (V2)HERO12 Black
1322X Slo-Mo (Long. Batt.) (V2) (Vertical)HERO12 Black
1332X Slo-Mo (50Hz) (Long. Batt.) (V2) (Vertical)HERO12 Black
1341X Speed (Long. Batt.) (Low Light) (V2) (Vertical)HERO12 Black
1351X Speed (50Hz) (Long. Batt.) (Low Light) (V2) (Vertical)HERO12 Black
1361X Speed (4K) (Full Frame) (Low Light) (V2)HERO12 Black
1371X Speed (4K) (50Hz) (Full Frame) (Low Light) (V2)HERO12 Black
-
177
integer
Enum: 0 1

Enable Night Photo

-

HERO11 Black

- - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0OffHERO11 Black
1OnHERO11 Black
-
178
integer
Enum: 0 1

Wireless Band

-

HERO12 Black -HERO11 Black Mini -HERO11 Black

- - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
02.4GHzHERO12 BlackHERO11 Black MiniHERO11 Black
15GHzHERO12 BlackHERO11 Black MiniHERO11 Black
-
179
integer
Enum: 1 2 3

Trail Length

-

HERO12 Black -HERO11 Black Mini -HERO11 Black

- - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
1ShortHERO12 BlackHERO11 Black MiniHERO11 Black
2LongHERO12 BlackHERO11 Black MiniHERO11 Black
3MaxHERO12 BlackHERO11 Black MiniHERO11 Black
-
180
integer
Enum: 0 101 102

Video Mode

-

HERO11 Black

- - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0Highest QualityHERO11 Black
101Extended Battery (Green Icon)HERO11 Black
102Longest Battery (Green Icon)HERO11 Black
-
182
integer
Enum: 0 1

Bit Rate

-

HERO12 Black

- - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0StandardHERO12 Black
1HighHERO12 Black
-
183
integer
Enum: 0 2

Bit Depth

-

HERO12 Black

- - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
08-BitHERO12 Black
210-BitHERO12 Black
-
184
integer
Enum: 0 1 2

Profiles

-

HERO12 Black

- - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0StandardHERO12 Black
1HDRHERO12 Black
2LogHERO12 Black
-
186
integer
Enum: 0 1 2

Video Mode

-

HERO12 Black

- - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0Highest QualityHERO12 Black
1Standard QualityHERO12 Black
2Basic QualityHERO12 Black
-
187
integer
Enum: 0 1 2 3 4 5 6 7

Lapse Mode

-

HERO12 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0TimeWarpHERO12 Black
1Star TrailsHERO12 Black
2Light PaintingHERO12 Black
3Vehicle LightsHERO12 Black
4Max TimeWarpHERO12 Black
5Max Star TrailsHERO12 Black
6Max Light PaintingHERO12 Black
7Max Vehicle LightsHERO12 Black
-
189
integer
Enum: 0 1 2

Max Lens Mod

-

HERO12 Black

- - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0NoneHERO12 Black
1Max Lens 1.0HERO12 Black
2Max Lens 2.0HERO12 Black
-
190
integer
Enum: 0 1

Max Lens Mod Enable

-

HERO12 Black

- - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0OffHERO12 Black
1OnHERO12 Black
-
191
integer
Enum: 0 1

Photo Mode

-

HERO12 Black

- - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0Super PhotoHERO12 Black
1Night PhotoHERO12 Black
-
192
integer
Enum: 0 1 3

Aspect Ratio

-

HERO12 Black

- - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
04:3HERO12 Black
116:9HERO12 Black
38:7HERO12 Black
-
193
integer
Enum: 0 1 2

Framing

-

HERO12 Black

- - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaningSupported Cameras
0WidescreenHERO12 Black
1VerticalHERO12 Black
2Full FrameHERO12 Black
-
object

All currently known status values indexed by status ID

-
1
integer
Enum: 0 1

Is the system's internal battery present?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
2
integer
Enum: 0 1 2 3 4

Rough approximation of internal battery level in bars (or charging)

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaning
0Zero
1One
2Two
3Three
4Charging
-
6
integer
Enum: 0 1

Is the system currently overheating?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
8
integer
Enum: 0 1

Is the camera busy?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
9
integer
Enum: 0 1

Is Quick Capture feature enabled?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
10
integer
Enum: 0 1

Is the system currently encoding?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
11
integer
Enum: 0 1

Is LCD lock active?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
13
integer

When encoding video, this is the duration (seconds) of the video so far; 0 otherwise

-

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-
17
integer
Enum: 0 1

Are Wireless Connections enabled?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
19
integer
Enum: 0 1 2 3 4

The pairing state of the camera

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaning
0Never Started
1Started
2Aborted
3Cancelled
4Completed
-
20
integer
Enum: 0 1 2 3

The last type of pairing in which the camera was engaged

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaning
0Not Pairing
1Pairing App
2Pairing Remote Control
3Pairing Bluetooth Device
-
21
integer

Time since boot (milliseconds) of last successful pairing complete action

-

HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
22
integer
Enum: 0 1 2 3 4

State of current scan for WiFi Access Points

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaning
0Never started
1Started
2Aborted
3Canceled
4Completed
-
23
integer

Time since boot (milliseconds) that the WiFi Access Point scan completed

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
24
integer
Enum: 0 1 2 3 4

WiFi AP provisioning state

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaning
0Never started
1Started
2Aborted
3Canceled
4Completed
-
26
integer

Wireless remote control version

-

HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-
27
integer
Enum: 0 1

Is a wireless remote control connected?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
28
integer

Wireless Pairing State. Each bit contains state information (see WirelessPairingStateFlags)

-

HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
29
string

SSID of the AP the camera is currently connected to. On BLE connection, value is big-endian byte-encoded int32

-

HERO12 Black -HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
30
string

The camera's WiFi SSID. On BLE connection, value is big-endian byte-encoded int32

-

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-
31
integer

The number of wireless devices connected to the camera

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
32
integer
Enum: 0 1

Is Preview Stream enabled?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
33
integer
Enum: -1 0 1 2 3 4 8

Primary Storage Status

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaning
-1Unknown
0OK
1SD Card Full
2SD Card Removed
3SD Card Format Error
4SD Card Busy
8SD Card Swapped
-
34
integer

How many photos can be taken with current settings before sdcard is full

-

HERO12 Black - HERO11 Black -HERO10 Black - HERO9 Black

-
35
integer

How many minutes of video can be captured with current settings before sdcard is full

-

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-
38
integer

Total number of photos on sdcard

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
39
integer

Total number of videos on sdcard

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
41
integer
Enum: 0 1 2 3 4 5 6 7 8 9 10

The current status of Over The Air (OTA) update

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaning
0Idle
1Downloading
2Verifying
3Download Failed
4Verify Failed
5Ready
6GoPro App: Downloading
7GoPro App: Verifying
8GoPro App: Download Failed
9GoPro App: Verify Failed
10GoPro App: Ready
-
42
integer
Enum: 0 1

Is there a pending request to cancel a firmware update download?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
45
integer
Enum: 0 1

Is locate camera feature active?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
49
integer

The current timelapse interval countdown value (e.g. 5...4...3...2...1...)

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
54
integer

Remaining space on the sdcard in Kilobytes

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
55
integer
Enum: 0 1

Is preview stream supported in current recording/mode/secondary-stream?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
56
integer

WiFi signal strength in bars

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
58
integer

The number of hilights in currently-encoding video (value is set to 0 when encoding stops)

-

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-
59
integer

Time since boot (milliseconds) of most recent hilight in encoding video (set to 0 when encoding stops)

-

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-
60
integer

The minimum time between camera status updates (milliseconds). Best practice is to not poll for status more often than this

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
65
integer
Enum: 0 1 2 3

Liveview Exposure Select Mode

-

HERO12 Black - HERO11 Black -HERO10 Black - HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaning
0Disabled
1Auto
2ISO Lock
3Hemisphere
-
66
integer [ 0 .. 100 ]

Liveview Exposure Select: y-coordinate (percent)

-

HERO12 Black - HERO11 Black -HERO10 Black - HERO9 Black

-
67
integer [ 0 .. 100 ]

Liveview Exposure Select: y-coordinate (percent)

-

HERO12 Black - HERO11 Black -HERO10 Black - HERO9 Black

-
68
integer
Enum: 0 1

Does the camera currently have a GPS lock?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
69
integer
Enum: 0 1

Is AP mode enabled?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
70
integer [ 0 .. 100 ]

Internal battery level (percent)

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
74
integer
Enum: 0 1 2

Microphone Accessory status

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - -
ValueMeaning
0Accessory not connected
1Accessory connected
2Accessory connected and a microphone is plugged into the accessory
-
75
integer [ 0 .. 100 ]

Digital Zoom level (percent)

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
76
integer
Enum: 0 1

Wireless Band

-

HERO12 Black -HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - -
ValueMeaning
02.4 GHz
15 GHz
-
77
integer
Enum: 0 1

Is Digital Zoom feature available?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
78
integer
Enum: 0 1

Are current video settings mobile friendly? (related to video compression and frame rate)

-

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-
79
integer
Enum: 0 1

Is the camera currently in First Time Use (FTU) UI flow?

-

HERO10 Black - HERO9 Black

-
81
integer
Enum: 0 1

Is 5GHz wireless band available?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
82
integer
Enum: 0 1

Is the system fully booted and ready to accept commands?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
83
integer
Enum: 0 1

Is the internal battery charged sufficiently to start Over The Air (OTA) update?

-

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-
85
integer
Enum: 0 1

Is the camera getting too cold to continue recording?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
86
integer
Enum: 0 1 2 3

Rotational orientation of the camera

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaning
00 degrees (upright)
1180 degrees (upside down)
290 degrees (laying on right side)
3270 degrees (laying on left side)
-
88
integer
Enum: 0 1

Is this camera model capable of zooming while encoding?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
89
integer

Current Flatmode ID

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
93
integer

Current Video Preset (ID)

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
94
integer

Current Photo Preset (ID)

-

HERO12 Black - HERO11 Black -HERO10 Black - HERO9 Black

-
95
integer

Current Time Lapse Preset (ID)

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
96
integer

Current Preset Group (ID) (corresponds to ui_mode_groups in settings.json)

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
97
integer

Current Preset (ID)

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
98
integer

Preset Modified Status, which contains an event ID and a Preset (Group) ID

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
99
integer

The number of Live Bursts can be captured with current settings before sdcard is full

-

HERO11 Black -HERO10 Black - HERO9 Black

-
100
integer

Total number of Live Bursts on sdcard

-

HERO11 Black - HERO10 Black -HERO9 Black

-
101
integer
Enum: 0 1

Is Capture Delay currently active (i.e. counting down)?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
102
integer
Enum: 0 2 3

Media Mod state

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - -
ValueMeaning
0Media Mod microphone removed
2Media Mod microphone only
3Media Mod microphone with external microphone
-
103
integer
Enum: 0 1 2 3 4 5 6 7 8 9 10 11 12

Time Warp Speed

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaning
015x
130x
260x
3150x
4300x
5900x
61800x
72x
85x
910x
10Auto
111x (realtime)
121/2x (slow-motion)
-
104
integer
Enum: 0 1

Is the system's Linux core active?

-

HERO10 Black - HERO9 Black

-
105
integer
Enum: 0 1 2

Camera lens type (reflects changes to lens settings such as 162, 189, 194, ...)

-

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

- - - - - - - - - - - - - - - - - - - -
ValueMeaning
0Default
1Max Lens
2Max Lens 2.0
-
106
integer
Enum: 0 1

Is Video Hindsight Capture Active?

-

HERO12 Black - HERO11 Black -HERO10 Black - HERO9 Black

-
107
integer

Scheduled Capture Preset ID

-

HERO12 Black - HERO11 Black -HERO10 Black - HERO9 Black

-
108
integer
Enum: 0 1

Is Scheduled Capture set?

-

HERO12 Black - HERO11 Black -HERO10 Black - HERO9 Black

-
110
integer
Enum: 0 1 2 3 4 5 6 7

Display Mod Status (bitmasked)

-

HERO12 Black - HERO11 Black -HERO10 Black - HERO9 Black

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueMeaning
0000 = Display Mod: 0, HDMI: 0, Display Mod Connected: False
1001 = Display Mod: 0, HDMI: 0, Display Mod Connected: True
2010 = Display Mod: 0, HDMI: 1, Display Mod Connected: False
3011 = Display Mod: 0, HDMI: 1, Display Mod Connected: True
4100 = Display Mod: 1, HDMI: 0, Display Mod Connected: False
5101 = Display Mod: 1, HDMI: 0, Display Mod Connected: True
6110 = Display Mod: 1, HDMI: 1, Display Mod Connected: False
7111 = Display Mod: 1, HDMI: 1, Display Mod Connected: True
-
111
integer
Enum: 0 1

Does sdcard meet specified minimum write speed?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black

-
112
integer

Number of sdcard write speed errors since device booted

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black

-
113
integer
Enum: 0 1

Is Turbo Transfer active?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black -HERO9 Black

-
114
integer
Enum: 0 1 2

Camera control status ID

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black

- - - - - - - - - - - - - - - - - - - -
ValueMeaning
0Camera Idle: No one is attempting to change camera settings
1Camera Control: Camera is in a menu or changing settings. To intervene, app must request control
2Camera External Control: An outside entity (app) has control and is in a menu or modifying settings
-
115
integer
Enum: 0 1

Is the camera connected to a PC via USB?

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black

-
116
integer
Enum: 0 1

Camera control over USB state

-

HERO12 Black - HERO11 Black Mini -HERO11 Black - HERO10 Black

- - - - - - - - - - - - - - - -
ValueMeaning
0Disabled
1Enabled
-
117
integer

Total SD card capacity in Kilobytes

-

HERO12 Black - HERO11 Black Mini -HERO11 Black

-
118
integer

Photo interval capture count

-

HERO12 Black

-

Request samples

curl --request GET \
-  --url http://10.5.5.9:8080/gopro/camera/state

Response samples

Content type
application/json
{
  • "settings": {
    },
  • "status": {
    }
}

Get Date / Time

HERO12 Black -HERO11 Black Mini - HERO11 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

Responses

Response Schema: application/json
date
required
string
Example: "2023_12_31"

current date in format YYYY_MM_DD

-
time
required
string
Example: "11_05_45"

current time in format HH_MM_SS

-
dst
integer
Enum: 0 1

Is daylight savings time active?

-
tzone
integer
Example: "-480"

Timezone offset in minutes

-

Request samples

curl --request GET \
-  --url http://10.5.5.9:8080/gopro/camera/get_date_time

Response samples

Content type
application/json
{
  • "date": "2023_12_31",
  • "dst": 0,
  • "time": "11_05_45",
  • "tzone": -480
}

Get Hardware Info

HERO12 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

Responses

Response Schema: application/json
object
ap_mac_addr
string
Example: "065747046ceb"

Camera's Access Point MAC address

-
ap_ssid
string
Example: "GP24645504"

Camera's ACcess Point SSID name

-
firmware_version
string <version>
Example: "H23.01.01.10.00"

Camera Firmware version

-
model_name
string
Example: "Hero12 Black"

Camera Model Name

-
model_number
string
Example: "62"

Camera Model integer (as string)

-
serial_number
string
Example: "C3501324645504"

Camera serial number

-

Request samples

curl --request GET \
-  --url http://10.5.5.9:8080/gopro/camera/info

Response samples

Content type
application/json
{
  • "info": {
    }
}

Get Last Captured Media

HERO12 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

This will return the complete path of the last captured media. Depending on the type of media captured, it will return:

-
    -
  • single photo / video: The single media path
  • -
  • any grouped media: The path to the first captured media in the group
  • -
-

Responses

Response Schema: application/json
file
string
Example: "GOPR0002.JPG"

Filename of media

-
folder
string
Example: "100GOPRO"

Directory in which the media is contained in

-

Request samples

curl --request GET \
-  --url http://10.5.5.9:8080/gopro/media/last_captured

Response samples

Content type
application/json
{
  • "file": "GOPR0002.JPG",
  • "folder": "100GOPRO"
}

Get Open GoPro Version

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

Responses

Response Schema: application/json
version
string <version>
Example: "2.0"

Open GoPro version

-

Request samples

curl --request GET \
-  --url http://10.5.5.9:8080/gopro/version

Response samples

Content type
application/json
{
  • "version": "2.0"
}

settings

GoPro cameras have hundreds of setting options to choose from, all of which can be set using a single endpoint. The endpoint is configured with a setting id and an option value. Note that setting option values are not globally unique. While most option values are enumerated values, some are complex bit-masked values.

-

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.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CameraCommand 1Command 2Command 3Command 4Command 5Guaranteed Valid?
HERO10 BlackRes: 1080Anti-Flicker: 60Hz (NTSC)FPS: 240FOV: WideHypersmooth: OFF
HERO10 BlackFPS: 240Anti-Flicker: 60Hz (NTSC)Res: 1080FOV: WideHypersmooth: 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

-

Anti-Flicker (134)

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-
query Parameters
option
required
integer
Enum: 2 3
Example: option=2
- - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
260HzHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
350HzHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=2&setting=134'

Response samples

Content type
application/json
{ }

Aspect Ratio (108)

HERO12 Black

-
query Parameters
option
required
integer
Enum: 0 1 3 4
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
04:3HERO12 Black
116:9HERO12 Black
38:7HERO12 Black
49:16HERO12 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=0&setting=108'

Response samples

Content type
application/json
{ }

Aspect Ratio (192)

HERO12 Black

-
query Parameters
option
required
integer
Enum: 0 1 3
- - - - - - - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
04:3HERO12 Black
116:9HERO12 Black
38:7HERO12 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=0&setting=192'

Response samples

Content type
application/json
{ }

Auto Power Down (59)

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-
query Parameters
option
required
integer
Enum: 0 1 4 6 7 11 12
Example: option=4
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
0NeverHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
11 MinHERO12 BlackHERO11 Black MiniHERO11 Black
45 MinHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
615 MinHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
730 MinHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
118 SecondsHERO11 Black Mini
1230 SecondsHERO11 Black Mini
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=4&setting=59'

Response samples

Content type
application/json
{ }

Bit Depth (183)

HERO12 Black

-
query Parameters
option
required
integer
Enum: 0 2
- - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
08-BitHERO12 Black
210-BitHERO12 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=0&setting=183'

Response samples

Content type
application/json
{ }

Bit Rate (182)

HERO12 Black

-
query Parameters
option
required
integer
Enum: 0 1
Example: option=1
- - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
0StandardHERO12 Black
1HighHERO12 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=1&setting=182'

Response samples

Content type
application/json
{ }

Controls (175)

HERO12 Black -HERO11 Black

-
query Parameters
option
required
integer
Enum: 0 1
- - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
0EasyHERO12 BlackHERO11 Black
1ProHERO12 BlackHERO11 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=0&setting=175'

Response samples

Content type
application/json
{ }

Duration (172)

HERO12 Black

-
query Parameters
option
required
integer
Enum: 0 1 2 3 4 5 6 7 8 9
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
0OffHERO12 Black
115 SecondsHERO12 Black
230 SecondsHERO12 Black
31 MinuteHERO12 Black
45 MinutesHERO12 Black
515 MinutesHERO12 Black
630 MinutesHERO12 Black
71 HourHERO12 Black
82 HoursHERO12 Black
93 HoursHERO12 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=0&setting=172'

Response samples

Content type
application/json
{ }

Easy Mode Speed (176)

HERO12 Black -HERO11 Black

-
query Parameters
option
required
integer
Enum: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
Example: option=103
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
08X Ultra Slo-MoHERO11 Black
14X Super Slo-MoHERO11 Black
22X Slo-MoHERO11 Black
31X Speed (Low Light)HERO11 Black
44X Super Slo-Mo (Ext. Batt.)HERO11 Black
52X Slo-Mo (Ext. Batt.)HERO11 Black
61X Speed (Ext. Batt.) (Low Light)HERO11 Black
78X Ultra Slo-Mo (50Hz)HERO11 Black
84X Super Slo-Mo (50Hz)HERO11 Black
92X Slo-Mo (50Hz)HERO11 Black
101X Speed (50Hz) (Low Light)HERO11 Black
114X Super Slo-Mo (50Hz) (Ext. Batt.)HERO11 Black
122X Slo-Mo (50Hz) (Ext. Batt.)HERO11 Black
131X Speed (50Hz) (Ext. Batt.) (Low Light)HERO11 Black
148X Ultra Slo-Mo (Ext. Batt.)HERO11 Black
158X Ultra Slo-Mo (50Hz) (Ext. Batt.)HERO11 Black
168X Ultra Slo-Mo (Long. Batt.)HERO11 Black
174X Super Slo-Mo (Long. Batt.)HERO11 Black
182X Slo-Mo (Long. Batt.)HERO11 Black
191X Speed (Long. Batt.) (Low Light)HERO11 Black
208X Ultra Slo-Mo (50Hz) (Long. Batt.)HERO11 Black
214X Super Slo-Mo (50Hz) (Long. Batt.)HERO11 Black
222X Slo-Mo (50Hz) (Long. Batt.)HERO11 Black
231X Speed (50Hz) (Long. Batt.) (Low Light)HERO11 Black
242X Slo-Mo (4K)HERO11 Black
254X Super Slo-Mo (2.7K)HERO11 Black
262X Slo-Mo (4K) (50Hz)HERO11 Black
274X Super Slo-Mo (2.7K) (50Hz)HERO11 Black
1008X Ultra Slo-Mo (V2)HERO12 Black
1014X Super Slo-Mo (V2)HERO12 Black
1022X Slo-Mo (V2)HERO12 Black
1031X Speed (Low Light) (V2)HERO12 Black
1048X Ultra Slo-Mo (50Hz) (V2)HERO12 Black
1054X Super Slo-Mo (50Hz) (V2)HERO12 Black
1062X Slo-Mo (50Hz) (V2)HERO12 Black
1071X Speed (50Hz) (Low Light) (V2)HERO12 Black
1088X Ultra Slo-Mo (Long. Batt.) (V2)HERO12 Black
1094X Super Slo-Mo (Long. Batt.) (V2)HERO12 Black
1102X Slo-Mo (Long. Batt.) (V2)HERO12 Black
1111X Speed (Long. Batt.) (Low Light) (V2)HERO12 Black
1128X Ultra Slo-Mo (50Hz) (Long. Batt.) (V2)HERO12 Black
1134X Super Slo-Mo (50Hz) (Long. Batt.) (V2)HERO12 Black
1142X Slo-Mo (50Hz) (Long. Batt.) (V2)HERO12 Black
1151X Speed (50Hz) (Long. Batt.) (Low Light) (V2)HERO12 Black
1162X Slo-Mo (4K) (V2)HERO12 Black
1172X Slo-Mo (4K) (50Hz) (V2)HERO12 Black
1181X Speed (Low Light) (V2) (Vertical)HERO12 Black
1191X Speed (50Hz) (Low Light) (V2) (Vertical)HERO12 Black
1202X Slo-Mo (V2) (Vertical)HERO12 Black
1212X Slo-Mo (50Hz) (V2) (Vertical)HERO12 Black
1221X Speed (Full Frame) (Low Light) (V2)HERO12 Black
1231X Speed (50Hz) (Full Frame) (Low Light) (V2)HERO12 Black
1242X Slo-Mo (Full Frame) (V2)HERO12 Black
1252X Slo-Mo (50Hz) (Full Frame) (V2)HERO12 Black
1261X Speed (4K) (Low Light) (V2)HERO12 Black
1271X Speed (4K) (50Hz) (Low Light) (V2)HERO12 Black
1281X Speed (2.7K) (Low Light) (V2)HERO12 Black
1291X Speed (2.7K) (50Hz) (Low Light) (V2)HERO12 Black
1302X Slo-Mo (2.7K) (V2)HERO12 Black
1312X Slo-Mo (2.7K) (50Hz) (V2)HERO12 Black
1322X Slo-Mo (Long. Batt.) (V2) (Vertical)HERO12 Black
1332X Slo-Mo (50Hz) (Long. Batt.) (V2) (Vertical)HERO12 Black
1341X Speed (Long. Batt.) (Low Light) (V2) (Vertical)HERO12 Black
1351X Speed (50Hz) (Long. Batt.) (Low Light) (V2) (Vertical)HERO12 Black
1361X Speed (4K) (Full Frame) (Low Light) (V2)HERO12 Black
1371X Speed (4K) (50Hz) (Full Frame) (Low Light) (V2)HERO12 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=103&setting=176'

Response samples

Content type
application/json
{ }

Enable Night Photo (177)

HERO11 Black

-
query Parameters
option
required
integer
Enum: 0 1
- - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
0OffHERO11 Black
1OnHERO11 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=0&setting=177'

Response samples

Content type
application/json
{ }

Frames Per Second (3)

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-
query Parameters
option
required
integer
Enum: 0 1 2 5 6 8 9 10 13
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
0240HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
1120HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
2100HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
560HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
650HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
830HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
925HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
1024HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
13200HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=0&setting=3'

Response samples

Content type
application/json
{ }

Framing (193)

HERO12 Black

-
query Parameters
option
required
integer
Enum: 0 1 2
- - - - - - - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
0WidescreenHERO12 Black
1VerticalHERO12 Black
2Full FrameHERO12 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=0&setting=193'

Response samples

Content type
application/json
{ }

GPS (83)

HERO11 Black -HERO10 Black - HERO9 Black

-
query Parameters
option
required
integer
Enum: 0 1
Example: option=1
- - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
0OffHERO11 BlackHERO10 BlackHERO9 Black
1OnHERO11 BlackHERO10 BlackHERO9 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=1&setting=83'

Response samples

Content type
application/json
{ }

HindSight (167)

HERO12 Black -HERO11 Black - HERO10 Black -HERO9 Black

-
query Parameters
option
required
integer
Enum: 2 3 4
Example: option=2
- - - - - - - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
215 SecondsHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
330 SecondsHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
4OffHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=2&setting=167'

Response samples

Content type
application/json
{ }

Horizon Leveling (150)

HERO11 Black

-
query Parameters
option
required
integer
Enum: 0 2
- - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
0OffHERO11 Black
2LockedHERO11 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=0&setting=150'

Response samples

Content type
application/json
{ }

Horizon Leveling (151)

HERO11 Black

-
query Parameters
option
required
integer
Enum: 0 2
- - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
0OffHERO11 Black
2LockedHERO11 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=0&setting=151'

Response samples

Content type
application/json
{ }

Hypersmooth (135)

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-
query Parameters
option
required
integer
Enum: 0 1 2 3 4 100
Example: option=3
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
0OffHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
1LowHERO12 BlackHERO11 Black MiniHERO11 BlackHERO9 Black
2HighHERO10 BlackHERO9 Black
3BoostHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
4Auto BoostHERO12 BlackHERO11 Black MiniHERO11 Black
100StandardHERO10 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=3&setting=135'

Response samples

Content type
application/json
{ }

Interval (171)

HERO12 Black

-
query Parameters
option
required
integer
Enum: 0 2 3 4 5 6 7 8 9 10
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
0OffHERO12 Black
20.5sHERO12 Black
31sHERO12 Black
42sHERO12 Black
55sHERO12 Black
610sHERO12 Black
730sHERO12 Black
860sHERO12 Black
9120sHERO12 Black
103sHERO12 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=0&setting=171'

Response samples

Content type
application/json
{ }

Lapse Mode (187)

HERO12 Black

-
query Parameters
option
required
integer
Enum: 0 1 2 3 4 5 6 7
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
0TimeWarpHERO12 Black
1Star TrailsHERO12 Black
2Light PaintingHERO12 Black
3Vehicle LightsHERO12 Black
4Max TimeWarpHERO12 Black
5Max Star TrailsHERO12 Black
6Max Light PaintingHERO12 Black
7Max Vehicle LightsHERO12 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=0&setting=187'

Response samples

Content type
application/json
{ }

Lens (121)

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-
query Parameters
option
required
integer
Enum: 0 2 3 4 7 8 9 10 11
Example: option=7
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
0WideHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
2NarrowHERO10 BlackHERO9 Black
3SuperviewHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
4LinearHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
7Max SuperViewHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
8Linear + Horizon LevelingHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
9HyperViewHERO12 BlackHERO11 Black MiniHERO11 Black
10Linear + Horizon LockHERO12 BlackHERO11 Black MiniHERO11 Black
11Max HyperViewHERO12 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=7&setting=121'

Response samples

Content type
application/json
{ }

Lens (122)

HERO12 Black -HERO11 Black - HERO10 Black -HERO9 Black

-
query Parameters
option
required
integer
Enum: 19 100 101 102
Example: option=100
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
19NarrowHERO10 BlackHERO9 Black
100Max SuperViewHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
101WideHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
102LinearHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=100&setting=122'

Response samples

Content type
application/json
{ }

Max Lens (162)

HERO11 Black -HERO10 Black - HERO9 Black

-
query Parameters
option
required
integer
Enum: 0 1
- - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
0OffHERO11 BlackHERO10 BlackHERO9 Black
1OnHERO11 BlackHERO10 BlackHERO9 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=0&setting=162'

Response samples

Content type
application/json
{ }

Max Lens Mod (189)

HERO12 Black

-
query Parameters
option
required
integer
Enum: 0 1 2
- - - - - - - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
0NoneHERO12 Black
1Max Lens 1.0HERO12 Black
2Max Lens 2.0HERO12 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=0&setting=189'

Response samples

Content type
application/json
{ }

Max Lens Mod Enable (190)

HERO12 Black

-
query Parameters
option
required
integer
Enum: 0 1
- - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
0OffHERO12 Black
1OnHERO12 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=0&setting=190'

Response samples

Content type
application/json
{ }

Media Format (128)

HERO12 Black -HERO11 Black - HERO10 Black -HERO9 Black

-
query Parameters
option
required
integer
Enum: 13 20 21 26
Example: option=13
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
13Time Lapse VideoHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
20Time Lapse PhotoHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
21Night Lapse PhotoHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
26Night Lapse VideoHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=13&setting=128'

Response samples

Content type
application/json
{ }

Photo Mode (191)

HERO12 Black

-
query Parameters
option
required
integer
Enum: 0 1
- - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
0Super PhotoHERO12 Black
1Night PhotoHERO12 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=0&setting=191'

Response samples

Content type
application/json
{ }

Profiles (184)

HERO12 Black

-
query Parameters
option
required
integer
Enum: 0 1 2
- - - - - - - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
0StandardHERO12 Black
1HDRHERO12 Black
2LogHERO12 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=0&setting=184'

Response samples

Content type
application/json
{ }

Resolution (2)

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-
query Parameters
option
required
integer
Enum: 1 4 6 7 9 18 24 25 26 27 28 100 107 108 109 110 111
Example: option=24
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
14KHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
42.7KHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
62.7K 4:3HERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
71440HERO9 Black
91080HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
184K 4:3HERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
245KHERO9 Black
255K 4:3HERO10 Black
265.3K 8:7HERO11 Black MiniHERO11 Black
275.3K 4:3HERO11 Black MiniHERO11 Black
284K 8:7HERO11 Black MiniHERO11 Black
1005.3KHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 Black
1075.3KHERO12 Black
1084KHERO12 Black
1094KHERO12 Black
1101080HERO12 Black
1112.7KHERO12 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=24&setting=2'

Response samples

Content type
application/json
{ }

Time Lapse Digital Lenses (123)

HERO12 Black -HERO11 Black - HERO10 Black -HERO9 Black

-
query Parameters
option
required
integer
Enum: 19 100 101 102
Example: option=101
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
19NarrowHERO10 BlackHERO9 Black
100Max SuperViewHERO10 Black
101WideHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
102LinearHERO12 BlackHERO11 BlackHERO10 BlackHERO9 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=101&setting=123'

Response samples

Content type
application/json
{ }

Trail Length (179)

HERO12 Black -HERO11 Black Mini - HERO11 Black

-
query Parameters
option
required
integer
Enum: 1 2 3
Example: option=3
- - - - - - - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
1ShortHERO12 BlackHERO11 Black MiniHERO11 Black
2LongHERO12 BlackHERO11 Black MiniHERO11 Black
3MaxHERO12 BlackHERO11 Black MiniHERO11 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=3&setting=179'

Response samples

Content type
application/json
{ }

Video Mode (180)

HERO11 Black

-
query Parameters
option
required
integer
Enum: 0 101 102
- - - - - - - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
0Highest QualityHERO11 Black
101Extended Battery (Green Icon)HERO11 Black
102Longest Battery (Green Icon)HERO11 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=0&setting=180'

Response samples

Content type
application/json
{ }

Video Mode (186)

HERO12 Black

-
query Parameters
option
required
integer
Enum: 0 1 2
- - - - - - - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
0Highest QualityHERO12 Black
1Standard QualityHERO12 Black
2Basic QualityHERO12 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=0&setting=186'

Response samples

Content type
application/json
{ }

Video Performance Mode (173)

HERO10 Black

-
query Parameters
option
required
integer
Enum: 0 1 2
- - - - - - - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
0Maximum Video PerformanceHERO10 Black
1Extended BatteryHERO10 Black
2Tripod / Stationary VideoHERO10 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=0&setting=173'

Response samples

Content type
application/json
{ }

Webcam Digital Lenses (43)

HERO12 Black -HERO11 Black Mini - HERO11 Black -HERO10 Black - HERO9 Black

-
query Parameters
option
required
integer
Enum: 0 2 3 4
Example: option=3
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
0WideHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
2NarrowHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
3SuperviewHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
4LinearHERO12 BlackHERO11 Black MiniHERO11 BlackHERO10 BlackHERO9 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=3&setting=43'

Response samples

Content type
application/json
{ }

Wireless Band (178)

HERO12 Black -HERO11 Black Mini - HERO11 Black

-
query Parameters
option
required
integer
Enum: 0 1
- - - - - - - - - - - - - - - - - -
IDMeaningSupported Cameras
02.4GHzHERO12 BlackHERO11 Black MiniHERO11 Black
15GHzHERO12 BlackHERO11 Black MiniHERO11 Black
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/camera/setting?option=0&setting=178'

Response samples

Content type
application/json
{ }

Webcam

The webcam feature enables developers who are interested in writing custom drivers to broadcast the camera's video -preview with a limited set of resolution, field of view, port, and protocol options.

-

While active, the webcam feature sends raw data to the connected client using a supported protocol. To enable -multi-cam support, some cameras support running on a user-specified port. Protocol and port details are provided in a -table below.

-

To test basic functionality, start the webcam, and use an application such as VLC to open a network stream:

- - - - - - - - - - - - - - - -
ProtocolPort
TSudp://@:{PORT}
RTSPrtsp://{CAMERA_IP}:554/live
-

For readers interested in using a GoPro camera as a webcam with preexisting tools, please see -How to use GoPro as a Webcam.

-

Webcam via USB

-

For USB connections, prior to issuing webcam commands, Wired USB Control should -be disabled.

-

Webcam State Diagram

-

webcam state diagram

-

Webcam Stabilization

-

Should the client require stabilization, the -Hypersmooth setting -can be used while in the state: READY (Status: OFF). This setting can only be set while webcam is disabled, which -requires either sending the Webcam Exit command or reseating the USB-C connection to the camera.

-
-

Note! The Low Hypersmooth option provides lower/lighter stabilization when used in Webcam mode vs other camera modes.

-
-

Enter Webcam Preview

HERO12 Black -HERO11 Black - HERO10 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

Not supported on WiFi for:

-
    -
  • Hero 11 Black Mini
  • -
  • Hero 11 Black
  • -
  • Hero 10 Black
  • -
  • Hero 9 Black
  • -
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url http://10.5.5.9:8080/gopro/webcam/preview

Response samples

Content type
application/json
{ }

Exit Webcam Mode

HERO12 Black -HERO11 Black - HERO10 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

Not supported on WiFi for:

-
    -
  • Hero 11 Black Mini
  • -
  • Hero 11 Black
  • -
  • Hero 10 Black
  • -
  • Hero 9 Black
  • -
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url http://10.5.5.9:8080/gopro/webcam/exit

Response samples

Content type
application/json
{ }

Get Webcam Status

HERO12 Black -HERO11 Black - HERO10 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

Responses

Response Schema: application/json
error
integer
Enum: 0 1 2 3 4 5 6 7 8

Current webcam error (if status was not successful)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CodeStatus
0None
1Set Preset
2Set Window Size
3Exec Stream
4Shutter
5Com timeout
6Invalid param
7Unavailable
8Exit
-
status
integer
Enum: 0 1 2 3

Current webcam status

- - - - - - - - - - - - - - - - - - - - - - - -
CodeStatus
0Off
1Idle
2High Power Preview
3Low Power Preview
-

Request samples

curl --request GET \
-  --url http://10.5.5.9:8080/gopro/webcam/status

Response samples

Content type
application/json
{
  • "error": 0,
  • "status": 0
}

Get Webcam Version

HERO12 Black -HERO11 Black - HERO10 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

Responses

Response Schema: application/json
max_lens_support
boolean

Does the webcam support Max Lens Mod?

-
usb_3_1_compatible
boolean

Is the webcam USB 3.1 compatible?

-
version
integer

Current webcam version

-

Request samples

curl --request GET \
-  --url http://10.5.5.9:8080/gopro/webcam/version

Response samples

Content type
application/json
{
  • "max_lens_support": true,
  • "usb_3_1_compatible": true,
  • "version": 0
}

Start Webcam

HERO12 Black -HERO11 Black - HERO10 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

Not supported on WiFi for:

-
    -
  • Hero 11 Black Mini
  • -
  • Hero 11 Black
  • -
  • Hero 10 Black
  • -
  • Hero 9 Black
  • -
-
query Parameters
res
integer
Example: res=12

Webcam Resolution

- - - - - - - - - - - - - - - - - - - - - - - - - -
IDResolutionSupported Cameras
4480pHero 10 Black, Hero 9 Black
7720pHero 12 Black, Hero 9 Black, Hero 10 Black, Hero 11 Black
121080pHero 12 Black, Hero 9 Black, Hero 10 Black, Hero 11 Black
-
fov
integer

Webcam Field-of-View

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDFOVSupported Cameras
0WideHero 12 Black, Hero 9 Black, Hero 10 Black, Hero 11 Black
2NarrowHero 12 Black, Hero 9 Black, Hero 10 Black, Hero 11 Black
3SuperviewHero 12 Black, Hero 9 Black, Hero 10 Black, Hero 11 Black
4LinearHero 12 Black, Hero 9 Black, Hero 10 Black, Hero 11 Black
-
port
integer
Default: 8554
Example: port=8556

Port to use for Webcam Stream. Defaults to 8554 if not set

-

Not supported on:

-
    -
  • Hero 11 Black Mini
  • -
  • Hero 10 Black
  • -
  • Hero 9 Black
  • -
-
protocol
string
Enum: "RTSP" "TS"
Example: protocol=RTSP

Streaming protocol to use.

-

Not supported on:

-
    -
  • Hero 11 Black Mini
  • -
  • Hero 11 Black
  • -
  • Hero 10 Black
  • -
  • Hero 9 Black
  • -
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url 'http://10.5.5.9:8080/gopro/webcam/start?res=12&fov=0&port=8556&protocol=RTSP'

Response samples

Content type
application/json
{ }

Stop Webcam

HERO12 Black -HERO11 Black - HERO10 Black

-

Supported Protocols:

-
    -
  • USB
  • -
  • WIFI
  • -
-
-

Not supported on WiFi for:

-
    -
  • Hero 11 Black Mini
  • -
  • Hero 11 Black
  • -
  • Hero 10 Black
  • -
  • Hero 9 Black
  • -
-

Responses

Response Schema: application/json
object

Request samples

curl --request GET \
-  --url http://10.5.5.9:8080/gopro/webcam/stop

Response samples

Content type
application/json
{ }
- - - - \ No newline at end of file