#ifndef _FRAMES_H_
#define _FRAMES_H_

#include "registers.h"

extern "C" {
namespace vn {
typedef struct QuaternionMagneticAccelerationAndAngularRates {
    static constexpr uint16_t ID = 8;
    QuaternionMagneticAccelerationAndAngularRatesRegister Register;
    QuaternionMagneticAccelerationAndAngularRates() { memset(&Register, 0, sizeof(Register)); }
};

typedef struct InsSolutionLla {
    static constexpr uint16_t ID = 63;
    InsSolutionLlaRegister Register;
    InsSolutionLla() { memset(&Register, 0, sizeof(Register)); }
};

typedef struct GpsSolutionLla {
    static constexpr uint16_t ID = 58;
    GpsSolutionLlaRegister Register;
    GpsSolutionLla() { memset(&Register, 0, sizeof(Register)); }
};

typedef struct YawPitchRollTrueBodyAccelerationAndAngularRates {
    static constexpr uint16_t ID = 239;
    YawPitchRollTrueBodyAccelerationAndAngularRatesRegister Register;
    YawPitchRollTrueBodyAccelerationAndAngularRates() { memset(&Register, 0, sizeof(Register)); }
};

typedef struct MagneticAccelerationAndAngularRates {
    static constexpr uint16_t ID = 20;
    MagneticAccelerationAndAngularRatesRegister Register;
    MagneticAccelerationAndAngularRates() { memset(&Register, 0, sizeof(Register)); }
};

struct HardwareVersionRegister {
    uint32_t version;
};

typedef struct HardwareVersion {
    static constexpr uint16_t ID = 2;
    struct HardwareVersionRegister Register;
    HardwareVersion() { memset(&Register, 0, sizeof(Register)); }
};

struct FirmwareVersionRegister {
    char version[20];
};

typedef struct FirmwareVersion {
    static constexpr uint16_t ID = 4;
    struct FirmwareVersionRegister Register;
    FirmwareVersion() { memset(&Register, 0, 20); }
};

struct YawPitchRollRegister {
    vec3f YawPitchRoll;
};

typedef struct YawPitchRoll {
    static constexpr uint16_t ID = 8;
    struct YawPitchRollRegister Register;
    YawPitchRoll() { memset(&Register, 0, sizeof(Register)); }
};

struct ImuAccelerometerRegister {
    vec3f Accel;
};

typedef struct ImuAccelerometer {
    static constexpr uint16_t ID = 18;
    struct ImuAccelerometerRegister Register;
    ImuAccelerometer() { memset(&Register, 0, sizeof(Register)); }
};

struct ImuGyroRegister {
    vec3f Gyro;
};

typedef struct ImuGyro {
    static constexpr uint16_t ID = 19;
    struct ImuGyroRegister Register;
    ImuGyro() { memset(&Register, 0, sizeof(Register)); }
};
}  // namespace vn
}

#endif /* _FRAMES_H_  */