235 lines
6.2 KiB
C
235 lines
6.2 KiB
C
/*
|
|
* Copyright (c) 2018 O.S.Systems
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
/** @file
|
|
*
|
|
* @brief This file contains structures representing JSON messages
|
|
* exchanged with a UpdateHub
|
|
*/
|
|
|
|
#ifndef __UPDATEHUB_PRIV_H__
|
|
#define __UPDATEHUB_PRIV_H__
|
|
|
|
#define UPDATEHUB_API_HEADER \
|
|
"Api-Content-Type: application/vnd.updatehub-v1+json"
|
|
|
|
enum updatehub_uri_path {
|
|
UPDATEHUB_PROBE = 0,
|
|
UPDATEHUB_REPORT,
|
|
UPDATEHUB_DOWNLOAD,
|
|
};
|
|
|
|
enum updatehub_state {
|
|
UPDATEHUB_STATE_DOWNLOADING = 0,
|
|
UPDATEHUB_STATE_DOWNLOADED,
|
|
UPDATEHUB_STATE_INSTALLING,
|
|
UPDATEHUB_STATE_INSTALLED,
|
|
UPDATEHUB_STATE_REBOOTING,
|
|
UPDATEHUB_STATE_ERROR,
|
|
};
|
|
|
|
static char *updatehub_response(enum updatehub_response response)
|
|
{
|
|
switch (response) {
|
|
case UPDATEHUB_NETWORKING_ERROR:
|
|
return "Fail to connect to the UpdateHub server";
|
|
case UPDATEHUB_INCOMPATIBLE_HARDWARE:
|
|
return "Incompatible hardware";
|
|
case UPDATEHUB_METADATA_ERROR:
|
|
return "Fail to parse or to encode the metadata";
|
|
case UPDATEHUB_DOWNLOAD_ERROR:
|
|
return "Fail while downloading the update package";
|
|
case UPDATEHUB_INSTALL_ERROR:
|
|
return "Fail while installing the update package";
|
|
case UPDATEHUB_FLASH_INIT_ERROR:
|
|
return "Fail to initialize the flash";
|
|
case UPDATEHUB_NO_UPDATE:
|
|
return "No update available";
|
|
default:
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
static const char *uri_path(enum updatehub_uri_path type)
|
|
{
|
|
switch (type) {
|
|
case UPDATEHUB_PROBE:
|
|
return "upgrades";
|
|
case UPDATEHUB_REPORT:
|
|
return "report";
|
|
case UPDATEHUB_DOWNLOAD:
|
|
return "products";
|
|
default:
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
static const char *state_name(enum updatehub_state state)
|
|
{
|
|
switch (state) {
|
|
case UPDATEHUB_STATE_DOWNLOADING:
|
|
return "downloading";
|
|
case UPDATEHUB_STATE_DOWNLOADED:
|
|
return "downloaded";
|
|
case UPDATEHUB_STATE_INSTALLING:
|
|
return "installing";
|
|
case UPDATEHUB_STATE_INSTALLED:
|
|
return "installed";
|
|
case UPDATEHUB_STATE_REBOOTING:
|
|
return "rebooting";
|
|
case UPDATEHUB_STATE_ERROR:
|
|
return "error";
|
|
default:
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
struct resp_probe_objects {
|
|
const char *mode;
|
|
const char *sha256sum;
|
|
int size;
|
|
};
|
|
|
|
struct resp_probe_objects_array {
|
|
struct resp_probe_objects objects;
|
|
};
|
|
|
|
struct resp_probe_objects_array_array {
|
|
struct resp_probe_objects_array objects[4];
|
|
size_t objects_len;
|
|
};
|
|
|
|
struct resp_probe_any_boards {
|
|
struct resp_probe_objects_array_array objects[2];
|
|
size_t objects_len;
|
|
const char *product;
|
|
const char *supported_hardware;
|
|
};
|
|
|
|
struct resp_probe_some_boards {
|
|
struct resp_probe_objects_array_array objects[2];
|
|
size_t objects_len;
|
|
const char *product;
|
|
const char *supported_hardware[CONFIG_UPDATEHUB_SUPPORTED_HARDWARE_MAX];
|
|
size_t supported_hardware_len;
|
|
};
|
|
|
|
struct updatehub_config_device_identity {
|
|
const char *id;
|
|
};
|
|
|
|
struct report {
|
|
const char *product_uid;
|
|
const char *hardware;
|
|
const char *version;
|
|
struct updatehub_config_device_identity device_identity;
|
|
const char *status;
|
|
const char *package_uid;
|
|
const char *error_message;
|
|
const char *previous_state;
|
|
};
|
|
|
|
struct probe {
|
|
const char *product_uid;
|
|
const char *hardware;
|
|
const char *version;
|
|
struct updatehub_config_device_identity device_identity;
|
|
};
|
|
|
|
static const struct json_obj_descr recv_probe_objects_descr[] = {
|
|
JSON_OBJ_DESCR_PRIM(struct resp_probe_objects,
|
|
mode, JSON_TOK_STRING),
|
|
JSON_OBJ_DESCR_PRIM(struct resp_probe_objects,
|
|
sha256sum, JSON_TOK_STRING),
|
|
JSON_OBJ_DESCR_PRIM(struct resp_probe_objects,
|
|
size, JSON_TOK_NUMBER),
|
|
};
|
|
|
|
static const struct json_obj_descr recv_probe_objects_descr_array[] = {
|
|
JSON_OBJ_DESCR_OBJECT(struct resp_probe_objects_array,
|
|
objects, recv_probe_objects_descr),
|
|
};
|
|
|
|
static const struct json_obj_descr recv_probe_objects_descr_array_array[] = {
|
|
JSON_OBJ_DESCR_ARRAY_ARRAY(struct resp_probe_objects_array_array,
|
|
objects, 4, objects_len,
|
|
recv_probe_objects_descr_array,
|
|
ARRAY_SIZE(recv_probe_objects_descr_array)),
|
|
};
|
|
|
|
static const struct json_obj_descr recv_probe_sh_string_descr[] = {
|
|
JSON_OBJ_DESCR_PRIM(struct resp_probe_any_boards,
|
|
product, JSON_TOK_STRING),
|
|
JSON_OBJ_DESCR_PRIM_NAMED(struct resp_probe_any_boards,
|
|
"supported-hardware", supported_hardware,
|
|
JSON_TOK_STRING),
|
|
JSON_OBJ_DESCR_ARRAY_ARRAY(struct resp_probe_any_boards,
|
|
objects, 2, objects_len,
|
|
recv_probe_objects_descr_array_array,
|
|
ARRAY_SIZE(recv_probe_objects_descr_array_array)),
|
|
};
|
|
|
|
static const struct json_obj_descr recv_probe_sh_array_descr[] = {
|
|
JSON_OBJ_DESCR_PRIM(struct resp_probe_some_boards,
|
|
product, JSON_TOK_STRING),
|
|
JSON_OBJ_DESCR_ARRAY_NAMED(struct resp_probe_some_boards,
|
|
"supported-hardware", supported_hardware,
|
|
CONFIG_UPDATEHUB_SUPPORTED_HARDWARE_MAX,
|
|
supported_hardware_len, JSON_TOK_STRING),
|
|
JSON_OBJ_DESCR_ARRAY_ARRAY(struct resp_probe_some_boards,
|
|
objects, 2, objects_len,
|
|
recv_probe_objects_descr_array_array,
|
|
ARRAY_SIZE(recv_probe_objects_descr_array_array)),
|
|
};
|
|
|
|
static const struct json_obj_descr device_identity_descr[] = {
|
|
JSON_OBJ_DESCR_PRIM(struct updatehub_config_device_identity,
|
|
id, JSON_TOK_STRING),
|
|
};
|
|
|
|
static const struct json_obj_descr send_report_descr[] = {
|
|
JSON_OBJ_DESCR_PRIM_NAMED(struct report,
|
|
"product-uid", product_uid,
|
|
JSON_TOK_STRING),
|
|
JSON_OBJ_DESCR_OBJECT_NAMED(struct report,
|
|
"device-identity", device_identity,
|
|
device_identity_descr),
|
|
JSON_OBJ_DESCR_PRIM_NAMED(struct report,
|
|
"error-message", error_message,
|
|
JSON_TOK_STRING),
|
|
JSON_OBJ_DESCR_PRIM_NAMED(struct report,
|
|
"previous-state", previous_state,
|
|
JSON_TOK_STRING),
|
|
JSON_OBJ_DESCR_PRIM(struct report,
|
|
version, JSON_TOK_STRING),
|
|
JSON_OBJ_DESCR_PRIM(struct report,
|
|
hardware, JSON_TOK_STRING),
|
|
JSON_OBJ_DESCR_PRIM_NAMED(struct report,
|
|
"package-uid", package_uid,
|
|
JSON_TOK_STRING),
|
|
JSON_OBJ_DESCR_PRIM(struct report,
|
|
status, JSON_TOK_STRING),
|
|
};
|
|
|
|
static const struct json_obj_descr send_probe_descr[] = {
|
|
JSON_OBJ_DESCR_PRIM_NAMED(struct probe,
|
|
"product-uid", product_uid,
|
|
JSON_TOK_STRING),
|
|
JSON_OBJ_DESCR_OBJECT_NAMED(struct probe,
|
|
"device-identity", device_identity,
|
|
device_identity_descr),
|
|
JSON_OBJ_DESCR_PRIM(struct probe,
|
|
version, JSON_TOK_STRING),
|
|
JSON_OBJ_DESCR_PRIM(struct probe,
|
|
hardware, JSON_TOK_STRING),
|
|
};
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
#endif /* __UPDATEHUB_PRIV_H__ */
|