#pragma once #include #include // 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[]; };