123

Dependencies:   mbed

Fork of LG by igor Apu

DeviceUser.h

Committer:
Kovalev_D
Date:
2016-10-19
Revision:
197:7a05523bf588
Parent:
182:2bd8ec44998f

File content as of revision 197:7a05523bf588:

#ifndef __DEVICE_USER_H__
#define __DEVICE_USER_H__

#include "stdint.h"
#include "DeviceUserRequest.h"
#include "DeviceUserResponse.h"
#include "DeviceUserDecoder.h"
#include "DeviceUserEncoder.h"

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

//All commands
#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    //Device_Mode command code
#define BIT_MODE        0xa700    //B.I.T. (built-in test) command code

#define MAINTENANCE     0x9900    //Maintenance mode command code
//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: reset line 485 error register
#define     M0_MIRROR       0xda01    //group command select: return previous contents of the receiver buffer
#define     M0_LDPAR_F      0xda02    //group command select: load device parameters from Flash-memory
#define     M0_LDPAR_D      0xda03    //group command select: set device parameters by procedure of initialization
#define     M0_START        0xda04    //group command select: switch on the device
#define     M0_STOP         0xda40    //group command select: switch off the device
#define     M0_PULSE        0xda0a    //group command select: generation of the light-up pulse
//Maintenance rate commands group
#define   M0_RATE         0xdd00  //M_Rate commands group code
#define     M0_RATE_1       0xdd01    //group command select: output parameters set 1 (MRate)
#define     M0_RATE_2       0xdd02    //group command select: output parameters set 2 (MRate2)
#define     M0_RATE_3       0xdd03    //group command select: output parameters set 3 (MRate3)
#define     M0_RATE_4       0xdd04    //group command select: output parameters set 4 (MRate4)
#define     M0_RATE_7       0xdd07    //group command select: output parameters set 7 (MRate7)

//Other maintenance commands
#define   M0_STIMUL       0x0a00  //MStimul command code
#define   M0_RESET        0x8000  //software device reset(restart)

#define   M0_CTL_R        0xd900  //reading the control register RgConA/B of the device
#define     M0_CTL_A_R      0xd900  //MCtlR command code mask: reading the control register RgConA of the device
#define     M0_CTL_B_R      0xd910  //MCtlR command code mask: reading the control register RgConB of the device
#define   M0_CTL_M        0xd800  //modification of bit of the control register
#define     M0_CTL_A_M      0xd800  //MCtlM command code mask: modification control register RgConA of the device
#define     M0_CTL_B_M      0xd810  //MCtlM command code mask: modification the control register RgConB of the device

#define   M0_TMP_W        0xe000  //writing to the AD7714 circuit (temperature sensors)
#define   M0_TMP_R        0xe100  //reading from the AD7714 circuit (temperature sensors)
#define   M0_E5R_W        0xe200  //writing to the register of a mode of the Elio5 card
#define   M0_ADC_R        0xe300  //reading data from the ADC of the Elio5 card
#define   M0_VIB_W        0xe400  //loading of the oscillation period of the dither drive
#define   M0_CNT_R        0xe500  //reading data from the counters of the Elio5 card
#define   M0_GPH_W        0xe600  //loading gain factors of photodetector channels
#define   M0_FLG_R        0xe700  //reading data from the register of input flags
#define   M0_PARAM_W      0xe800  //writing working parameter to the data memory
#define   M0_PARAM_R      0xe900  //reading working parameter of the GLD from the data memory
#define   M0_E5RA_W       0xea00  //writing in 1st additional (A) register of a mode of the Elio5 card

//Factory maintenance commands
#define   FACTORY_ACCESS         0xff00 //Factory access: command mask

#define   H_PARAM8_R             0xff00 //Hash access: 0000b read 1-byte param
#define   H_PARAM16_R            0xff01 //Hash access: 0001b read 2-byte param
#define   H_PARAM32_R            0xff03 //Hash access: 0010b read 4-byte param
#define   H_BYTES_R              0xff0f //Hash access: 1111b read bytes param

#define   H_PARAM8_W             0xff10 //Hash access: 0000b write 1-byte param
#define   H_PARAM16_W            0xff11 //Hash access: 0001b write 2-byte param
#define   H_PARAM32_W            0xff13 //Hash access: 0010b write 4-byte param
#define   H_BYTES_W              0xff1f //Hash access: 1111b write bytes param

#define   H_FUNC_PARAM0_BY_IMM8  0xff20 //Hash access: 0000b set function parameter 0 by 8 bit immediate value
#define   H_FUNC_PARAM1_BY_IMM8  0xff24 //Hash access: 0100b set function parameter 1 by 8 bit immediate value
#define   H_FUNC_PARAM2_BY_IMM8  0xff28 //Hash access: 1000b set function parameter 2 by 8 bit immediate value
#define   H_FUNC_PARAM3_BY_IMM8  0xff2c //Hash access: 1100b set function parameter 3 by 8 bit immediate value

#define   H_FUNC_PARAM0_BY_IMM16 0xff21 //Hash access: 0001b set function parameter 0 by 16 bit immediate value
#define   H_FUNC_PARAM1_BY_IMM16 0xff25 //Hash access: 0101b set function parameter 1 by 16 bit immediate value
#define   H_FUNC_PARAM2_BY_IMM16 0xff29 //Hash access: 1001b set function parameter 2 by 16 bit immediate value
#define   H_FUNC_PARAM3_BY_IMM16 0xff2d //Hash access: 1101b set function parameter 3 by 16 bit immediate value

#define   H_FUNC_PARAM0_BY_IMM32 0xff23 //Hash access: 0011b set function parameter 0 by 32 bit immediate value
#define   H_FUNC_PARAM1_BY_IMM32 0xff27 //Hash access: 0111b set function parameter 1 by 32 bit immediate value
#define   H_FUNC_PARAM2_BY_IMM32 0xff2b //Hash access: 1011b set function parameter 2 by 32 bit immediate value
#define   H_FUNC_PARAM3_BY_IMM32 0xff2f //Hash access: 1111b set function parameter 3 by 32 bit immediate value

#define   H_FUNC_PARAM0_BY_VAL8  0xff30 //Hash access: 0000b set function parameter 0 by 8 bit variable value
#define   H_FUNC_PARAM1_BY_VAL8  0xff34 //Hash access: 0100b set function parameter 1 by 8 bit variable value
#define   H_FUNC_PARAM2_BY_VAL8  0xff38 //Hash access: 1000b set function parameter 2 by 8 bit variable value
#define   H_FUNC_PARAM3_BY_VAL8  0xff3c //Hash access: 1100b set function parameter 3 by 8 bit variable value

#define   H_FUNC_PARAM0_BY_VAL16 0xff31 //Hash access: 0001b set function parameter 0 by 16 bit variable value
#define   H_FUNC_PARAM1_BY_VAL16 0xff35 //Hash access: 0101b set function parameter 1 by 16 bit variable value
#define   H_FUNC_PARAM2_BY_VAL16 0xff39 //Hash access: 1001b set function parameter 2 by 16 bit variable value
#define   H_FUNC_PARAM3_BY_VAL16 0xff3d //Hash access: 1101b set function parameter 3 by 16 bit variable value

#define   H_FUNC_PARAM0_BY_VAL32 0xff33 //Hash access: 0011b set function parameter 0 by 32 bit variable value
#define   H_FUNC_PARAM1_BY_VAL32 0xff37 //Hash access: 0111b set function parameter 1 by 32 bit variable value
#define   H_FUNC_PARAM2_BY_VAL32 0xff3b //Hash access: 1011b set function parameter 2 by 32 bit variable value
#define   H_FUNC_PARAM3_BY_VAL32 0xff3f //Hash access: 1111b set function parameter 3 by 32 bit variable value

#define   H_FUNC_PARAM0_BY_REF8  0xff40 //Hash access: 0000b set function parameter 0 by 8 bit variable reference
#define   H_FUNC_PARAM1_BY_REF8  0xff44 //Hash access: 0100b set function parameter 1 by 8 bit variable reference
#define   H_FUNC_PARAM2_BY_REF8  0xff48 //Hash access: 1000b set function parameter 2 by 8 bit variable reference
#define   H_FUNC_PARAM3_BY_REF8  0xff4c //Hash access: 1100b set function parameter 3 by 8 bit variable reference

#define   H_FUNC_PARAM0_BY_REF16 0xff41 //Hash access: 0001b set function parameter 0 by 16 bit variable reference
#define   H_FUNC_PARAM1_BY_REF16 0xff45 //Hash access: 0101b set function parameter 1 by 16 bit variable reference
#define   H_FUNC_PARAM2_BY_REF16 0xff49 //Hash access: 1001b set function parameter 2 by 16 bit variable reference
#define   H_FUNC_PARAM3_BY_REF16 0xff4d //Hash access: 1101b set function parameter 3 by 16 bit variable reference

#define   H_FUNC_PARAM0_BY_REF32 0xff43 //Hash access: 0011b set function parameter 0 by 32 bit variable reference
#define   H_FUNC_PARAM1_BY_REF32 0xff47 //Hash access: 0111b set function parameter 1 by 32 bit variable reference
#define   H_FUNC_PARAM2_BY_REF32 0xff4b //Hash access: 1011b set function parameter 2 by 32 bit variable reference
#define   H_FUNC_PARAM3_BY_REF32 0xff4f //Hash access: 1111b set function parameter 3 by 32 bit variable reference

#define   FUNCTION_CALL          0xff50 //Hash access: function call - no parameters
#define   FUNCTION_CALL_1        0xff51 //Hash access: function call - 1 parameter
#define   FUNCTION_CALL_2        0xff52 //Hash access: function call - 2 parameters
#define   FUNCTION_CALL_3        0xff53 //Hash access: function call - 3 parameters
#define   FUNCTION_CALL_4        0xff54 //Hash access: function call - 4 parameters

#define   FLASH_READ_ALL         0xff60 //Flash access: read all from flash
#define   FLASH_WRITE_ALL        0xff70 //Flash access: write all to flash

//Common response messages
#define   MESSAGE_OK                         0x0000
#define   MESSAGE_UNKNOWN_REQUEST_CODE       0x8000
#define   MESSAGE_UNKNOWN_REQUEST_PARAMETER  0x8001
#define   MESSAGE_UNKNOWN_REQUEST_HASH       0x8002
#define   MESSAGE_WRONG_REQUEST_VALUE_SIZE   0x8003
#define   MESSAGE_WRONG_REQUEST_VALUE_RANGE  0x8004

//Actual commands:
//BINS
//  GLD initialization sequence:
//    a5 04 - external latch with DeltaPS format
//    a0 70 - DeltaPS 921600/921600 by request only
//  Other:
//    80 00 - reset
//BINS/AskGLD/Techno
//    99 99 - maintenance
//Techno
//    d8 90 - set bit 0 of RgConB
//    d8 10 - reset bit 0 of RgConB
//    dd 81 - periodic 38400 MRate
//    a0 b0 - periodic 115200/115200 DeltaPS

//Registers:
//  RgConA - flags of regulator loops 
//  RgConB - counting mode: 00 - reference counters, 01 - dither counters and moving average filter

//User protocol typedefs
typedef struct _DeviceUser {
  //Device address
  uint16_t address;
  //Units
  DeviceUserPort port;
  DeviceUserDecoder decoder;
  DeviceUserEncoder encoder;
  DeviceUserRequest request;
  DeviceUserResponse response;
} DeviceUser;

//User communication initialization functions
void InitUserDefaultSettings(void);
void InitUserState(void);
void DeviceStartUser(void);

#endif  /* __DEVICE_USER_H__ */