Program Listing for File initialization.h

Return to documentation for file (api/include/pntos/plugins/initialization.h)

#pragma once

#include <pntos/plugins/common.h>
#include <pntos/stdbool.h>

#ifdef __cplusplus
extern "C" {
#endif

PNTOS_ASSUME_NONNULL_BEGIN

typedef enum PntosInitializationType {
    PNTOS_INERTIAL_INITIALIZATION_STRATEGY,
    PNTOS_EWC_INITIALIZATION_STRATEGY
} PntosInitializationType;

typedef enum PntosInitializationStatus {
    PNTOS_WAITING,
    PNTOS_INITIALIZING_COARSE,
    PNTOS_INITIALIZING_FINE,
    PNTOS_INITIALIZED_GOOD,
    PNTOS_INITIALIZATION_FAILED
} PntosInitializationStatus;

typedef enum PntosInitializationMotionNeeded {
    PNTOS_NO_MOTION,
    PNTOS_MOTION_NEEDED,
    PNTOS_ANY_MOTION
} PntosInitializationMotionNeeded;

typedef struct PntosCommonInitializationStrategy {
    PntosManagedMemory* memory;

    PntosInitializationType type;

    PntosInitializationMotionNeeded (*request_motion_needed)(
        struct PntosCommonInitializationStrategy* self);

    PntosInitializationStatus (*request_current_status)(
        struct PntosCommonInitializationStrategy* self);

    void (*process_pntos_message)(struct PntosCommonInitializationStrategy* self,
                                  PntosMessage* message);
} PntosCommonInitializationStrategy;

typedef struct PntosInitialInertialSolution {
    PntosManagedMemory* memory;

    PntosMessage* PNTOS_NULLABLE solution;

    PntosStandardInertialErrors* PNTOS_NULLABLE inertial_errors;

    PntosMatrix* PNTOS_NULLABLE inertial_error_covariance;

    PntosInitializationStatus status;
} PntosInitialInertialSolution;

typedef struct PntosInertialInitializationStrategy {
    PntosCommonInitializationStrategy common;

    PntosInitialInertialSolution* (*request_solution)(
        struct PntosInertialInitializationStrategy* self);

} PntosInertialInitializationStrategy;

typedef struct PntosInitialEstimateWithCovariance {
    PntosManagedMemory* memory;

    AspnTypeTimestamp time;

    PntosEstimateWithCovariance* PNTOS_NULLABLE estimate_with_covariance;

    PntosInitializationStatus status;
} PntosInitialEstimateWithCovariance;

typedef struct PntosEwcInitializationStrategy {
    PntosCommonInitializationStrategy common;

    PntosInitialEstimateWithCovariance* PNTOS_NULLABLE (*request_solution)(
        struct PntosEwcInitializationStrategy* self);

} PntosEwcInitializationStrategy;

typedef struct PntosInitializationPlugin {
    PntosCommonPlugin common;

    bool (*is_initialization_type_supported)(struct PntosInitializationPlugin* self,
                                             PntosInitializationType type);

    PntosCommonInitializationStrategy* PNTOS_NULLABLE (*new_initialization_strategy)(
        struct PntosInitializationPlugin* self,
        PntosInitializationType type,
        char* PNTOS_NULLABLE config_group);
} PntosInitializationPlugin;

#ifdef __cplusplus
}
#endif

PNTOS_ASSUME_NONNULL_END