| /* |
| * |
| * Copyright (c) 2022 Project CHIP Authors |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| /** |
| * @file |
| * Source implementation of an input / output stream for cc13x2_26x2 targets |
| */ |
| |
| #include "streamer.h" |
| #include <lib/shell/Engine.h> |
| #include <lib/shell/streamer.h> |
| #include <lib/support/CHIPMem.h> |
| #include <platform/CHIPDeviceLayer.h> |
| |
| #include "ti_drivers_config.h" |
| |
| #include <ti/drivers/UART.h> |
| |
| namespace chip { |
| namespace Shell { |
| |
| #ifndef SHELL_STREAMER_APP_SPECIFIC |
| |
| UART_Handle sStreamUartHandle = NULL; |
| |
| #if !MATTER_CC13X2_26X2_PLATFORM_LOG_ENABLED |
| extern "C" int cc13x2_26x2LogInit(void) |
| { |
| return 0; |
| } |
| |
| extern "C" void cc13x2_26x2VLog(const char * msg, va_list v) |
| { |
| if (NULL != sStreamUartHandle) |
| { |
| static char sDebugUartBuffer[CHIP_CONFIG_LOG_MESSAGE_MAX_SIZE]; |
| size_t ret; |
| |
| ret = vsnprintf(sDebugUartBuffer, sizeof(sDebugUartBuffer), msg, v); |
| if (0 < ret) |
| { |
| // PuTTY likes \r\n |
| size_t len = (ret + 2U) < sizeof(sDebugUartBuffer) ? (ret + 2) : sizeof(sDebugUartBuffer); |
| sDebugUartBuffer[len - 2] = '\r'; |
| sDebugUartBuffer[len - 1] = '\n'; |
| |
| UART_write(sStreamUartHandle, sDebugUartBuffer, len); |
| } |
| } |
| } |
| #endif // !MATTER_CC13X2_26X2_PLATFORM_LOG_ENABLED |
| |
| int streamer_cc13x2_26x2_init(streamer_t * streamer) |
| { |
| UART_Params uartParams; |
| |
| UART_init(); |
| |
| UART_Params_init(&uartParams); |
| // Most params can be default because we only send data, we don't receive |
| uartParams.baudRate = 115200; |
| // unclear why the UART driver sticks in writing sometimes |
| uartParams.writeTimeout = 10000; // ticks |
| // Immediate return from the read function |
| // uartParams.readTimeout = 0; // ticks |
| |
| sStreamUartHandle = UART_open(CONFIG_UART_STREAMER, &uartParams); |
| return 0; |
| } |
| |
| ssize_t streamer_cc13x2_26x2_read(streamer_t * streamer, char * buf, size_t len) |
| { |
| (void) streamer; |
| return UART_read(sStreamUartHandle, buf, len); |
| } |
| |
| ssize_t streamer_cc13x2_26x2_write(streamer_t * streamer, const char * buf, size_t len) |
| { |
| (void) streamer; |
| return UART_write(sStreamUartHandle, buf, len); |
| } |
| |
| static streamer_t streamer_cc13x2_26x2 = { |
| .init_cb = streamer_cc13x2_26x2_init, |
| .read_cb = streamer_cc13x2_26x2_read, |
| .write_cb = streamer_cc13x2_26x2_write, |
| }; |
| |
| streamer_t * streamer_get() |
| { |
| return &streamer_cc13x2_26x2; |
| } |
| |
| #endif // #ifndef SHELL_STREAMER_APP_SPECIFIC |
| |
| } // namespace Shell |
| } // namespace chip |