blob: cd474b247bbe2abe384bfc62112b5071afd9a915 [file] [log] [blame]
/*
* Copyright (c) 2018-2021 mcumgr authors
* Copyright (c) 2022 Laird Connectivity
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef H_OS_MGMT_
#define H_OS_MGMT_
#ifdef __cplusplus
extern "C" {
#endif
/**
* Command IDs for OS management group.
*/
#define OS_MGMT_ID_ECHO 0
#define OS_MGMT_ID_CONS_ECHO_CTRL 1
#define OS_MGMT_ID_TASKSTAT 2
#define OS_MGMT_ID_MPSTAT 3
#define OS_MGMT_ID_DATETIME_STR 4
#define OS_MGMT_ID_RESET 5
#define OS_MGMT_ID_MCUMGR_PARAMS 6
#define OS_MGMT_ID_INFO 7
/* Bitmask values used by the os info command handler. Note that the width of this variable is
* 32-bits, allowing 32 flags, custom user-level implementations should start at
* OS_MGMT_INFO_FORMAT_USER_CUSTOM_START and reference that directly as additional format
* specifiers might be added to this list in the future.
*/
enum os_mgmt_info_formats {
OS_MGMT_INFO_FORMAT_KERNEL_NAME = BIT(0),
OS_MGMT_INFO_FORMAT_NODE_NAME = BIT(1),
OS_MGMT_INFO_FORMAT_KERNEL_RELEASE = BIT(2),
OS_MGMT_INFO_FORMAT_KERNEL_VERSION = BIT(3),
OS_MGMT_INFO_FORMAT_BUILD_DATE_TIME = BIT(4),
OS_MGMT_INFO_FORMAT_MACHINE = BIT(5),
OS_MGMT_INFO_FORMAT_PROCESSOR = BIT(6),
OS_MGMT_INFO_FORMAT_HARDWARE_PLATFORM = BIT(7),
OS_MGMT_INFO_FORMAT_OPERATING_SYSTEM = BIT(8),
OS_MGMT_INFO_FORMAT_USER_CUSTOM_START = BIT(9),
};
/* Structure provided in the MGMT_EVT_OP_OS_MGMT_INFO_CHECK notification callback */
struct os_mgmt_info_check {
/* Input format string from the mcumgr client */
struct zcbor_string *format;
/* Bitmask of values specifying which outputs should be present */
uint32_t *format_bitmask;
/* Number of valid format characters parsed, must be incremented by 1 for each valid
* character
*/
uint16_t *valid_formats;
/* Needs to be set to true if the OS name is being provided by external code */
bool *custom_os_name;
};
/* Structure provided in the MGMT_EVT_OP_OS_MGMT_INFO_APPEND notification callback */
struct os_mgmt_info_append {
/* The format bitmask from the processed commands, the bits should be cleared once
* processed, note that if all_format_specified is specified, the corrisponding bits here
* will not be set
*/
uint32_t *format_bitmask;
/* Will be true if the all 'a' specifier was provided */
bool all_format_specified;
/* The output buffer which the responses should be appended to. If prior_output is true, a
* space must be added prior to the output response
*/
uint8_t *output;
/* The current size of the output response in the output buffer, must be updated to be the
* size of the output response after appending data
*/
uint16_t *output_length;
/* The size of the output buffer, including null terminator character, if the output
* response would exceed this size, the function must abort and return false to return a
* memory error to the client
*/
uint16_t buffer_size;
/* If there has been prior output, must be set to true if a response has been output */
bool *prior_output;
};
/**
* @brief Registers the OS management command handler group.
*/
void os_mgmt_register_group(void);
#ifdef __cplusplus
}
#endif
#endif /* H_OS_MGMT_ */