avr-fw-modules/core/include/rb2/register.h

73 lines
1.5 KiB
C
Executable File

#pragma once
#include <stdint.h>
#include <util/list.h>
// Register Data Types
#define RDT_INT32 0x00 // 32Bit Integer
#define RDT_FLOAT 0x01 // 32Bit Fliesskommazahl
#define RDT_FP4816 0x02 // 64Bit Fixkommazahl (48.16).
#define RDT_BINARY 0x03 // 32Bit Bitmaske
#define RDT_FP1616 0x04 // 32Bit Fixkommazahl (16.16)
#define RDT_INT8 0x10 // 8Bit Integer -> auf Bus als 32bit
#define RDT_INT16 0x20 // 16Bit Integer -> auf Bus als 32bit
#define RDT_8BIT 0x10
#define RDT_16BIT 0x20
#define RDT_WRITE 0x80 // Flag für register_proc(...), Schreibzugriff
// RegisterProc Return Values
#define RPR_OK 0x00 // Kein Verarbeitungsfehler
/**
* register_node_proc(..) prototype: Callback to read/write register values of a "node"
**/
#define RNPOP_READ 0x0000
#define RNPOP_WRITE 0x0001
#define RNPOP_MASK 0x00FF
#define RNPOP_IDMASK 0xFF00
typedef int (*register_node_proc)(int op,int regno,uint8_t *type,void *buffer);
#define EMBED_NODE_PROC(op,regno,type,buffer,proc,base,len) \
if (IN_LIMITS(regno, base, base + len - 1)){ \
return proc(op,regno - base,type,buffer); \
}; \
//
struct _rb2_register;
typedef struct _rb2_register RB2_REGISTER;
#define RB_REGISTER(ptr) ((RB2_REGISTER*)ptr)
struct _rb2_register_segment;
typedef struct _rb2_register_segment RB2_RSEGMENT;
#define RB2_RSEGMENT(ptr) ((RB2_RSEGMENT*)ptr)
struct _rb2_register
{
uint16_t register_no;
uint8_t register_type;
void *ptr;
};
struct _rb2_register_segment
{
list_t list;
struct _rb2_register
registers[];
};