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:
Wed Dec 31 22:23:19 2014 +0000
Revision:
5:f232b826e1f2
Parent:
0:272c70e2366c
Fixed some minor bugz and added clearing of stash buffer once whole chunk is printed to L_SERIAL. Also expanded documentation a bit.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Letme 0:272c70e2366c 1 #ifndef _ASM_GENERIC_ERRNO_BASE_H
Letme 0:272c70e2366c 2 #define _ASM_GENERIC_ERRNO_BASE_H
Letme 0:272c70e2366c 3
Letme 0:272c70e2366c 4 #define EPERM 1 /* Operation not permitted */
Letme 0:272c70e2366c 5 #define ENOENT 2 /* No such file or directory */
Letme 0:272c70e2366c 6 #define ESRCH 3 /* No such process */
Letme 0:272c70e2366c 7 #define EINTR 4 /* Interrupted system call */
Letme 0:272c70e2366c 8 #define EIO 5 /* I/O error */
Letme 0:272c70e2366c 9 #define ENXIO 6 /* No such device or address */
Letme 0:272c70e2366c 10 #define E2BIG 7 /* Argument list too long */
Letme 0:272c70e2366c 11 #define ENOEXEC 8 /* Exec format error */
Letme 0:272c70e2366c 12 #define EBADF 9 /* Bad file number */
Letme 0:272c70e2366c 13 #define ECHILD 10 /* No child processes */
Letme 0:272c70e2366c 14 #define EAGAIN 11 /* Try again */
Letme 0:272c70e2366c 15 #define ENOMEM 12 /* Out of memory */
Letme 0:272c70e2366c 16 #define EACCES 13 /* Permission denied */
Letme 0:272c70e2366c 17 #define EFAULT 14 /* Bad address */
Letme 0:272c70e2366c 18 #define ENOTBLK 15 /* Block device required */
Letme 0:272c70e2366c 19 #define EBUSY 16 /* Device or resource busy */
Letme 0:272c70e2366c 20 #define EEXIST 17 /* File exists */
Letme 0:272c70e2366c 21 #define EXDEV 18 /* Cross-device link */
Letme 0:272c70e2366c 22 #define ENODEV 19 /* No such device */
Letme 0:272c70e2366c 23 #define ENOTDIR 20 /* Not a directory */
Letme 0:272c70e2366c 24 #define EISDIR 21 /* Is a directory */
Letme 0:272c70e2366c 25 #define EINVAL 22 /* Invalid argument */
Letme 0:272c70e2366c 26 #define ENFILE 23 /* File table overflow */
Letme 0:272c70e2366c 27 #define EMFILE 24 /* Too many open files */
Letme 0:272c70e2366c 28 #define ENOTTY 25 /* Not a typewriter */
Letme 0:272c70e2366c 29 #define ETXTBSY 26 /* Text file busy */
Letme 0:272c70e2366c 30 #define EFBIG 27 /* File too large */
Letme 0:272c70e2366c 31 #define ENOSPC 28 /* No space left on device */
Letme 0:272c70e2366c 32 #define ESPIPE 29 /* Illegal seek */
Letme 0:272c70e2366c 33 #define EROFS 30 /* Read-only file system */
Letme 0:272c70e2366c 34 #define EMLINK 31 /* Too many links */
Letme 0:272c70e2366c 35 #define EPIPE 32 /* Broken pipe */
Letme 0:272c70e2366c 36 #define EDOM 33 /* Math argument out of domain of func */
Letme 0:272c70e2366c 37 #define ERANGE 34 /* Math result not representable */
Letme 0:272c70e2366c 38
Letme 0:272c70e2366c 39 #endif