libnx v4.9.0
Loading...
Searching...
No Matches
uart.h
Go to the documentation of this file.
1/**
2 * @file uart.h
3 * @brief UART service IPC wrapper.
4 * @author yellows8
5 * @copyright libnx Authors
6 */
7#pragma once
8#include "../types.h"
9#include "../kernel/event.h"
10#include "../sf/service.h"
11
12/// UartPort
13typedef enum {
14 UartPort_Bluetooth = 1, ///< Bluetooth
15 UartPort_JoyConR = 2, ///< Joy-Con(R)
16 UartPort_JoyConL = 3, ///< Joy-Con(L)
17 UartPort_MCU = 4, ///< MCU
18} UartPort;
19
20/// UartPortForDev
21typedef enum {
22 UartPortForDev_JoyConR = 1, ///< Joy-Con(R)
23 UartPortForDev_JoyConL = 2, ///< Joy-Con(L)
24 UartPortForDev_Bluetooth = 3, ///< Bluetooth
26
27/// FlowControlMode
28typedef enum {
32
33/// PortEventType
34typedef enum {
35 UartPortEventType_SendBufferEmpty = 0, ///< SendBufferEmpty
36 UartPortEventType_SendBufferReady = 1, ///< SendBufferReady
37 UartPortEventType_ReceiveBufferReady = 2, ///< ReceiveBufferReady
38 UartPortEventType_ReceiveEnd = 3, ///< ReceiveEnd
40
41/// PortSession
42typedef struct {
43 Service s; ///< IPortSession
45
46/// Initialize uart.
48
49/// Exit uart.
50void uartExit(void);
51
52/// Gets the Service object for the actual uart service session.
54
55/**
56 * @brief HasPort
57 * @note Only available on [1.0.0-16.1.0].
58 * @param[in] port \ref UartPort
59 * @param[out] out Output success flag.
60 */
61Result uartHasPort(UartPort port, bool *out);
62
63/**
64 * @brief HasPortForDev
65 * @note Only available on [1.0.0-16.1.0].
66 * @param[in] port \ref UartPortForDev
67 * @param[out] out Output success flag.
68 */
70
71/**
72 * @brief IsSupportedBaudRate
73 * @note Only available on [1.0.0-16.1.0].
74 * @param[in] port \ref UartPort
75 * @param[in] baud_rate BaudRate
76 * @param[out] out Output success flag.
77 */
78Result uartIsSupportedBaudRate(UartPort port, u32 baud_rate, bool *out);
79
80/**
81 * @brief IsSupportedBaudRateForDev
82 * @note Only available on [1.0.0-16.1.0].
83 * @param[in] port \ref UartPortForDev
84 * @param[in] baud_rate BaudRate
85 * @param[out] out Output success flag.
86 */
88
89/**
90 * @brief IsSupportedFlowControlMode
91 * @note Only available on [1.0.0-16.1.0].
92 * @param[in] port \ref UartPort
93 * @param[in] flow_control_mode \ref UartFlowControlMode
94 * @param[out] out Output success flag.
95 */
97
98/**
99 * @brief IsSupportedFlowControlModeForDev
100 * @note Only available on [1.0.0-16.1.0].
101 * @param[in] port \ref UartPortForDev
102 * @param[in] flow_control_mode \ref UartFlowControlMode
103 * @param[out] out Output success flag.
104 */
106
107/**
108 * @brief Creates an \ref UartPortSession.
109 * @note Use \ref uartPortSessionOpenPort or \ref uartPortSessionOpenPortForDev before using any other cmds.
110 * @param[out] s \ref UartPortSession
111 */
113
114/**
115 * @brief IsSupportedPortEvent
116 * @note Only available on [1.0.0-16.1.0].
117 * @param[in] port \ref UartPort
118 * @param[in] port_event_type \ref UartPortEventType
119 * @param[out] out Output success flag.
120 */
122
123/**
124 * @brief IsSupportedPortEventForDev
125 * @note Only available on [1.0.0-16.1.0].
126 * @param[in] port \ref UartPortForDev
127 * @param[in] port_event_type \ref UartPortEventType
128 * @param[out] out Output success flag.
129 */
131
132/**
133 * @brief IsSupportedDeviceVariation
134 * @note Only available on [7.0.0-16.1.0].
135 * @param[in] port \ref UartPort
136 * @param[in] device_variation DeviceVariation
137 * @param[out] out Output success flag.
138 */
139Result uartIsSupportedDeviceVariation(UartPort port, u32 device_variation, bool *out);
140
141/**
142 * @brief IsSupportedDeviceVariationForDev
143 * @note Only available on [7.0.0-16.1.0].
144 * @param[in] port \ref UartPortForDev
145 * @param[in] device_variation DeviceVariation
146 * @param[out] out Output success flag.
147 */
149
150///@name IPortSession
151///@{
152
153/**
154 * @brief Close an \ref UartPortSession.
155 * @param s \ref UartPortSession
156 */
158
159/**
160 * @brief OpenPort
161 * @note This is not usable when the specified \ref UartPort is already being used.
162 * @param s \ref UartPortSession
163 * @param[out] out Output success flag.
164 * @param[in] port \ref UartPort
165 * @param[in] baud_rate BaudRate
166 * @param[in] flow_control_mode \ref UartFlowControlMode
167 * @param[in] device_variation [7.0.0+] DeviceVariation
168 * @param[in] is_invert_tx [6.0.0+] IsInvertTx
169 * @param[in] is_invert_rx [6.0.0+] IsInvertRx
170 * @param[in] is_invert_rts [6.0.0+] IsInvertRts
171 * @param[in] is_invert_cts [6.0.0+] IsInvertCts
172 * @param[in] send_buffer Send buffer, must be 0x1000-byte aligned.
173 * @param[in] send_buffer_length Send buffer size, must be 0x1000-byte aligned.
174 * @param[in] receive_buffer Receive buffer, must be 0x1000-byte aligned.
175 * @param[in] receive_buffer_length Receive buffer size, must be 0x1000-byte aligned.
176 */
177Result uartPortSessionOpenPort(UartPortSession* s, bool *out, UartPort port, u32 baud_rate, UartFlowControlMode flow_control_mode, u32 device_variation, bool is_invert_tx, bool is_invert_rx, bool is_invert_rts, bool is_invert_cts, void* send_buffer, u64 send_buffer_length, void* receive_buffer, u64 receive_buffer_length);
178
179/**
180 * @brief OpenPortForDev
181 * @note See the notes for \ref uartPortSessionOpenPort.
182 * @param s \ref UartPortSession
183 * @param[out] out Output success flag.
184 * @param[in] port \ref UartPortForDev
185 * @param[in] baud_rate BaudRate
186 * @param[in] flow_control_mode \ref UartFlowControlMode
187 * @param[in] device_variation [7.0.0+] DeviceVariation
188 * @param[in] is_invert_tx [6.0.0+] IsInvertTx
189 * @param[in] is_invert_rx [6.0.0+] IsInvertRx
190 * @param[in] is_invert_rts [6.0.0+] IsInvertRts
191 * @param[in] is_invert_cts [6.0.0+] IsInvertCts
192 * @param[in] send_buffer Send buffer, must be 0x1000-byte aligned.
193 * @param[in] send_buffer_length Send buffer size, must be 0x1000-byte aligned.
194 * @param[in] receive_buffer Receive buffer, must be 0x1000-byte aligned.
195 * @param[in] receive_buffer_length Receive buffer size, must be 0x1000-byte aligned.
196 */
197Result uartPortSessionOpenPortForDev(UartPortSession* s, bool *out, UartPortForDev port, u32 baud_rate, UartFlowControlMode flow_control_mode, u32 device_variation, bool is_invert_tx, bool is_invert_rx, bool is_invert_rts, bool is_invert_cts, void* send_buffer, u64 send_buffer_length, void* receive_buffer, u64 receive_buffer_length);
198
199/**
200 * @brief GetWritableLength
201 * @param s \ref UartPortSession
202 * @param[out] out Output WritableLength.
203 */
205
206/**
207 * @brief Send
208 * @param s \ref UartPortSession
209 * @param[in] in_data Input data buffer.
210 * @param[in] size Input data buffer size.
211 * @param[out] out Output size.
212 */
213Result uartPortSessionSend(UartPortSession* s, const void* in_data, size_t size, u64 *out);
214
215/**
216 * @brief GetReadableLength
217 * @param s \ref UartPortSession
218 * @param[out] out Output ReadableLength.
219 */
221
222/**
223 * @brief Receive
224 * @param s \ref UartPortSession
225 * @param[out] out_data Output data buffer.
226 * @param[in] size Output data buffer size.
227 * @param[out] out Output size.
228 */
229Result uartPortSessionReceive(UartPortSession* s, void* out_data, size_t size, u64 *out);
230
231/**
232 * @brief BindPortEvent
233 * @note The Event must be closed by the user after using \ref uartPortSessionUnbindPortEvent.
234 * @param s \ref UartPortSession
235 * @param[in] port_event_type \ref UartPortEventType
236 * @param[in] threshold Threshold
237 * @param[out] out Output success flag.
238 * @param[out] out_event Output Event with autoclear=false.
239 */
240Result uartPortSessionBindPortEvent(UartPortSession* s, UartPortEventType port_event_type, s64 threshold, bool *out, Event *out_event);
241
242/**
243 * @brief UnbindPortEvent
244 * @param s \ref UartPortSession
245 * @param[in] port_event_type \ref UartPortEventType
246 * @param[out] out Output success flag.
247 */
249
250///@}
251
Kernel-mode event structure.
Definition event.h:13
Service object structure.
Definition service.h:14
PortSession.
Definition uart.h:42
Service s
IPortSession.
Definition uart.h:43
int64_t s64
64-bit signed integer.
Definition types.h:28
uint64_t u64
64-bit unsigned integer.
Definition types.h:22
u32 Result
Function error code result type.
Definition types.h:44
uint32_t u32
32-bit unsigned integer.
Definition types.h:21
Result uartIsSupportedBaudRateForDev(UartPortForDev port, u32 baud_rate, bool *out)
IsSupportedBaudRateForDev.
UartFlowControlMode
FlowControlMode.
Definition uart.h:28
@ UartFlowControlMode_Hardware
Hardware.
Definition uart.h:30
@ UartFlowControlMode_None
None.
Definition uart.h:29
UartPort
UartPort.
Definition uart.h:13
@ UartPort_Bluetooth
Bluetooth.
Definition uart.h:14
@ UartPort_JoyConR
Joy-Con(R)
Definition uart.h:15
@ UartPort_MCU
MCU.
Definition uart.h:17
@ UartPort_JoyConL
Joy-Con(L)
Definition uart.h:16
Service * uartGetServiceSession(void)
Gets the Service object for the actual uart service session.
Result uartPortSessionOpenPort(UartPortSession *s, bool *out, UartPort port, u32 baud_rate, UartFlowControlMode flow_control_mode, u32 device_variation, bool is_invert_tx, bool is_invert_rx, bool is_invert_rts, bool is_invert_cts, void *send_buffer, u64 send_buffer_length, void *receive_buffer, u64 receive_buffer_length)
OpenPort.
Result uartIsSupportedBaudRate(UartPort port, u32 baud_rate, bool *out)
IsSupportedBaudRate.
Result uartIsSupportedDeviceVariationForDev(UartPortForDev port, u32 device_variation, bool *out)
IsSupportedDeviceVariationForDev.
UartPortForDev
UartPortForDev.
Definition uart.h:21
@ UartPortForDev_Bluetooth
Bluetooth.
Definition uart.h:24
@ UartPortForDev_JoyConL
Joy-Con(L)
Definition uart.h:23
@ UartPortForDev_JoyConR
Joy-Con(R)
Definition uart.h:22
Result uartPortSessionReceive(UartPortSession *s, void *out_data, size_t size, u64 *out)
Receive.
void uartExit(void)
Exit uart.
Result uartPortSessionUnbindPortEvent(UartPortSession *s, UartPortEventType port_event_type, bool *out)
UnbindPortEvent.
Result uartPortSessionBindPortEvent(UartPortSession *s, UartPortEventType port_event_type, s64 threshold, bool *out, Event *out_event)
BindPortEvent.
Result uartCreatePortSession(UartPortSession *s)
Creates an UartPortSession.
void uartPortSessionClose(UartPortSession *s)
Close an UartPortSession.
Result uartInitialize(void)
Initialize uart.
Result uartHasPort(UartPort port, bool *out)
HasPort.
Result uartIsSupportedPortEventForDev(UartPortForDev port, UartPortEventType port_event_type, bool *out)
IsSupportedPortEventForDev.
Result uartPortSessionGetWritableLength(UartPortSession *s, u64 *out)
GetWritableLength.
Result uartIsSupportedFlowControlModeForDev(UartPortForDev port, UartFlowControlMode flow_control_mode, bool *out)
IsSupportedFlowControlModeForDev.
Result uartHasPortForDev(UartPortForDev port, bool *out)
HasPortForDev.
Result uartPortSessionGetReadableLength(UartPortSession *s, u64 *out)
GetReadableLength.
UartPortEventType
PortEventType.
Definition uart.h:34
@ UartPortEventType_ReceiveBufferReady
ReceiveBufferReady.
Definition uart.h:37
@ UartPortEventType_ReceiveEnd
ReceiveEnd.
Definition uart.h:38
@ UartPortEventType_SendBufferEmpty
SendBufferEmpty.
Definition uart.h:35
@ UartPortEventType_SendBufferReady
SendBufferReady.
Definition uart.h:36
Result uartIsSupportedFlowControlMode(UartPort port, UartFlowControlMode flow_control_mode, bool *out)
IsSupportedFlowControlMode.
Result uartIsSupportedPortEvent(UartPort port, UartPortEventType port_event_type, bool *out)
IsSupportedPortEvent.
Result uartPortSessionOpenPortForDev(UartPortSession *s, bool *out, UartPortForDev port, u32 baud_rate, UartFlowControlMode flow_control_mode, u32 device_variation, bool is_invert_tx, bool is_invert_rx, bool is_invert_rts, bool is_invert_cts, void *send_buffer, u64 send_buffer_length, void *receive_buffer, u64 receive_buffer_length)
OpenPortForDev.
Result uartPortSessionSend(UartPortSession *s, const void *in_data, size_t size, u64 *out)
Send.
Result uartIsSupportedDeviceVariation(UartPort port, u32 device_variation, bool *out)
IsSupportedDeviceVariation.