Debug library
Dependents: NetworkingCoreLib LwIPNetworking yeswecancoap lwip
Diff: dbg.cpp
- Revision:
- 0:3ac250c92185
- Child:
- 1:bd1844de60f1
- Child:
- 2:719e79a2291e
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dbg.cpp Thu May 24 15:33:14 2012 +0000 @@ -0,0 +1,101 @@ +/* dbg.cpp */ +/* +Copyright (C) 2012 ARM Limited. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "dbg.h" + +#include "mbed.h" +#include "rtos.h" + +#include <cstdio> +#include <cstdarg> + +using namespace std; + +static Serial debug_pc(USBTX, USBRX); + +Mutex* debug_printf_mutex; //Singleton runtime initialisation to avoid static initialisation chaos problems + +void debug_init() +{ + debug_pc.baud(115200); + debug_printf_mutex = new Mutex(); + printf("[START]\n"); + fflush(stdout); +} + +void debug(int level, const char* module, int line, const char* fmt, ...) +{ + osStatus ret = debug_printf_mutex->lock(); + if(ret != osOK) + { + /* + printf("[FATAL] DBG Mutex failed!! (ret code = %02x - Mutex is @ %p)\n", ret, &debug_printf_mutex); + error(""); + while(1); //FATAL + */ + } + switch(level) + { + default: + case 1: + printf("[ERROR]"); + break; + case 2: + printf("[WARN]"); + break; + case 3: + printf("[INFO]"); + break; + case 4: + printf("[DBG]"); + break; + } + + printf(" Module %s - Line %d: ", module, line); + + va_list argp; + + va_start(argp, fmt); + vprintf(fmt, argp); + va_end(argp); + + printf("\n"); + + fflush(stdout); + + if(ret == osOK) + { + debug_printf_mutex->unlock(); + } + +} + +void debug_error(const char* module, int line, int ret) +{ + debug_printf_mutex->lock(); + printf("[RC] Module %s - Line %d : Error %d\n", module, line, ret); + fflush(stdout); + debug_printf_mutex->unlock(); +} + +