This logger implementation stores xdc.runtime.Log records into shared memory.
This logger is intended to be used for SoC system (e.g. EVMTI816X),
where Linux is running on the host core (e.g. CortexA8) and
SYS/BIOS is running on the targets (e.g. M3 and DSP).
This logger is used on the targets. The host is then responsible
for reading the shared memory and processing the records. UIA
ships the ti/uia/linux/LoggerSM module that can be used to
process the records. UIA also ships a cmdline app,
ti/uia/examples/evmti816x/loggerSMDump.out, that show
how to use the linux/LoggerSM module.
LoggerSM supports multiple instances, but all instances are writing to
the same shared memory (in a thread safe manner). This was done to
simplify the design. Because of this, application really should only
create one LoggerSM instance.
config LoggerSM_E_badLevel // module-wide |
 |
Error raised if get or setFilterLevel receive a bad level value
extern const Error_Id LoggerSM_E_badLevel;
config LoggerSM_decode // module-wide |
 |
Flag to determine whether to decode the events in shared memory
extern const Bool LoggerSM_decode;
DETAILS
If true, all the events will be decoded into ASCII strings
when it is written into shared memory. If false, binary
data is written instead.
config LoggerSM_filterByLevel // module-wide |
 |
Support filtering of events by event level
extern const Bool LoggerSM_filterByLevel;
DETAILS
To improve logging performance, this feature can be disabled by setting
filterByLevel to false.
See '
setFilterLevel' for an explanation of level filtering.
config LoggerSM_isTimestampEnabled // module-wide |
 |
Enable or disable logging the 64b local CPU timestamp
at the start of each event
extern const Bool LoggerSM_isTimestampEnabled;
config LoggerSM_level1Mask // module-wide |
 |
Mask of diags categories whose initial filtering level is Diags.LEVEL1
DETAILS
See '
level4Mask' for details.
config LoggerSM_level2Mask // module-wide |
 |
Mask of diags categories whose initial filtering level is Diags.LEVEL2
DETAILS
See '
level4Mask' for details.
config LoggerSM_level3Mask // module-wide |
 |
Mask of diags categories whose initial filtering level is Diags.LEVEL3
DETAILS
See '
level4Mask' for details.
config LoggerSM_level4Mask // module-wide |
 |
Mask of diags categories whose initial filtering level is Diags.LEVEL4
DETAILS
If 'filterByLevel' is true, then all LoggerBuf instances will filter
incoming events based on their event level.
The LoggerSM module allows for specifying a different filter level for
every Diags bit. These filtering levels are module wide; LoggerBuf does
not support specifying the levels on a per-instance basis.
The setFilterLevel API can be used to change the filtering levels at
runtime.
The default filtering levels are assigned using the 'level1Mask' -
'level4Mask' config parameters. These are used to specify, for each of
the four event levels, the set of bits which should filter at that
level by default.
The default filtering configuration sets the filter level to
Diags.LEVEL4 for all logging-related diags bits so that all events are
logged by default.
config LoggerSM_numPartitions // module-wide |
 |
Number of partitions sharing the shared memory
extern const Int LoggerSM_numPartitions;
config LoggerSM_overwrite // module-wide |
 |
Flag to determine whether to overwrite records when full
extern const Bool LoggerSM_overwrite;
DETAILS
If true and when the buffer is full, the logger will overwrite
the oldest record. Reading the records can only occur when the
targets have been halted.
If false and when the buffer is full, the logger will discard
the new record.
config LoggerSM_sharedMemorySize // module-wide |
 |
Total size of shared memory in MAU that will be divided by the number
of partitions
extern const SizeT LoggerSM_sharedMemorySize;
LoggerSM_setPartitionId() // module-wide |
 |
Change the partitionId at runtime
Void LoggerSM_setPartitionId(Int partitionId);
DETAILS
Must be called early before module startup occurs.
Generally the best place to do this is via the
xdc.runtime.Startup.firstFxns array.
LoggerSM_setSharedMemory() // module-wide |
 |
Specify the shared memory to be used by LoggerSM
Bool LoggerSM_setSharedMemory(Ptr sharedMemory, Bits32 sharedMemorySize);
ARGUMENTS
sharedMemory
Base address of the shared memory to be used
by LoggerSM.
sharedMemorySize
Size of the shared memory.
DETAILS
This runtime API can be called once to initialize the shared memory
that the all LoggerSM instances use. This API can only be called
if '
sharedMemorySize' is set to zero. If
'
sharedMemorySize' is non-zero, the shared memory is
statically defined and initialized instead. Since the memory
is already defined, this API cannot change it.
RETURNS
This function returns TRUE if successful. It returns FALSE if not.
The reasons for failure are either '
sharedMemorySize' is
non-zero or the API has been called multiple times.
Module-Wide Built-Ins |
 |
// Get this module's unique id
Bool LoggerSM_Module_startupDone();
// Test if this module has completed startup
// The heap from which this module allocates memory
Bool LoggerSM_Module_hasMask();
// Test whether this module has a diagnostics mask
Bits16 LoggerSM_Module_getMask();
// Returns the diagnostics mask for this module
Void LoggerSM_Module_setMask(Bits16 mask);
// Set the diagnostics mask for this module
Instance Object Types |
 |
typedef struct LoggerSM_Object LoggerSM_Object;
// Opaque internal representation of an instance object
// Client reference to an instance object
typedef struct LoggerSM_Struct LoggerSM_Struct;
// Opaque client structure large enough to hold an instance object
// Convert this instance structure pointer into an instance handle
// Convert this instance handle into an instance structure pointer
Instance Config Parameters |
 |
typedef struct LoggerSM_Params {
// Instance config-params structure
// Common per-instance configs
} LoggerSM_Params;
// Initialize this config-params structure with supplier-specified defaults before instance creation
Instance Creation |
 |
// Allocate and initialize a new instance object and return its handle
// 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)
SEE
Instance Deletion |
 |
// Finalize and free this previously allocated instance object, setting the referenced handle to NULL
// Finalize the instance object inside the provided structure
LoggerSM_disable() // instance |
 |
Disable a log
ARGUMENTS
handle
handle of a previously-created LoggerSM instance object
DETAILS
Events written to a disabled log are silently discarded.
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.
The function returns the state of the log (TRUE if enabled,
FALSE if disabled) before the call. That allow clients to restore
the previous state.
LoggerSM_enable() // instance |
 |
Enable a log
ARGUMENTS
handle
handle of a previously-created LoggerSM 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.
The function returns the state of the log (TRUE if enabled,
FALSE if disabled) before the call. That allow clients to restore
the previous state.
LoggerSM_getFilterLevel() // instance |
 |
Returns the mask of diags categories currently set to the specified
level
ARGUMENTS
handle
handle of a previously-created LoggerSM instance object
DETAILS
See '
setFilterLevel' for an explanation of level filtering.
See '
setFilterLevel' for an explanation of level filtering.
LoggerSM_setFilterLevel() // instance |
 |
Sets the level of detail that instances will log
ARGUMENTS
handle
handle of a previously-created LoggerSM instance object
mask
The diags categories to set the level for
The diags categories to set the level for
filterLevel
The new filtering level for the specified
categories
The new filtering level for the specified
categories
DETAILS
Events with the specified level or higher will be logged, events
below the specified level will be dropped.
Events are filtered first by diags category, then by level. If an
event's diags category is disabled in the module's diags mask, then it
will be filtered out regardless of level. The event will not even be
passed to the logger.
This API allows for setting the filtering level for more than one
diags category at a time. The mask parameter can be a single category
or multiple categories combined, and the level will be set for all of
those categories.
Events with the specified level or higher will be logged, events
below the specified level will be dropped.
Events are filtered first by diags category, then by level. If an
event's diags category is disabled in the module's diags mask, then it
will be filtered out regardless of level. The event will not even be
passed to the logger.
This API allows for setting the filtering level for more than one
diags category at a time. The mask parameter can be a single category
or multiple categories combined, and the level will be set for all of
those categories.
LoggerSM_write0() // instance |
 |
Process a log event with 0 arguments and the calling address
ARGUMENTS
handle
handle of a previously-created LoggerSM instance object
DETAILS
Same as write4 except with 0 arguments rather than 4.
Same as write4 except with 0 arguments rather than 4.
SEE
LoggerSM_write1() // instance |
 |
Process a log event with 1 arguments and the calling address
ARGUMENTS
handle
handle of a previously-created LoggerSM instance object
DETAILS
Same as write4 except with 1 arguments rather than 4.
Same as write4 except with 1 arguments rather than 4.
SEE
LoggerSM_write2() // instance |
 |
Process a log event with 2 arguments and the calling address
ARGUMENTS
handle
handle of a previously-created LoggerSM instance object
DETAILS
Same as write4 except with 2 arguments rather than 4.
Same as write4 except with 2 arguments rather than 4.
SEE
LoggerSM_write4() // instance |
 |
Process a log event with 4 arguments and the calling address
ARGUMENTS
handle
handle of a previously-created LoggerSM 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
LoggerSM_write8() // instance |
 |
Process a log event with 8 arguments and the calling address
Void LoggerSM_write8(
LoggerSM_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 LoggerSM instance object
DETAILS
Same as write4 except with 8 arguments rather than 4.
Same as write4 except with 8 arguments rather than 4.
SEE
Instance Convertors |
 |
// unconditionally move one level up the inheritance hierarchy
// conditionally move one level down the inheritance hierarchy; NULL upon failure
// unconditionally move 2 levels up the inheritance hierarchy
// conditionally move 2 levels down the inheritance hierarchy; NULL upon failure
Instance Built-Ins |
 |
Int LoggerSM_Object_count();
// The number of statically-created instance objects
// The handle of the i-th statically-created instance object (array == NULL)
// The handle of the first dynamically-created instance object, or NULL
// The handle of the next dynamically-created instance object, or NULL
// The heap used to allocate dynamically-created instance objects
// The label associated with this instance object
// The name of this instance object
metaonly struct LoggerSM.MetaData |
 |
This data is added to the RTA MetaData file
XDCscript usage |
meta-domain |
var obj = new LoggerSM.MetaData;
obj.instanceId = Int ...
obj.priority = Int ...
config LoggerSM.E_badLevel // module-wide |
 |
Error raised if get or setFilterLevel receive a bad level value
XDCscript usage |
meta-domain |
msg: "E_badLevel: Bad filter level value: %d"
};
C SYNOPSIS
config LoggerSM.decode // module-wide |
 |
Flag to determine whether to decode the events in shared memory
XDCscript usage |
meta-domain |
LoggerSM.decode = Bool true;
DETAILS
If true, all the events will be decoded into ASCII strings
when it is written into shared memory. If false, binary
data is written instead.
C SYNOPSIS
config LoggerSM.filterByLevel // module-wide |
 |
Support filtering of events by event level
XDCscript usage |
meta-domain |
LoggerSM.filterByLevel = Bool false;
DETAILS
To improve logging performance, this feature can be disabled by setting
filterByLevel to false.
See '
setFilterLevel' for an explanation of level filtering.
C SYNOPSIS
config LoggerSM.isTimestampEnabled // module-wide |
 |
Enable or disable logging the 64b local CPU timestamp
at the start of each event
XDCscript usage |
meta-domain |
LoggerSM.isTimestampEnabled = Bool true;
C SYNOPSIS
config LoggerSM.level1Mask // module-wide |
 |
Mask of diags categories whose initial filtering level is Diags.LEVEL1
XDCscript usage |
meta-domain |
LoggerSM.level1Mask = Bits16 0;
DETAILS
See '
level4Mask' for details.
C SYNOPSIS
config LoggerSM.level2Mask // module-wide |
 |
Mask of diags categories whose initial filtering level is Diags.LEVEL2
XDCscript usage |
meta-domain |
LoggerSM.level2Mask = Bits16 0;
DETAILS
See '
level4Mask' for details.
C SYNOPSIS
config LoggerSM.level3Mask // module-wide |
 |
Mask of diags categories whose initial filtering level is Diags.LEVEL3
XDCscript usage |
meta-domain |
LoggerSM.level3Mask = Bits16 0;
DETAILS
See '
level4Mask' for details.
C SYNOPSIS
config LoggerSM.level4Mask // module-wide |
 |
Mask of diags categories whose initial filtering level is Diags.LEVEL4
XDCscript usage |
meta-domain |
DETAILS
If 'filterByLevel' is true, then all LoggerBuf instances will filter
incoming events based on their event level.
The LoggerSM module allows for specifying a different filter level for
every Diags bit. These filtering levels are module wide; LoggerBuf does
not support specifying the levels on a per-instance basis.
The setFilterLevel API can be used to change the filtering levels at
runtime.
The default filtering levels are assigned using the 'level1Mask' -
'level4Mask' config parameters. These are used to specify, for each of
the four event levels, the set of bits which should filter at that
level by default.
The default filtering configuration sets the filter level to
Diags.LEVEL4 for all logging-related diags bits so that all events are
logged by default.
C SYNOPSIS
config LoggerSM.numPartitions // module-wide |
 |
Number of partitions sharing the shared memory
XDCscript usage |
meta-domain |
LoggerSM.numPartitions = Int 3;
C SYNOPSIS
config LoggerSM.overwrite // module-wide |
 |
Flag to determine whether to overwrite records when full
XDCscript usage |
meta-domain |
LoggerSM.overwrite = Bool false;
DETAILS
If true and when the buffer is full, the logger will overwrite
the oldest record. Reading the records can only occur when the
targets have been halted.
If false and when the buffer is full, the logger will discard
the new record.
C SYNOPSIS
config LoggerSM.sharedMemorySize // module-wide |
 |
Total size of shared memory in MAU that will be divided by the number
of partitions
XDCscript usage |
meta-domain |
LoggerSM.sharedMemorySize = SizeT 0x20000;
C SYNOPSIS
metaonly config LoggerSM.bufSection // module-wide |
 |
Section name for the buffer in shared memory
XDCscript usage |
meta-domain |
LoggerSM.bufSection = String null;
metaonly config LoggerSM.common$ // module-wide |
 |
Common module configuration parameters
XDCscript usage |
meta-domain |
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 LoggerSM.partitionId // module-wide |
 |
Unique id for each core using the shared memory
XDCscript usage |
meta-domain |
LoggerSM.partitionId = Int 0;
metaonly LoggerSM.getMetaArgs() // module-wide |
 |
Returns any meta data needed to support RTA
XDCscript usage |
meta-domain |
LoggerSM.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 |
 |
XDCscript usage |
meta-domain |
var params = new LoggerSM.Params;
// Instance config-params object
Instance Creation |
 |
XDCscript usage |
meta-domain |
var params =
new LoggerSM.
Params;
// Allocate instance config-params
params.config = ...
// Assign individual configs
var inst = LoggerSM.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)
SEE