xref: /aosp_15_r20/external/pigweed/pw_stream_uart_mcuxpresso/interrupt_safe_writer.cc (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1 // Copyright 2024 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 #include "pw_stream_uart_mcuxpresso/interrupt_safe_writer.h"
15 
16 #include "fsl_clock.h"
17 
18 namespace pw::stream {
19 
Enable()20 pw::Status InterruptSafeUartWriterMcuxpresso::Enable() {
21   usart_config_t usart_config;
22   USART_GetDefaultConfig(&usart_config);
23   usart_config.baudRate_Bps = baudrate_;
24   usart_config.enableRx = false;
25   usart_config.enableTx = true;
26 
27   PW_TRY(element_controller_.Acquire());
28 
29   if (USART_Init(base(), &usart_config, CLOCK_GetFreq(clock_name_)) !=
30       kStatus_Success) {
31     element_controller_.Release().IgnoreError();
32     return pw::Status::Internal();
33   }
34 
35   return pw::OkStatus();
36 }
37 
DoWrite(pw::ConstByteSpan data)38 pw::Status InterruptSafeUartWriterMcuxpresso::DoWrite(pw::ConstByteSpan data) {
39   const status_t hal_status = USART_WriteBlocking(
40       base(), reinterpret_cast<const uint8_t*>(data.data()), data.size_bytes());
41   return hal_status == kStatus_Success ? pw::OkStatus()
42                                        : pw::Status::Internal();
43 }
44 
45 }  // namespace pw::stream
46