123

Dependencies:   mbed

Fork of LG by igor Apu

DeviceSequencer.h

Committer:
Diletant
Date:
2016-06-19
Revision:
173:7f938afb0447

File content as of revision 173:7f938afb0447:

#ifndef __DEVICE_SEQUENCER_H__
#define __DEVICE_SEQUENCER_H__

//Sampler typedefs
typedef struct _DeviceSequencerSamplerSettings {
  uint8_t enabled;       //Enable sequence generation
  uint32_t amplitude;    //Generator analog output amplitude - volts in 16.16 format
  int32_t sequence[64];  //Generator sequence - dimensionless units -1...+1 in 16.16 format
  uint8_t position[2];   //Sequence position
} DeviceSequencerSamplerSettings;

typedef struct _DeviceSequencerSamplerState {
  uint8_t enabled;       //Enable sequence generation
  uint32_t amplitude;    //Generator analog output amplitude - volts in 16.16 format
  uint8_t position[2];   //Sequence position
  uint32_t sample[2];    //Sequencer analog output = sequence[]: current/delayed - dimensionless units -1...+1 in 16.16 format
  uint32_t voltage;      //Sequencer analog output = sequence[] * amplitude - volts in 16.16 format
} DeviceSequencerSamplerState;

typedef struct _DeviceSequencerSampler {
  DeviceSequencerSamplerSettings settings;
  DeviceSequencerSamplerState state;
} DeviceSequencerSampler;

//Analog output typedefs
typedef struct _DeviceSequencerAnalogOutputTransferFunction {
  uint32_t points;     //Number of actual control points (up to 16)
  int32_t voltage[16]; //Output voltage control points in signed 16.16 fixed point format
  int32_t code[16];    //DAC code control points
} DeviceSequencerAnalogOutputTransferFunction;

typedef struct _DeviceSequencerAnalogOutputSettings {
  uint8_t enabled;       //Enable analog output
  DeviceSequencerAnalogOutputTransferFunction transfer;
} DeviceSequencerAnalogOutputSettings;

typedef struct _DeviceSequencerAnalogOutputState {
  uint8_t enabled;       //Enable analog output
  uint32_t voltage;      //Sequencer analog output = sequence[] * amplitude - volts in 16.16 format
} DeviceSequencerAnalogOutputState;

typedef struct _DeviceSequencerAnalogOutput {
  DeviceSequencerAnalogOutputSettings settings;
  DeviceSequencerAnalogOutputState state;
} DeviceSequencerAnalogOutput;

//Logic output typedefs
typedef struct _DeviceSequencerLogicOutputSettings {
  uint8_t enabled;     //Enable logic (GPIO pin) output
} DeviceSequencerLogicOutputSettings;

typedef struct _DeviceSequencerLogicOutputState {
  uint8_t enabled;     //Enable logic (GPIO pin) output
  uint32_t level;      //Sequencer logic output - 0/1
} DeviceSequencerLogicOutputState;

typedef struct _DeviceSequencerLogicOutput {
  DeviceSequencerLogicOutputSettings settings;
  DeviceSequencerLogicOutputState state;
} DeviceSequencerLogicOutput;

typedef struct _DeviceSequencerOutput {
  DeviceSequencerLogicOutput logic;
  DeviceSequencerAnalogOutput analog;
} DeviceSequencerOutput;

//Sequencer typedefs
typedef struct _DeviceSequencerOutputTransferFunction {
  uint32_t points;     //Number of actual control points (up to 16)
  int32_t voltage[16]; //Output voltage control points in signed 16.16 fixed point format
  int32_t code[16];    //DAC code control points
} DeviceSequencerOutputTransferFunction;

typedef struct _DeviceSequencerSettings {
  uint8_t enabled;       //Enable sequence generation
  uint8_t analog;        //Modulate analog (voltage) output
  uint8_t logic;         //Modulate logic (GPIO pin) output
  int32_t amplitude;     //Generator analog output amplitude - volts in 16.16 format
  int32_t sequence[64];  //Generator sequence - dimensionless units -1...+1 in 16.16 format
  uint8_t position[2];   //Sequence position
  DeviceSequencerOutputTransferFunction transfer;
} DeviceSequencerSettings;

typedef struct _DeviceSequencerState {
  uint8_t enabled;       //Enable sequence generation
  uint8_t analog;        //Modulate analog (voltage) output
  uint8_t logic;         //Modulate logic (GPIO pin) output
  uint32_t amplitude;    //Generator analog output amplitude - volts in 16.16 format
  uint8_t position[2];   //Sequence position
  uint32_t sample[2];    //Sequencer analog output = sequence[]: current/delayed - dimensionless units -1...+1 in 16.16 format
  uint32_t voltage;      //Sequencer analog output = sequence[] * amplitude - volts in 16.16 format
} DeviceSequencerState;

typedef struct _DeviceSequencer {
  //DeviceSequencerSettings settings;
  //DeviceSequencerState state;
  
  DeviceSequencerSampler sampler;
  DeviceSequencerOutput output;
} DeviceSequencer;

void InitSequencerDefaultSettings(void);
void InitSequencerState(void);
void DeviceStartSequencer(void);

void sequencerProcess(void);

#endif  /* __DEVICE_SEQUENCER_H__ */