25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 
 
 
 

137 satır
5.1 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 PlsrPlatformStartFiniteSequencePrepared(
  69. uint8_t pulseOutput,
  70. PLSR_PLATFORM_FINITE_STEP *steps,
  71. uint16_t stepCount,
  72. uint32_t *actualFrequencyHz);
  73. PLSR_PLATFORM_QUEUE_RESULT PlsrPlatformUpdateFinitePrepared(
  74. uint8_t pulseOutput,
  75. const PLSR_PLATFORM_TIMER_SETTING *setting,
  76. uint32_t *actualFrequencyHz);
  77. uint8_t PlsrPlatformRetargetFiniteStop(uint8_t pulseOutput,
  78. uint32_t drainPulses);
  79. uint8_t PlsrPlatformFiniteRetargetReady(uint8_t pulseOutput,
  80. uint32_t *activeFrequencyHz);
  81. uint8_t PlsrPlatformFiniteProgress(uint8_t pulseOutput,
  82. uint32_t *completedPulses);
  83. uint8_t PlsrPlatformTakeFiniteCompletion(uint8_t pulseOutput,
  84. uint32_t *completedPulses);
  85. uint8_t PlsrPlatformTakeFiniteBoundary(uint8_t pulseOutput,
  86. uint8_t *segmentNumber,
  87. uint32_t *completedPulses,
  88. uint8_t *sequenceContinues,
  89. uint32_t *activeFrequencyHz);
  90. PLSR_PLATFORM_QUEUE_RESULT PlsrPlatformLoadPreparedFromIrq(
  91. uint8_t pulseOutput,
  92. const PLSR_PLATFORM_TIMER_SETTING *setting,
  93. uint32_t *actualFrequencyHz);
  94. void PlsrPlatformGateFromIrq(uint8_t pulseOutput);
  95. PLSR_PLATFORM_QUEUE_RESULT PlsrPlatformQueueFrequency(
  96. uint8_t pulseOutput,
  97. uint32_t frequencyHz,
  98. uint32_t *actualFrequencyHz);
  99. void PlsrPlatformDrainPendingPulse(uint8_t pulseOutput);
  100. uint32_t PlsrPlatformActiveFrequency(uint8_t pulseOutput);
  101. uint8_t PlsrPlatformExpectedFrequency(uint8_t pulseOutput,
  102. uint8_t outputMode,
  103. uint32_t requestedFrequencyHz,
  104. uint32_t *actualFrequencyHz);
  105. uint64_t PlsrPlatformObservedPulses(uint8_t pulseOutput);
  106. /* Returns 0, PLSR diagnostic reason 2 (frequency), or 3 (curve/order). */
  107. uint16_t PlsrPlatformDiagnosticFault(void);
  108. /* Caller must hold the platform critical section. */
  109. PLSR_PLATFORM_STOP_RESULT PlsrPlatformRequestStopLocked(
  110. uint8_t pulseOutput,
  111. uint8_t requireZeroBoundary);
  112. uint8_t PlsrPlatformQueueFinalArmFromIrq(uint8_t pulseOutput);
  113. void PlsrPlatformStopPulse(uint8_t pulseOutput);
  114. uint8_t PlsrPlatformReadInput(uint8_t inputSelection);
  115. uint8_t PlsrPlatformLoad(PLSR_PERSIST_PAYLOAD *payload);
  116. PLSR_PLATFORM_SERVICE_RESULT PlsrPlatformServicePersistence(void);
  117. uint8_t PlsrPlatformSave(const PLSR_PERSIST_PAYLOAD *payload);
  118. void PlsrPlatformCheckpointConfig(const PLSR_CONFIG *config);
  119. void PlsrPlatformCheckpointPosition(int32_t position,
  120. uint8_t positionValid,
  121. uint8_t wasBusy);
  122. void PlsrPlatformForceSafeOutputsFromFault(void);
  123. uint32_t PlsrPlatformEnterCritical(void);
  124. void PlsrPlatformExitCritical(uint32_t state);
  125. #endif /* PLSR_PLATFORM_H */