Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 
 
 
 

162 řádky
6.2 KiB

  1. #ifndef PLSR_PLATFORM_H
  2. #define PLSR_PLATFORM_H
  3. #include "plsr_internal.h"
  4. #include <stdint.h>
  5. typedef enum
  6. {
  7. PLSR_PLATFORM_STOP_COMPLETE = 0,
  8. PLSR_PLATFORM_STOP_PENDING,
  9. PLSR_PLATFORM_STOP_FORCED_FAULT
  10. } PLSR_PLATFORM_STOP_RESULT;
  11. typedef enum
  12. {
  13. PLSR_PLATFORM_QUEUE_FAILED = 0,
  14. PLSR_PLATFORM_QUEUE_APPLIED,
  15. PLSR_PLATFORM_QUEUE_STALE
  16. } PLSR_PLATFORM_QUEUE_RESULT;
  17. typedef enum
  18. {
  19. PLSR_PLATFORM_SERVICE_FAILED = 0,
  20. PLSR_PLATFORM_SERVICE_READY,
  21. PLSR_PLATFORM_SERVICE_DEFERRED
  22. } PLSR_PLATFORM_SERVICE_RESULT;
  23. typedef struct
  24. {
  25. uint32_t actualFrequencyHz;
  26. uint16_t prescaler;
  27. uint16_t pairPrescaler;
  28. uint16_t period;
  29. uint16_t compare;
  30. } PLSR_PLATFORM_TIMER_SETTING;
  31. typedef struct
  32. {
  33. PLSR_PLATFORM_TIMER_SETTING setting;
  34. uint32_t pulseCount;
  35. uint32_t segmentPulseOffset;
  36. uint8_t segmentNumber;
  37. uint8_t completesSegment;
  38. uint8_t updatesWithSegment;
  39. } PLSR_PLATFORM_FINITE_STEP;
  40. uint8_t PlsrPlatformInit(void);
  41. uint8_t PlsrPlatformPrepare(uint8_t pulseOutput,
  42. uint8_t directionOutput,
  43. uint8_t directionLevel,
  44. uint8_t outputMode,
  45. uint8_t directionPositive);
  46. uint8_t PlsrPlatformStartPulse(uint8_t pulseOutput,
  47. uint32_t firstFrequencyHz,
  48. uint32_t queuedFrequencyHz,
  49. uint32_t *actualFirstFrequencyHz,
  50. uint32_t *actualQueuedFrequencyHz);
  51. uint8_t PlsrPlatformBuildTimerSetting(
  52. uint8_t pulseOutput,
  53. uint8_t outputMode,
  54. uint32_t requestedFrequencyHz,
  55. PLSR_PLATFORM_TIMER_SETTING *setting);
  56. uint8_t PlsrPlatformStartPrepared(
  57. uint8_t pulseOutput,
  58. const PLSR_PLATFORM_TIMER_SETTING *firstSetting,
  59. const PLSR_PLATFORM_TIMER_SETTING *queuedSetting,
  60. uint32_t *actualFirstFrequencyHz,
  61. uint32_t *actualQueuedFrequencyHz);
  62. uint8_t PlsrPlatformSupportsFinitePulseTrain(void);
  63. uint8_t PlsrPlatformStartFinitePrepared(
  64. uint8_t pulseOutput,
  65. const PLSR_PLATFORM_TIMER_SETTING *setting,
  66. uint32_t pulseCount,
  67. uint32_t *actualFrequencyHz);
  68. uint8_t PlsrPlatformStartCountedStreamPrepared(
  69. uint8_t pulseOutput,
  70. const PLSR_PLATFORM_TIMER_SETTING *setting,
  71. uint32_t pulseCount,
  72. uint32_t *actualFrequencyHz);
  73. uint8_t PlsrPlatformStartFiniteSequencePrepared(
  74. uint8_t pulseOutput,
  75. PLSR_PLATFORM_FINITE_STEP *steps,
  76. uint16_t stepCount,
  77. uint32_t *actualFrequencyHz);
  78. PLSR_PLATFORM_QUEUE_RESULT PlsrPlatformUpdateFinitePrepared(
  79. uint8_t pulseOutput,
  80. const PLSR_PLATFORM_TIMER_SETTING *setting,
  81. uint32_t *actualFrequencyHz);
  82. uint8_t PlsrPlatformRetargetFiniteStop(uint8_t pulseOutput,
  83. uint32_t drainPulses);
  84. uint8_t PlsrPlatformRequestFiniteCut(uint8_t pulseOutput);
  85. uint8_t PlsrPlatformFiniteRetargetReady(uint8_t pulseOutput,
  86. uint32_t *activeFrequencyHz);
  87. uint8_t PlsrPlatformFinitePipelineSnapshot(uint8_t pulseOutput,
  88. uint32_t *committedPulses,
  89. uint32_t *tailFrequencyHz,
  90. uint8_t *startsNextSegment);
  91. uint8_t PlsrPlatformFiniteProgress(uint8_t pulseOutput,
  92. uint32_t *completedPulses);
  93. uint8_t PlsrPlatformTakeFiniteCompletion(uint8_t pulseOutput,
  94. uint32_t *completedPulses);
  95. uint8_t PlsrPlatformTakeFiniteBoundary(uint8_t pulseOutput,
  96. uint8_t *segmentNumber,
  97. uint32_t *completedPulses,
  98. uint8_t *sequenceContinues,
  99. uint32_t *activeFrequencyHz);
  100. /* Counted-stream callbacks are owned by the executor in plsr.c. The
  101. platform invokes them only at a hardware counter run boundary. These
  102. callbacks must only latch events/snapshots; all bookkeeping runs in the
  103. 1 ms task. */
  104. uint8_t PlsrExecTakeCountedRunIrq(
  105. uint8_t pulseOutput,
  106. PLSR_PLATFORM_TIMER_SETTING *setting,
  107. uint32_t *pulseCount,
  108. uint8_t *startsNextSegment);
  109. void PlsrExecCountedSegmentBoundaryIrq(uint8_t pulseOutput,
  110. uint32_t completedPulses);
  111. void PlsrExecCountedStreamFaultIrq(uint8_t pulseOutput);
  112. /* EXTI callback: records only an armed WAIT input edge. */
  113. void PlsrWaitInputExtiIrq(uint8_t inputSelection);
  114. PLSR_PLATFORM_QUEUE_RESULT PlsrPlatformLoadPreparedFromIrq(
  115. uint8_t pulseOutput,
  116. const PLSR_PLATFORM_TIMER_SETTING *setting,
  117. uint32_t *actualFrequencyHz);
  118. void PlsrPlatformGateFromIrq(uint8_t pulseOutput);
  119. PLSR_PLATFORM_QUEUE_RESULT PlsrPlatformQueueFrequency(
  120. uint8_t pulseOutput,
  121. uint32_t frequencyHz,
  122. uint32_t *actualFrequencyHz);
  123. void PlsrPlatformDrainPendingPulse(uint8_t pulseOutput);
  124. uint32_t PlsrPlatformActiveFrequency(uint8_t pulseOutput);
  125. uint8_t PlsrPlatformExpectedFrequency(uint8_t pulseOutput,
  126. uint8_t outputMode,
  127. uint32_t requestedFrequencyHz,
  128. uint32_t *actualFrequencyHz);
  129. uint64_t PlsrPlatformObservedPulses(uint8_t pulseOutput);
  130. /* Returns 0, PLSR diagnostic reason 2 (frequency), or 3 (curve/order). */
  131. uint16_t PlsrPlatformDiagnosticFault(void);
  132. /* Caller must hold the platform critical section. */
  133. PLSR_PLATFORM_STOP_RESULT PlsrPlatformRequestStopLocked(
  134. uint8_t pulseOutput,
  135. uint8_t requireZeroBoundary);
  136. uint8_t PlsrPlatformQueueFinalArmFromIrq(uint8_t pulseOutput);
  137. void PlsrPlatformStopPulse(uint8_t pulseOutput);
  138. uint8_t PlsrPlatformReadInput(uint8_t inputSelection);
  139. uint8_t PlsrPlatformLoad(PLSR_PERSIST_PAYLOAD *payload);
  140. PLSR_PLATFORM_SERVICE_RESULT PlsrPlatformServicePersistence(void);
  141. uint8_t PlsrPlatformSave(const PLSR_PERSIST_PAYLOAD *payload);
  142. void PlsrPlatformCheckpointConfig(const PLSR_CONFIG *config);
  143. void PlsrPlatformCheckpointPosition(int32_t position,
  144. uint8_t positionValid,
  145. uint8_t wasBusy);
  146. void PlsrPlatformForceSafeOutputsFromFault(void);
  147. uint32_t PlsrPlatformEnterCritical(void);
  148. void PlsrPlatformExitCritical(uint32_t state);
  149. #endif /* PLSR_PLATFORM_H */