#ifndef PLSR_POSITION_H #define PLSR_POSITION_H #include "plsr_types.h" #include #ifdef __cplusplus extern "C" { #endif typedef struct { uint32_t pulsesPerRevolution; uint32_t movementPerRevolution; uint8_t unitCode; } PLSR_EQUIVALENT_CONFIG; uint8_t PlsrPositionUnitCodeIsValid(uint8_t unitCode); uint8_t PlsrPositionUsesEquivalent(const PLSR_EQUIVALENT_CONFIG *config); PLSR_RESULT PlsrPositionValidateEquivalent( const PLSR_EQUIVALENT_CONFIG *config); /* 带余数的相对距离换算。remainder/newRemainder 的分母恒为 * movementPerRevolution,允许负值以保证正反向运动可相互抵消。 */ PLSR_RESULT PlsrPositionUnitsToPulses( const PLSR_EQUIVALENT_CONFIG *config, int32_t units, int64_t remainder, int64_t *pulses, int64_t *newRemainder); PLSR_RESULT PlsrPositionAbsoluteUnitsToPulses( const PLSR_EQUIVALENT_CONFIG *config, int32_t units, int64_t *pulses); PLSR_RESULT PlsrPositionPulsesToUnits( const PLSR_EQUIVALENT_CONFIG *config, int64_t pulses, int64_t *units); PLSR_RESULT PlsrPositionSpeedToPulseFrequency( const PLSR_EQUIVALENT_CONFIG *config, uint32_t speed, uint32_t *frequencyHz); PLSR_RESULT PlsrPositionPulseFrequencyToSpeed( const PLSR_EQUIVALENT_CONFIG *config, uint32_t frequencyHz, uint32_t *speed); #ifdef __cplusplus } #endif #endif /* PLSR_POSITION_H */