|
- #ifndef PLSR_PATH_H
- #define PLSR_PATH_H
-
- #include "plsr_job.h"
- #include "plsr_types.h"
- #include <stdint.h>
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- #define PLSR_PATH_ZERO_JUMP_BUDGET (100U)
-
- typedef enum
- {
- PLSR_PATH_SEGMENT_RUNNING = 0,
- PLSR_PATH_WAIT_TIME,
- PLSR_PATH_WAIT_SIGNAL,
- PLSR_PATH_ACT_PENDING,
- PLSR_PATH_ENDED
- } PLSR_PATH_PHASE;
-
- typedef enum
- {
- PLSR_PATH_ACTION_NONE = 0,
- PLSR_PATH_ACTION_NEXT_SEGMENT,
- PLSR_PATH_ACTION_ENTER_WAIT,
- PLSR_PATH_ACTION_JOB_COMPLETE,
- PLSR_PATH_ACTION_YIELD,
- PLSR_PATH_ACTION_ERROR
- } PLSR_PATH_ACTION;
-
- typedef struct
- {
- PLSR_PATH_PHASE phase;
- uint16_t currentSegment;
- uint16_t nextSegment;
- uint8_t waitCondition;
- uint32_t waitRemainingMs;
- uint16_t zeroJumpBudget;
- uint8_t lastExtLevel;
- uint8_t segmentEnded;
- uint8_t extActive;
- uint8_t actActive;
- uint8_t jumpChainPending;
- uint8_t jobEnded;
- uint8_t waitSignalDevice;
- uint32_t waitSignalAddress;
- } PLSR_PATH_CONTEXT;
-
- void PlsrPathBegin(PLSR_PATH_CONTEXT *context,
- const PLSR_JOB_SNAPSHOT *job,
- int64_t logicalPosition);
-
- PLSR_PATH_ACTION PlsrPathOnSegmentDone(PLSR_PATH_CONTEXT *context,
- const PLSR_JOB_SNAPSHOT *job,
- int64_t logicalPosition);
-
- PLSR_PATH_ACTION PlsrPathTick(PLSR_PATH_CONTEXT *context,
- const PLSR_JOB_SNAPSHOT *job,
- int64_t logicalPosition);
-
- uint16_t PlsrPathGetCurrentSegment(const PLSR_PATH_CONTEXT *context);
-
- void PlsrPathTerminate(PLSR_PATH_CONTEXT *context);
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif /* PLSR_PATH_H */
|