Program Listing for File props.h

Return to documentation for file (microsync/src/props.h)

#pragma once

#include "globals.h"


enum SysProps {
    ro_VERSION,
    ro_SYS_TIMER_STATUS,
    ro_SYS_TIMER_VALUE,
    ro_SYS_TIMER_OVF_COUNT,
    ro_SYS_TIME_ms,
    ro_SYS_TIMER_PRESCALER,
    rw_DFLT_PULSE_DURATION_us,
    ro_WATCHDOG_TIMEOUT_ms,
    ro_N_EVENTS,
    rw_INTLCK_ENABLED,
    // pTIRF extension
    rw_SELECTED_LASERS,
    wo_OPEN_SHUTTERS,
    wo_CLOSE_SHUTTERS,
    rw_SHUTTER_DELAY_us,
    rw_CAM_READOUT_us
};

enum class PropertyAccess {
    ReadOnly,
    ReadWrite,
    WriteOnly
};

using PropGetter = uint32_t (*)();

using PropSetter = void (*)(uint32_t);

class DeviceProperty {
public:
    explicit DeviceProperty(PropertyAccess access) : access(access) {}

    virtual ~DeviceProperty() = default;

    virtual uint32_t get_value() const = 0;

    virtual void set_value(uint32_t newValue) = 0;

protected:
    PropertyAccess access;
};

class InternalProperty : public DeviceProperty {
private:
    uint32_t value;
public:
    InternalProperty(uint32_t value, PropertyAccess access = PropertyAccess::ReadOnly);

    uint32_t get_value() const override;

    void set_value(uint32_t new_value) override;
};

class ExternalProperty : public DeviceProperty {
private:
    uint32_t* externalValue;
public:
    ExternalProperty(uint32_t* externalValue, PropertyAccess access = PropertyAccess::ReadOnly);

    uint32_t get_value() const override;

    void set_value(uint32_t new_value) override;
};

class FunctionProperty : public DeviceProperty {
private:
    PropGetter getter;
    PropSetter setter;
public:
    FunctionProperty(PropGetter getter, PropSetter setter, PropertyAccess access = PropertyAccess::ReadOnly);

    uint32_t get_value() const override;

    void set_value(uint32_t new_value) override;
};



void init_props();

uint32_t get_property(SysProps prop);

void set_property(SysProps prop, uint32_t value);