1 // Copyright 2021 The Pigweed Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); you may not 4 // use this file except in compliance with the License. You may obtain a copy of 5 // the License at 6 // 7 // https://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11 // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12 // License for the specific language governing permissions and limitations under 13 // the License. 14 #pragma once 15 16 #include <cstddef> 17 #include <cstdint> 18 19 // PW_SYSTEM_LOG_BUFFER_SIZE is the log buffer size which determines how many 20 // log entries can be buffered prior to streaming them. 21 // 22 // Defaults to 4KiB. 23 #ifndef PW_SYSTEM_LOG_BUFFER_SIZE 24 #define PW_SYSTEM_LOG_BUFFER_SIZE 4096 25 #endif // PW_SYSTEM_LOG_BUFFER_SIZE 26 27 // PW_SYSTEM_MAX_LOG_ENTRY_SIZE limits the proto-encoded log entry size. This 28 // value might depend on a target interface's MTU. 29 // 30 // Defaults to 256B. 31 #ifndef PW_SYSTEM_MAX_LOG_ENTRY_SIZE 32 #define PW_SYSTEM_MAX_LOG_ENTRY_SIZE 256 33 #endif // PW_SYSTEM_MAX_LOG_ENTRY_SIZE 34 35 // PW_SYSTEM_MAX_TRANSMISSION_UNIT target's MTU. 36 // 37 // Defaults to 1055 bytes, which is enough to fit 512-byte payloads when using 38 // HDLC framing. 39 #ifndef PW_SYSTEM_MAX_TRANSMISSION_UNIT 40 #define PW_SYSTEM_MAX_TRANSMISSION_UNIT 1055 41 #endif // PW_SYSTEM_MAX_TRANSMISSION_UNIT 42 43 // PW_SYSTEM_DEFAULT_CHANNEL_ID RPC channel ID to host. 44 // 45 // Defaults to 1. 46 #ifndef PW_SYSTEM_DEFAULT_CHANNEL_ID 47 #define PW_SYSTEM_DEFAULT_CHANNEL_ID 1 48 #endif // PW_SYSTEM_DEFAULT_CHANNEL_ID 49 50 // PW_SYSTEM_LOGGING_CHANNEL_ID logging RPC channel ID to host. If this is 51 // different from PW_SYSTEM_DEFAULT_CHANNEL_ID, then 52 // PW_SYSTEM_LOGGING_RPC_HDLC_ADDRESS must also be different from 53 // PW_SYSTEM_DEFAULT_RPC_HDLC_ADDRESS. 54 // 55 // Defaults to PW_SYSTEM_DEFAULT_CHANNEL_ID. 56 #ifndef PW_SYSTEM_LOGGING_CHANNEL_ID 57 #define PW_SYSTEM_LOGGING_CHANNEL_ID PW_SYSTEM_DEFAULT_CHANNEL_ID 58 #endif // PW_SYSTEM_LOGGING_CHANNEL_ID 59 60 // PW_SYSTEM_DEFAULT_RPC_HDLC_ADDRESS RPC HDLC default address. 61 // 62 // Defaults to 82. 63 #ifndef PW_SYSTEM_DEFAULT_RPC_HDLC_ADDRESS 64 #define PW_SYSTEM_DEFAULT_RPC_HDLC_ADDRESS 82 65 #endif // PW_SYSTEM_DEFAULT_RPC_HDLC_ADDRESS 66 67 // PW_SYSTEM_LOGGING_RPC_HDLC_ADDRESS RPC HDLC logging address. 68 // 69 // Defaults to PW_SYSTEM_DEFAULT_RPC_HDLC_ADDRESS. 70 #ifndef PW_SYSTEM_LOGGING_RPC_HDLC_ADDRESS 71 #define PW_SYSTEM_LOGGING_RPC_HDLC_ADDRESS PW_SYSTEM_DEFAULT_RPC_HDLC_ADDRESS 72 #endif // PW_SYSTEM_LOGGING_RPC_HDLC_ADDRESS 73 74 // PW_SYSTEM_EXTRA_LOGGING_CHANNEL_ID extra logging channel ID. 75 // If this is different from PW_SYSTEM_LOGGING_CHANNEL_ID, then 76 // an additional sink will be created to forward logs to 77 // this channel. 78 // 79 // Defaults to PW_SYSTEM_LOGGING_CHANNEL_ID 80 #ifndef PW_SYSTEM_EXTRA_LOGGING_CHANNEL_ID 81 #define PW_SYSTEM_EXTRA_LOGGING_CHANNEL_ID PW_SYSTEM_LOGGING_CHANNEL_ID 82 #endif // PW_SYSTEM_EXTRA_LOGGING_CHANNEL_ID 83 84 // PW_SYSTEM_ENABLE_TRACE_SERVICE specifies if the trace RPC service is enabled. 85 // 86 // Defaults to 1. 87 #ifndef PW_SYSTEM_ENABLE_TRACE_SERVICE 88 #define PW_SYSTEM_ENABLE_TRACE_SERVICE 1 89 #endif // PW_SYSTEM_ENABLE_TRACE_SERVICE 90 91 // PW_SYSTEM_ENABLE_TRANSFER_SERVICE specifies if the transfer RPC service is 92 // enabled. 93 // 94 // Defaults to 1. 95 #ifndef PW_SYSTEM_ENABLE_TRANSFER_SERVICE 96 #define PW_SYSTEM_ENABLE_TRANSFER_SERVICE 1 97 #endif // PW_SYSTEM_ENABLE_TRANSFER_SERVICE 98 99 // PW_SYSTEM_ENABLE_THREAD_SNAPSHOT_SERVICE specifies if the thread snapshot 100 // RPC service is enabled. 101 // 102 // Defaults to 1. 103 #ifndef PW_SYSTEM_ENABLE_THREAD_SNAPSHOT_SERVICE 104 #define PW_SYSTEM_ENABLE_THREAD_SNAPSHOT_SERVICE 1 105 #endif // PW_SYSTEM_ENABLE_THREAD_SNAPSHOT_SERVICE 106 107 // PW_SYSTEM_WORK_QUEUE_MAX_ENTRIES specifies the maximum number of work queue 108 // entries that may be staged at once. 109 // 110 // Defaults to 32. 111 #ifndef PW_SYSTEM_WORK_QUEUE_MAX_ENTRIES 112 #define PW_SYSTEM_WORK_QUEUE_MAX_ENTRIES 32 113 #endif // PW_SYSTEM_WORK_QUEUE_MAX_ENTRIES 114 115 // PW_SYSTEM_SOCKET_IO_PORT specifies the port number to use for the socket 116 // stream implementation of pw_system's I/O interface. 117 // 118 // Defaults to 33000. 119 #ifndef PW_SYSTEM_SOCKET_IO_PORT 120 #define PW_SYSTEM_SOCKET_IO_PORT 33000 121 #endif // PW_SYSTEM_SOCKET_IO_PORT 122 123 // PW_SYSTEM_ASYNC_LOG_THREAD_STACK_SIZE_BYTES specifies the size of the 124 // internal pw_log thread stack. 125 #ifndef PW_SYSTEM_ASYNC_LOG_THREAD_STACK_SIZE_BYTES 126 #define PW_SYSTEM_ASYNC_LOG_THREAD_STACK_SIZE_BYTES 4096 127 #endif // PW_SYSTEM_ASYNC_LOG_THREAD_STACK_SIZE_BYTES 128 129 // PW_SYSTEM_ASYNC_RPC_THREAD_STACK_SIZE_BYTES specifies the size of the 130 // internal pw_rpc thread stack. 131 #ifndef PW_SYSTEM_ASYNC_RPC_THREAD_STACK_SIZE_BYTES 132 #define PW_SYSTEM_ASYNC_RPC_THREAD_STACK_SIZE_BYTES 2048 133 #endif // PW_SYSTEM_ASYNC_RPC_THREAD_STACK_SIZE_BYTES 134 135 // PW_SYSTEM_ASYNC_TRANSFER_THREAD_STACK_SIZE_BYTES specifies the size of the 136 // internal pw_transfer thread stack. 137 #ifndef PW_SYSTEM_ASYNC_TRANSFER_THREAD_STACK_SIZE_BYTES 138 #define PW_SYSTEM_ASYNC_TRANSFER_THREAD_STACK_SIZE_BYTES 2048 139 #endif // PW_SYSTEM_ASYNC_TRANSFER_THREAD_STACK_SIZE_BYTES 140 141 // PW_SYSTEM_ASYNC_DISPATCHER_THREAD_STACK_SIZE_BYTES specifies the size of the 142 // internal pw_async2 dispatcher thread stack. 143 #ifndef PW_SYSTEM_ASYNC_DISPATCHER_THREAD_STACK_SIZE_BYTES 144 #define PW_SYSTEM_ASYNC_DISPATCHER_THREAD_STACK_SIZE_BYTES 2048 145 #endif // PW_SYSTEM_ASYNC_DISPATCHER_THREAD_STACK_SIZE_BYTES 146 147 // PW_SYSTEM_ASYNC_WORK_QUEUE_THREAD_STACK_SIZE_BYTES specifies the size of the 148 // internal work queue thread stack. 149 #ifndef PW_SYSTEM_ASYNC_WORK_QUEUE_THREAD_STACK_SIZE_BYTES 150 #define PW_SYSTEM_ASYNC_WORK_QUEUE_THREAD_STACK_SIZE_BYTES 2048 151 #endif // PW_SYSTEM_ASYNC_WORK_QUEUE_THREAD_STACK_SIZE_BYTES 152 153 // PW_SYSTEM_ENABLE_CRASH_HANDLER specifies if the crash handler is enabled. 154 // 155 // Defaults to 1. 156 #ifndef PW_SYSTEM_ENABLE_CRASH_HANDLER 157 #define PW_SYSTEM_ENABLE_CRASH_HANDLER 1 158 #endif // PW_SYSTEM_ENABLE_CRASH_HANDLER 159 160 // PW_SYSTEM_CRASH_SNAPSHOT_NOINIT_MEMORY_SECTION specifies the section of 161 // memory to store the snapshot data. 162 // 163 // Defaults to ".noinit" 164 #ifndef PW_SYSTEM_CRASH_SNAPSHOT_NOINIT_MEMORY_SECTION 165 #define PW_SYSTEM_CRASH_SNAPSHOT_NOINIT_MEMORY_SECTION ".noinit" 166 #endif // PW_SYSTEM_CRASH_SNAPSHOT_NOINIT_MEMORY_SECTION 167 168 // PW_SYSTEM_CRASH_SNAPSHOT_MEMORY_SIZE_BYTES specifies how much memory to 169 // reserver for snapshots. 170 // 171 // Defaults to 2048 172 #ifndef PW_SYSTEM_CRASH_SNAPSHOT_MEMORY_SIZE_BYTES 173 #define PW_SYSTEM_CRASH_SNAPSHOT_MEMORY_SIZE_BYTES 2048 174 #endif // PW_SYSTEM_CRASH_SNAPSHOT_MEMORY_SIZE_BYTES 175 176 namespace pw::system { 177 178 // This is the default channel used by the pw_system RPC server. Some other 179 // parts of pw_system use this channel ID as the default destination for 180 // unrequested data streams. 181 inline constexpr uint32_t kDefaultRpcChannelId = PW_SYSTEM_DEFAULT_CHANNEL_ID; 182 183 // This is the channel ID used for logging. 184 inline constexpr uint32_t kLoggingRpcChannelId = PW_SYSTEM_LOGGING_CHANNEL_ID; 185 #if PW_SYSTEM_EXTRA_LOGGING_CHANNEL_ID != PW_SYSTEM_LOGGING_CHANNEL_ID 186 inline constexpr uint32_t kExtraLoggingRpcChannelId = 187 PW_SYSTEM_EXTRA_LOGGING_CHANNEL_ID; 188 #endif // PW_SYSTEM_EXTRA_LOGGING_CHANNEL_ID != PW_SYSTEM_LOGGING_CHANNEL_ID 189 190 inline constexpr size_t kLogThreadStackSizeBytes = 191 PW_SYSTEM_ASYNC_LOG_THREAD_STACK_SIZE_BYTES; 192 inline constexpr size_t kRpcThreadStackSizeBytes = 193 PW_SYSTEM_ASYNC_RPC_THREAD_STACK_SIZE_BYTES; 194 inline constexpr size_t kTransferThreadStackSizeBytes = 195 PW_SYSTEM_ASYNC_TRANSFER_THREAD_STACK_SIZE_BYTES; 196 inline constexpr size_t kDispatcherThreadStackSizeBytes = 197 PW_SYSTEM_ASYNC_DISPATCHER_THREAD_STACK_SIZE_BYTES; 198 inline constexpr size_t kWorkQueueThreadStackSizeBytes = 199 PW_SYSTEM_ASYNC_WORK_QUEUE_THREAD_STACK_SIZE_BYTES; 200 201 #undef PW_SYSTEM_ASYNC_LOG_THREAD_STACK_SIZE_BYTES 202 #undef PW_SYSTEM_ASYNC_RPC_THREAD_STACK_SIZE_BYTES 203 #undef PW_SYSTEM_ASYNC_TRANSFER_THREAD_STACK_SIZE_BYTES 204 #undef PW_SYSTEM_ASYNC_DISPATCHER_THREAD_STACK_SIZE_BYTES 205 #undef PW_SYSTEM_ASYNC_WORK_QUEUE_THREAD_STACK_SIZE_BYTES 206 207 } // namespace pw::system 208