xref: /aosp_15_r20/external/pigweed/pw_system/public/pw_system/config.h (revision 61c4878ac05f98d0ceed94b57d316916de578985)
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