You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
CCS-COMM_BOARD/WEINBUS/WeinbusDefines.h

135 lines
2.4 KiB
C

/*
* WeinbusDefines.h
*
* Author: Aleksey Gerasimenko
* gerasimenko.aleksey.n@gmail.com
*/
#include <math.h>
#include <stdint.h>
#ifndef WEINBUS_WEINBUSDEFINES_H_
#define WEINBUS_WEINBUSDEFINES_H_
typedef unsigned char uint8_t;
typedef signed char int8_t;
#ifndef WEINBUS_INPUT_REGISTERS_SIZE
#define WEINBUS_INPUT_REGISTERS_SIZE 20
#endif
#ifndef WEINBUS_OUTPUT_REGISTERS_SIZE
#define WEINBUS_OUTPUT_REGISTERS_SIZE 20
#endif
namespace WEINBUS
{
enum data_variant_type_t {DATA_UINT16, DATA_INT16, DATA_UINT32, DATA_INT32, DATA_FLOAT};
enum buffer_type_t {OUTPUTCOILS, INPUTCOILS, OUTPUTREGISTERS, INPUTREGISTERS};
enum weinbus_coil_t { COIL00,
COIL01,
COIL02,
COIL03,
COIL04,
COIL05,
COIL06,
COIL07,
COIL08,
COIL09,
COIL10,
COIL11,
COIL12,
COIL13,
COIL14,
COIL15};
struct REGISTER_16_BIT_FIELD
{
uint16_t b00: 1;
uint16_t b01: 1;
uint16_t b02: 1;
uint16_t b03: 1;
uint16_t b04: 1;
uint16_t b05: 1;
uint16_t b06: 1;
uint16_t b07: 1;
uint16_t b08: 1;
uint16_t b09: 1;
uint16_t b10: 1;
uint16_t b11: 1;
uint16_t b12: 1;
uint16_t b13: 1;
uint16_t b14: 1;
uint16_t b15: 1;
};//REGISTER_16_BIT_FIELD
struct REGISTER_16_BYTE_FIELD
{
uint16_t bt0 :8;
uint16_t bt1 :8;
};//REGISTER_16_BYTE_FIELD
union REGISTER_16
{
uint16_t all;
REGISTER_16_BIT_FIELD bit;
REGISTER_16_BYTE_FIELD byte;
REGISTER_16():
all(0)
{}
REGISTER_16(uint16_t val):
all(val)
{}
};//REGISTER_16
struct REGISTER_32_BYTE_FIELD
{
uint16_t bt0 :8;
uint16_t bt1 :8;
uint16_t bt2 :8;
uint16_t bt3 :8;
};//REGISTER_32_BYTE_FIELD
union REGISTER_32
{
uint32_t all;
bool b;
uint8_t u8;
int8_t i8;
uint16_t u16;
int16_t i16;
uint32_t u32;
int32_t i32;
float f;
REGISTER_32_BYTE_FIELD byte;
REGISTER_32():
all((uint32_t)0)
{};
REGISTER_32(uint32_t val):
all(val)
{}
};//REGISTER_32
}//namespace WEINBUS
#endif /* WEINBUS_WEINBUSDEFINES_H_ */