1 /* 2 * Copyright (c) 2018-2021 mcumgr authors 3 * Copyright (c) 2022 Laird Connectivity 4 * Copyright (c) 2023 Nordic Semiconductor ASA 5 * 6 * SPDX-License-Identifier: Apache-2.0 7 */ 8 9 #ifndef H_OS_MGMT_ 10 #define H_OS_MGMT_ 11 12 #ifdef __cplusplus 13 extern "C" { 14 #endif 15 16 /** 17 * Command IDs for OS management group. 18 */ 19 #define OS_MGMT_ID_ECHO 0 20 #define OS_MGMT_ID_CONS_ECHO_CTRL 1 21 #define OS_MGMT_ID_TASKSTAT 2 22 #define OS_MGMT_ID_MPSTAT 3 23 #define OS_MGMT_ID_DATETIME_STR 4 24 #define OS_MGMT_ID_RESET 5 25 #define OS_MGMT_ID_MCUMGR_PARAMS 6 26 #define OS_MGMT_ID_INFO 7 27 #define OS_MGMT_ID_BOOTLOADER_INFO 8 28 29 /** 30 * Command result codes for OS management group. 31 */ 32 enum os_mgmt_err_code_t { 33 /** No error, this is implied if there is no ret value in the response */ 34 OS_MGMT_ERR_OK = 0, 35 36 /** Unknown error occurred. */ 37 OS_MGMT_ERR_UNKNOWN, 38 39 /** The provided format value is not valid. */ 40 OS_MGMT_ERR_INVALID_FORMAT, 41 42 /** Query was not recognized. */ 43 OS_MGMT_ERR_QUERY_YIELDS_NO_ANSWER, 44 45 /** RTC is not set */ 46 OS_MGMT_ERR_RTC_NOT_SET, 47 48 /** RTC command failed */ 49 OS_MGMT_ERR_RTC_COMMAND_FAILED, 50 51 /** Query was recognized but there is no valid value for the response. */ 52 OS_MGMT_ERR_QUERY_RESPONSE_VALUE_NOT_VALID, 53 }; 54 55 /* Bitmask values used by the os info command handler. Note that the width of this variable is 56 * 32-bits, allowing 32 flags, custom user-level implementations should start at 57 * OS_MGMT_INFO_FORMAT_USER_CUSTOM_START and reference that directly as additional format 58 * specifiers might be added to this list in the future. 59 */ 60 enum os_mgmt_info_formats { 61 OS_MGMT_INFO_FORMAT_KERNEL_NAME = BIT(0), 62 OS_MGMT_INFO_FORMAT_NODE_NAME = BIT(1), 63 OS_MGMT_INFO_FORMAT_KERNEL_RELEASE = BIT(2), 64 OS_MGMT_INFO_FORMAT_KERNEL_VERSION = BIT(3), 65 OS_MGMT_INFO_FORMAT_BUILD_DATE_TIME = BIT(4), 66 OS_MGMT_INFO_FORMAT_MACHINE = BIT(5), 67 OS_MGMT_INFO_FORMAT_PROCESSOR = BIT(6), 68 OS_MGMT_INFO_FORMAT_HARDWARE_PLATFORM = BIT(7), 69 OS_MGMT_INFO_FORMAT_OPERATING_SYSTEM = BIT(8), 70 71 OS_MGMT_INFO_FORMAT_USER_CUSTOM_START = BIT(9), 72 }; 73 74 /* Structure provided in the MGMT_EVT_OP_OS_MGMT_INFO_CHECK notification callback */ 75 struct os_mgmt_info_check { 76 /* Input format string from the mcumgr client */ 77 struct zcbor_string *format; 78 /* Bitmask of values specifying which outputs should be present */ 79 uint32_t *format_bitmask; 80 /* Number of valid format characters parsed, must be incremented by 1 for each valid 81 * character 82 */ 83 uint16_t *valid_formats; 84 /* Needs to be set to true if the OS name is being provided by external code */ 85 bool *custom_os_name; 86 }; 87 88 /* Structure provided in the MGMT_EVT_OP_OS_MGMT_INFO_APPEND notification callback */ 89 struct os_mgmt_info_append { 90 /* The format bitmask from the processed commands, the bits should be cleared once 91 * processed, note that if all_format_specified is specified, the corresponding bits here 92 * will not be set 93 */ 94 uint32_t *format_bitmask; 95 /* Will be true if the all 'a' specifier was provided */ 96 bool all_format_specified; 97 /* The output buffer which the responses should be appended to. If prior_output is true, a 98 * space must be added prior to the output response 99 */ 100 uint8_t *output; 101 /* The current size of the output response in the output buffer, must be updated to be the 102 * size of the output response after appending data 103 */ 104 uint16_t *output_length; 105 /* The size of the output buffer, including null terminator character, if the output 106 * response would exceed this size, the function must abort and return false to return a 107 * memory error to the client 108 */ 109 uint16_t buffer_size; 110 /* If there has been prior output, must be set to true if a response has been output */ 111 bool *prior_output; 112 }; 113 114 #ifdef __cplusplus 115 } 116 #endif 117 118 #endif /* H_OS_MGMT_ */ 119