|
- #ifndef PLSR_PLATFORM_H
- #define PLSR_PLATFORM_H
-
- #include "plsr_internal.h"
- #include <stdint.h>
-
- typedef enum
- {
- PLSR_PLATFORM_STOP_COMPLETE = 0,
- PLSR_PLATFORM_STOP_PENDING,
- PLSR_PLATFORM_STOP_FORCED_FAULT
- } PLSR_PLATFORM_STOP_RESULT;
-
- typedef enum
- {
- PLSR_PLATFORM_QUEUE_FAILED = 0,
- PLSR_PLATFORM_QUEUE_APPLIED,
- PLSR_PLATFORM_QUEUE_STALE
- } PLSR_PLATFORM_QUEUE_RESULT;
-
- typedef enum
- {
- PLSR_PLATFORM_SERVICE_FAILED = 0,
- PLSR_PLATFORM_SERVICE_READY,
- PLSR_PLATFORM_SERVICE_DEFERRED
- } PLSR_PLATFORM_SERVICE_RESULT;
-
- typedef struct
- {
- uint32_t actualFrequencyHz;
- uint16_t prescaler;
- uint16_t pairPrescaler;
- uint16_t period;
- uint16_t compare;
- } PLSR_PLATFORM_TIMER_SETTING;
-
- uint8_t PlsrPlatformInit(void);
- uint8_t PlsrPlatformPrepare(uint8_t pulseOutput,
- uint8_t directionOutput,
- uint8_t directionLevel,
- uint8_t outputMode,
- uint8_t directionPositive);
- uint8_t PlsrPlatformStartPulse(uint8_t pulseOutput,
- uint32_t firstFrequencyHz,
- uint32_t queuedFrequencyHz,
- uint32_t *actualFirstFrequencyHz,
- uint32_t *actualQueuedFrequencyHz);
- uint8_t PlsrPlatformBuildTimerSetting(
- uint8_t pulseOutput,
- uint8_t outputMode,
- uint32_t requestedFrequencyHz,
- PLSR_PLATFORM_TIMER_SETTING *setting);
- uint8_t PlsrPlatformStartPrepared(
- uint8_t pulseOutput,
- const PLSR_PLATFORM_TIMER_SETTING *firstSetting,
- const PLSR_PLATFORM_TIMER_SETTING *queuedSetting,
- uint32_t *actualFirstFrequencyHz,
- uint32_t *actualQueuedFrequencyHz);
- PLSR_PLATFORM_QUEUE_RESULT PlsrPlatformLoadPreparedFromIrq(
- uint8_t pulseOutput,
- const PLSR_PLATFORM_TIMER_SETTING *setting,
- uint32_t *actualFrequencyHz);
- void PlsrPlatformGateFromIrq(uint8_t pulseOutput);
- PLSR_PLATFORM_QUEUE_RESULT PlsrPlatformQueueFrequency(
- uint8_t pulseOutput,
- uint32_t frequencyHz,
- uint32_t *actualFrequencyHz);
- void PlsrPlatformDrainPendingPulse(uint8_t pulseOutput);
- uint32_t PlsrPlatformActiveFrequency(uint8_t pulseOutput);
- uint8_t PlsrPlatformExpectedFrequency(uint8_t pulseOutput,
- uint8_t outputMode,
- uint32_t requestedFrequencyHz,
- uint32_t *actualFrequencyHz);
- uint64_t PlsrPlatformObservedPulses(uint8_t pulseOutput);
- /* Returns 0, PLSR diagnostic reason 2 (frequency), or 3 (curve/order). */
- uint16_t PlsrPlatformDiagnosticFault(void);
- /* Caller must hold the platform critical section. */
- PLSR_PLATFORM_STOP_RESULT PlsrPlatformRequestStopLocked(
- uint8_t pulseOutput,
- uint8_t requireZeroBoundary);
- uint8_t PlsrPlatformQueueFinalArmFromIrq(uint8_t pulseOutput);
- void PlsrPlatformStopPulse(uint8_t pulseOutput);
- uint8_t PlsrPlatformReadInput(uint8_t inputSelection);
-
- uint8_t PlsrPlatformLoad(PLSR_PERSIST_PAYLOAD *payload);
- PLSR_PLATFORM_SERVICE_RESULT PlsrPlatformServicePersistence(void);
- uint8_t PlsrPlatformSave(const PLSR_PERSIST_PAYLOAD *payload);
- void PlsrPlatformCheckpointConfig(const PLSR_CONFIG *config);
- void PlsrPlatformCheckpointPosition(int32_t position,
- uint8_t positionValid,
- uint8_t wasBusy);
- void PlsrPlatformForceSafeOutputsFromFault(void);
-
- uint32_t PlsrPlatformEnterCritical(void);
- void PlsrPlatformExitCritical(uint32_t state);
-
- #endif /* PLSR_PLATFORM_H */
|