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); } }
errno.h@5:f232b826e1f2, 2014-12-31 (annotated)
- 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?
User | Revision | Line number | New 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 |