#include "SFBTypes.h"
#include <stdarg.h>
Go to the source code of this file.
Typedefs | |
typedef void(* | CustomPrintfHandler )(u8 face, void *arg, bool alt, int width, bool zerofill) |
The declaration of a function that can perform custom formatting during a printf(-family) formatting operation. | |
typedef bool(* | CustomPacketScanfHandler )(u8 *packet, void *arg, bool alt, int width) |
The declaration of a function that can perform custom input scanning during a packetScanf(-family) reading operation. | |
Enumerations | |
enum | LoggingLevels { LOGLEVEL_NONE, LOGLEVEL_QUIET, LOGLEVEL_NORMAL, LOGLEVEL_VERBOSE, LOGLEVEL_DEBUG } |
Functions | |
void | setLogLevel (int n) |
Set the logging level to n. | |
int | getLogLevel () |
Return the current logging level. | |
void | setLogFace (u8 face) |
Set the log face. | |
u8 | getLogFace () |
Return the current log face. | |
void | pprintf (const char *format,...) |
Convenience shorthand for printing to all available physical faces. | |
void | facePrintf (u8 face, const char *format,...) |
Formatted printing to the specified face. | |
void | vfacePrintf (u8 face, const char *format, va_list &ap) |
Formatted printing to the specified face, through a supplied va_list . | |
u32 | packetScanf (u8 *packet, const char *format,...) |
Formatted reading from a packet into individual variables. | |
u32 | vPacketScanf (u8 *packet, const char *format, va_list &ap) |
void | vfaceLogf (int includeTimestamp, int level, u8 face, const char *format, va_list &ap) |
void | logf (int level, const char *format,...) |
void | logNormal (const char *format,...) |
If getLogLevel() is at least LOGLEVEL_NORMAL, print "Ln " plus a timestamp, plus as directed by format, to the current getLogFace(). | |
void | logVerbose (const char *format,...) |
If getLogLevel() is at least LOGLEVEL_VERBOSE, print "Lv " plus a timestamp, plus as directed by format, to the current getLogFace(). | |
void | logDebug (const char *format,...) |
If getLogLevel() is at least LOGLEVEL_DEBUG, print "Ld " plus a timestamp, plus as directed by format, to the current getLogFace(). | |
void | logQuiet (const char *format,...) |
If getLogLevel() is at least LOGLEVEL_QUIET, print "Lq " plus a timestamp, plus as directed by format, to the current getLogFace(). | |
void | msgf (int level, const char *format,...) |
void | msgNormal (const char *format,...) |
If getLogLevel() is at least LOGLEVEL_NORMAL, print "Lq " plus as directed by format, to the current getLogFace(). | |
void | msgVerbose (const char *format,...) |
If getLogLevel() is at least LOGLEVEL_VERBOSE, print "Lv " plus as directed by format, to the current getLogFace(). | |
void | msgDebug (const char *format,...) |
If getLogLevel() is at least LOGLEVEL_DEBUG, print "Ld " plus as directed by format, to the current getLogFace(). | |
void | msgQuiet (const char *format,...) |
If getLogLevel() is at least LOGLEVEL_QUIET, print "Lq " plus as directed by format, to the current getLogFace(). |
typedef bool(* CustomPacketScanfHandler)(u8 *packet, void *arg, bool alt, int width) |
The declaration of a function that can perform custom input scanning during a packetScanf(-family) reading operation.
A CustomPacketScanfHandler is established during any given packetScanf call by using the Z code and passing an argument of type CustomPacketScanfHandler. Once established, that CustomPacketScanfHandler is invoked via the z code and passing an argument of type void*, which will become the arg parameter to the CustomPacketScanfHandler function. When the CustomPacketScanfHandler is invoked, it reads from the supplied packet however it wishes to, either respecting, or not, the width and alt arguments, as it chooses.
If the return value from a CustomPacketScanfHandler is true
, that means a successful z scan and store was performed, and the total matches returned by the packetScanf should be increased by 1, and the packet scanning should continue. If the return value is false
, that means a scanning error occurred during the z processing, and the packetScanf should be stopped at this point.
The Z code may be used multiple times in a single packetScanf call, and the most-recent Z invocation determines what CustomPacketScanfHandler is called for any given z. It is an error if a z code is invoked without a prior Z code, or if the argument to the most recent prior Z is null, and the code will die blinking E_API_NULL_HANDLER.
See also CustomPrintfHandler.
typedef void(* CustomPrintfHandler)(u8 face, void *arg, bool alt, int width, bool zerofill) |
The declaration of a function that can perform custom formatting during a printf(-family) formatting operation.
A CustomPrintfHandler is established during any given printf call by using the Z code and passing an argument of type CustomPrintfHandler. Once established, that CustomPrintfHandler is invoked via the z code and passing an argument of type void*, which will become the arg parameter to the CustomPrintfHandler function. When the CustomPrintfHandler is invoked, it prints whatever it likes to face, either respecting, or not, the width, zerofill, and alt arguments, as it chooses.
Additional usage notes:
See also CustomPacketScanfHandler.
enum LoggingLevels |
LOGLEVEL_NONE | When passed to setLogLevel(int), suppress all logging output. |
LOGLEVEL_QUIET | When passed to setLogLevel(int), allow less than normal logging output. |
LOGLEVEL_NORMAL | When passed to setLogLevel(int), allow normal logging output. |
LOGLEVEL_VERBOSE | When passed to setLogLevel(int), allow more than normal logging output. |
LOGLEVEL_DEBUG | When passed to setLogLevel(int), allow all logging output. |
void facePrintf | ( | u8 | face, | |
const char * | format, | |||
... | ||||
) |
Formatted printing to the specified face.
face | the face code to which the printing shall be directed. This may be a "physical face" code like WEST, an "extended face" code like BRAIN or ALL_FACES or NO_FACES, or a sketch-defined "virtual face" code (such as produced by faceFindFreeFace() and faceSetPrinter()). | |
format | a null-terminated string controlling what is to be printed; see below. | |
... | a variable sequence of arguments of sufficient number and appropriate types to supply to all of the "% codes" in format with the data they need. |
printf
functions, but with many restrictions -- for example, there is only limited support for 'field widths'. There are also a few SFB-specific extensions. This documentation presumes familiarity with the use of printf-like
functions in general, and only documents the specifics of the SFB format codes.Quick format reference. The following 'percent escape' codes are recognized:
The '#' modifier character may be added to certain conversions to achieve special purposes, as follows:
Since 0.9.7, there is limited support for field widths (a.k.a. padding and filling), with the following restrictions:
XXX Still need formatting details; examples.
u8 getLogFace | ( | ) |
Return the current log face.
See setLogFace(u8) for details.
int getLogLevel | ( | ) |
Return the current logging level.
See setLogLevel(int) for details.
void logDebug | ( | const char * | format, | |
... | ||||
) |
If getLogLevel() is at least LOGLEVEL_DEBUG, print "Ld " plus a timestamp, plus as directed by format, to the current getLogFace().
Otherwise do nothing.
void logNormal | ( | const char * | format, | |
... | ||||
) |
If getLogLevel() is at least LOGLEVEL_NORMAL, print "Ln " plus a timestamp, plus as directed by format, to the current getLogFace().
Otherwise do nothing.
void logQuiet | ( | const char * | format, | |
... | ||||
) |
If getLogLevel() is at least LOGLEVEL_QUIET, print "Lq " plus a timestamp, plus as directed by format, to the current getLogFace().
Otherwise do nothing.
void logVerbose | ( | const char * | format, | |
... | ||||
) |
If getLogLevel() is at least LOGLEVEL_VERBOSE, print "Lv " plus a timestamp, plus as directed by format, to the current getLogFace().
Otherwise do nothing.
void msgDebug | ( | const char * | format, | |
... | ||||
) |
If getLogLevel() is at least LOGLEVEL_DEBUG, print "Ld " plus as directed by format, to the current getLogFace().
Otherwise do nothing.
void msgNormal | ( | const char * | format, | |
... | ||||
) |
If getLogLevel() is at least LOGLEVEL_NORMAL, print "Lq " plus as directed by format, to the current getLogFace().
Otherwise do nothing.
void msgQuiet | ( | const char * | format, | |
... | ||||
) |
If getLogLevel() is at least LOGLEVEL_QUIET, print "Lq " plus as directed by format, to the current getLogFace().
Otherwise do nothing.
void msgVerbose | ( | const char * | format, | |
... | ||||
) |
If getLogLevel() is at least LOGLEVEL_VERBOSE, print "Lv " plus as directed by format, to the current getLogFace().
Otherwise do nothing.
Formatted reading from a packet into individual variables.
Scanning starts at the current packetCursor() of packet, not necessarily at the beginning, and the packetCursor() of packet is advanced as scanning proceeds.
packet | The packet that is to be scanned. | |
format | a null-terminated string controlling what is to be printed; see below. | |
... | a variable sequence of pointer arguments of sufficient number and appropriate types through which to store values for all the "% codes" in format that require arguments. |
void MyBHandler(u8 * packet) { u32 fourBytes; u16 twoBytes; u8 oneByte; if (packetScanf(packet,"b%c%d%h",&oneByte,&fourBytes,&twoBytes) != 4) return; .. }
oneByte
, fourBytes
, and twoBytes
variables match the specified sizes of %c, %d, and %h, respectively.Since 0.9.9, there is some support for field widths, limited to the %b, %o, %d, %x, and %t conversions only.
packetScanf returns the number of successful matches it made, where a 'match' counts as either a successful '% conversion' or a successful match of a single literal byte of the format string. E.g., given a packet containing "fg123h", packetScanf
(packet,"fg%dh",&u32var) will return 4 -- one for the 'f', one for the 'g', one for the '%d', and one for the 'h'. (But watch out! Given the same packet, packetScanf
(packet,"fg%dh\n",&u32var) will return 5 -- including one for the successful matching of the end-of-packet!)
XXX Still need formatting details; examples.
void pprintf | ( | const char * | format, | |
... | ||||
) |
Convenience shorthand for printing to all available physical faces.
Equivalent to facePrintf(ALL_FACES, format, ...), which see for details of the possible format codes.
void setLogFace | ( | u8 | face | ) |
Set the log face.
Using this function, logging messages can be directed to any (physical or virtual) face. Default value: ALL_FACES
void setLogLevel | ( | int | n | ) |
Set the logging level to n.
Larger values produce more output, smaller values produce less. Initial value is LOGLEVEL_NORMAL.
n | Logging level. Can be any int, but only the values LOGLEVEL_NONE, LOGLEVEL_QUIET, LOGLEVEL_NORMAL, LOGLEVEL_VERBOSE, LOGLEVEL_DEBUG really make much sense. |
void vfacePrintf | ( | u8 | face, | |
const char * | format, | |||
va_list & | ap | |||
) |
Formatted printing to the specified face, through a supplied va_list
.
See facePrintf(u8 face, const char * format, ...) for details of arguments face and format.