diff --git a/multi/grlib-multi/uart.c b/multi/grlib-multi/uart.c index cbdfde788..b3a334ae8 100644 --- a/multi/grlib-multi/uart.c +++ b/multi/grlib-multi/uart.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include @@ -335,7 +336,22 @@ static void uart_ioctl(msg_t *msg, int dev) inData = ioctl_unpack(msg, &req, NULL); pid = ioctl_getSenderPid(msg); - err = libtty_ioctl(&uart_common.uart[dev].tty, pid, req, inData, &outData); + if (req == KIOEN) { +#ifdef UART_CONSOLE_USER + if (dev == UART_CONSOLE_USER) { + libklog_enable((int)(intptr_t)inData); + err = EOK; + } + else { + err = -EINVAL; + } +#else + err = -EINVAL; +#endif + } + else { + err = libtty_ioctl(&uart_common.uart[dev].tty, pid, req, inData, &outData); + } ioctl_setResponse(msg, req, err, outData); } diff --git a/multi/mcxn94x-multi/uart.c b/multi/mcxn94x-multi/uart.c index a20fcd3b4..af62405a3 100644 --- a/multi/mcxn94x-multi/uart.c +++ b/multi/mcxn94x-multi/uart.c @@ -348,7 +348,20 @@ static void uart_handleMsg(msg_t *msg, msg_rid_t rid, unsigned int major, unsign case mtDevCtl: in_data = ioctl_unpack(msg, &request, NULL); pid = ioctl_getSenderPid(msg); - err = libtty_ioctl(&uart->tty_common, pid, request, in_data, &out_data); + + if (request == KIOEN) { + if (uartPos[minor] == uart_common.ttyminor) { + libklog_enable((int)(intptr_t)in_data); + err = EOK; + } + else { + err = -EINVAL; + } + } + else { + err = libtty_ioctl(&uart->tty_common, pid, request, in_data, &out_data); + } + ioctl_setResponse(msg, request, err, out_data); break; diff --git a/tty/grlib-uart/grlib-uart.c b/tty/grlib-uart/grlib-uart.c index 993cbd09d..6521de775 100644 --- a/tty/grlib-uart/grlib-uart.c +++ b/tty/grlib-uart/grlib-uart.c @@ -216,7 +216,13 @@ static void uart_ioctl(unsigned port, msg_t *msg) inData = ioctl_unpack(msg, &req, NULL); pid = ioctl_getSenderPid(msg); - err = libtty_ioctl(&uart_common.uart.tty, pid, req, inData, &outData); + if (req == KIOEN) { + libklog_enable((int)(intptr_t)inData); + err = EOK; + } + else { + err = libtty_ioctl(&uart_common.uart.tty, pid, req, inData, &outData); + } ioctl_setResponse(msg, req, err, outData); }