trcExtension.c 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. /*
  2. * Trace Recorder for Tracealyzer v4.9.2
  3. * Copyright 2023 Percepio AB
  4. * www.percepio.com
  5. *
  6. * SPDX-License-Identifier: Apache-2.0
  7. *
  8. * The implementation of extensions.
  9. */
  10. #include <trcRecorder.h>
  11. #if (TRC_USE_TRACEALYZER_RECORDER == 1) && (TRC_CFG_RECORDER_MODE == TRC_RECORDER_MODE_STREAMING)
  12. #define TRC_EXTENSION_BASE_EVENT_ID (TRC_EVENT_LAST_ID + 1UL)
  13. #define TRC_EXTENSION_COMBINE_VERSION(_major, _minor, _patch) \
  14. ( \
  15. ((0x000000FFUL & (TraceUnsignedBaseType_t)(_major)) << 24) | \
  16. ((0x000000FFUL & (TraceUnsignedBaseType_t)(_minor)) << 16) | \
  17. ((0x0000FFFFUL & (TraceUnsignedBaseType_t)(_patch)) << 0) \
  18. )
  19. static TraceExtensionData_t *pxExtensionData TRC_CFG_RECORDER_DATA_ATTRIBUTE;
  20. traceResult xTraceExtensionInitialize(TraceExtensionData_t* const pxBuffer)
  21. {
  22. /* This should never fail */
  23. TRC_ASSERT(pxBuffer != (void*)0);
  24. pxExtensionData = pxBuffer;
  25. pxExtensionData->uxNextFreeExtensionEventId = TRC_EXTENSION_BASE_EVENT_ID;
  26. xTraceSetComponentInitialized(TRC_RECORDER_COMPONENT_EXTENSION);
  27. return TRC_SUCCESS;
  28. }
  29. /*cstat !MISRAC2004-6.3 !MISRAC2012-Dir-4.6_a Suppress basic char type usage*/
  30. traceResult xTraceExtensionCreate(const char* szName, uint8_t uiMajor, uint8_t uiMinor, uint16_t uiPatch, uint32_t uiEventCount, TraceExtensionHandle_t* pxExtensionHandle)
  31. {
  32. TraceObjectHandle_t xObjectHandle;
  33. TraceUnsignedBaseType_t uxStates[3];
  34. /* This should never fail */
  35. TRC_ASSERT(xTraceIsComponentInitialized(TRC_RECORDER_COMPONENT_EXTENSION));
  36. /* This should never fail */
  37. TRC_ASSERT(uiEventCount != 0u);
  38. /* This should never fail */
  39. TRC_ASSERT(pxExtensionHandle != (void*)0);
  40. /* This should never fail */
  41. TRC_ASSERT(pxExtensionHandle != (void*)0);
  42. /* This should never fail */
  43. TRC_ASSERT(szName != (void*)0);
  44. /* This should never fail */
  45. TRC_ASSERT(szName[0] != (char)0); /*cstat !MISRAC2004-17.4_b We need to check the first characted*/ /*cstat !MISRAC2004-6.3 !MISRAC2012-Dir-4.6_a Suppress basic char type usage*/
  46. uxStates[TRC_EXTENSION_STATE_INDEX_VERSION] = TRC_EXTENSION_COMBINE_VERSION(uiMajor, uiMinor, uiPatch);
  47. uxStates[TRC_EXTENSION_STATE_INDEX_BASE_EVENT_ID] = pxExtensionData->uxNextFreeExtensionEventId;
  48. uxStates[TRC_EXTENSION_STATE_INDEX_EVENT_COUNT] = uiEventCount;
  49. /* We need to check this */
  50. if (xTraceObjectRegisterInternal(PSF_EVENT_EXTENSION_CREATE, (void*)0, szName, 3u, uxStates, TRC_ENTRY_OPTION_EXTENSION, &xObjectHandle) == TRC_FAIL)
  51. {
  52. return TRC_FAIL;
  53. }
  54. pxExtensionData->uxNextFreeExtensionEventId += uiEventCount;
  55. *pxExtensionHandle = (TraceExtensionHandle_t)xObjectHandle;
  56. return TRC_SUCCESS;
  57. }
  58. traceResult xTraceExtensionGetBaseEventId(TraceExtensionHandle_t xExtensionHandle, uint32_t *puiBaseEventId)
  59. {
  60. TraceUnsignedBaseType_t uxBaseEventId;
  61. /* This should never fail */
  62. TRC_ASSERT(xTraceIsComponentInitialized(TRC_RECORDER_COMPONENT_EXTENSION));
  63. /* This should never fail */
  64. TRC_ASSERT(puiBaseEventId != (void*)0);
  65. /* This should never fail */
  66. TRC_ASSERT_ALWAYS_EVALUATE(xTraceEntryGetState((TraceEntryHandle_t)xExtensionHandle, TRC_EXTENSION_STATE_INDEX_BASE_EVENT_ID, &uxBaseEventId) == TRC_SUCCESS);
  67. *puiBaseEventId = (uint32_t)uxBaseEventId;
  68. return TRC_SUCCESS;
  69. }
  70. /*cstat !MISRAC2004-6.3 !MISRAC2012-Dir-4.6_a Suppress basic char type usage*/
  71. traceResult xTraceExtensionGetConfigName(TraceExtensionHandle_t xExtensionHandle, const char **pszName)
  72. {
  73. /* This should never fail */
  74. TRC_ASSERT(xTraceIsComponentInitialized(TRC_RECORDER_COMPONENT_EXTENSION));
  75. return xTraceEntryGetSymbol((TraceEntryHandle_t)xExtensionHandle, pszName);
  76. }
  77. #endif