Logger library enables you to use unified interface to send out or receive data using one function with different parameters. You leave buffer overflows to this library as it handles it all.

Logger library howto guide.

Below is a simple program that outlines the usage of the logger library, The whole function was head-written so there might be some errors, but it is more for a live representation of usage than anything else. If someone would write a nice example program feel free to link it here.

simple usage of logger library

#include "mbed.h"
#include "logger.h"
#include "errno.h"

Ticker printout;
/**
 * \def STASH_BUFFER_LEN
 * size of stash buffer that can be used to store logged data
 */
#define STASH_BUFFER_LEN 70000
/// stash_buffer size
static char stash_buffer[STASH_BUFFER_LEN];

/**
 * Log_pop_periodic is periodically printing the messages until the buffer is empty. 
 * Once the buffer is empty it detaches and waits for another command.
*/
void log_pop_periodic(void)
{
    if( log_pop(L_BTSERIAL,stash_buffer,STASH_BUFFER_LEN) == 1 )
    {
        printout.detach();
    }
}

static int i=0;
static char read_buffer[20];
/**
 * read data from BT serial
*/
void read_from_BT()
{

    if (BTSerial.readable()) {
        read_buffer[i++] = BTSerial.getc();
        // if we read the desired character
        if (read_buffer[i-1] == 'p')
        {
            // start the printout process which will log_pop logged data
            printout.attach(&log_pop_periodic,0.5);
        }
    }    
}

int main()
{
    log_init(L_SERIAL);
    log_init(L_BTSERIAL);
    BTSerial.attach(&read_from_BT);

    // while loop to fill in loads of stinky data
    while (1) {
            // read something, then stash it
            log_stash(L_INFO,print_buffer,strlen(print_buffer),stash_buffer,STASH_BUFFER_LEN);
    }
}
Committer:
Letme
Date:
Sat Mar 29 10:39:24 2014 +0000
Revision:
1:8837abc3f763
Parent:
0:272c70e2366c
Child:
2:9d04753a3ad2
Added few more comments

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Letme 0:272c70e2366c 1 #ifndef _LOGGER_H_
Letme 0:272c70e2366c 2 #define _LOGGER_H_
Letme 0:272c70e2366c 3
Letme 1:8837abc3f763 4 /** @file logger.cpp */
Letme 0:272c70e2366c 5
Letme 1:8837abc3f763 6 #define STASH_BUFFER_LEN 50000
Letme 1:8837abc3f763 7
Letme 1:8837abc3f763 8 /// log output
Letme 0:272c70e2366c 9 #define L_SERIAL 1
Letme 0:272c70e2366c 10 #define L_FILE 2
Letme 0:272c70e2366c 11 #define L_LED 3
Letme 0:272c70e2366c 12
Letme 1:8837abc3f763 13 /// debug levels
Letme 0:272c70e2366c 14 #define L_CRIT_ERROR 1
Letme 0:272c70e2366c 15 #define L_ERROR 2
Letme 0:272c70e2366c 16 #define L_WARNING 3
Letme 0:272c70e2366c 17 #define L_DEBUG 4
Letme 0:272c70e2366c 18 #define L_INFO 5
Letme 0:272c70e2366c 19
Letme 1:8837abc3f763 20 extern Serial logSerial;
Letme 1:8837abc3f763 21
Letme 0:272c70e2366c 22 int32_t log_msg(uint8_t plc,uint8_t lvl, char *msg, uint32_t length);
Letme 0:272c70e2366c 23 int32_t log_init(uint8_t plc);
Letme 0:272c70e2366c 24 int32_t log_stash(uint8_t lvl, char *msg, uint32_t length);
Letme 0:272c70e2366c 25 int32_t log_pop(uint8_t plc);
Letme 0:272c70e2366c 26
Letme 0:272c70e2366c 27 #endif