Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update documentation from JS comments #1381

Merged
merged 29 commits into from
Oct 7, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
bd76db8
docs iot README update
Sep 30, 2020
83e6fde
how to guides update
Sep 30, 2020
cb61589
docs iot README update
Sep 30, 2020
082c5a0
how to guides update
Sep 30, 2020
e547b1e
Merge branch 'momuno/doc-updates-js' of github.com:momuno/azure-sdk-f…
Sep 30, 2020
3696d0f
remove hub and provisioning mds. Add pseudo_code md. update readmes
Oct 1, 2020
fba1ee4
typo fix
Oct 1, 2020
87e5c1b
Update CMake instructions
Oct 1, 2020
f8ad6a4
typo fix
Oct 1, 2020
08ed710
Fix CMake instructions
Oct 1, 2020
2c0a7f3
Merge branch 'master' into momuno/doc-updates-js
Oct 1, 2020
5177c11
Updates per comments
Oct 2, 2020
113cbc6
naming update
Oct 2, 2020
d3c12d9
Merge branch 'master' into momuno/doc-updates-js
Oct 2, 2020
6e7f3fb
update naming
Oct 2, 2020
427abf6
fix link
Oct 6, 2020
dc89eef
fix link
Oct 6, 2020
0a96417
commit to kick of fresh testing
Oct 6, 2020
1de8c17
revert change
Oct 6, 2020
12e4150
build fix attempt
Oct 7, 2020
57fb698
build fix attempt
Oct 7, 2020
5a08664
Disable vcpkg caching to use the correct triplet.
ahsonkhan Oct 7, 2020
c6c4068
Revert "Disable vcpkg caching to use the correct triplet."
ahsonkhan Oct 7, 2020
ec771e5
Merge branch 'momuno/doc-updates-js' of github.com:momuno/azure-sdk-f…
Oct 7, 2020
de64452
revert vcpkg and cmake-build changes to clear cache
Oct 7, 2020
cfa4294
Adding the triplet as part of the restore key.
ahsonkhan Oct 7, 2020
7072ee5
Merge branch 'momuno/doc-updates-js' of https:/momuno/azu…
ahsonkhan Oct 7, 2020
bcfe16b
Adding back the triplet as part of the restore key.
ahsonkhan Oct 7, 2020
d44be06
Comment updates
Oct 7, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions eng/pipelines/templates/steps/vcpkg.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ steps:
| "$(VcpkgCommit)"
| $(Agent.Os)
| $(${{ parameters.DependenciesVariableName }})
| $(VCPKG_DEFAULT_TRIPLET)
Copy link
Member

@ahsonkhan ahsonkhan Oct 7, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@weshaggard, @danieljurek - We are adding the triplet name to the restore key of the cache to make it more unique and force a cache miss.

This was causing issues because we temporarily changed the triplet value to solve a different issue (and reverted it back), but since it is still within the 7 day window, the cache had the incorrect packages stored corresponding to the wrong triplet (x86-windows-static-md instead of x86-windows-static).

For context:

https://docs.microsoft.com/en-us/azure/devops/pipelines/release/caching?view=azure-devops#can-i-clear-a-cache

Clearing a cache is currently not supported. However you can add a string literal (e.g. version2) to your existing cache key to change the key in a way that avoids any hits on existing caches.

See this Windows leg, which now has a cache miss since we now include the triplet name as part of the key:
https://dev.azure.com/azure-sdk/public/_build/results?buildId=566055&view=logs&j=1822ef0b-3ac4-586f-233b-6fdf166a140f&t=47e4b218-8f82-5039-fb29-8b3a261ff980

Resolved to: Validate WindowsX86_Release_MapFiles_UnitTests|"tags/2020.06"|Windows_NT|cmocka|x86-windows-static
ApplicationInsightsTelemetrySender will correlate events with X-TFS-Session b3cd6573-8ace-44b3-8bb2-82ce64481824
Getting a pipeline cache artifact with one of the following fingerprints:
Fingerprint: Validate WindowsX86_Release_MapFiles_UnitTests|"tags/2020.06"|Windows_NT|cmocka|x86-windows-static
There is a cache miss.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FYI, @vhvb1989, @antkmsft, @RickWinter, if this issue comes up again.

Once we have a new release of Vcpkg, we can leverage their own binary caching feature which might be less error-prone and flexible, moving forward: microsoft/vcpkg#11204

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ahsonkhan please comment the vcpkg.yml file with these details. Years from now it will be helpful to know why that triplet is there and I doubt anyone will remember this issue

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@RickWinter 2 months later, I remembered ahahaha.. Happened again here: Azure/azure-sdk-for-cpp#1042

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please comment the vcpkg.yml file with these details.

#1534

path: $(VCPKG_INSTALLATION_ROOT)
cacheHitVar: VcpkgRestoredFromCache
displayName: Vcpkg Cache
Expand Down
299 changes: 86 additions & 213 deletions sdk/docs/iot/README.md

Large diffs are not rendered by default.

127 changes: 127 additions & 0 deletions sdk/docs/iot/coding_patterns.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
# Azure IoT Client Coding Patterns

## Introduction

This page introduces you to coding patterns that are MQTT stack agnostic. These examples will give you a general overview of the API calls and structure needed to use the Azure IoT Embedded C SDK features.

To view scenario-focused examples using the API calls, please view the [introductory examples](https:/Azure/azure-sdk-for-c/blob/master/sdk/docs/iot/README.md#examples) on the Azure IoT Client README file.

For a more extensive demonstration of the API, please view and run the [sample code](https:/Azure/azure-sdk-for-c/blob/master/sdk/samples/iot/), which uses Paho MQTT.

## Examples

### IoT Hub Client with MQTT Stack

Below is an implementation for using the IoT Hub Client SDK. This is meant to guide users in incorporating their MQTT stack with the IoT Hub Client SDK. Note for simplicity reasons, this code will not compile. Ideally, guiding principles can be inferred from reading through this snippet to create an IoT solution.

```C
#include <az/core/az_result.h>
#include <az/core/az_span.h>
#include <az/iot/az_iot_hub_client.h>

az_iot_hub_client my_client;
static az_span my_iothub_hostname = AZ_SPAN_LITERAL_FROM_STR("<your hub fqdn here>");
static az_span my_device_id = AZ_SPAN_LITERAL_FROM_STR("<your device id here>");

//Make sure the buffer is large enough to fit the user name (100 is an example)
static char my_mqtt_user_name[100];

//Make sure the buffer is large enough to fit the client id (16 is an example)
static char my_mqtt_client_id[16];

//This assumes an X509 Cert. SAS keys may also be used.
static const char my_device_cert[]= "-----BEGIN CERTIFICATE-----abcdefg-----END CERTIFICATE-----";

static char telemetry_topic[128];
static char telemetry_payload[] = "Hello World";

void handle_iot_message(mqtt_client_message* msg);

int main(void)
{
//Get the default IoT Hub options
az_iot_hub_client_options options = az_iot_hub_client_options_default();

//Initialize the client with hostname, device id, and options
az_iot_hub_client_init(&my_client, my_iothub_hostname, my_device_id, &options);

//Get the MQTT user name to connect
az_iot_hub_client_get_user_name(&my_client, my_mqtt_user_name,
sizeof(my_mqtt_user_name), NULL);

//Get the MQTT client id to connect
az_iot_hub_client_get_client_id(&my_client, my_mqtt_client_id,
sizeof(my_mqtt_client_id), NULL);

//Initialize MQTT client with necessary parameters (example params shown)
mqtt_client my_mqtt_client;
mqtt_client_init(&my_mqtt_client, my_iothub_hostname, my_mqtt_client_id);

//Subscribe to c2d messages
mqtt_client_subscribe(&my_mqtt_client, AZ_IOT_HUB_CLIENT_C2D_SUBSCRIBE_TOPIC);

//Subscribe to device methods
mqtt_client_subscribe(&my_mqtt_client, AZ_IOT_HUB_CLIENT_METHODS_SUBSCRIBE_TOPIC);

//Subscribe to twin patch topic
mqtt_client_subscribe(&my_mqtt_client, AZ_IOT_HUB_CLIENT_TWIN_PATCH_SUBSCRIBE_TOPIC);

//Subscribe to twin response topic
mqtt_client_subscribe(&my_mqtt_client, AZ_IOT_HUB_CLIENT_TWIN_RESPONSE_SUBSCRIBE_TOPIC);

//Connect to the IoT Hub with your chosen mqtt stack
mqtt_client_connect(&my_mqtt_client, my_mqtt_user_name, my_device_cert);

//This example would run to receive any incoming message and send a telemetry message five times
int iterations = 0;
mqtt_client_message msg;
while(iterations++ < 5)
{
if(mqtt_client_receive(&msg))
{
handle_iot_message(&msg);
}

send_telemetry_message();
}

//Disconnect from the IoT Hub
mqtt_client_disconnect(&my_mqtt_client);

//Destroy the mqtt client
mqtt_client_destroy(&my_mqtt_client);
}

void send_telemetry_message(void)
{
//Get the topic to send a telemetry message
az_iot_hub_client_telemetry_get_publish_topic(&client, NULL, telemetry_topic, sizeof(telemetry_topic), NULL);

//Send the telemetry message with the MQTT client
mqtt_client_publish(telemetry_topic, telemetry_payload, AZ_HUB_CLIENT_DEFAULT_MQTT_TELEMETRY_QOS);
}

void handle_iot_message(mqtt_client_message* msg)
{
//Initialize the incoming topic to a span
az_span incoming_topic = az_span_create(msg->topic, msg->topic_len);

//The message could be for three features so parse the topic to see which it is for
az_iot_hub_client_method_request method_request;
az_iot_hub_client_c2d_request c2d_request;
az_iot_hub_client_twin_response twin_response;
if (az_result_succeeded(az_iot_hub_client_methods_parse_received_topic(&client, incoming_topic, &method_request)))
{
//Handle the method request
}
else if (az_result_succeeded(az_iot_hub_client_c2d_parse_received_topic(&client, incoming_topic, &c2d_request)))
{
//Handle the c2d message
}
else if (az_result_succeeded(az_iot_hub_client_twin_parse_received_topic(&client, incoming_topic, &twin_response)))
{
//Handle the twin message
}
}

```
26 changes: 0 additions & 26 deletions sdk/docs/iot/hub.md

This file was deleted.

29 changes: 0 additions & 29 deletions sdk/docs/iot/provisioning.md

This file was deleted.

46 changes: 23 additions & 23 deletions sdk/samples/iot/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
# Azure Embedded C SDK IoT Samples
# Azure IoT Samples

- [Azure Embedded C SDK IoT Samples](#azure-embedded-c-sdk-iot-samples)
## Table of Contents

- [Azure IoT Samples](#azure-iot-samples)
- [Table of Contents](#table-of-contents)
momuno marked this conversation as resolved.
Show resolved Hide resolved
- [Introduction](#introduction)
- [Prerequisites](#prerequisites)
- [Sample Descriptions](#sample-descriptions)
Expand Down Expand Up @@ -33,7 +36,7 @@ This document explains samples for the Azure Embedded C SDK IoT Hub Client and D

Samples are designed to highlight the function calls required to connect with the Azure IoT Hub or the Azure IoT Hub Device Provisioning Service (DPS). These calls illustrate the happy path of the [mqtt state machine](https:/Azure/azure-sdk-for-c/blob/master/sdk/docs/iot/mqtt_state_machine.md). As a result, **these samples are NOT designed to be used as production-level code**. Production code needs to incorporate other elements, such as connection retries and more extensive error-handling, which these samples do not include. These samples also utilize OpenSSL, which is **NOT recommended to use in production-level code on Windows or macOS**.

The samples' instructions include specifics for both Windows and Linux based systems. For Windows, the command line examples are based on PowerShell. The Linux examples are tailored to Debian/Ubuntu environments. Samples are also designed to work on macOS systems, but the instructions do not yet include specific command line examples for this environment. While Windows and Linux devices are not likely to be considered constrained, these samples enable one to test the Azure SDK for Embedded C libraries, debug, and step through the code, even without a real device. We understand not everyone will have a real device to test and that sometimes these devices won't have debugging capabilities.
The samples' instructions include specifics for both Windows and Linux based systems. For Windows, the command line examples are based on PowerShell. The Linux examples are tailored to Debian/Ubuntu environments. Samples are also designed to work on macOS systems, but the instructions do not yet include specific command line examples for this environment. While Windows and Linux devices are not likely to be considered constrained, these samples enable developers to test the Azure SDK for Embedded C libraries, debug, and step through the code, even without a real device. We understand not everyone will have a real device to test and that sometimes these devices won't have debugging capabilities.

**WARNING: Samples are generic and should not be used in any production-level code.**

Expand All @@ -43,6 +46,8 @@ More detailed step-by-step guides on how to run an IoT Hub Client sample from sc
- Windows: [How to Setup and Run Azure SDK for Embedded C IoT Hub Certificate Samples on Microsoft Windows](https:/Azure/azure-sdk-for-c/blob/master/sdk/samples/iot/docs/how_to_iot_hub_samples_windows.md)
- ESP8266: [How to Setup and Run Azure SDK for Embedded C IoT Hub Client on Esp8266 NodeMCU](https:/Azure/azure-sdk-for-c/blob/master/sdk/samples/iot/docs/how_to_iot_hub_esp8266_nodemcu.md)

To view scenario-focused examples using the API calls, please view the Azure IoT Client [introductory examples](https:/Azure/azure-sdk-for-c/blob/master/sdk/docs/iot/README.md#examples). General [coding patterns](https:/Azure/azure-sdk-for-c/blob/master/sdk/docs/iot/coding_patterns.md) that are MQTT stack agnostic are also available to view.

## Prerequisites

To run the samples, ensure you have the following programs and tools installed on your system:
Expand All @@ -66,8 +71,7 @@ To run the samples, ensure you have the following programs and tools installed o

```bash
sudo apt-get update
sudo apt-get install build-essential # make and gcc
sudo apt-get install curl unzip tar pkg-config
sudo apt-get install build-essential curl unzip tar pkg-config
```

Windows (PowerShell):
Expand All @@ -78,7 +82,7 @@ To run the samples, ensure you have the following programs and tools installed o
</details>

- Have [Git](https://git-scm.com/download) installed.
- Have Microsoft [vcpkg](https:/microsoft/vcpkg) package manager and [Eclipse Paho MQTT C client](https://www.eclipse.org/paho/) installed. On Linux, this installation may take an extended amount of time (~20-30 minutes).
- Have Microsoft [vcpkg](https:/microsoft/vcpkg) package manager and [Eclipse Paho MQTT C client](https://www.eclipse.org/paho/) installed. On Linux, this installation may take an extended amount of time (~15-20 minutes).

<details><summary><i>Instructions:</i></summary>
<p>
Expand Down Expand Up @@ -129,21 +133,27 @@ To run the samples, ensure you have the following programs and tools installed o
</p>
</details>

- Have the latest version of [CMake](https://cmake.org/download) installed. On Linux, this installation may also take an extended amount of time (~20-30 minutes).
- Have CMake installed. The minimum required is 3.10.

<details><summary><i>Instructions:</i></summary>
<p>

Linux:
Linux (Ubuntu 18.04 or 20.04):

```bash
sudo apt-get purge cmake
sudo tar -xvzf cmake-<latest-version>.tar.gz
cd cmake-<latest-version>
./bootstrap && make && sudo make install
sudo apt-get install cmake
momuno marked this conversation as resolved.
Show resolved Hide resolved
```

Windows (PowerShell):
Linux (Ubuntu 16.04): Download the latest version of [CMake](https://cmake.org/files).

```bash
wget https://cmake.org/files/v3.18/cmake-3.18.3-Linux-x86_64.sh # Use latest version.
sudo ./cmake-3.18.3-Linux-x86_64.sh --prefix=/usr
```

- When prompted to include the default subdirectory, enter `n` so to install in `/usr/local`.

Windows (PowerShell): Download the latest version of [CMake](https://cmake.org/download).

- Use the Windows installer.

Expand Down Expand Up @@ -756,22 +766,12 @@ The resulting thumbprint will be placed in `fingerprint.txt` and the generated p

From the root of the SDK directory `azure-sdk-for-c`:

Linux:

```bash
mkdir build
cd build
cmake -DTRANSPORT_PAHO=ON ..
```

Windows (PowerShell):

```powershell
mkdir build
cd build
cmake -DTRANSPORT_PAHO=ON ..
```

2. Compile and run the sample.

Linux:
Expand Down
Loading