module ti.uia.sysbios.LoggerIdle

A logger which routes Log events to a users transport function

This logger processes log events as they are generated, stores them in a buffer and during idle sends a section of the buffer to the user's transport function. If you are seeing no log events or dropping too many events check that you are not logging too often and have enough idle time to send. LoggerIdle is compatable with StellarisWare and MWare devices. Example transports for UART (B92 and F28M35x) and USB (F28M35x) as well as initialization functions are included in the evmF28M35x.c files under the device folder in the ti.examples directory. [ more ... ]
C synopsis target-domain sourced in ti/uia/sysbios/LoggerIdle.xdc
#include <ti/uia/sysbios/LoggerIdle.h>
Functions
Void
Void
Void
Void 
Void
Functions common to all ILogger modules
Bool 
Bool 
Void 
Void 
Void 
Void 
Void 
LoggerIdle_write8// Process a log event with up to 8 arguments(LoggerIdle_Handle handle, Log_Event evt, Types_ModuleId mid, IArg a1, IArg a2, IArg a3, IArg a4, IArg a5, IArg a6, IArg a7, IArg a8);
Functions common to all target instances
Functions common to all target modules
Typedefs
typedef Int 
typedef struct
typedef struct
typedef struct
typedef enum
Constants
extern const SizeT 
extern const String 
extern const Bool 
extern const LoggerIdle_LoggerFxn 
 
DETAILS
This logger processes log events as they are generated, stores them in a buffer and during idle sends a section of the buffer to the user's transport function. If you are seeing no log events or dropping too many events check that you are not logging too often and have enough idle time to send. LoggerIdle is compatable with StellarisWare and MWare devices. Example transports for UART (B92 and F28M35x) and USB (F28M35x) as well as initialization functions are included in the evmF28M35x.c files under the device folder in the ti.examples directory.
EXAMPLES
Configuration example: The following XDC configuration statements create a logger module, and assign it as the default logger for all modules.
  var Defaults = xdc.useModule('xdc.runtime.Defaults');
  var Diags = xdc.useModule('xdc.runtime.Diags');
  var LoggerIdle = xdc.useModule('ti.uia.sysbios.LoggerIdle');

  LoggerIdle.bufferSize = 60;
  LoggerIdle.timestamp = false;
  LoggerIdle.transportType = LoggerIdle.TransportType_UART;
  LoggerIdle.transportFxn = '&LoggerIdle_uartSend';
  var LoggerIdleParams = new LoggerIdle.Params();
  Defaults.common$.logger = LoggerIdle.create(LoggerIdleParams);
 
enum LoggerIdle_TransportType

Used to specify the type of transport to use

C synopsis target-domain
typedef enum LoggerIdle_TransportType {
    LoggerIdle_TransportType_UART,
    LoggerIdle_TransportType_USB,
    LoggerIdle_TransportType_ETHERNET,
    LoggerIdle_TransportType_CUSTOM
} LoggerIdle_TransportType;
 
DETAILS
This enum is used by the instrumentation host to determine what the transport is. It is not used by the target code.
 
typedef LoggerIdle_LoggerFxn

Typedef for the transport function pointer

C synopsis target-domain
typedef Int (*LoggerIdle_LoggerFxn)(UChar*,Int);
 
 
config LoggerIdle_bufferSize  // module-wide

LoggerIdle buffer size in 32-bit words

C synopsis target-domain
extern const SizeT LoggerIdle_bufferSize;
 
 
config LoggerIdle_customTransportType  // module-wide

Custom transport used to send the records to an instrumentation host

C synopsis target-domain
extern const String LoggerIdle_customTransportType;
 
DETAILS
If the desired transport is not in the TransportType enum, and transportType is set to TransportType_CUSTOM, this parameter must be filled in with the correct transport name.
If transportType is NOT set to TransportType_CUSTOM, this parameter is ignored.
 
config LoggerIdle_isTimestampEnabled  // module-wide

Enable or disable logging the 64b local CPU timestamp at the start of each event

C synopsis target-domain
extern const Bool LoggerIdle_isTimestampEnabled;
 
DETAILS
Having a timestamp allows an instrumentation host (e.g. System Analyzer) to display events with the correct system time.
 
config LoggerIdle_transportFxn  // module-wide

User defined transport function responsible for transmitting the records

C synopsis target-domain
extern const LoggerIdle_LoggerFxn LoggerIdle_transportFxn;
 
 
LoggerIdle_flush()  // module-wide

Call the transport function to empty out the LoggerIdle buffer

C synopsis target-domain
Void LoggerIdle_flush();
 
DETAILS
This API is not intended for general use, but could be used for example, in an exception handler to recover the most recent Log data that was written after the last run of the idle loop.
NOTE: Calling LoggerIdle_flush() when the idle task was in the middle of outputting data can result in lost data. Since the idle function only outputs one Log record at a time, so at most one record could be lost.
Module-Wide Built-Ins

C synopsis target-domain
Types_ModuleId LoggerIdle_Module_id();
// Get this module's unique id
 
Bool LoggerIdle_Module_startupDone();
// Test if this module has completed startup
 
IHeap_Handle LoggerIdle_Module_heap();
// The heap from which this module allocates memory
 
Bool LoggerIdle_Module_hasMask();
// Test whether this module has a diagnostics mask
 
Bits16 LoggerIdle_Module_getMask();
// Returns the diagnostics mask for this module
 
Void LoggerIdle_Module_setMask(Bits16 mask);
// Set the diagnostics mask for this module
Instance Object Types

C synopsis target-domain
typedef struct LoggerIdle_Object LoggerIdle_Object;
// Opaque internal representation of an instance object
 
typedef LoggerIdle_Object *LoggerIdle_Handle;
// Client reference to an instance object
 
typedef struct LoggerIdle_Struct LoggerIdle_Struct;
// Opaque client structure large enough to hold an instance object
 
LoggerIdle_Handle LoggerIdle_handle(LoggerIdle_Struct *structP);
// Convert this instance structure pointer into an instance handle
 
LoggerIdle_Struct *LoggerIdle_struct(LoggerIdle_Handle handle);
// Convert this instance handle into an instance structure pointer
Instance Config Parameters

C synopsis target-domain
typedef struct LoggerIdle_Params {
// Instance config-params structure
    IInstance_Params *instance;
    // Common per-instance configs
} LoggerIdle_Params;
 
Void LoggerIdle_Params_init(LoggerIdle_Params *params);
// Initialize this config-params structure with supplier-specified defaults before instance creation
Runtime Instance Creation

C synopsis target-domain
LoggerIdle_Handle LoggerIdle_create(const LoggerIdle_Params *params, Error_Block *eb);
// Allocate and initialize a new instance object and return its handle
 
Void LoggerIdle_construct(LoggerIdle_Struct *structP, const LoggerIdle_Params *params);
// Initialize a new instance object inside the provided structure
ARGUMENTS
params — per-instance config params, or NULL to select default values (target-domain only)
eb — active error-handling block, or NULL to select default policy (target-domain only)
DETAILS
The logger instance will route all log events it receives to the Uart.
Instance Deletion

C synopsis target-domain
Void LoggerIdle_delete(LoggerIdle_Handle *handleP);
// Finalize and free this previously allocated instance object, setting the referenced handle to NULL
 
Void LoggerIdle_destruct(LoggerIdle_Struct *structP);
// Finalize the instance object inside the provided structure
 
LoggerIdle_disable()  // instance

Disable a log

C synopsis target-domain
Bool LoggerIdle_disable(LoggerIdle_Handle handle);
 
ARGUMENTS
handle — handle of a previously-created LoggerIdle instance object
DETAILS
Events written to a disabled log are silently discarded.
RETURNS
The function returns the state of the log (TRUE if enabled, FALSE if disabled) before the call. This return value allows clients to restore the previous state. Note: not thread safe.
 
LoggerIdle_enable()  // instance

Enable a log

C synopsis target-domain
Bool LoggerIdle_enable(LoggerIdle_Handle handle);
 
ARGUMENTS
handle — handle of a previously-created LoggerIdle instance object
RETURNS
The function returns the state of the log (TRUE if enabled, FALSE if disabled) before the call. This return value allows clients to restore the previous state. Note: not thread safe.
 
LoggerIdle_write0()  // instance

Process a log event with 0 arguments

C synopsis target-domain
Void LoggerIdle_write0(LoggerIdle_Handle handle, Log_Event evt, Types_ModuleId mid);
 
ARGUMENTS
handle — handle of a previously-created LoggerIdle instance object
DETAILS
Same as write4 except with 0 arguments rather than 4.
SEE
 
LoggerIdle_write1()  // instance

Process a log event with 1 arguments

C synopsis target-domain
Void LoggerIdle_write1(LoggerIdle_Handle handle, Log_Event evt, Types_ModuleId mid, IArg a1);
 
ARGUMENTS
handle — handle of a previously-created LoggerIdle instance object
DETAILS
Same as write4 except with 1 arguments rather than 4.
SEE
 
LoggerIdle_write2()  // instance

Process a log event with 2 arguments

C synopsis target-domain
Void LoggerIdle_write2(LoggerIdle_Handle handle, Log_Event evt, Types_ModuleId mid, IArg a1, IArg a2);
 
ARGUMENTS
handle — handle of a previously-created LoggerIdle instance object
DETAILS
Same as write4 except with 2 arguments rather than 4.
SEE
 
LoggerIdle_write4()  // instance

Process a log event with up to 4 arguments

C synopsis target-domain
Void LoggerIdle_write4(LoggerIdle_Handle handle, Log_Event evt, Types_ModuleId mid, IArg a1, IArg a2, IArg a3, IArg a4);
 
ARGUMENTS
handle — handle of a previously-created LoggerIdle instance object
evt — event to be logged
mid — module ID of the module which logged the event
a1 — arbitrary argument passed by caller
DETAILS
The evt argument is of type Log.Event, which encodes the Log.EventId, the Diags.Mask, and the Diags.EventLevel of the event. The event ID can be obtained via Types.getEventId(evt), the Diags mask can be obtained via Diags.getMask(evt), and the event level can be obtained via Diags.getLevel(evt).
The modId argument is the module ID of the module that logged the event.
The event information can be used by the logger to handle different events specially. For example, the event ID can be used to compare against other known Log.Events.
      if (Log_getEventId(MY_EVENT) == Log_getEventId(evt)) {
          :
      }
The Diags mask and event level can be used for filtering of events based on event level (see IFilterLogger), or even routing events to separate loggers based on diags category (see, for example, LoggerBuf.statusLogger).
The Diags mask and event level are useful for handling the event, but are generally not recorded by the logger because they are not needed in decoding and displaying the event. A more suitable value to record is a Types.Event, which encodes the event ID and module ID. For example, the Log.EventRec type stores a Types.Event in its record definition. A Types.Event can be created using the Types.makeEvent API given the event ID and module ID.
The event ID value of 0 is used to indicate an event triggered by a call to one of the Log_print[0-6] methods. These methods take a format string rather than a Log_Event argument and, as a result, the event ID encoded in evt is 0 and the parameter a1 is the format string.
Non-zero event IDs can also be used to access the msg string associated with the Log.EventDesc that originally defined the Log event.
      Log_EventId id = Log_getEventId(evt));
      if (id != 0) {
          String msg = Text_ropeText(id);
          System_aprintf(msg, a1, a2, a3, a4);
      }
This works because an event's ID is simply an offset into a table of characters (maintained by the Text module) containing the event's msg string.
The arguments a1, a2, etc. are parameters that are to be interpreted according to the message format string associated with evt.
SEE
 
LoggerIdle_write8()  // instance

Process a log event with up to 8 arguments

C synopsis target-domain
Void LoggerIdle_write8(LoggerIdle_Handle handle, Log_Event evt, Types_ModuleId mid, IArg a1, IArg a2, IArg a3, IArg a4, IArg a5, IArg a6, IArg a7, IArg a8);
 
ARGUMENTS
handle — handle of a previously-created LoggerIdle instance object
DETAILS
Same as write4 except with 8 arguments rather than 4.
SEE
Instance Convertors

C synopsis target-domain
ILogger_Handle LoggerIdle_Handle_upCast(LoggerIdle_Handle handle);
// unconditionally move one level up the inheritance hierarchy
 
LoggerIdle_Handle LoggerIdle_Handle_downCast(ILogger_Handle handle);
// conditionally move one level down the inheritance hierarchy; NULL upon failure
Instance Built-Ins

C synopsis target-domain
Int LoggerIdle_Object_count();
// The number of statically-created instance objects
 
LoggerIdle_Handle LoggerIdle_Object_get(LoggerIdle_Object *array, Int i);
// The handle of the i-th statically-created instance object (array == NULL)
 
LoggerIdle_Handle LoggerIdle_Object_first();
// The handle of the first dynamically-created instance object, or NULL
 
LoggerIdle_Handle LoggerIdle_Object_next(LoggerIdle_Handle handle);
// The handle of the next dynamically-created instance object, or NULL
 
IHeap_Handle LoggerIdle_Object_heap();
// The heap used to allocate dynamically-created instance objects
 
Types_Label *LoggerIdle_Handle_label(LoggerIdle_Handle handle, Types_Label *buf);
// The label associated with this instance object
 
String LoggerIdle_Handle_name(LoggerIdle_Handle handle);
// The name of this instance object
 
Configuration settings sourced in ti/uia/sysbios/LoggerIdle.xdc
var LoggerIdle = xdc.useModule('ti.uia.sysbios.LoggerIdle');
module-wide constants & types
        const LoggerIdle.TransportType_UART;
        const LoggerIdle.TransportType_USB;
        const LoggerIdle.TransportType_ETHERNET;
        const LoggerIdle.TransportType_CUSTOM;
 
    var obj = new LoggerIdle.RecordView// ;
        obj.sequence = Int  ...
        obj.timestampRaw = Long  ...
        obj.modName = String  ...
        obj.text = String  ...
        obj.eventId = Int  ...
        obj.eventName = String  ...
        obj.arg0 = IArg  ...
        obj.arg1 = IArg  ...
        obj.arg2 = IArg  ...
        obj.arg3 = IArg  ...
        obj.arg4 = IArg  ...
        obj.arg5 = IArg  ...
        obj.arg6 = IArg  ...
        obj.arg7 = IArg  ...
 
        obj.instanceId = Int  ...
module-wide config parameters
 
module-wide functions
per-instance config parameters
    var params = new LoggerIdle.Params// Instance config-params object;
per-instance creation
    var inst = LoggerIdle.create// Create an instance-object(params);
 
 
enum LoggerIdle.TransportType

Used to specify the type of transport to use

Configuration settings
values of type LoggerIdle.TransportType
    const LoggerIdle.TransportType_UART;
    const LoggerIdle.TransportType_USB;
    const LoggerIdle.TransportType_ETHERNET;
    const LoggerIdle.TransportType_CUSTOM;
 
DETAILS
This enum is used by the instrumentation host to determine what the transport is. It is not used by the target code.
C SYNOPSIS
 
metaonly struct LoggerIdle.RecordView
Configuration settings
var obj = new LoggerIdle.RecordView;
 
    obj.sequence = Int  ...
    obj.timestampRaw = Long  ...
    obj.modName = String  ...
    obj.text = String  ...
    obj.eventId = Int  ...
    obj.eventName = String  ...
    obj.arg0 = IArg  ...
    obj.arg1 = IArg  ...
    obj.arg2 = IArg  ...
    obj.arg3 = IArg  ...
    obj.arg4 = IArg  ...
    obj.arg5 = IArg  ...
    obj.arg6 = IArg  ...
    obj.arg7 = IArg  ...
 
 
metaonly struct LoggerIdle.RtaData

Data added to the RTA MetaData file to support System Analyzer

Configuration settings
var obj = new LoggerIdle.RtaData;
 
    obj.instanceId = Int  ...
 
 
config LoggerIdle.bufferSize  // module-wide

LoggerIdle buffer size in 32-bit words

Configuration settings
LoggerIdle.bufferSize = SizeT 256;
 
C SYNOPSIS
 
config LoggerIdle.customTransportType  // module-wide

Custom transport used to send the records to an instrumentation host

Configuration settings
LoggerIdle.customTransportType = String null;
 
DETAILS
If the desired transport is not in the TransportType enum, and transportType is set to TransportType_CUSTOM, this parameter must be filled in with the correct transport name.
If transportType is NOT set to TransportType_CUSTOM, this parameter is ignored.
C SYNOPSIS
 
config LoggerIdle.isTimestampEnabled  // module-wide

Enable or disable logging the 64b local CPU timestamp at the start of each event

Configuration settings
LoggerIdle.isTimestampEnabled = Bool true;
 
DETAILS
Having a timestamp allows an instrumentation host (e.g. System Analyzer) to display events with the correct system time.
C SYNOPSIS
 
config LoggerIdle.transportFxn  // module-wide

User defined transport function responsible for transmitting the records

Configuration settings
LoggerIdle.transportFxn = Int(*)(UChar*,Int) null;
 
C SYNOPSIS
 
metaonly config LoggerIdle.common$  // module-wide

Common module configuration parameters

Configuration settings
LoggerIdle.common$ = Types.Common$ undefined;
 
DETAILS
All modules have this configuration parameter. Its name contains the '$' character to ensure it does not conflict with configuration parameters declared by the module. This allows new configuration parameters to be added in the future without any chance of breaking existing modules.
 
metaonly config LoggerIdle.transportType  // module-wide

Transport used to send the records to an instrumentation host

Configuration settings
 
DETAILS
This parameter is used to specify the transport that the transportFxn function will use to send the buffer to an instrumentation host (e.g. System Analyzer in CCS).
This parameter is placed into the generated UIA XML file. The instrumentation host can use the XML file to help it auto-detect as much as possible and act accordingly.
If the desired transport is not in the TransportType enum, select TransportType_CUSTOM and set the customTransportType string with the desired string.
 
metaonly LoggerIdle.getMetaArgs()  // module-wide

Returns any meta data needed to support RTA

Configuration settings
LoggerIdle.getMetaArgs(Any inst, Any instNum) returns Any
 
DETAILS
This meta data should be returned in the form of a structure which can be converted into XML. This data is added to the RTA XML file during the application's configuration, and can be accessed later through the xdc.rta.MetaData module.
The MetaData is returned per instance of the ILogger module. The instance object is passed to the function as the first argument.
The second argument is the index of the instance in the list of the ILogger's static instances.
Instance Config Parameters

Configuration settings
var params = new LoggerIdle.Params;
// Instance config-params object
Static Instance Creation

Configuration settings
var params = new LoggerIdle.Params;
// Allocate instance config-params
params.config =   ...
// Assign individual configs
 
var inst = LoggerIdle.create(params);
// Create an instance-object
ARGUMENTS
params — per-instance config params, or NULL to select default values (target-domain only)
eb — active error-handling block, or NULL to select default policy (target-domain only)
DETAILS
The logger instance will route all log events it receives to the Uart.
generated on Tue, 14 Feb 2017 00:15:19 GMT