Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 
 
 

98 rader
3.5 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. uint8_t PlsrPlatformInit(void);
  32. uint8_t PlsrPlatformPrepare(uint8_t pulseOutput,
  33. uint8_t directionOutput,
  34. uint8_t directionLevel,
  35. uint8_t outputMode,
  36. uint8_t directionPositive);
  37. uint8_t PlsrPlatformStartPulse(uint8_t pulseOutput,
  38. uint32_t firstFrequencyHz,
  39. uint32_t queuedFrequencyHz,
  40. uint32_t *actualFirstFrequencyHz,
  41. uint32_t *actualQueuedFrequencyHz);
  42. uint8_t PlsrPlatformBuildTimerSetting(
  43. uint8_t pulseOutput,
  44. uint8_t outputMode,
  45. uint32_t requestedFrequencyHz,
  46. PLSR_PLATFORM_TIMER_SETTING *setting);
  47. uint8_t PlsrPlatformStartPrepared(
  48. uint8_t pulseOutput,
  49. const PLSR_PLATFORM_TIMER_SETTING *firstSetting,
  50. const PLSR_PLATFORM_TIMER_SETTING *queuedSetting,
  51. uint32_t *actualFirstFrequencyHz,
  52. uint32_t *actualQueuedFrequencyHz);
  53. PLSR_PLATFORM_QUEUE_RESULT PlsrPlatformLoadPreparedFromIrq(
  54. uint8_t pulseOutput,
  55. const PLSR_PLATFORM_TIMER_SETTING *setting,
  56. uint32_t *actualFrequencyHz);
  57. void PlsrPlatformGateFromIrq(uint8_t pulseOutput);
  58. PLSR_PLATFORM_QUEUE_RESULT PlsrPlatformQueueFrequency(
  59. uint8_t pulseOutput,
  60. uint32_t frequencyHz,
  61. uint32_t *actualFrequencyHz);
  62. void PlsrPlatformDrainPendingPulse(uint8_t pulseOutput);
  63. uint32_t PlsrPlatformActiveFrequency(uint8_t pulseOutput);
  64. uint8_t PlsrPlatformExpectedFrequency(uint8_t pulseOutput,
  65. uint8_t outputMode,
  66. uint32_t requestedFrequencyHz,
  67. uint32_t *actualFrequencyHz);
  68. uint64_t PlsrPlatformObservedPulses(uint8_t pulseOutput);
  69. /* Returns 0, PLSR diagnostic reason 2 (frequency), or 3 (curve/order). */
  70. uint16_t PlsrPlatformDiagnosticFault(void);
  71. /* Caller must hold the platform critical section. */
  72. PLSR_PLATFORM_STOP_RESULT PlsrPlatformRequestStopLocked(
  73. uint8_t pulseOutput,
  74. uint8_t requireZeroBoundary);
  75. uint8_t PlsrPlatformQueueFinalArmFromIrq(uint8_t pulseOutput);
  76. void PlsrPlatformStopPulse(uint8_t pulseOutput);
  77. uint8_t PlsrPlatformReadInput(uint8_t inputSelection);
  78. uint8_t PlsrPlatformLoad(PLSR_PERSIST_PAYLOAD *payload);
  79. PLSR_PLATFORM_SERVICE_RESULT PlsrPlatformServicePersistence(void);
  80. uint8_t PlsrPlatformSave(const PLSR_PERSIST_PAYLOAD *payload);
  81. void PlsrPlatformCheckpointConfig(const PLSR_CONFIG *config);
  82. void PlsrPlatformCheckpointPosition(int32_t position,
  83. uint8_t positionValid,
  84. uint8_t wasBusy);
  85. void PlsrPlatformForceSafeOutputsFromFault(void);
  86. uint32_t PlsrPlatformEnterCritical(void);
  87. void PlsrPlatformExitCritical(uint32_t state);
  88. #endif /* PLSR_PLATFORM_H */