Cloud API

The cloud API library exposes API to interact with cloud solutions. Using these APIs, an application can connect to a cloud, and send and receive data.

Functionality

Cloud API defines a set of functions that a cloud driver, also called a cloud backend, must implement. Some functions of cloud API are optional and can be omitted.

To use the API, you must provide an event handler during the initialization of the cloud backend. This handler will receive events when, for example, data is received from the cloud.

After successful initialization of the cloud backend, you can establish a connection to the cloud. If the connection succeeds, the backend emits a “ready event”, and you can start interacting with the cloud.

Using Cloud API with different cloud backends

See the following documentation to know more about using this library with different cloud backends:

API Reference

Header file: include/net/cloud.h
Source files: subsys/net/lib/cloud/
group cloud_api

Cloud API.

Defines

CLOUD_BACKEND_DEFINE(_name, _api)

Typedefs

typedef void (*cloud_evt_handler_t)(const struct cloud_backend *const backend, const struct cloud_event *const evt, void *user_data)

Cloud event handler function type.

Parameters
  • backend: Pointer to cloud backend.

  • evt: Pointer to cloud event.

  • user_data: Pointer to user defined data that will be passed on as argument to cloud event handler.

Enums

enum cloud_state

Cloud backend states.

Values:

enumerator CLOUD_STATE_DISCONNECTED
enumerator CLOUD_STATE_DISCONNECTING
enumerator CLOUD_STATE_CONNECTED
enumerator CLOUD_STATE_CONNECTING
enumerator CLOUD_STATE_BUSY
enumerator CLOUD_STATE_ERROR
enumerator CLOUD_STATE_COUNT
enum cloud_event_type

Cloud events that can be notified asynchronously by the backend.

Values:

enumerator CLOUD_EVT_CONNECTING
enumerator CLOUD_EVT_CONNECTED
enumerator CLOUD_EVT_DISCONNECTED
enumerator CLOUD_EVT_READY
enumerator CLOUD_EVT_ERROR
enumerator CLOUD_EVT_DATA_SENT
enumerator CLOUD_EVT_DATA_RECEIVED
enumerator CLOUD_EVT_PAIR_REQUEST
enumerator CLOUD_EVT_PAIR_DONE
enumerator CLOUD_EVT_FOTA_START
enumerator CLOUD_EVT_FOTA_DONE
enumerator CLOUD_EVT_FOTA_ERASE_PENDING
enumerator CLOUD_EVT_FOTA_ERASE_DONE
enumerator CLOUD_EVT_FOTA_DL_PROGRESS
enumerator CLOUD_EVT_COUNT
enum cloud_disconnect_reason

Values:

enumerator CLOUD_DISCONNECT_USER_REQUEST
enumerator CLOUD_DISCONNECT_CLOSED_BY_REMOTE

The connection was closed by the cloud

enumerator CLOUD_DISCONNECT_INVALID_REQUEST

The connection is no longer valid

enumerator CLOUD_DISCONNECT_MISC

Miscellaneous error

enumerator CLOUD_DISCONNECT_COUNT
enum cloud_qos

Quality of Service for message sent by a cloud backend.

Values:

enumerator CLOUD_QOS_AT_MOST_ONCE
enumerator CLOUD_QOS_AT_LEAST_ONCE
enumerator CLOUD_QOS_EXACTLY_ONCE
enumerator CLOUD_QOS_COUNT
enum cloud_endpoint_type

Cloud endpoint type.

Values:

enumerator CLOUD_EP_TOPIC_MSG
enumerator CLOUD_EP_TOPIC_STATE
enumerator CLOUD_EP_TOPIC_STATE_DELETE
enumerator CLOUD_EP_TOPIC_CONFIG
enumerator CLOUD_EP_TOPIC_PAIR
enumerator CLOUD_EP_TOPIC_BATCH
enumerator CLOUD_EP_URI
enumerator CLOUD_EP_COMMON_COUNT
enumerator CLOUD_EP_PRIV_START
enumerator CLOUD_EP_PRIV_END
enum cloud_connect_result

Cloud connect results.

Values:

enumerator CLOUD_CONNECT_RES_SUCCESS
enumerator CLOUD_CONNECT_RES_ERR_NOT_INITD

Cloud backend is not initialized.

enumerator CLOUD_CONNECT_RES_ERR_INVALID_PARAM
enumerator CLOUD_CONNECT_RES_ERR_NETWORK

Host cannot be found with the available network interfaces.

enumerator CLOUD_CONNECT_RES_ERR_BACKEND

A backend-specific error.

enumerator CLOUD_CONNECT_RES_ERR_MISC

Error cause cannot be determined.

enumerator CLOUD_CONNECT_RES_ERR_NO_MEM

MQTT RX/TX buffers were not initialized.

enumerator CLOUD_CONNECT_RES_ERR_PRV_KEY

Invalid private key

enumerator CLOUD_CONNECT_RES_ERR_CERT

Invalid CA or client certificate

enumerator CLOUD_CONNECT_RES_ERR_CERT_MISC

Miscellaneous certificate error

enumerator CLOUD_CONNECT_RES_ERR_TIMEOUT_NO_DATA

Timeout; typically occurs when the inserted SIM card has no data

enumerator CLOUD_CONNECT_RES_ERR_ALREADY_CONNECTED

Connection process has already been started.

Functions

int cloud_init(struct cloud_backend *const backend, cloud_evt_handler_t handler)

Initialize a cloud backend. Performs all necessary configuration of the backend required to connect its online counterpart.

Parameters
  • backend: Pointer to cloud backend structure.

  • handler: Handler to receive events from the backend.

int cloud_uninit(const struct cloud_backend *const backend)

Uninitialize a cloud backend. Gracefully disconnects remote endpoint and releases memory.

Parameters
  • backend: Pointer to cloud backend structure.

int cloud_connect(const struct cloud_backend *const backend)

Request connection to a cloud backend.

The backend is required to expose the socket in use when this function returns. The socket should then be available through backend->config->socket and the application may start listening for events on it.

Return

connect result defined by enum cloud_connect_result.

Parameters
  • backend: Pointer to a cloud backend structure.

int cloud_disconnect(const struct cloud_backend *const backend)

Disconnect from a cloud backend.

Return

0 or a negative error code indicating reason of failure.

Parameters
  • backend: Pointer to a cloud backend structure.

int cloud_send(const struct cloud_backend *const backend, struct cloud_msg *msg)

Send data to a cloud.

Return

0 or a negative error code indicating reason of failure.

Parameters
  • backend: Pointer to a cloud backend structure.

  • msg: Pointer to cloud message structure.

int cloud_ping(const struct cloud_backend *const backend)

Optional API to ping the cloud’s remote endpoint periodically.

Return

0 or a negative error code indicating reason of failure.

Parameters
  • backend: Pointer to cloud backend.

int cloud_keepalive_time_left(const struct cloud_backend *const backend)

Helper function to determine when next keep alive message should be sent. Can be used for instance as a source for poll timeout.

Return

Time in milliseconds until next keep alive message is expected to be sent.

Parameters
  • backend: Pointer to cloud backend.

int cloud_input(const struct cloud_backend *const backend)

Process incoming data to backend.

Note

This is a non-blocking call.

Return

0 or a negative error code indicating reason of failure.

Parameters
  • backend: Pointer to cloud backend.

int cloud_ep_subscriptions_add(const struct cloud_backend *const backend, const struct cloud_endpoint *list, size_t list_count)

Add Cloud endpoint subscriptions.

Parameters
  • backend: Pointer to cloud backend structure.

  • list: Pointer to a list of endpoint subscriptions.

  • list_count: Number of entries in the endpoint subscription list.

int cloud_ep_subscriptions_remove(const struct cloud_backend *const backend, const struct cloud_endpoint *list, size_t list_count)

Remove Cloud endpoint subscriptions.

Parameters
  • backend: Pointer to cloud backend structure.

  • list: Pointer to a list of endpoint subscriptions.

  • list_count: Number of entries in the endpoint subscriptions list.

int cloud_user_data_set(struct cloud_backend *const backend, void *user_data)

Set the user-defined data that is passed as an argument to cloud event handler.

Parameters
  • backend: Pointer to cloud backend structure.

  • user_data: Pointer to user defined data that will be passed on as argument to cloud event handler.

void cloud_notify_event(struct cloud_backend *backend, struct cloud_event *evt, void *user_data)

Calls the user-provided event handler with event data.

Parameters
  • backend: Pointer to cloud backend.

  • evt: Pointer to event data.

  • user_data: Pointer to user-defined data.

struct cloud_backend *cloud_get_binding(const char *name)

Get binding (pointer) to cloud backend if a registered backend matches the provided name.

Return

Pointer to the cloud backend structure.

Parameters
  • name: String with the name of the cloud backend.

struct cloud_endpoint
#include <cloud.h>

Cloud endpoint data.

struct cloud_msg
#include <cloud.h>

Cloud message type.

struct cloud_event
#include <cloud.h>

Cloud event type.

Public Members

int fota_progress

FOTA progress in percentage.

struct cloud_api
#include <cloud.h>

Cloud backend API.

ping() and user_data_set() can be omitted, the other functions are mandatory.

struct cloud_backend_config
#include <cloud.h>

Structure for cloud backend configuration.

struct cloud_backend
#include <cloud.h>

Structure for cloud backend.