TI Utilities API  1.30.00.05
Log.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2019-2020 Texas Instruments Incorporated - https://www.ti.com
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of Texas Instruments Incorporated nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
275 /* Remove the include guard to allow this file to participate
276  * multiple times in the same compilation unit. This is a special
277  * build flow where multiple source files are included into the
278  * same compilation unit. When each source file is preprocessed,
279  * this header file will reset the preprocessor state such that
280  * the current file may re-define the Log macros as requested.
281  *
282  * #ifndef ti_utils_runtime_Log__include
283  * #define ti_utils_runtime_Log__include
284  */
285 
288 
289 /*
290  * ======== Log.h ========
291  * @brief Contains Log library APIs
292  */
293 #include <stdint.h>
294 
295 #include <ti/utils/runtime/ILogger.h>
296 
297 #if defined (__cplusplus)
298 extern "C" {
299 #endif
300 
301 
302 /*
303  * ======== undef all working macros ========
304  * Remove working macros from preprocessor state
305  *
306  * When including multiple source files into one compilation unit,
307  * this removes the macros left over from a previous include of this
308  * file.
309  */
310 #if ti_utils_runtime_Log_USE_LTO || ti_utils_runtime_Log_USE_PPO
311 
312 #undef Log_MASK_INFO1
313 #undef Log_MASK_INFO2
314 #undef Log_MASK_INFO3
315 #undef Log_MASK_INFO4
316 #undef Log_MASK_INFO5
317 #undef Log_MASK_INFO6
318 #undef Log_MASK_WARN
319 #undef Log_MASK_ERROR
320 #undef Log_MASK
321 #undef _Log_event_B
322 #undef _Log_buf_B
323 #undef _Log_printf_B
324 #undef _Log_DECL_Write
325 #undef _Log_DECL_Write_A
326 #undef _Log_DECL_Write_B
327 #undef _Log_DECL_Handle
328 #undef _Log_DECL_Handle_A
329 #undef _Log_DECL_Handle_B
330 #undef _Log_DECL_Level
331 #undef _Log_DECL_Level_A
332 #undef _Log_DECL_Level_B
333 #undef _Log_DECL_buf
334 #undef _Log_DECL_buf_A
335 #undef _Log_DECL_buf_B
336 #undef _Log_DECL_Printf
337 #undef _Log_DECL_Printf_A
338 #undef _Log_DECL_Printf_B
339 
340 
341 #undef _Log_ARGS
342 #undef _Log_ARGS_A
343 #undef _Log_ARGS_B
344 #undef _Log_ARGS0
345 #undef _Log_ARGS1
346 #undef _Log_ARGS2
347 #undef _Log_ARGS3
348 #undef _Log_ARGS4
349 #undef _Log_NUMARGS
350 #undef _Log_NUMARGS_A
351 #undef _Log_NUMARGS_B
352 #undef _Log_CONCAT2_A
353 #undef _Log_CONCAT2
354 #undef _Log__TOKEN2STRING_A
355 #undef _Log_TOKEN2STRING
356 #undef _Log_APPEND_META_TO_FORMAT
357 #undef _Log_FIRST_ARG
358 #undef _Log_PLACE_FORMAT_IN_SECTOR
359 #undef _Log_GUARD_MACRO
360 #endif
361 
362 /* these are always defined */
363 #undef ti_utils_runtime_Log_USE_LTO
364 #undef ti_utils_runtime_Log_USE_PPO
365 #undef Log_DECLARE_MODULE
366 #undef _Log_DECL_Module_Id_Name
367 #undef Log_EVENT_CONSTRUCT
368 #undef Log_event
369 #undef Log_buf
370 #undef Log_printf
371 
372 /*
373  * ======== ti_utils_runtime_Log_ENABLE_LTO ========
374  * Enable instrumentation using link-time optimization implementation
375  *
376  * Define this symbol to add instrumentation at compile time.
377  * It must be defined before including this header file.
378  */
379 #ifdef ti_utils_runtime_Log_ENABLE_LTO
380 #undef ti_utils_runtime_Log_ENABLE_LTO
381 #define ti_utils_runtime_Log_USE_LTO 1
382 #else
383 #define ti_utils_runtime_Log_USE_LTO 0
384 #endif
385 
386 /*
387  * ======== ti_utils_runtime_Log_ENABLE_PPO ========
388  * Enable instrumentation using preprocessor implementation
389  *
390  * Define this symbol to add instrumentation at compile time.
391  * It must be defined before including this header file.
392  */
393 #ifdef ti_utils_runtime_Log_ENABLE_PPO
394 #undef ti_utils_runtime_Log_ENABLE_PPO
395 #define ti_utils_runtime_Log_USE_PPO 1
396 #else
397 #define ti_utils_runtime_Log_USE_PPO 0
398 #endif
399 
400 /* cannot define both macros at the same time */
401 #if ti_utils_runtime_Log_USE_LTO && ti_utils_runtime_Log_USE_PPO
402 #error Cannot define both LTO and PPO at the same time.
403 #endif
404 
405 #if ti_utils_runtime_Log_USE_LTO || ti_utils_runtime_Log_USE_PPO
406 /*
407  * =============================
408  * ======== Log Enabled ========
409  * =============================
410  */
411 
414 #ifdef ti_utils_runtime_Log_ENABLE_ALL
415 #undef ti_utils_runtime_Log_ENABLE_ALL
416 
417 #define Log_MASK_INFO1 Log_INFO1
418 #define Log_MASK_INFO2 Log_INFO2
419 #define Log_MASK_INFO3 Log_INFO3
420 #define Log_MASK_INFO4 Log_INFO4
421 #define Log_MASK_INFO5 Log_INFO5
422 #define Log_MASK_INFO6 Log_INFO6
423 #define Log_MASK_WARN Log_WARN
424 #define Log_MASK_ERROR Log_ERROR
425 
426 #else
427 
428 #ifdef ti_utils_runtime_Log_ENABLE_INFO1
429 #undef ti_utils_runtime_Log_ENABLE_INFO1
430 #define Log_MASK_INFO1 Log_INFO1
431 #else
432 #define Log_MASK_INFO1 0
433 #endif
434 
435 #ifdef ti_utils_runtime_Log_ENABLE_INFO2
436 #undef ti_utils_runtime_Log_ENABLE_INFO2
437 #define Log_MASK_INFO2 Log_INFO2
438 #else
439 #define Log_MASK_INFO2 0
440 #endif
441 
442 #ifdef ti_utils_runtime_Log_ENABLE_INFO3
443 #undef ti_utils_runtime_Log_ENABLE_INFO3
444 #define Log_MASK_INFO3 Log_INFO3
445 #else
446 #define Log_MASK_INFO3 0
447 #endif
448 
449 #ifdef ti_utils_runtime_Log_ENABLE_INFO4
450 #undef ti_utils_runtime_Log_ENABLE_INFO4
451 #define Log_MASK_INFO4 Log_INFO4
452 #else
453 #define Log_MASK_INFO4 0
454 #endif
455 
456 #ifdef ti_utils_runtime_Log_ENABLE_INFO5
457 #undef ti_utils_runtime_Log_ENABLE_INFO5
458 #define Log_MASK_INFO5 Log_INFO5
459 #else
460 #define Log_MASK_INFO5 0
461 #endif
462 
463 #ifdef ti_utils_runtime_Log_ENABLE_INFO6
464 #undef ti_utils_runtime_Log_ENABLE_INFO6
465 #define Log_MASK_INFO6 Log_INFO6
466 #else
467 #define Log_MASK_INFO6 0
468 #endif
469 
470 #ifdef ti_utils_runtime_Log_ENABLE_WARN
471 #undef ti_utils_runtime_Log_ENABLE_WARN
472 #define Log_MASK_WARN Log_WARN
473 #else
474 #define Log_MASK_WARN 0
475 #endif
476 
477 #ifdef ti_utils_runtime_Log_ENABLE_ERROR
478 #undef ti_utils_runtime_Log_ENABLE_ERROR
479 #define Log_MASK_ERROR Log_ERROR
480 #else
481 #define Log_MASK_ERROR 0
482 #endif
483 
484 #endif /* ti_utils_runtime_Log_ENABLE_ALL */
485 
486 #define Log_MASK (\
487  Log_MASK_INFO1 | Log_MASK_INFO2 | Log_MASK_INFO3 | \
488  Log_MASK_INFO4 | Log_MASK_INFO5 | Log_MASK_INFO6 | \
489  Log_MASK_WARN | Log_MASK_ERROR)
490 
491 
492 /* This macro protects against sideffects of the C preprocessor expansion
493  * of log statements. Each log API should be guarded by it.
494  * An article explaining this behavior can be found here:
495  * https://gcc.gnu.org/onlinedocs/cpp/Swallowing-the-Semicolon.html
496  */
497 #define _Log_GUARD_MACRO(x) do{ x }while(0)
498 
499 /*
500  *
501  * ======== Log Private Macros ========
502  *
503  * The following macros are intended to be private to the log module and
504  * are not intended for use by the user. Private macros will start with _Log.
505  *
506  * In the case of multi level macros (macros that invoke other macros), a
507  * letter is appended at the end of the definition. With each level of nesting,
508  * the appended letter is incremented.
509  *
510  * For example: _Log_test --> _Log_test_A --> _Log_test_B
511  */
512 /* Extracts the first argument from __VA_ARGS__ */
513 #define _Log_FIRST_ARG(N, ...) N
514 
515 /* Routes a log call based on the number of arguments provided */
516 #define _Log_EVENT_ARGS(module, header, ...) \
517  _Log_EVENT_ARGS_A(module, header, _Log_NUMARGS(__VA_ARGS__), __VA_ARGS__)
518 #define _Log_EVENT_ARGS_A(module, header, num, ...) \
519  _Log_EVENT_ARGS_B(module, header, num, __VA_ARGS__)
520 #define _Log_EVENT_ARGS_B(module, header, num, ...) \
521  _Log_EVENT_ARGS##num(module, uintptr_t, header, __VA_ARGS__)
522 
523 /* Helper macros to fill out dummy parameters if they're unused */
524 #define _Log_EVENT_ARGS0(module, type, header, event) \
525  (uint32_t)header, \
526  (uintptr_t)module##_##event, \
527  (type)0, \
528  (type)0, \
529  (type)0, \
530  (type)0
531 
532 #define _Log_EVENT_ARGS1(module, type, header, event, a1) \
533  (uint32_t)header, \
534  (uintptr_t)module##_##event, \
535  (type)a1, \
536  (type)0, \
537  (type)0, \
538  (type)0
539 
540 #define _Log_EVENT_ARGS2(module, type, header, event, a1, a2) \
541  (uint32_t)header, \
542  (uintptr_t)module##_##event, \
543  (type)a1, \
544  (type)a2, \
545  (type)0, \
546  (type)0
547 
548 #define _Log_EVENT_ARGS3(module, type, header, event, a1, a2, a3) \
549  ((uint32_t)header, \
550  (uintptr_t)module##_##event, \
551  (type)a1, \
552  (type)a2, \
553  (type)a3, \
554  (type)0)
555 
556 #define _Log_EVENT_ARGS4(module, type, header, event, a1, a2, a3, a4) \
557  (uint32_t)header, \
558  (uintptr_t)module##_##event, \
559  (type)a1, \
560  (type)a2, \
561  (type)a3, \
562  (type)a4
563 
564 /* Helper macro to count the number of arguments in __VA_ARGS_ */
565 #define _Log_NUMARGS(...) _Log_NUMARGS_A(__VA_ARGS__, 4, 3, 2, 1, 0)
566 #define _Log_NUMARGS_A(...) _Log_NUMARGS_B(__VA_ARGS__)
567 #define _Log_NUMARGS_B(_first, _4, _3, _2, _1, N, ...) N
568 
569 /*
570  * ======== Meta string tokenization macros ========
571  */
572 /* Helper macro to concatenate two symbols */
573 #define _Log_CONCAT2_A(x,y) x ## _ ## y
574 #define _Log_CONCAT2(x,y) _Log_CONCAT2_A(x,y)
575 
576 /* Helper macro to concatenate two symbols */
577 #define _Log__TOKEN2STRING_A(x) #x
578 #define _Log_TOKEN2STRING(x) _Log__TOKEN2STRING_A(x)
579 
580 /* Macro to place meta string in a memory section separated by record separator */
581 #define _Log_APPEND_META_TO_FORMAT(opcode, \
582  file, \
583  line, \
584  level, \
585  module, \
586  format, \
587  nargs) \
588  _Log_TOKEN2STRING(opcode) "\x1e" \
589  _Log_TOKEN2STRING(file) "\x1e" \
590  _Log_TOKEN2STRING(line) "\x1e" \
591  _Log_TOKEN2STRING(level) "\x1e" \
592  _Log_TOKEN2STRING(module) "\x1e" \
593  _Log_TOKEN2STRING(format) "\x1e" \
594  _Log_TOKEN2STRING(nargs)
595 
596 /* Place a string in trace format section named ".log_data"
597  * This section must exist in the linker file
598  */
599 #if defined(__IAR_SYSTEMS_ICC__)
600 #define _Log_PLACE_FORMAT_IN_SECTOR(name, opcode, level, module, format, nargs)\
601  __root static const char name[] @ ".log_data" = \
602  _Log_APPEND_META_TO_FORMAT(opcode, \
603  __FILE__, \
604  __LINE__, \
605  level, \
606  module, \
607  format, \
608  nargs);
609 #elif defined(__TI_COMPILER_VERSION__) || (defined(__clang__) && defined(__ti_version__)) || defined(__GNUC__)
610 #define _Log_PLACE_FORMAT_IN_SECTOR(name, opcode, level, module, format, nargs)\
611  static const char name[] \
612  __attribute__((used,section(".log_data"))) = \
613  _Log_APPEND_META_TO_FORMAT(opcode, \
614  __FILE__, \
615  __LINE__, \
616  level, \
617  module, \
618  format, \
619  nargs);
620 #else
621 #error Incompatible compiler: Logging is currently supported by the following \
622 compilers: TI ARM Compiler, TI CLANG Compiler, GCC, IAR. Please migrate to a \
623 a supported compiler.
624 #endif
625 
643 #define Log_DECLARE_MODULE(module) \
644  _Log_DECL_Write(module); \
645  _Log_DECL_Printf(module); \
646  _Log_DECL_buf(module); \
647  _Log_DECL_Handle(module); \
648  _Log_DECL_Level(module);
649 
651 #define _Log_DECL_Write(module) _Log_DECL_Write_A(module)
652 #define _Log_DECL_Write_A(module) _Log_DECL_Write_B(module)
653 #define _Log_DECL_Write_B(module) \
654  extern void module##_LogSite_event(ILogger_Handle logger, \
655  uint32_t header, \
656  uintptr_t event, \
657  uintptr_t arg0, \
658  uintptr_t arg1, \
659  uintptr_t arg2, \
660  uintptr_t arg3)
661 
662 #define _Log_DECL_Printf(module) _Log_DECL_Printf_A(module)
663 #define _Log_DECL_Printf_A(module) _Log_DECL_Printf_B(module)
664 #define _Log_DECL_Printf_B(module) \
665  extern void module##_LogSite_printf(ILogger_Handle handle, \
666  uint32_t header, \
667  uint32_t numArgs, \
668  ...)
669 
670 #define _Log_DECL_buf(module) _Log_DECL_buf_A(module)
671 #define _Log_DECL_buf_A(module) _Log_DECL_buf_B(module)
672 #define _Log_DECL_buf_B(module) \
673  extern void module##_LogSite_buf(ILogger_Handle handle, \
674  uint32_t header, \
675  const char* format, \
676  uint8_t *data, \
677  size_t size)
678 
679 #define _Log_DECL_Handle(module) _Log_DECL_Handle_A(module)
680 #define _Log_DECL_Handle_A(module) _Log_DECL_Handle_B(module)
681 #define _Log_DECL_Handle_B(module) \
682  extern const ILogger_Handle module##_LogSite_handle
683 
684 #define _Log_DECL_Level(module) _Log_DECL_Level_A(module)
685 #define _Log_DECL_Level_A(module) _Log_DECL_Level_B(module)
686 #define _Log_DECL_Level_B(module) \
687  extern const uint32_t module##_LogSite_level
688 
689 #if ti_utils_runtime_Log_USE_LTO
690 
691 #define _Log_event_B(module, level, ...) \
692  if ((level) & module##_LogSite_level) { \
693  _Log_PLACE_FORMAT_IN_SECTOR(_Log_CONCAT2(LogSymbol, __LINE__), \
694  LOG_OPCODE_EVENT, \
695  level, \
696  module, \
697  _Log_FIRST_ARG(__VA_ARGS__), \
698  _Log_NUMARGS(__VA_ARGS__)) \
699  module##_LogSite_event(module##_LogSite_handle, \
700  _Log_EVENT_ARGS(module, \
701  &_Log_CONCAT2(LogSymbol, \
702  __LINE__), \
703  __VA_ARGS__)); \
704  }
705 
706 #endif
707 
708 #if ti_utils_runtime_Log_USE_PPO
709 
710 #define _Log_event_B(module, level, ...) \
711  if ((level) & (Log_MASK)) { \
712  _Log_PLACE_FORMAT_IN_SECTOR(_Log_CONCAT2(LogSymbol, __LINE__), \
713  LOG_OPCODE_EVENT, \
714  level, \
715  module, \
716  _Log_FIRST_ARG(__VA_ARGS__), \
717  _Log_NUMARGS(__VA_ARGS__)) \
718  module##_LogSite_event(module##_LogSite_handle, \
719  _Log_EVENT_ARGS(module, \
720  &_Log_CONCAT2(LogSymbol, \
721  __LINE__), \
722  __VA_ARGS__)); \
723  }
724 
725 #endif
726 
727 #if ti_utils_runtime_Log_USE_LTO
728 
729 #define _Log_buf_B(module , level, format, data, size) \
730  if ((level) & module##_LogSite_level) { \
731  _Log_PLACE_FORMAT_IN_SECTOR(_Log_CONCAT2(LogSymbol, __LINE__), \
732  LOG_OPCODE_BUFFER, \
733  level, \
734  module, \
735  format, \
736  0) \
737  module##_LogSite_buf(module##_LogSite_handle, \
738  (uint32_t)&_Log_CONCAT2(LogSymbol, __LINE__), \
739  format, \
740  data, \
741  size); \
742  }
743 
744 #endif
745 
746 #if ti_utils_runtime_Log_USE_PPO
747 
748 #define _Log_buf_B(module , level, format, data, size) \
749  if ((level) & (Log_MASK)) { \
750  _Log_PLACE_FORMAT_IN_SECTOR(_Log_CONCAT2(LogSymbol, __LINE__), \
751  LOG_OPCODE_BUFFER, \
752  level, \
753  module, \
754  format, \
755  0) \
756  module##_LogSite_buf(module##_LogSite_handle, \
757  (uint32_t)&_Log_CONCAT2(LogSymbol, __LINE__), \
758  format, \
759  data, \
760  size); \
761  }
762 
763 #endif
764 
765 #if ti_utils_runtime_Log_USE_LTO
766 
767 #define _Log_printf_B(module, level, ...) \
768  if ((level) & module##_LogSite_level) { \
769  _Log_PLACE_FORMAT_IN_SECTOR(_Log_CONCAT2(LogSymbol, __LINE__), \
770  LOG_OPCODE_FORMATED_TEXT, \
771  level, \
772  module, \
773  _Log_FIRST_ARG(__VA_ARGS__), \
774  _Log_NUMARGS(__VA_ARGS__)) \
775  module##_LogSite_printf(module##_LogSite_handle, \
776  (uint32_t)&_Log_CONCAT2(LogSymbol, __LINE__), \
777  _Log_NUMARGS(__VA_ARGS__), \
778  __VA_ARGS__); \
779  }
780 
781 #endif
782 
783 #if ti_utils_runtime_Log_USE_PPO
784 
785 #define _Log_printf_B(module, level, ...) \
786  if ((level) & (Log_MASK)) { \
787  _Log_PLACE_FORMAT_IN_SECTOR(_Log_CONCAT2(LogSymbol, __LINE__), \
788  LOG_OPCODE_FORMATED_TEXT, \
789  level, \
790  module, \
791  _Log_FIRST_ARG(__VA_ARGS__), \
792  _Log_NUMARGS(__VA_ARGS__)) \
793  module##_LogSite_printf(module##_LogSite_handle, \
794  (uint32_t)&_Log_CONCAT2(LogSymbol, __LINE__), \
795  _Log_NUMARGS(__VA_ARGS__), \
796  __VA_ARGS__); \
797  }
798 
799 #endif
800 
824 #define Log_event(module, level, ...) \
825  _Log_GUARD_MACRO(_Log_event_B(module , level, __VA_ARGS__))
826 
827 
843 #define Log_EVENT_CONSTRUCT(module, name, fmt) \
844  _Log_PLACE_FORMAT_IN_SECTOR(_Log_CONCAT2(LogSymbol, name), \
845  LOG_EVENT_CONSTRUCT, \
846  name, \
847  module, \
848  fmt, \
849  0) \
850  const char *_Log_CONCAT2(module, name) = _Log_CONCAT2(LogSymbol, \
851  name);
852 
853 
868 #define Log_buf(module, level, format, data, size) \
869  _Log_GUARD_MACRO(_Log_buf_B(module , level, format, data, size))
870 
889 #define Log_printf(module, level, ...) \
890  _Log_GUARD_MACRO(_Log_printf_B(module, level, __VA_ARGS__))
891 
892 #else /* ti_utils_runtime_Log_USE_LTO || ti_utils_runtime_Log_USE_PPO */
893 
894 /*
895  * =================================================
896  * ======== Log Disabled (default behavior) ========
897  * =================================================
898  */
899 #define _Log_DECL_Config()
900 #define _Log_DECL_Module_Id_Name(module)
901 #define Log_EVENT_CONSTRUCT(name, type, fmt)
902 #define Log_event(level, ...)
903 
904 #endif /* ti_utils_runtime_Log_USE_LTO || ti_utils_runtime_Log_USE_PPO */
905 
906 /*
907  * ======== Log_FIRST ========
908  * Mark the first passage through this file
909  *
910  * This macro is not needed in the typical use-case. However,
911  * when including multiple source files into one compilation
912  * unit, where each source file includes Log.h, this macro is
913  * needed to mark that the first pass has been completed. This
914  * will guard the type definitions on subsequent passes, to
915  * avoid the multiple definition errors raised by the compiler.
916  */
917 #ifndef Log_FIRST
918 
919 #define Log_FIRST
920 
922 /*
923  * ======== Log_Level ========
924  */
925 typedef enum Log_Level {
930  Log_INFO5 = 16,
931  Log_INFO6 = 32,
932  Log_WARN = 64,
933  Log_ERROR = 128
934 } Log_Level;
935 
936 /*
937  * ======== LogMain ========
938  * Courtesy declarations on behalf of LogMain
939  */
941 extern const uint32_t ti_utils_runtime_LogMain_LogSite_level;
942 extern const ILogger_Handle ti_utils_runtime_LogMain_LogSite_handle;
943 extern void ti_utils_runtime_LogMain_LogSite_event(ILogger_Handle,
944  uint32_t header,
945  uintptr_t event,
946  uintptr_t,
947  uintptr_t,
948  uintptr_t,
949  uintptr_t);
950 extern void ti_utils_runtime_LogMain_LogSite_printf(ILogger_Handle handle,
951  uint32_t header,
952  uint32_t numArgs,
953  ...);
954 extern void ti_utils_runtime_LogMain_LogSite_buf(ILogger_Handle handle,
955  uint32_t header,
956  const char* format,
957  uint8_t *data,
958  size_t size);
960 #endif /* Log_FIRST */
961 
962 
964 #if defined (__cplusplus)
965 }
966 #endif
967 
968 /* Remove include guard.
969  *
970  * #endif ti_utils_runtime_Log__include
971  */
Definition: Log.h:927
Definition: Log.h:932
Definition: Log.h:929
Definition: Log.h:933
Log_Level
Definition: Log.h:925
Definition: Log.h:928
Definition: Log.h:931
Definition: Log.h:930
Definition: Log.h:926
© Copyright 1995-2021, Texas Instruments Incorporated. All rights reserved.
Trademarks | Privacy policy | Terms of use | Terms of sale