#ifndef AESA_CMD_DATA_H
#define AESA_CMD_DATA_H

//#include "grifo_fw_blob.h"
#include "aesa_if_types.h"
#include <stdint.h>

namespace grifo_fw
{

class BeamData
{
private:
    static aesa::beam_calculation_t beam_data;
    BeamData();

public:
    static aesa::beam_calculation_t* get_beam_data();

    static void set_frequency(uint16_t freq);
    static void set_frequency(uint16_t tx_freq, uint16_t rx_freq);
    static void set_position(float u, float v);
    static void set_position(float tx_u, float tx_v, float rx_u, float rx_v);
    static void set_tx_ctrl_state_idx(uint16_t index);
    static void set_rx_ctrl_state_idx(uint16_t index);
    static void set_tx_enable_pattern(uint8_t index);
    static void set_rx_enable_pattern(uint8_t index);
    static void set_guard_position(float u, float v);
    static void set_guard_ctrl_state_idx(uint16_t index);
    static void set_guard_enable_pattern(uint8_t index);
    static void set_sync_divisor(uint16_t divisor);
    static void set_duty_ratio(uint8_t duty_r);
    static void initialize();
};

class RfifMode
{
private:
    static aesa::rfif_mode_command_t rfif_mode;
    RfifMode();

public:
    static aesa::rfif_mode_command_t* get_rfif_mode();

    static void set_mode(aesa::rfif_mode_t mode);
    static void set_guard_sel(aesa::rfif_guard_sel_t sel);
    static void set_radiation(aesa::off_on_t rad);
    static void set_tx_sample(aesa::tx_sample_t tx_sample);
    static void set_tx_rx_guard_sel(aesa::up_down_t sel);
    static void set_guard_cal_sel(aesa::up_down_t sel);
    static void set_cal_sel_a(aesa::up_down_t sel);
    static void set_cal_sel_b(aesa::up_down_t sel);
    static void set_detector(aesa::off_on_t det);
    static void set_amp_cal(aesa::off_on_t amp_cal);
    static void set_attenuator(uint8_t atten);
    static void set_frequency(uint16_t freq);
    static void set_frequency(uint16_t tx_freq, uint16_t rx_freq);
    static void initialize();
};

}

#endif // AESA_CMD_DATA_H
