Dmitry Kovalev / Mbed 2 deprecated LG2

Dependencies:   mbed

Fork of LG by igor Apu

DeviceProtocol.h

Committer:
Diletant
Date:
2016-02-28
Revision:
75:cc1942179a2f
Parent:
74:f4d9c3403578
Child:
76:1c54a614564d

File content as of revision 75:cc1942179a2f:

#ifndef __DEVICEPROTOCOL_H__
#define __DEVICEPROTOCOL_H__

#include "DeviceSettings.h"
#include "stdint.h"

#define BROADCAST_ADDRESS 0x1f
#define BROADCAST_FRAME 100       //100 mks

#define DELTA_PS        0xa0      //B_DeltaPS command code: output of accumulated pulses and ACS parameters as 22 indexed packets sequence
#define DELTA_BINS      0xb0      //B_DeltaBINS command code: output of accumulated pulses and data validity attribute in one packet
#define DELTA_SF        0xb2      //B_DeltaSF command code: scale factor measurement data output in one packet
#define DEV_MODE        0xa5      //e. the code of the Device_Mode command //r. код команды Device_Mode
#define BIT_MODE        0xa7      //e. the code of the B.I.T. command //r. код команды B.I.T.(встороенного тестирования)
#define RATE            0x00      //e. the code of the Rate command //r. код команды Rate  
#define DELTA           0x0f      //e. the code of the Delta command //r. код команды Delta
#define D_PERIOD_W      0xf0      //e. the code of the D_Period_W command //r. код команды D_Period_W

#define MAINTENANCE     0x99      //e. the code of the Maintenance mode command //r. код команды Maintenance mode
//Maintenance command set versions
#define   M0_MAINTENANCE  0x99    //: initial version 
//Maintenance basic commands group
#define   M0_BASIC        0xda    //Basic maintenance commands group code
#define     M0_CLEAR        0x00      //group command select: e. reset of the register of errors of line 485 //r. очистка регистра ошибок линии 485
#define     M0_MIRROR       0x01      //group command select: e. return previous contents of the receiver buffer //r. возврат предыдущего содержимого буфера приемника  
#define     M0_LDPAR_F      0x02      //group command select: e. load GLD parameters from Flash-memory //r. загрузить параметры ГЛД из флэш-памяти
#define     M0_LDPAR_D      0x03      //group command select: e. set GLD parameters by procedure of initialization //r. установить параметры ГЛД процедурой инициализации 
#define     M0_START        0x04      //group command select: e. switch on the GLD //r. включить ГЛД          
#define     M0_STOP         0x40      //group command select: e. switch off the GLD //r. выключить ГЛД
#define     M0_PULSE        0x0a      //group command select: e. generation of the light-up pulse //r. генерация импульса поджига
//Maintenance rate commands group
#define   M0_RATE         0xdd    //e. delivery of a stack of parameters M_Rate (Rate2, Rate3) //r. выдача набора параметров M_Rate  (Rate2, Rate3)
#define     M0_RATE_0       0x00      //group command select: output parameters set 0?
#define     M0_RATE_1       0x01      //group command select: output parameters set 1?
#define     M0_RATE_2       0x02      //group command select: output parameters set 2
#define     M0_RATE_3       0x03      //group command select: output parameters set 3
#define     M0_RATE_4       0x04      //group command select: output parameters set 4
#define     M0_RATE_7       0x07      //group command select: output parameters set 7

//Other maintenance commands
#define   M0_STIMUL       0x0a    //e. the code of the Stimul command //r. код команды Stimul    
#define   M0_RESET        0x80    //e. software device reset(restart) //r. программный сброс (рестарт) прибора

#define   M0_CTL_R        0xd9    //e. reading the control register of the device //r. чтение регистра управления устройства  
#define   M0_CTL_M        0xd8    //e. modification of bit of the control register //r. модификация бита регистра управления 

#define   M0_TMP_W        0xe0    //e. writing to the AD7714 circuit (temperature sensors) //r. запись в схемы AD7714 (измерители температуры) 
#define   M0_TMP_R        0xe1    //e. reading from the AD7714 circuit (temperature sensors) //r. чтение из схем AD7714 (измерители температуры) 
#define   M0_E5R_W        0xe2    //e. writing to the register of a mode of the Elio5 card //r. запись в регистр режима платы Elio5  
#define   M0_ADC_R        0xe3    //e. reading data from the ADC of the Elio5 card //r. чтение данных из АЦП платы Elio5
#define   M0_VIB_W        0xe4    //e. loading of the oscillation period of the dither drive //r. загрузка периода колебаний вибропривода  
#define   M0_CNT_R        0xe5    //e. reading data from the counters of the Elio5 card //r. чтение данных из счетчиков платы Elio5
#define   M0_GPH_W        0xe6    //e. loading gain factors of photodetector channels //r. загрузка коэффициентов усиления каналов фотоприемника  
#define   M0_FLG_R        0xe7    //e. reading data from the register of input flags  //r. чтение данных из регистра входных флагов
#define   M0_PARAM_W      0xe8    //e. writing working parameter to the data memory //r. запись рабочего параметра в память данных          
#define   M0_PARAM_R      0xe9    //e. reading working parameter of the GLD from the data memory //r. чтение рабочего параметра GLD из памяти данных 
#define   M0_E5RA_W       0xea    //e. writing in 1st additional (A) register of a mode of the Elio5 card //r. запись в 1-ый дополнительный (А) регистр режима платы Elio5

typedef enum _ResponseType {
    RESPONSE_IMMEDIATE, //immediate response for most of requests
    RESPONSE_DELAYED,   //delayed response for broadcast requests
    RESPONSE_PERIODIC   //periodic response for some of requests
} ResponseType;

typedef enum _ResponseData {
    RESPONSE_BUFFER,     //response buffer content as is if not empty
    RESPONSE_DELTA_BINS, //fill buffer with Delta_BINS data set
    RESPONSE_DELTA_PS,   //fill buffer with Delta_PS data set
    RESPONSE_DELTA_SF,   //fill buffer with Delta_SF data set
    RESPONSE_RATE        //fill buffer with M_Rate data set
} ResponseData;

#define OutputBufferSize 64
typedef struct _DeviceOutputBuffer {
    uint8_t data[OutputBufferSize];
    int count; //byte count
} DeviceOutputBuffer;

typedef struct _DeviceResponse {
  ResponseType type; //how send: immediately/delayed/periodic
  ResponseData data; //what send: buffer/Delta_BINS/Delta_PS/Delta_SF/M_Rate
  uint32_t counter;  //time from: broadcast line request/latch pulse/last response; values in mks;
  uint32_t trigger;  //counter value to response; values in mks;
  uint32_t rate;     //response baud rate
  DeviceOutputBuffer buffer;
  uint8_t ready;
} DeviceResponse;

#define InputBufferSize 1024
typedef struct _DeviceInputBuffer {
    uint8_t data[InputBufferSize];
    int start; //read start position
    int end;   //write start position
} DeviceInputBuffer;

typedef struct _DeviceRequest {
  uint32_t rate; //response baud rate
  DeviceInputBuffer buffer;
} DeviceRequest;

typedef struct _DeviceProtocolDecoder {
  uint8_t address;  //Decoded request address
  uint8_t code;     //Decoded command code
  uint8_t version;  //Decoded protocol version (currently only 0 version exist)
  uint8_t error;    //Decode error encountered
  uint8_t count;    //Decoded bytes count
  uint16_t position;//Current decoder position in input buffer
  uint16_t CRC;     //Current/final CRC of decoded packet
} DeviceProtocolDecoder;

typedef struct _DeviceProtocolEncoder {
  uint8_t error;
  uint8_t count;
  uint16_t position;
  uint16_t CRC;
} DeviceProtocolEncoder;

void Decode(void);
void Encode(void);
void Transmit(void);

uint8_t Decode8(void);
uint16_t Decode16(void);
void DecodeStart(void);
void DecodeEnd(void);
void DecodeCancel(void);
void DecodeFail(void);
void DecodeAddress(void);
void DecodeCRC(void);

void DecodeDeviceMode(void);
void DecodeDeltaBINS(void);
void DecodeDeltaPS(void);
void DecodeDelta(void); //Not used?
void DecodeDPeriodW(void); //Not used?
void DecodeMaintenanceMode(void);
void DecodeMStymul(void);
void DecodeMADCR(void);
void DecodeMTmpW(void);
void DecodeMe5rW(void);
void DecodeMCntR(void);
void DecodeMFlgR(void);
void DecodeMVibW(void);
void DecodeMGphW(void);
void DecodeMRate(void);
void DecodeMParamR(void);
void DecodeMParamW(void);
void DecodeMControl(void);
void DecodeMClear(void);
void DecodeMMirror(void);
void DecodeMLdParF(void);
void DecodeMLdParD(void);
void DecodeMStart(void);
void DecodeMStop(void);
void DecodeMPulse(void);
void DecodeMRate2(void);
void DecodeMRate3(void);
void DecodeMe5raW(void);

void Encode8(uint8_t);
void Encode16(uint16_t);

void EncodeStart(void);
void EncodeEnd(void);

void EncodeDeviceMode(void);
void EncodeSysRgR(void);

void EncodeCRC(void);

#endif  /* __DEVICEPROTOCOL_H__ */