Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of LG by
DeviceProtocol.h
- Committer:
- Diletant
- Date:
- 2016-02-29
- Revision:
- 76:1c54a614564d
- Parent:
- 75:cc1942179a2f
- Child:
- 77:8d582faecf6b
File content as of revision 76:1c54a614564d:
#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 0xa000 //B_DeltaPS command code: output of accumulated pulses and ACS parameters as 22 indexed packets sequence
#define DELTA_BINS 0xb000 //B_DeltaBINS command code: output of accumulated pulses and data validity attribute in one packet
#define DELTA_SF 0xb200 //B_DeltaSF command code: scale factor measurement data output in one packet
#define DEV_MODE 0xa500 //e. the code of the Device_Mode command //r. код команды Device_Mode
#define BIT_MODE 0xa700 //e. the code of the B.I.T. command //r. код команды B.I.T.(встороенного тестирования)
#define RATE 0x0000 //e. the code of the Rate command //r. код команды Rate
#define DELTA 0x0f00 //e. the code of the Delta command //r. код команды Delta
#define D_PERIOD_W 0xf000 //e. the code of the D_Period_W command //r. код команды D_Period_W
#define MAINTENANCE 0x9900 //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 0xda00 //Basic maintenance commands group code
#define M0_CLEAR 0xda00 //group command select: e. reset of the register of errors of line 485 //r. очистка регистра ошибок линии 485
#define M0_MIRROR 0xda01 //group command select: e. return previous contents of the receiver buffer //r. возврат предыдущего содержимого буфера приемника
#define M0_LDPAR_F 0xda02 //group command select: e. load GLD parameters from Flash-memory //r. загрузить параметры ГЛД из флэш-памяти
#define M0_LDPAR_D 0xda03 //group command select: e. set GLD parameters by procedure of initialization //r. установить параметры ГЛД процедурой инициализации
#define M0_START 0xda04 //group command select: e. switch on the GLD //r. включить ГЛД
#define M0_STOP 0xda40 //group command select: e. switch off the GLD //r. выключить ГЛД
#define M0_PULSE 0xda0a //group command select: e. generation of the light-up pulse //r. генерация импульса поджига
//Maintenance rate commands group
#define M0_RATE 0xdd00 //e. delivery of a stack of parameters M_Rate (Rate2, Rate3) //r. выдача набора параметров M_Rate (Rate2, Rate3)
#define M0_RATE_0 0xdd00 //group command select: output parameters set 0?
#define M0_RATE_1 0xdd01 //group command select: output parameters set 1?
#define M0_RATE_2 0xdd02 //group command select: output parameters set 2
#define M0_RATE_3 0xdd03 //group command select: output parameters set 3
#define M0_RATE_4 0xdd04 //group command select: output parameters set 4
#define M0_RATE_7 0xdd07 //group command select: output parameters set 7
//Other maintenance commands
#define M0_STIMUL 0x0a00 //e. the code of the Stimul command //r. код команды Stimul
#define M0_RESET 0x8000 //e. software device reset(restart) //r. программный сброс (рестарт) прибора
#define M0_CTL_R 0xd900 //e. reading the control register of the device //r. чтение регистра управления устройства
#define M0_CTL_M 0xd800 //e. modification of bit of the control register //r. модификация бита регистра управления
#define M0_TMP_W 0xe000 //e. writing to the AD7714 circuit (temperature sensors) //r. запись в схемы AD7714 (измерители температуры)
#define M0_TMP_R 0xe100 //e. reading from the AD7714 circuit (temperature sensors) //r. чтение из схем AD7714 (измерители температуры)
#define M0_E5R_W 0xe200 //e. writing to the register of a mode of the Elio5 card //r. запись в регистр режима платы Elio5
#define M0_ADC_R 0xe300 //e. reading data from the ADC of the Elio5 card //r. чтение данных из АЦП платы Elio5
#define M0_VIB_W 0xe400 //e. loading of the oscillation period of the dither drive //r. загрузка периода колебаний вибропривода
#define M0_CNT_R 0xe500 //e. reading data from the counters of the Elio5 card //r. чтение данных из счетчиков платы Elio5
#define M0_GPH_W 0xe600 //e. loading gain factors of photodetector channels //r. загрузка коэффициентов усиления каналов фотоприемника
#define M0_FLG_R 0xe700 //e. reading data from the register of input flags //r. чтение данных из регистра входных флагов
#define M0_PARAM_W 0xe800 //e. writing working parameter to the data memory //r. запись рабочего параметра в память данных
#define M0_PARAM_R 0xe900 //e. reading working parameter of the GLD from the data memory //r. чтение рабочего параметра GLD из памяти данных
#define M0_E5RA_W 0xea00 //e. writing in 1st additional (A) register of a mode of the Elio5 card //r. запись в 1-ый дополнительный (А) регистр режима платы Elio5
typedef enum _ResponseType {
RESPONSE_NONE, //no sheduled response
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 {
uint8_t enabled; //
ResponseType type; //how send: immediately/delayed/periodic
//ResponseData data; //what send: buffer/Delta_BINS/Delta_PS/Delta_SF/M_Rate
uint16_t code; //Request code
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 error; //Decode error encountered
uint8_t count; //Decoded bytes count
uint8_t address; //Decoded request address
uint8_t version; //Decoded protocol version (currently only 0 version exist)
uint16_t code; //Decoded command code
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 DecodeCode(void);
void DecodeCode2(void);
void DecodeCRC(void);
void DecodeDeviceMode(void);
void DecodeDelta(void);
void DecodeMaintenanceMode(void);
void DecodeMBasic(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 EncodeAddress(void);
void EncodeCRC(void);
void EncodeDeviceMode(void);
void EncodeSysRgR(void);
void EncodeBINSDiff(void);
void EncodeValidBINS(void);
#endif /* __DEVICEPROTOCOL_H__ */
