from tutorial_modules import proto
@@ -734,7 +734,7 @@ Protobuf Message Example
ResponseGeneric object.
-
+
-
python
@@ -745,7 +745,7 @@
Protobuf Message Example
-
+
-
response_bytes = proto.ResponseGeneric(result=proto.EnumResultGeneric.RESULT_SUCCESS).SerializeToString()
@@ -821,7 +821,7 @@ Protobuf Response Parser
-
+
-
python
@@ -832,7 +832,7 @@
Protobuf Response Parser
-
+
-
@@ -869,7 +869,7 @@
Set Turbo Transfer
Feature ID, Action ID, and length bytes:
-
+
-
python
@@ -880,7 +880,7 @@
Set Turbo Transfer
-
+
-
turbo_mode_request = bytearray(
@@ -907,7 +907,7 @@ Set Turbo Transfer
from the Set Turbo Mode Documentation: ResponseGeneric.
-
+
-
python
@@ -918,7 +918,7 @@
Set Turbo Transfer
-
+
-
await client.write_gatt_char(request_uuid.value, turbo_mode_request, response=True)
@@ -980,7 +980,7 @@ Response Manager
parsing of all response types:
-
+
-
python
@@ -991,7 +991,7 @@
Response Manager
-
+
-
@@ -1074,7 +1074,7 @@
Examples of Each Response Type
Now let’s perform operations that will demonstrate each response type:
-
+
-
python
@@ -1085,7 +1085,7 @@
Examples of Each Response Type
-
+
-
# TLV Command (Setting)
@@ -1168,7 +1168,7 @@ Good Job!
- Updated:
+ Updated:
diff --git a/tutorials/ble-queries.html b/tutorials/ble-queries.html
index db597987..985a360f 100644
--- a/tutorials/ble-queries.html
+++ b/tutorials/ble-queries.html
@@ -34,7 +34,7 @@
-
+
@@ -437,7 +437,7 @@
-
+
@@ -532,7 +532,7 @@
Requirements
Just Show me the Demo(s)!!
-
+
-
python
@@ -543,7 +543,7 @@
Just Show me the Demo(s)!!
-
+
-
Each of the scripts for this tutorial can be found in the Tutorial 4
@@ -669,7 +669,7 @@
Setup
connecting BLE tutorial.
-
+
-
python
@@ -680,7 +680,7 @@
Setup
-
+
-
We have slightly updated the notification handler from the previous tutorial to handle a QueryResponse
instead of
@@ -831,7 +831,7 @@
Parsing a Query Response
storing each value in a hash map indexed by ID for later access.
-
+
-
python
@@ -842,7 +842,7 @@
Parsing a Query Response
-
+
-
class QueryResponse(TlvResponse):
@@ -898,10 +898,10 @@ Parsing a Query Response
-
+
-
How many packets are query responses?
-
+
How many packets are query responses?
+
@@ -914,19 +914,19 @@
Parsing a Query Response
-
-
-
Correct!! 😃
-
Incorrect!! 😭 The correct answer is C.
+
+
+ Correct!! 😃
+ Incorrect!! 😭 The correct answer is C.
Query responses can be one packet (if for example querying a specific
setting) or multiple packets (when querying many or all settings as in the example here).
-
+
-
Which field is not common to all TLV responses?
-
+
Which field is not common to all TLV responses?
+
@@ -942,10 +942,10 @@
Parsing a Query Response
-
-
-
Correct!! 😃
-
Incorrect!! 😭 The correct answer is D.
+
+
+ Correct!! 😃
+ Incorrect!! 😭 The correct answer is D.
All Commands and Query responses have a length, ID, and status.
@@ -1001,7 +1001,7 @@
Individual Query Poll
First we send the query:
-
+
-
python
@@ -1012,7 +1012,7 @@
Individual Query Poll
-
+
-
@@ -1040,7 +1040,7 @@
Individual Query Poll
QueryResponse
class and extract the new resolution value.
-
+
-
python
@@ -1051,7 +1051,7 @@
Individual Query Poll
-
+
-
# Wait to receive the notification response
@@ -1098,7 +1098,7 @@ Individual Query Poll
has changed:
-
+
-
python
@@ -1109,7 +1109,7 @@
Individual Query Poll
-
+
-
while resolution is not target_resolution:
@@ -1179,7 +1179,7 @@ Multiple Simultaneous Query Polls
FOV.
-
+
-
python
@@ -1190,7 +1190,7 @@
Multiple Simultaneous Query Polls
-
+
-
RESOLUTION_ID = 2
@@ -1218,7 +1218,7 @@ Multiple Simultaneous Query Polls
We are also parsing the response to get all 3 values:
-
+
-
python
@@ -1229,7 +1229,7 @@
Multiple Simultaneous Query Polls
-
+
-
response.parse()
@@ -1256,7 +1256,7 @@ Multiple Simultaneous Query Polls
They are then printed to the log which will look like the following:
-
+
-
python
@@ -1267,7 +1267,7 @@
Multiple Simultaneous Query Polls
-
+
-
Getting the current resolution, fps, and fov.
@@ -1327,10 +1327,10 @@ Query All
Quiz time! 📚 ✏️
-
+
-
How can we poll the encoding status and the resolution setting using one query?
-
+
How can we poll the encoding status and the resolution setting using one query?
+
@@ -1343,10 +1343,10 @@
Query All
-
-
-
Correct!! 😃
-
Incorrect!! 😭 The correct answer is C.
+
+
+
Correct!! 😃
+
Incorrect!! 😭 The correct answer is C.
It is not possible to concatenate queries. This would result in an unknown sequence of bytes
from the camera’s perspective. So it is not possible to get a setting value and a status value in one
query. The Get Setting Query (with resolution ID) and Get Status Query (with encoding ID) must be
@@ -1433,7 +1433,7 @@
Registering for Query Push Not
First, let’s register for updates when the resolution setting changes:
-
+
-
python
@@ -1444,7 +1444,7 @@
Registering for Query Push Not
-
+
-
query_request_uuid = GoProUuid.QUERY_REQ_UUID
@@ -1472,7 +1472,7 @@ Registering for Query Push Not
This can be seen in the raw byte data as well as by inspecting the response’s id
property.
-
+
-
python
@@ -1483,7 +1483,7 @@
Registering for Query Push Not
-
+
-
response.parse()
@@ -1530,7 +1530,7 @@ Registering for Query Push Not
notification..
-
+
-
python
@@ -1541,7 +1541,7 @@
Registering for Query Push Not
-
+
-
target_resolution = Resolution.RES_2_7K if resolution is Resolution.RES_1080 else Resolution.RES_1080
@@ -1615,11 +1615,11 @@ Registering for Query Push Not
Quiz time! 📚 ✏️
-
+
-
True or False: We can still poll a given query value while we are currently registered to
+
True or False: We can still poll a given query value while we are currently registered to
receive push notifications for it.
-
-
-
-
Correct!! 😃
-
Incorrect!! 😭 The correct answer is A.
+
+
+ Correct!! 😃
+ Incorrect!! 😭 The correct answer is A.
While there is probably not a good reason to do so, there is nothing preventing polling
in this manner.
-
+
-
True or False: A push notification for a registered setting will only ever contain query information
+
True or False: A push notification for a registered setting will only ever contain query information
about one setting ID.
-
-
-
-
Correct!! 😃
-
Incorrect!! 😭 The correct answer is B.
+
+
+ Correct!! 😃
+ Incorrect!! 😭 The correct answer is B.
It is possible for push notifications to contain multiple setting ID’s if both setting ID’s have
push notifications registered and both settings change at the same time.
@@ -1684,7 +1684,7 @@
Good Job!
-
Updated:
+
Updated:
diff --git a/tutorials/camera-media-list.html b/tutorials/camera-media-list.html
index 43794710..7ad87fca 100644
--- a/tutorials/camera-media-list.html
+++ b/tutorials/camera-media-list.html
@@ -34,7 +34,7 @@
-
+
@@ -437,7 +437,7 @@
-
+
@@ -519,7 +519,7 @@
Requirements
Just Show me the Demo(s)!!
-
+
-
python
@@ -530,7 +530,7 @@
Just Show me the Demo(s)!!
-
+
-
Each of the scripts for this tutorial can be found in the Tutorial 8
@@ -649,7 +649,7 @@
an exception.
-
+
-
+
-
url = GOPRO_BASE_URL + "/gopro/media/list"
@@ -684,7 +684,7 @@
Lastly, we print the response’s JSON data:
-
+
-
+
-
logger.info(f"Response: {json.dumps(response.json(), indent=4)}")
@@ -792,7 +792,7 @@
One common functionality is to get the list of media file names, which can be done as such:
-
+
-
+
-
print([x["n"] for x in media_list["media"][0]["fs"]])
@@ -859,7 +859,7 @@
ends in .jpg). Once we find a photo, we proceed:
-
+
-
+
-
media_list = get_media_list()
@@ -904,7 +904,7 @@
-
+
-
+
-
url = GOPRO_BASE_URL + f"videos/DCIM/100GOPRO/{photo}"
@@ -952,7 +952,7 @@
This will log as such:
-
+
-
+
-
INFO:root:found a photo: GOPR0987.JPG
@@ -1003,7 +1003,7 @@
ends in .jpg). Once we find a photo, we proceed: