/* * * Copyright (c) 2020 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 * Provides implementations for the CHIP and LwIP logging functions * for the Texas Instruments CC32XX platform. This uses one of the * UARTs configured with SysConfig. Future implementations may use * ITM. * */ #include "ti_drivers_config.h" #include #include #include #include #include using namespace ::chip; using namespace ::chip::DeviceLayer; using namespace ::chip::DeviceLayer::Internal; #define DEVICE_LAYER_LOG_BUFFER_SIZE (256) static UART2_Handle sDebugUartHandle; static char sDebugUartBuffer[DEVICE_LAYER_LOG_BUFFER_SIZE]; // static pthread_mutex_t mutex; extern "C" int cc32xxLogInit(void) { UART2_Params uartParams; UART2_Params_init(&uartParams); uartParams.baudRate = 115200; sDebugUartHandle = UART2_open(CONFIG_UART2_0, &uartParams); /* Remove uart receive from LPDS dependency */ UART2_rxDisable(sDebugUartHandle); /* Enable debug mutex */ // pthread_mutex_init(&mutex, NULL); return 0; } extern "C" void cc32xxVLog(const char * msg, va_list v) { int ret; // pthread_mutex_lock(&mutex); 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'; sDebugUartBuffer[len] = '\0'; UART2_write(sDebugUartHandle, sDebugUartBuffer, len, &len); } // pthread_mutex_unlock(&mutex); } namespace chip { namespace DeviceLayer { /** * Called whenever a log message is emitted. * * Can be overridden by the device logging file */ void __attribute__((weak)) OnLogOutput(void) {} } // namespace DeviceLayer } // namespace chip namespace chip { namespace Logging { namespace Platform { void LogV(const char * module_name, uint8_t category, const char * msg, va_list v) { (void) module_name; (void) category; cc32xxVLog(msg, v); DeviceLayer::OnLogOutput(); } void LogV(uint8_t module, uint8_t category, const char * msg, va_list v) { (void) module; (void) category; cc32xxVLog(msg, v); DeviceLayer::OnLogOutput(); } } // namespace Platform } // namespace Logging } // namespace chip /** * LwIP log output function. */ extern "C" void LwIPLog(const char * msg, ...) { va_list v; va_start(v, msg); cc32xxVLog(msg, v); DeviceLayer::OnLogOutput(); va_end(v); } /** * Platform log output function. */ extern "C" void cc32xxLog(const char * msg, ...) { va_list v; va_start(v, msg); cc32xxVLog(msg, v); DeviceLayer::OnLogOutput(); va_end(v); } #